0f0b39dbc29b7eecaf62777b1fa52525061d0b2a
[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 Mar  8 17:00:48 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 d_tm_tm_gmtoff=''
760 d_tm_tm_zone=''
761 i_systime=''
762 i_systimek=''
763 i_time=''
764 timeincl=''
765 i_unistd=''
766 i_ustat=''
767 i_utime=''
768 i_values=''
769 i_stdarg=''
770 i_varargs=''
771 i_varhdr=''
772 i_vfork=''
773 inc_version_list=''
774 inc_version_list_init=''
775 installprefix=''
776 installprefixexp=''
777 installstyle=''
778 installusrbinperl=''
779 intsize=''
780 longsize=''
781 shortsize=''
782 issymlink=''
783 libc=''
784 ldlibpthname=''
785 libperl=''
786 shrpenv=''
787 useshrplib=''
788 glibpth=''
789 libpth=''
790 loclibpth=''
791 plibpth=''
792 xlibpth=''
793 ignore_versioned_solibs=''
794 libs=''
795 libsdirs=''
796 libsfiles=''
797 libsfound=''
798 libspath=''
799 lns=''
800 d_PRIEUldbl=''
801 d_PRIFUldbl=''
802 d_PRIGUldbl=''
803 d_PRIeldbl=''
804 d_PRIfldbl=''
805 d_PRIgldbl=''
806 d_SCNfldbl=''
807 sPRIEUldbl=''
808 sPRIFUldbl=''
809 sPRIGUldbl=''
810 sPRIeldbl=''
811 sPRIfldbl=''
812 sPRIgldbl=''
813 sSCNfldbl=''
814 lseeksize=''
815 lseektype=''
816 make_set_make=''
817 d_mymalloc=''
818 freetype=''
819 mallocobj=''
820 mallocsrc=''
821 malloctype=''
822 usemymalloc=''
823 installman1dir=''
824 man1dir=''
825 man1direxp=''
826 man1ext=''
827 installman3dir=''
828 man3dir=''
829 man3direxp=''
830 man3ext=''
831 modetype=''
832 multiarch=''
833 mydomain=''
834 myhostname=''
835 phostname=''
836 c=''
837 n=''
838 d_eofnblk=''
839 eagain=''
840 o_nonblock=''
841 rd_nodata=''
842 need_va_copy=''
843 netdb_hlen_type=''
844 netdb_host_type=''
845 netdb_name_type=''
846 netdb_net_type=''
847 groupcat=''
848 hostcat=''
849 passcat=''
850 orderlib=''
851 ranlib=''
852 d_perl_otherlibdirs=''
853 otherlibdirs=''
854 package=''
855 spackage=''
856 pager=''
857 api_revision=''
858 api_subversion=''
859 api_version=''
860 api_versionstring=''
861 patchlevel=''
862 perl_patchlevel=''
863 revision=''
864 subversion=''
865 version=''
866 version_patchlevel_string=''
867 perl5=''
868 perladmin=''
869 perlpath=''
870 d_nv_preserves_uv=''
871 d_nv_preserves_uv_bits=''
872 i16size=''
873 i16type=''
874 i32size=''
875 i32type=''
876 i64size=''
877 i64type=''
878 i8size=''
879 i8type=''
880 ivsize=''
881 ivtype=''
882 nvsize=''
883 nvtype=''
884 u16size=''
885 u16type=''
886 u32size=''
887 u32type=''
888 u64size=''
889 u64type=''
890 u8size=''
891 u8type=''
892 uvsize=''
893 uvtype=''
894 ivdformat=''
895 nvEUformat=''
896 nvFUformat=''
897 nvGUformat=''
898 nveformat=''
899 nvfformat=''
900 nvgformat=''
901 uvXUformat=''
902 uvoformat=''
903 uvuformat=''
904 uvxformat=''
905 pidtype=''
906 prefix=''
907 prefixexp=''
908 installprivlib=''
909 privlib=''
910 privlibexp=''
911 prototype=''
912 ptrsize=''
913 d_PRIXU64=''
914 d_PRId64=''
915 d_PRIi64=''
916 d_PRIo64=''
917 d_PRIu64=''
918 d_PRIx64=''
919 sPRIXU64=''
920 sPRId64=''
921 sPRIi64=''
922 sPRIo64=''
923 sPRIu64=''
924 sPRIx64=''
925 d_quad=''
926 quadkind=''
927 quadtype=''
928 uquadtype=''
929 drand01=''
930 randbits=''
931 randfunc=''
932 randseedtype=''
933 seedfunc=''
934 installscript=''
935 scriptdir=''
936 scriptdirexp=''
937 selectminbits=''
938 selecttype=''
939 sh=''
940 sig_count=''
941 sig_name=''
942 sig_name_init=''
943 sig_num=''
944 sig_num_init=''
945 sig_size=''
946 installsitearch=''
947 sitearch=''
948 sitearchexp=''
949 installsitebin=''
950 sitebin=''
951 sitebinexp=''
952 installsitelib=''
953 sitelib=''
954 sitelib_stem=''
955 sitelibexp=''
956 siteprefix=''
957 siteprefixexp=''
958 sizesize=''
959 sizetype=''
960 so=''
961 socksizetype=''
962 sharpbang=''
963 shsharp=''
964 spitshell=''
965 src=''
966 ssizetype=''
967 startperl=''
968 startsh=''
969 stdchar=''
970 d_stdio_stream_array=''
971 stdio_stream_array=''
972 sysman=''
973 trnl=''
974 uidformat=''
975 uidsign=''
976 uidsize=''
977 uidtype=''
978 archname64=''
979 use64bitall=''
980 use64bitint=''
981 ccflags_uselargefiles=''
982 ldflags_uselargefiles=''
983 libswanted_uselargefiles=''
984 uselargefiles=''
985 uselongdouble=''
986 usemorebits=''
987 usemultiplicity=''
988 nm_opt=''
989 nm_so_opt=''
990 runnm=''
991 usenm=''
992 useperlio=''
993 usesocks=''
994 d_oldpthreads=''
995 use5005threads=''
996 useithreads=''
997 usereentrant=''
998 usethreads=''
999 incpath=''
1000 mips_type=''
1001 usrinc=''
1002 d_vendorarch=''
1003 installvendorarch=''
1004 vendorarch=''
1005 vendorarchexp=''
1006 d_vendorbin=''
1007 installvendorbin=''
1008 vendorbin=''
1009 vendorbinexp=''
1010 d_vendorlib=''
1011 installvendorlib=''
1012 vendorlib=''
1013 vendorlib_stem=''
1014 vendorlibexp=''
1015 usevendorprefix=''
1016 vendorprefix=''
1017 vendorprefixexp=''
1018 versiononly=''
1019 defvoidused=''
1020 voidflags=''
1021 pm_apiversion=''
1022 xs_apiversion=''
1023 yacc=''
1024 yaccflags=''
1025 CONFIG=''
1026
1027 define='define'
1028 undef='undef'
1029 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1030 rmlist=''
1031
1032 : We must find out about Eunice early
1033 eunicefix=':'
1034 if test -f /etc/unixtovms; then
1035         eunicefix=/etc/unixtovms
1036 fi
1037 if test -f /etc/unixtovms.exe; then
1038         eunicefix=/etc/unixtovms.exe
1039 fi
1040
1041 : Set executable suffix now -- needed before hints available
1042 if test -f "/libs/version.library"; then
1043 : Amiga OS
1044     _exe=""
1045 elif test -f "/system/gnu_library/bin/ar.pm"; then
1046 : Stratus VOS
1047     _exe=".pm"
1048 elif test -n "$DJGPP"; then
1049 : DOS DJGPP
1050     _exe=".exe"
1051 elif test -d c:/. ; then
1052 : OS/2 or cygwin
1053     _exe=".exe"
1054 fi
1055
1056 i_whoami=''
1057 ccname=''
1058 ccversion=''
1059 perllibs=''
1060 : set useposix=false in your hint file to disable the POSIX extension.
1061 useposix=true
1062 : set useopcode=false in your hint file to disable the Opcode extension.
1063 useopcode=true
1064 : Trailing extension.  Override this in a hint file, if needed.
1065 : Extra object files, if any, needed on this platform.
1066 archobjs=''
1067 archname=''
1068 : Possible local include directories to search.
1069 : Set locincpth to "" in a hint file to defeat local include searches.
1070 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1071 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1072 :
1073 : no include file wanted by default
1074 inclwanted=''
1075
1076 groupstype=''
1077 libnames=''
1078 : change the next line if compiling for Xenix/286 on Xenix/386
1079 xlibpth='/usr/lib/386 /lib/386'
1080 : Possible local library directories to search.
1081 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1082 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1083
1084 : general looking path for locating libraries
1085 glibpth="/lib /usr/lib $xlibpth"
1086 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1087 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1088 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1089
1090 : Private path used by Configure to find libraries.  Its value
1091 : is prepended to libpth. This variable takes care of special
1092 : machines, like the mips.  Usually, it should be empty.
1093 plibpth=''
1094
1095 : default library list
1096 libswanted=''
1097 : some systems want to use only the non-versioned libso:s
1098 ignore_versioned_solibs=''
1099 archname64=''
1100 ccflags_uselargefiles=''
1101 ldflags_uselargefiles=''
1102 libswanted_uselargefiles=''
1103 : set usemultiplicity on the Configure command line to enable multiplicity.
1104 : set usesocks on the Configure command line to enable socks.
1105 : set usethreads on the Configure command line to enable threads.
1106 usereentrant='undef'
1107 : full support for void wanted by default
1108 defvoidused=15
1109
1110 : List of libraries we want.
1111 : If anyone needs -lnet, put it in a hint file.
1112 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1113 libswanted="$libswanted dld ld sun m c cposix posix"
1114 libswanted="$libswanted ndir dir crypt sec"
1115 libswanted="$libswanted ucb bsd BSD PW x util"
1116 : We probably want to search /usr/shlib before most other libraries.
1117 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1118 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1119 glibpth="/usr/shlib $glibpth"
1120 : Do not use vfork unless overridden by a hint file.
1121 usevfork=false
1122
1123 : Find the basic shell for Bourne shell scripts
1124 case "$sh" in
1125 '')
1126         case "$SYSTYPE" in
1127         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1128         *) xxx='/bin/sh';;
1129         esac
1130         if test -f "$xxx"; then
1131                 sh="$xxx"
1132         else
1133                 : Build up a list and do a single loop so we can 'break' out.
1134                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1135                 for xxx in sh bash ksh pdksh ash; do
1136                         for p in $pth; do
1137                                 try="$try ${p}/${xxx}"
1138                         done
1139                 done
1140                 for xxx in $try; do
1141                         if test -f "$xxx"; then
1142                                 sh="$xxx";
1143                                 break
1144                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1145                                 sh="$xxx";
1146                                 break
1147                         elif test -f "$xxx.exe"; then
1148                                 sh="$xxx";
1149                                 break
1150                         fi
1151                 done
1152         fi
1153         ;;
1154 esac
1155
1156 case "$sh" in
1157 '')     cat >&2 <<EOM
1158 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1159
1160 Usually it's in /bin/sh.  How did you even get this far?
1161 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1162 we'll try to straighten this all out.
1163 EOM
1164         exit 1
1165         ;;
1166 esac
1167
1168 : see if sh knows # comments
1169 if `$sh -c '#' >/dev/null 2>&1`; then
1170         shsharp=true
1171         spitshell=cat
1172         xcat=/bin/cat
1173         test -f $xcat$_exe || xcat=/usr/bin/cat
1174         if test ! -f $xcat$_exe; then
1175                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1176                         if test -f $p/cat$_exe; then
1177                                 xcat=$p/cat
1178                                 break
1179                         fi
1180                 done
1181                 if test ! -f $xcat$_exe; then
1182                         echo "Can't find cat anywhere!"
1183                         exit 1
1184                 fi
1185         fi
1186         echo "#!$xcat" >sharp
1187         $eunicefix sharp
1188         chmod +x sharp
1189         ./sharp > today
1190         if test -s today; then
1191                 sharpbang='#!'
1192         else
1193                 echo "#! $xcat" > sharp
1194                 $eunicefix sharp
1195                 chmod +x sharp
1196                 ./sharp > today
1197                 if test -s today; then
1198                         sharpbang='#! '
1199                 else
1200                         sharpbang=': use '
1201                 fi
1202         fi
1203 else
1204         echo " "
1205         echo "Your $sh doesn't grok # comments--I will strip them later on."
1206         shsharp=false
1207         cd ..
1208         echo "exec grep -v '^[  ]*#'" >spitshell
1209         chmod +x spitshell
1210         $eunicefix spitshell
1211         spitshell=`pwd`/spitshell
1212         cd UU
1213         echo "I presume that if # doesn't work, #! won't work either!"
1214         sharpbang=': use '
1215 fi
1216 rm -f sharp today
1217
1218 : figure out how to guarantee sh startup
1219 case "$startsh" in
1220 '') startsh=${sharpbang}${sh} ;;
1221 *)
1222 esac
1223 cat >sharp <<EOSS
1224 $startsh
1225 set abc
1226 test "$?abc" != 1
1227 EOSS
1228
1229 chmod +x sharp
1230 $eunicefix sharp
1231 if ./sharp; then
1232         : echo "Yup, it does."
1233 else
1234         echo "Hmm... '$startsh' does not guarantee sh startup..."
1235         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1236 fi
1237 rm -f sharp
1238
1239
1240 : Save command line options in file UU/cmdline.opt for later use in
1241 : generating config.sh.
1242 cat > cmdline.opt <<EOSH
1243 # Configure command line arguments.
1244 config_arg0='$0'
1245 config_args='$*'
1246 config_argc=$#
1247 EOSH
1248 argn=1
1249 args_exp=''
1250 args_sep=''
1251 for arg in "$@"; do
1252         cat >>cmdline.opt <<EOSH
1253 config_arg$argn='$arg'
1254 EOSH
1255         # Extreme backslashitis: replace each ' by '"'"'
1256         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1257 $arg
1258 EOC
1259         arg_exp=`cat cmdl.opt`
1260         args_exp="$args_exp$args_sep'$arg_exp'"
1261         argn=`expr $argn + 1`
1262         args_sep=' '
1263 done
1264 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1265 # used by ./hints/os2.sh
1266 rm -f cmdl.opt
1267
1268 : produce awk script to parse command line options
1269 cat >options.awk <<'EOF'
1270 BEGIN {
1271         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1272
1273         len = length(optstr);
1274         for (i = 1; i <= len; i++) {
1275                 c = substr(optstr, i, 1);
1276                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1277                 if (a == ":") {
1278                         arg[c] = 1;
1279                         i++;
1280                 }
1281                 opt[c] = 1;
1282         }
1283 }
1284 {
1285         expect = 0;
1286         str = $0;
1287         if (substr(str, 1, 1) != "-") {
1288                 printf("'%s'\n", str);
1289                 next;
1290         }
1291         len = length($0);
1292         for (i = 2; i <= len; i++) {
1293                 c = substr(str, i, 1);
1294                 if (!opt[c]) {
1295                         printf("-%s\n", substr(str, i));
1296                         next;
1297                 }
1298                 printf("-%s\n", c);
1299                 if (arg[c]) {
1300                         if (i < len)
1301                                 printf("'%s'\n", substr(str, i + 1));
1302                         else
1303                                 expect = 1;
1304                         next;
1305                 }
1306         }
1307 }
1308 END {
1309         if (expect)
1310                 print "?";
1311 }
1312 EOF
1313
1314 : process the command line options
1315 set X `for arg in "$@"; do echo "X$arg"; done |
1316         sed -e s/X// | awk -f options.awk`
1317 eval "set $*"
1318 shift
1319 rm -f options.awk
1320
1321 : set up default values
1322 fastread=''
1323 reuseval=false
1324 config_sh=''
1325 alldone=''
1326 error=''
1327 silent=''
1328 extractsh=''
1329 override=''
1330 knowitall=''
1331 rm -f optdef.sh posthint.sh
1332 cat >optdef.sh <<EOS
1333 $startsh
1334 EOS
1335
1336
1337 : option parsing
1338 while test $# -gt 0; do
1339         case "$1" in
1340         -d) shift; fastread=yes;;
1341         -e) shift; alldone=cont;;
1342         -f)
1343                 shift
1344                 cd ..
1345                 if test -r "$1"; then
1346                         config_sh="$1"
1347                 else
1348                         echo "$me: cannot read config file $1." >&2
1349                         error=true
1350                 fi
1351                 cd UU
1352                 shift;;
1353         -h) shift; error=true;;
1354         -r) shift; reuseval=true;;
1355         -s) shift; silent=true; realsilent=true;;
1356         -E) shift; alldone=exit;;
1357         -K) shift; knowitall=true;;
1358         -O) shift; override=true;;
1359         -S) shift; silent=true; extractsh=true;;
1360         -D)
1361                 shift
1362                 case "$1" in
1363                 *=)
1364                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1365                         echo "$me: ignoring -D $1" >&2
1366                         ;;
1367                 *=*) echo "$1" | \
1368                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1369                 *) echo "$1='define'" >> optdef.sh;;
1370                 esac
1371                 shift
1372                 ;;
1373         -U)
1374                 shift
1375                 case "$1" in
1376                 *=) echo "$1" >> optdef.sh;;
1377                 *=*)
1378                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1379                         echo "$me: ignoring -U $1" >&2
1380                         ;;
1381                 *) echo "$1='undef'" >> optdef.sh;;
1382                 esac
1383                 shift
1384                 ;;
1385         -A)
1386             shift
1387             xxx=''
1388             yyy="$1"
1389             zzz=''
1390             uuu=undef
1391             case "$yyy" in
1392             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1393                  case "$zzz" in
1394                  *:*) zzz='' ;;
1395                  *)   xxx=append
1396                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1397                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1398                  esac
1399                  ;;
1400             esac
1401             case "$xxx" in
1402             '')  case "$yyy" in
1403                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1404                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1405                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1406                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1407                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1408                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1409                  esac
1410                  ;;       
1411             esac
1412             case "$xxx" in
1413             append)
1414                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1415             clear)
1416                 echo "$yyy=''"                  >> posthint.sh ;;
1417             define)
1418                 case "$zzz" in
1419                 '') zzz=define ;;
1420                 esac
1421                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1422             eval)
1423                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1424             prepend)
1425                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1426             undef)
1427                 case "$zzz" in
1428                 '') zzz="$uuu" ;;
1429                 esac
1430                 echo "$yyy=$zzz"                >> posthint.sh ;;
1431             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1432             esac
1433             shift
1434             ;;
1435         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1436             exit 0;;
1437         --) break;;
1438         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1439         *) break;;
1440         esac
1441 done
1442
1443 case "$error" in
1444 true)
1445         cat >&2 <<EOM
1446 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1447                  [-U symbol] [-U symbol=] [-A command:symbol...]
1448   -d : use defaults for all answers.
1449   -e : go on without questioning past the production of config.sh.
1450   -f : specify an alternate default configuration file.
1451   -h : print this help message and exit (with an error status).
1452   -r : reuse C symbols value if possible (skips costly nm extraction).
1453   -s : silent mode, only echoes questions and essential information.
1454   -D : define symbol to have some value:
1455          -D symbol         symbol gets the value 'define'
1456          -D symbol=value   symbol gets the value 'value'
1457   -E : stop at the end of questions, after having produced config.sh.
1458   -K : do not use unless you know what you are doing.
1459   -O : let -D and -U override definitions from loaded configuration file.
1460   -S : perform variable substitutions on all .SH files (can mix with -f)
1461   -U : undefine symbol:
1462          -U symbol    symbol gets the value 'undef'
1463          -U symbol=   symbol gets completely empty
1464   -A : manipulate symbol after the platform specific hints have been applied:
1465          -A symbol=value                append " "value to symbol
1466          -A append:symbol=value         append value to symbol
1467          -A define:symbol=value         define symbol to have value
1468          -A clear:symbol                define symbol to be ''
1469          -A define:symbol               define symbol to be 'define'
1470          -A eval:symbol=value           define symbol to be eval of value
1471          -A prepend:symbol=value        prepend value to symbol
1472          -A undef:symbol                define symbol to be 'undef'
1473          -A undef:symbol=               define symbol to be ''
1474   -V : print version number and exit (with a zero status).
1475 EOM
1476         exit 1
1477         ;;
1478 esac
1479
1480 : Sanity checks
1481 case "$fastread$alldone" in
1482 yescont|yesexit) ;;
1483 *)
1484         case "$extractsh" in
1485         true) ;;
1486         *)
1487                 if test ! -t 0; then
1488                         echo "Say 'sh Configure', not 'sh <Configure'"
1489                         exit 1
1490                 fi
1491                 ;;
1492         esac
1493         ;;
1494 esac
1495
1496 exec 4>&1
1497 case "$silent" in
1498 true) exec 1>/dev/null;;
1499 esac
1500
1501 : run the defines and the undefines, if any, but leave the file out there...
1502 touch optdef.sh
1503 . ./optdef.sh
1504 : create the posthint manipulation script and leave the file out there...
1505 touch posthint.sh
1506
1507 : set package name
1508 package=perl5
1509 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1510 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1511 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1512 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1513 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1514 esac
1515
1516 : Some greps do not return status, grrr.
1517 echo "grimblepritz" >grimble
1518 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1519         contains=contains
1520 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1521         contains=grep
1522 else
1523         contains=contains
1524 fi
1525 rm -f grimble
1526 : the following should work in any shell
1527 case "$contains" in
1528 contains*)
1529         echo " "
1530         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1531         cat >contains <<'EOSS'
1532 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1533 EOSS
1534 chmod +x contains
1535 esac
1536
1537 : Find the path to the source tree
1538 case "$src" in
1539 '') case "$0" in
1540     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1541          case "$src" in
1542          /*)    ;;
1543          .)     ;;
1544          *)     src=`cd ../$src && pwd` ;;
1545          esac
1546          ;;
1547     *)   src='.';;
1548     esac;;
1549 esac
1550 case "$src" in
1551 '')     src=/
1552         rsrc=/
1553         ;;
1554 /*) rsrc="$src";;
1555 *) rsrc="../$src";;
1556 esac
1557 if test -f $rsrc/Configure && \
1558         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1559 then
1560    : found it, so we are ok.
1561 else
1562         rsrc=''
1563         for src in . .. ../.. ../../.. ../../../..; do
1564                 if test -f ../$src/Configure && \
1565                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1566                 then
1567                         rsrc=../$src
1568                         break
1569                 fi
1570         done
1571 fi
1572 case "$rsrc" in
1573 '')
1574         cat <<EOM >&4
1575
1576 Sorry, I can't seem to locate the source dir for $package.  Please start
1577 Configure with an explicit path -- i.e. /some/path/Configure.
1578
1579 EOM
1580         exit 1
1581         ;;
1582 ../.)   rsrc='..';;
1583 *)
1584         echo " "
1585         echo "Sources for $package found in \"$src\"." >&4
1586         ;;
1587 esac
1588
1589 : script used to extract .SH files with variable substitutions
1590 cat >extract <<'EOS'
1591 PERL_CONFIG_SH=true
1592 echo "Doing variable substitutions on .SH files..."
1593 if test -f MANIFEST; then
1594         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1595 else
1596         echo "(Looking for .SH files under the source directory.)"
1597         set x `(cd "$src"; find . -name "*.SH" -print)`
1598 fi
1599 shift
1600 case $# in
1601 0) set x `(cd "$src"; echo *.SH)`; shift;;
1602 esac
1603 if test ! -f "$src/$1"; then
1604         shift
1605 fi
1606 mkdir_p='
1607 name=$1;
1608 create="";
1609 while test $name; do
1610         if test ! -d "$name"; then
1611                 create="$name $create";
1612                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1613                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1614         else
1615                 name="";
1616         fi;
1617 done;
1618 for file in $create; do
1619         mkdir $file;
1620 done
1621 '
1622 for file in $*; do
1623         case "$src" in
1624         ".")
1625                 case "$file" in
1626                 */*)
1627                         dir=`expr X$file : 'X\(.*\)/'`
1628                         file=`expr X$file : 'X.*/\(.*\)'`
1629                         (cd "$dir" && . ./$file)
1630                         ;;
1631                 *)
1632                         . ./$file
1633                         ;;
1634                 esac
1635                 ;;
1636         *)
1637                 case "$file" in
1638                 */*)
1639                         dir=`expr X$file : 'X\(.*\)/'`
1640                         file=`expr X$file : 'X.*/\(.*\)'`
1641                         (set x $dir; shift; eval $mkdir_p)
1642                         sh <"$src/$dir/$file"
1643                         ;;
1644                 *)
1645                         sh <"$src/$file"
1646                         ;;
1647                 esac
1648                 ;;
1649         esac
1650 done
1651 if test -f "$src/config_h.SH"; then
1652         if test ! -f config.h; then
1653         : oops, they left it out of MANIFEST, probably, so do it anyway.
1654         . "$src/config_h.SH"
1655         fi
1656 fi
1657 EOS
1658
1659 : extract files and exit if asked to do so
1660 case "$extractsh" in
1661 true)
1662         case "$realsilent" in
1663         true) ;;
1664         *) exec 1>&4;;
1665         esac
1666         case "$config_sh" in
1667         '') config_sh='config.sh';;
1668         esac
1669         echo " "
1670         echo "Fetching answers from $config_sh..."
1671         cd ..
1672         . $config_sh
1673         test "$override" && . ./optdef.sh
1674         echo " "
1675         . UU/extract
1676         rm -rf UU
1677         echo "Extraction done."
1678         exit 0
1679         ;;
1680 esac
1681
1682 : Eunice requires " " instead of "", can you believe it
1683 echo " "
1684 : Here we go...
1685 echo "Beginning of configuration questions for $package."
1686
1687 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1688
1689 : first determine how to suppress newline on echo command
1690 echo " "
1691 echo "Checking echo to see how to suppress newlines..."
1692 (echo "hi there\c" ; echo " ") >.echotmp
1693 if $contains c .echotmp >/dev/null 2>&1 ; then
1694         echo "...using -n."
1695         n='-n'
1696         c=''
1697 else
1698         cat <<'EOM'
1699 ...using \c
1700 EOM
1701         n=''
1702         c='\c'
1703 fi
1704 echo $n "The star should be here-->$c"
1705 echo '*'
1706 rm -f .echotmp
1707
1708 : Now test for existence of everything in MANIFEST
1709 echo " "
1710 if test -f "$rsrc/MANIFEST"; then
1711         echo "First let's make sure your kit is complete.  Checking..." >&4
1712         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | (split -l 50 2>/dev/null || split -50)
1713         rm -f missing
1714         tmppwd=`pwd`
1715         for filelist in x??; do
1716                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1717         done
1718         if test -s missing; then
1719                 cat missing >&4
1720                 cat >&4 <<'EOM'
1721
1722 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1723
1724 You have the option of continuing the configuration process, despite the
1725 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1726 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1727 and contact the author (perlbug@perl.org).
1728
1729 EOM
1730                 echo $n "Continue? [n] $c" >&4
1731                 read ans
1732                 case "$ans" in
1733                 y*)
1734                         echo "Continuing..." >&4
1735                         rm -f missing
1736                         ;;
1737                 *)
1738                         echo "ABORTING..." >&4
1739                         kill $$
1740                         ;;
1741                 esac
1742         else
1743                 echo "Looks good..."
1744         fi
1745 else
1746         echo "There is no MANIFEST file.  I hope your kit is complete !"
1747 fi
1748 rm -f missing x??
1749
1750 echo " "
1751 : Find the appropriate value for a newline for tr
1752 if test -n "$DJGPP"; then
1753        trnl='\012'
1754 fi
1755 if test X"$trnl" = X; then
1756         case "`echo foo|tr '\n' x 2>/dev/null`" in
1757         foox) trnl='\n' ;;
1758         esac
1759 fi
1760 if test X"$trnl" = X; then
1761         case "`echo foo|tr '\012' x 2>/dev/null`" in
1762         foox) trnl='\012' ;;
1763         esac
1764 fi
1765 if test X"$trnl" = X; then
1766         cat <<EOM >&2
1767
1768 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1769
1770 EOM
1771         exit 1
1772 fi
1773
1774 : compute the number of columns on the terminal for proper question formatting
1775 case "$COLUMNS" in
1776 '') COLUMNS='80';;
1777 esac
1778
1779 : set up the echo used in my read
1780 myecho="case \"\$xxxm\" in
1781 '') echo $n \"\$rp $c\" >&4;;
1782 *) case \"\$rp\" in
1783         '') echo $n \"[\$xxxm] $c\";;
1784         *)
1785                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1786                         echo \"\$rp\" >&4
1787                         echo $n \"[\$xxxm] $c\" >&4
1788                 else
1789                         echo $n \"\$rp [\$xxxm] $c\" >&4
1790                 fi
1791                 ;;
1792         esac;;
1793 esac"
1794
1795 : now set up to do reads with possible shell escape and default assignment
1796 cat <<EOSC >myread
1797 $startsh
1798 xxxm=\$dflt
1799 $myecho
1800 ans='!'
1801 case "\$fastread" in
1802 yes) case "\$dflt" in
1803         '') ;;
1804         *) ans='';
1805                 case "\$silent-\$rp" in
1806                 true-) ;;
1807                 *) echo " " >&4;;
1808                 esac;;
1809         esac;;
1810 *) case "\$silent" in
1811         true) case "\$rp" in
1812                 '') ans='';;
1813                 esac;;
1814         esac;;
1815 esac
1816 while expr "X\$ans" : "X!" >/dev/null; do
1817         read answ
1818         set x \$xxxm
1819         shift
1820         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1821         case  "\$answ" in
1822         "!")
1823                 sh 1>&4
1824                 echo " "
1825                 $myecho
1826                 ;;
1827         !*)
1828                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1829                 shift
1830                 sh 1>&4 -c "\$*"
1831                 echo " "
1832                 $myecho
1833                 ;;
1834         "\$ans")
1835                 case "\$ans" in
1836                 \\&*)
1837                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1838                         shift
1839                         case "\$1" in
1840                         -d)
1841                                 fastread=yes
1842                                 echo "(OK, I'll run with -d after this question.)" >&4
1843                                 ;;
1844                         -*)
1845                                 echo "*** Sorry, \$1 not supported yet." >&4
1846                                 ;;
1847                         esac
1848                         $myecho
1849                         ans=!
1850                         ;;
1851                 esac;;
1852         *)
1853                 case "\$aok" in
1854                 y)
1855                         echo "*** Substitution done -- please confirm."
1856                         xxxm="\$ans"
1857                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1858                         xxxm="\$ans"
1859                         ans=!
1860                         ;;
1861                 *)
1862                         echo "*** Error -- try again."
1863                         ans=!
1864                         ;;
1865                 esac
1866                 $myecho
1867                 ;;
1868         esac
1869         case "\$ans\$xxxm\$nostick" in
1870         '')
1871                 ans=!
1872                 $myecho
1873                 ;;
1874         esac
1875 done
1876 case "\$ans" in
1877 '') ans="\$xxxm";;
1878 esac
1879 EOSC
1880
1881 : create .config dir to save info across Configure sessions
1882 test -d ../.config || mkdir ../.config
1883 cat >../.config/README <<EOF
1884 This directory created by Configure to save information that should
1885 persist across sessions for $package.
1886
1887 You may safely delete it if you wish.
1888 EOF
1889
1890 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1891 case "$usedevel" in
1892 $define|true|[yY]*) ;;
1893 *) case "$xversion" in
1894    *[13579])
1895         cat >&4 <<EOH
1896 *** WHOA THERE!!! ***
1897
1898     This is an UNSTABLE DEVELOPMENT release.
1899     The version of this $package distribution is $xversion, that is, odd,
1900     (as opposed to even) and that signifies a development release.
1901     If you want a maintenance release, you want an even-numbered version.
1902
1903     Do ***NOT*** install this into production use.
1904     Data corruption and crashes are possible.
1905
1906     It is most seriously suggested that you do not continue any further
1907     unless you want to help in developing and debugging Perl.
1908
1909     If you *still* want to build perl, you can answer 'y' now,
1910     or pass -Dusedevel to Configure.
1911
1912 EOH
1913         rp='Do you really want to continue?'
1914         dflt='n'
1915         . ./myread
1916         case "$ans" in
1917         [yY]) echo >&4 "Okay, continuing."
1918               usedevel="$define" ;;
1919         *) echo >&4 "Okay, bye."
1920            exit 1
1921            ;;
1922         esac
1923         ;;
1924     esac
1925     ;;
1926 esac
1927 case "$usedevel" in
1928 $define|true|[yY]*)
1929         case "$versiononly" in
1930         '') versiononly="$define" ;;
1931         esac
1932         case "$installusrbinperl" in
1933         '') installusrbinperl="$undef" ;;
1934         esac
1935         ;;
1936 esac
1937
1938 : general instructions
1939 needman=true
1940 firsttime=true
1941 user=`(logname) 2>/dev/null`
1942 case "$user" in
1943 '') user=`whoami 2>&1`;;
1944 esac
1945 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1946         firsttime=false
1947         echo " "
1948         rp='Would you like to see the instructions?'
1949         dflt=n
1950         . ./myread
1951         case "$ans" in
1952         [yY]*) ;;
1953         *) needman=false;;
1954         esac
1955 fi
1956 if $needman; then
1957         cat <<EOH
1958
1959 This installation shell script will examine your system and ask you questions
1960 to determine how the perl5 package should be installed. If you get
1961 stuck on a question, you may use a ! shell escape to start a subshell or
1962 execute a command.  Many of the questions will have default answers in square
1963 brackets; typing carriage return will give you the default.
1964
1965 On some of the questions which ask for file or directory names you are allowed
1966 to use the ~name construct to specify the login directory belonging to "name",
1967 even if you don't have a shell which knows about that.  Questions where this is
1968 allowed will be marked "(~name ok)".
1969
1970 EOH
1971         rp=''
1972         dflt='Type carriage return to continue'
1973         . ./myread
1974         cat <<'EOH'
1975
1976 The prompter used in this script allows you to use shell variables and
1977 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1978 in the default answer, as if the default line was a set of arguments given to a
1979 script shell.  This means you may also use $* to repeat the whole default line,
1980 so you do not have to re-type everything to add something to the default.
1981
1982 Everytime there is a substitution, you will have to confirm.  If there is an
1983 error (e.g. an unmatched backtick), the default answer will remain unchanged
1984 and you will be prompted again.
1985
1986 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1987 the questions and use the computed defaults (or the previous answers if there
1988 was already a config.sh file). Type 'Configure -h' for a list of options.
1989 You may also start interactively and then answer '& -d' at any prompt to turn
1990 on the non-interactive behaviour for the remainder of the execution.
1991
1992 EOH
1993         . ./myread
1994         cat <<EOH
1995
1996 Much effort has been expended to ensure that this shell script will run on any
1997 Unix system.  If despite that it blows up on yours, your best bet is to edit
1998 Configure and run it again.  If you can't run Configure for some reason,
1999 you'll have to generate a config.sh file by hand.  Whatever problems you
2000 have, let me (perlbug@perl.org) know how I blew it.
2001
2002 This installation script affects things in two ways:
2003
2004 1) it may do direct variable substitutions on some of the files included
2005    in this kit.
2006 2) it builds a config.h file for inclusion in C programs.  You may edit
2007    any of these files as the need arises after running this script.
2008
2009 If you make a mistake on a question, there is no easy way to back up to it
2010 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2011 files.  Configure will offer to let you do this before it runs the SH files.
2012
2013 EOH
2014         dflt='Type carriage return to continue'
2015         . ./myread
2016         case "$firsttime" in
2017         true) echo $user >>../.config/instruct;;
2018         esac
2019 fi
2020
2021 : find out where common programs are
2022 echo " "
2023 echo "Locating common programs..." >&4
2024 cat <<EOSC >loc
2025 $startsh
2026 case \$# in
2027 0) exit 1;;
2028 esac
2029 thing=\$1
2030 shift
2031 dflt=\$1
2032 shift
2033 for dir in \$*; do
2034         case "\$thing" in
2035         .)
2036         if test -d \$dir/\$thing; then
2037                 echo \$dir
2038                 exit 0
2039         fi
2040         ;;
2041         *)
2042         for thisthing in \$dir/\$thing; do
2043                 : just loop through to pick last item
2044         done
2045         if test -f \$thisthing; then
2046                 echo \$thisthing
2047                 exit 0
2048         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2049                 echo \$thisthing
2050                 exit 0
2051         elif test -f \$dir/\$thing.exe; then
2052                 if test -n "$DJGPP"; then
2053                         echo \$dir/\$thing.exe
2054                 else
2055                         : on Eunice apparently
2056                         echo \$dir/\$thing
2057                 fi
2058                 exit 0
2059         fi
2060         ;;
2061         esac
2062 done
2063 echo \$dflt
2064 exit 1
2065 EOSC
2066 chmod +x loc
2067 $eunicefix loc
2068 loclist="
2069 awk
2070 cat
2071 chmod
2072 comm
2073 cp
2074 echo
2075 expr
2076 grep
2077 ls
2078 mkdir
2079 rm
2080 sed
2081 sort
2082 touch
2083 tr
2084 uniq
2085 "
2086 trylist="
2087 Mcc
2088 ar
2089 bison
2090 byacc
2091 cpp
2092 csh
2093 date
2094 egrep
2095 gmake
2096 gzip
2097 less
2098 ln
2099 make
2100 more
2101 nm
2102 nroff
2103 pg
2104 test
2105 uname
2106 zip
2107 "
2108 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2109 pth="$pth /lib /usr/lib"
2110 for file in $loclist; do
2111         eval xxx=\$$file
2112         case "$xxx" in
2113         /*|?:[\\/]*)
2114                 if test -f "$xxx"; then
2115                         : ok
2116                 else
2117                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2118                         xxx=`./loc $file $file $pth`
2119                 fi
2120                 ;;
2121         '') xxx=`./loc $file $file $pth`;;
2122         *) xxx=`./loc $xxx $xxx $pth`;;
2123         esac
2124         eval $file=$xxx$_exe
2125         eval _$file=$xxx
2126         case "$xxx" in
2127         /*)
2128                 echo $file is in $xxx.
2129                 ;;
2130         ?:[\\/]*)
2131                 echo $file is in $xxx.
2132                 ;;
2133         *)
2134                 echo "I don't know where '$file' is, and my life depends on it." >&4
2135                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2136                 exit 1
2137                 ;;
2138         esac
2139 done
2140 echo " "
2141 echo "Don't worry if any of the following aren't found..."
2142 say=offhand
2143 for file in $trylist; do
2144         eval xxx=\$$file
2145         case "$xxx" in
2146         /*|?:[\\/]*)
2147                 if test -f "$xxx"; then
2148                         : ok
2149                 else
2150                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2151                         xxx=`./loc $file $file $pth`
2152                 fi
2153                 ;;
2154         '') xxx=`./loc $file $file $pth`;;
2155         *) xxx=`./loc $xxx $xxx $pth`;;
2156         esac
2157         eval $file=$xxx$_exe
2158         eval _$file=$xxx
2159         case "$xxx" in
2160         /*)
2161                 echo $file is in $xxx.
2162                 ;;
2163         ?:[\\/]*)
2164                 echo $file is in $xxx.
2165                 ;;
2166         *)
2167                 echo "I don't see $file out there, $say."
2168                 say=either
2169                 ;;
2170         esac
2171 done
2172 case "$egrep" in
2173 egrep)
2174         echo "Substituting grep for egrep."
2175         egrep=$grep
2176         _egrep=$grep
2177         ;;
2178 esac
2179 case "$ln" in
2180 ln)
2181         echo "Substituting cp for ln."
2182         ln=$cp
2183         _ln=$cp
2184         ;;
2185 esac
2186 case "$make" in
2187 make)   
2188         case "$gmake" in
2189         gmake)
2190         echo "I can't find make or gmake, and my life depends on it." >&4
2191         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2192         exit 1
2193         ;;
2194         esac
2195         ;;
2196 esac    
2197 case "$gmake" in
2198 gmake)  ;;
2199 *)      # We can't have osname yet.
2200         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2201                 # Assume that gmake, if found, is definitely GNU make
2202                 # and prefer it over the system make.
2203                 echo "Substituting gmake for make."
2204                 make=$gmake
2205                 _make=$gmake
2206         fi
2207         ;;
2208 esac
2209 case "$test" in
2210 test)
2211         echo "Hopefully test is built into your sh."
2212         ;;
2213 *)
2214         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2215                 echo "Using the test built into your sh."
2216                 test=test
2217                 _test=test
2218         fi
2219         ;;
2220 esac
2221 case "$echo" in
2222 echo)
2223         echo "Hopefully echo is built into your sh."
2224         ;;
2225 '') ;;
2226 *)
2227         echo " "
2228 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2229         $echo $n "hi there$c" >foo1
2230         echo $n "hi there$c" >foo2
2231         if cmp foo1 foo2 >/dev/null 2>&1; then
2232                 echo "They are compatible.  In fact, they may be identical."
2233         else
2234                 case "$n" in
2235                 '-n') n='' c='\c';;
2236                 *) n='-n' c='';;
2237                 esac
2238                 cat <<FOO
2239 They are not compatible!  You are probably running ksh on a non-USG system.
2240 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2241 have echo built in and we may have to run some Bourne shell scripts.  That
2242 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2243
2244 FOO
2245                 $echo $n "The star should be here-->$c"
2246                 $echo "*"
2247         fi
2248         $rm -f foo1 foo2
2249         ;;
2250 esac
2251
2252 cat <<EOS >trygcc
2253 $startsh
2254 EOS
2255 cat <<'EOSC' >>trygcc
2256 case "$cc" in
2257 '') ;;
2258 *)  $rm -f try try.*
2259     $cat >try.c <<EOM
2260 int main(int argc, char *argv[]) {
2261   return 0;
2262 }
2263 EOM
2264     if $cc -o try $ccflags $ldflags try.c; then
2265        :
2266     else
2267         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2268         despair=yes
2269         trygcc=yes
2270         case "$cc" in
2271         *gcc*) trygcc=no ;;
2272         esac
2273         case "`$cc -v -c try.c 2>&1`" in
2274         *gcc*) trygcc=no ;;
2275         esac
2276         if $test X"$trygcc" = Xyes; then
2277             if gcc -o try -c try.c; then
2278                 echo " "
2279                 echo "You seem to have a working gcc, though." >&4
2280                 rp="Would you like to use it?"
2281                 dflt=y
2282                 if $test -f myread; then
2283                     . ./myread
2284                 else
2285                     if $test -f UU/myread; then
2286                         . ./UU/myread
2287                     else
2288                         echo "Cannot find myread, sorry.  Aborting." >&2
2289                         exit 1
2290                     fi
2291                 fi  
2292                 case "$ans" in
2293                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2294                 esac
2295             fi
2296         fi
2297     fi
2298     $rm -f try try.*
2299     ;;
2300 esac
2301 EOSC
2302
2303 cat <<EOS >checkcc
2304 $startsh
2305 EOS
2306 cat <<'EOSC' >>checkcc
2307 case "$cc" in        
2308 '') ;;
2309 *)  $rm -f try try.*              
2310     $cat >try.c <<EOM
2311 int main(int argc, char *argv[]) {
2312   return 0;
2313 }
2314 EOM
2315     if $cc -o try $ccflags $ldflags try.c; then
2316        :
2317     else
2318         if $test X"$despair" = Xyes; then
2319            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2320         fi
2321         $cat >&4 <<EOM         
2322 You need to find a working C compiler.
2323 Either (purchase and) install the C compiler supplied by your OS vendor,
2324 or for a free C compiler try http://gcc.gnu.org/
2325 I cannot continue any further, aborting.
2326 EOM
2327         exit 1
2328     fi
2329     $rm -f try try.*
2330     ;;
2331 esac
2332 EOSC
2333
2334 : determine whether symbolic links are supported
2335 echo " "
2336 $touch blurfl
2337 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2338         echo "Symbolic links are supported." >&4
2339         lns="$ln -s"
2340 else
2341         echo "Symbolic links are NOT supported." >&4
2342         lns="$ln"
2343 fi
2344 $rm -f blurfl sym
2345
2346 : determine whether symbolic links are supported
2347 echo " "
2348 case "$lns" in
2349 *"ln"*" -s")
2350         echo "Checking how to test for symbolic links..." >&4
2351         $lns blurfl sym
2352         if $test "X$issymlink" = X; then
2353                 case "$newsh" in
2354                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2355                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2356                 esac
2357                 if test $? = 0; then
2358                         issymlink="test -h"
2359                 else
2360                         echo "Your builtin 'test -h' may be broken." >&4
2361                         case "$test" in
2362                         /*)     ;;
2363                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2364                                 for p in $pth
2365                                 do
2366                                         if test -f "$p/$test"; then
2367                                                 test="$p/$test"
2368                                                 break
2369                                         fi
2370                                 done
2371                                 ;;
2372                         esac
2373                         case "$test" in
2374                         /*)
2375                                 echo "Trying external '$test -h'." >&4
2376                                 issymlink="$test -h"
2377                                 if $test ! -h sym >/dev/null 2>&1; then
2378                                         echo "External '$test -h' is broken, too." >&4
2379                                         issymlink=''
2380                                 fi
2381                                 ;;
2382                         *)      issymlink='' ;;
2383                         esac
2384                 fi              
2385         fi
2386         if $test "X$issymlink" = X; then
2387                 if $test -L sym 2>/dev/null; then
2388                         issymlink="$test -L"
2389                         echo "The builtin '$test -L' worked." >&4
2390                 fi
2391         fi
2392         if $test "X$issymlink" != X; then
2393                 echo "You can test for symbolic links with '$issymlink'." >&4
2394         else
2395                 echo "I do not know how you can test for symbolic links." >&4
2396         fi
2397         $rm -f blurfl sym
2398         ;;
2399 *)      echo "No symbolic links, so not testing for their testing..." >&4
2400         ;;
2401 esac
2402 echo " "
2403
2404
2405 case "$mksymlinks" in
2406 $define|true|[yY]*)
2407         case "$src" in
2408         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2409                 exit 1
2410                 ;;
2411         *)      case "$lns:$issymlink" in
2412                 *"ln"*" -s:"*"test -"?)
2413                         echo "Creating the symbolic links..." >&4
2414                         echo "(First creating the subdirectories...)" >&4
2415                         cd ..
2416                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2417                                 read directory
2418                                 test -z "$directory" && break
2419                                 mkdir -p $directory
2420                         done
2421                         # Sanity check 1.
2422                         if test ! -d t/base; then
2423                                 echo "Failed to create the subdirectories.  Aborting." >&4
2424                                 exit 1
2425                         fi
2426                         echo "(Then creating the symlinks...)" >&4
2427                         awk '{print $1}' $src/MANIFEST | while true; do
2428                                 read filename
2429                                 test -z "$filename" && break
2430                                 if test -f $filename; then
2431                                         if $issymlink $filename; then
2432                                                 rm -f $filename
2433                                         fi
2434                                 fi
2435                                 if test -f $filename; then
2436                                         echo "$filename already exists, not symlinking."
2437                                 else
2438                                         ln -s $src/$filename $filename
2439                                 fi
2440                         done
2441                         # Sanity check 2.
2442                         if test ! -f t/base/lex.t; then
2443                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2444                                 exit 1
2445                         fi
2446                         cd UU
2447                         ;;
2448                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2449                         ;;
2450                 esac
2451                 ;;
2452         esac
2453         ;;
2454 esac
2455
2456
2457 case "$usecrosscompile" in
2458 $define|true|[yY]*)
2459         $echo "Cross-compiling..."
2460         croak=''
2461         case "$cc" in
2462         *-*-gcc) # A cross-compiling gcc, probably.
2463             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2464             ar=$targetarch-ar
2465             # leave out ld, choosing it is more complex
2466             nm=$targetarch-nm
2467             ranlib=$targetarch-ranlib
2468             $echo 'extern int foo;' > try.c
2469             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2470             shift
2471             if $test $# -gt 0; then
2472                 incpth="$incpth $*"
2473                 incpth="`$echo $incpth|$sed 's/^ //'`"
2474                 echo "Guessing incpth '$incpth'." >&4
2475                 for i in $*; do
2476                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2477                     if $test -d $j; then
2478                         libpth="$libpth $j"
2479                     fi
2480                 done   
2481                 libpth="`$echo $libpth|$sed 's/^ //'`"
2482                 echo "Guessing libpth '$libpth'." >&4
2483             fi
2484             $rm -f try.c
2485             ;;
2486         esac
2487         case "$targetarch" in
2488         '') echo "Targetarch not defined." >&4; croak=y ;;
2489         *)  echo "Using targetarch $targetarch." >&4 ;;
2490         esac
2491         case "$incpth" in
2492         '') echo "Incpth not defined." >&4; croak=y ;;
2493         *)  echo "Using incpth '$incpth'." >&4 ;;
2494         esac
2495         case "$libpth" in
2496         '') echo "Libpth not defined." >&4; croak=y ;;
2497         *)  echo "Using libpth '$libpth'." >&4 ;;
2498         esac
2499         case "$usrinc" in
2500         '') for i in $incpth; do
2501                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2502                     usrinc=$i
2503                     echo "Guessing usrinc $usrinc." >&4
2504                     break
2505                 fi
2506             done
2507             case "$usrinc" in
2508             '') echo "Usrinc not defined." >&4; croak=y ;;
2509             esac
2510             ;;
2511         *)  echo "Using usrinc $usrinc." >&4 ;;
2512         esac
2513         case "$targethost" in
2514         '') echo "Targethost not defined." >&4; croak=y ;;
2515         *)  echo "Using targethost $targethost." >&4
2516         esac
2517         locincpth=' '
2518         loclibpth=' '
2519         case "$croak" in
2520         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2521         esac
2522         case "$src" in
2523         /*) run=$src/Cross/run
2524             targetmkdir=$src/Cross/mkdir
2525             to=$src/Cross/to
2526             from=$src/Cross/from
2527             ;;
2528         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2529             run=$pwd/Cross/run
2530             targetmkdir=$pwd/Cross/mkdir
2531             to=$pwd/Cross/to
2532             from=$pwd/Cross/from
2533             ;;
2534         esac
2535         case "$targetrun" in
2536         '') targetrun=ssh ;;
2537         esac
2538         case "$targetto" in
2539         '') targetto=scp ;;
2540         esac
2541         case "$targetfrom" in
2542         '') targetfrom=scp ;;
2543         esac
2544         run=$run-$targetrun
2545         to=$to-$targetto
2546         from=$from-$targetfrom
2547         case "$targetdir" in
2548         '')  targetdir=/tmp
2549              echo "Guessing targetdir $targetdir." >&4
2550              ;;
2551         esac
2552         case "$targetuser" in
2553         '')  targetuser=root
2554              echo "Guessing targetuser $targetuser." >&4
2555              ;;
2556         esac
2557         case "$targetfrom" in
2558         scp)    q=-q ;;
2559         *)      q='' ;;
2560         esac
2561         case "$targetrun" in
2562         ssh|rsh)
2563             cat >$run <<EOF
2564 #!/bin/sh
2565 case "\$1" in
2566 -cwd)
2567   shift
2568   cwd=\$1
2569   shift
2570   ;;
2571 esac
2572 case "\$cwd" in
2573 '') cwd=$targetdir ;;
2574 esac
2575 exe=\$1
2576 shift
2577 if $test ! -f \$exe.xok; then
2578   $to \$exe
2579   $touch \$exe.xok
2580 fi
2581 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2582 EOF
2583             ;;
2584         *)  echo "Unknown targetrun '$targetrun'" >&4
2585             exit 1
2586             ;;
2587         esac
2588         case "$targetmkdir" in
2589         */Cross/mkdir)
2590             cat >$targetmkdir <<EOF
2591 #!/bin/sh
2592 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2593 EOF
2594             $chmod a+rx $targetmkdir
2595             ;;
2596         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2597             exit 1
2598             ;;
2599         esac
2600         case "$targetto" in
2601         scp|rcp)
2602             cat >$to <<EOF
2603 #!/bin/sh
2604 for f in \$@
2605 do
2606   case "\$f" in
2607   /*)
2608     $targetmkdir \`dirname \$f\`
2609     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2610     ;;
2611   *)
2612     $targetmkdir $targetdir/\`dirname \$f\`
2613     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2614     ;;
2615   esac
2616 done
2617 exit 0
2618 EOF
2619             ;;
2620         cp) cat >$to <<EOF
2621 #!/bin/sh
2622 for f in \$@
2623 do
2624   case "\$f" in
2625   /*)
2626     $mkdir -p $targetdir/\`dirname \$f\`
2627     $cp \$f $targetdir/\$f || exit 1
2628     ;;
2629   *)
2630     $targetmkdir $targetdir/\`dirname \$f\`
2631     $cp \$f $targetdir/\$f || exit 1
2632     ;;
2633   esac
2634 done
2635 exit 0
2636 EOF
2637             ;;
2638         *)  echo "Unknown targetto '$targetto'" >&4
2639             exit 1
2640             ;;
2641         esac
2642         case "$targetfrom" in
2643         scp|rcp)
2644           cat >$from <<EOF
2645 #!/bin/sh
2646 for f in \$@
2647 do
2648   $rm -f \$f
2649   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2650 done
2651 exit 0
2652 EOF
2653             ;;
2654         cp) cat >$from <<EOF
2655 #!/bin/sh
2656 for f in \$@
2657 do
2658   $rm -f \$f
2659   cp $targetdir/\$f . || exit 1
2660 done
2661 exit 0
2662 EOF
2663             ;;
2664         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2665             exit 1
2666             ;;
2667         esac
2668         if $test ! -f $run; then
2669             echo "Target 'run' script '$run' not found." >&4
2670         else
2671             $chmod a+rx $run
2672         fi
2673         if $test ! -f $to; then
2674             echo "Target 'to' script '$to' not found." >&4
2675         else
2676             $chmod a+rx $to
2677         fi
2678         if $test ! -f $from; then
2679             echo "Target 'from' script '$from' not found." >&4
2680         else
2681             $chmod a+rx $from
2682         fi
2683         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2684             exit 1
2685         fi
2686         cat >&4 <<EOF
2687 Using '$run' for remote execution,
2688 and '$from' and '$to'
2689 for remote file transfer.
2690 EOF
2691         ;;
2692 *)      run=''
2693         to=:
2694         from=:
2695         usecrosscompile='undef'
2696         targetarch=''
2697         ;;
2698 esac
2699
2700 : see whether [:lower:] and [:upper:] are supported character classes
2701 echo " "
2702 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2703 ABYZ)
2704         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2705         up='[:upper:]'
2706         low='[:lower:]'
2707         ;;
2708 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2709         # (0xc9 and 0xd1), therefore that is a nice testing point.
2710         if test "X$up" = X -o "X$low" = X; then
2711             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2712             ij) up='[A-Z]'
2713                 low='[a-z]'
2714                 ;;
2715             esac
2716         fi
2717         if test "X$up" = X -o "X$low" = X; then
2718             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2719             ij) up='A-Z'
2720                 low='a-z'
2721                 ;;
2722             esac
2723         fi
2724         if test "X$up" = X -o "X$low" = X; then
2725             case "`echo IJ | od -x 2>/dev/null`" in
2726             *C9D1*|*c9d1*)
2727                 echo "Hey, this might be EBCDIC." >&4
2728                 if test "X$up" = X -o "X$low" = X; then
2729                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2730                     ij) up='[A-IJ-RS-Z]'
2731                         low='[a-ij-rs-z]'
2732                         ;;
2733                     esac
2734                 fi
2735                 if test "X$up" = X -o "X$low" = X; then
2736                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2737                     ij) up='A-IJ-RS-Z'
2738                         low='a-ij-rs-z'
2739                         ;;
2740                     esac
2741                 fi
2742                 ;;
2743             esac
2744         fi
2745 esac
2746 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2747 ij)
2748     echo "Using $up and $low to convert case." >&4
2749     ;;
2750 *)
2751     echo "I don't know how to translate letters from upper to lower case." >&4
2752     echo "Your tr is not acting any way I know of." >&4
2753     exit 1
2754     ;;
2755 esac
2756 : set up the translation script tr, must be called with ./tr of course
2757 cat >tr <<EOSC
2758 $startsh
2759 case "\$1\$2" in
2760 '[A-Z][a-z]') exec $tr '$up' '$low';;
2761 '[a-z][A-Z]') exec $tr '$low' '$up';;
2762 esac
2763 exec $tr "\$@"
2764 EOSC
2765 chmod +x tr
2766 $eunicefix tr
2767
2768 : Try to determine whether config.sh was made on this system
2769 case "$config_sh" in
2770 '')
2771 myuname=`$uname -a 2>/dev/null`
2772 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2773 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2774 # because the A-Z/a-z are not consecutive.
2775 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2776         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2777 newmyuname="$myuname"
2778 dflt=n
2779 case "$knowitall" in
2780 '')
2781         if test -f ../config.sh; then
2782                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2783                         eval "`grep myuname= ../config.sh`"
2784                 fi
2785                 if test "X$myuname" = "X$newmyuname"; then
2786                         dflt=y
2787                 fi
2788         fi
2789         ;;
2790 *) dflt=y;;
2791 esac
2792
2793 : Get old answers from old config file if Configure was run on the
2794 : same system, otherwise use the hints.
2795 hint=default
2796 cd ..
2797 if test -f config.sh; then
2798         echo " "
2799         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2800         . UU/myread
2801         case "$ans" in
2802         n*|N*) echo "OK, I'll ignore it."
2803                 mv config.sh config.sh.old
2804                 myuname="$newmyuname"
2805                 ;;
2806         *)  echo "Fetching default answers from your old config.sh file..." >&4
2807                 tmp_n="$n"
2808                 tmp_c="$c"
2809                 tmp_sh="$sh"
2810                 . ./config.sh
2811                 cp config.sh UU
2812                 n="$tmp_n"
2813                 c="$tmp_c"
2814                 : Older versions did not always set $sh.  Catch re-use of such
2815                 : an old config.sh.
2816                 case "$sh" in
2817                 '') sh="$tmp_sh" ;;
2818                 esac
2819                 hint=previous
2820                 ;;
2821         esac
2822 fi
2823 . ./UU/checkcc
2824 if test ! -f config.sh; then
2825         $cat <<EOM
2826
2827 First time through, eh?  I have some defaults handy for some systems
2828 that need some extra help getting the Configure answers right:
2829
2830 EOM
2831         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2832         dflt=''
2833         : Half the following guesses are probably wrong... If you have better
2834         : tests or hints, please send them to perlbug@perl.org
2835         : The metaconfig authors would also appreciate a copy...
2836         $test -f /irix && osname=irix
2837         $test -f /xenix && osname=sco_xenix
2838         $test -f /dynix && osname=dynix
2839         $test -f /dnix && osname=dnix
2840         $test -f /lynx.os && osname=lynxos
2841         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2842         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2843         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2844         $test -f /bin/mips && /bin/mips && osname=mips
2845         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2846                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2847         $test -d /usr/apollo/bin && osname=apollo
2848         $test -f /etc/saf/_sactab && osname=svr4
2849         $test -d /usr/include/minix && osname=minix
2850         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2851         if $test -d /MachTen -o -d /MachTen_Folder; then
2852                 osname=machten
2853                 if $test -x /sbin/version; then
2854                         osvers=`/sbin/version | $awk '{print $2}' |
2855                         $sed -e 's/[A-Za-z]$//'`
2856                 elif $test -x /usr/etc/version; then
2857                         osvers=`/usr/etc/version | $awk '{print $2}' |
2858                         $sed -e 's/[A-Za-z]$//'`
2859                 else
2860                         osvers="$2.$3"
2861                 fi
2862         fi
2863
2864         $test -f /sys/posix.dll &&
2865                 $test -f /usr/bin/what &&
2866                 set X `/usr/bin/what /sys/posix.dll` &&
2867                 $test "$3" = UWIN &&
2868                 osname=uwin &&
2869                 osvers="$5"
2870
2871         if $test -f $uname; then
2872                 set X $myuname
2873                 shift
2874
2875                 case "$5" in
2876                 fps*) osname=fps ;;
2877                 mips*)
2878                         case "$4" in
2879                         umips) osname=umips ;;
2880                         *) osname=mips ;;
2881                         esac;;
2882                 [23]100) osname=mips ;;
2883                 next*) osname=next ;;
2884                 i386*)
2885                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2886                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2887                                 osname='sco'
2888                                 osvers=$tmp
2889                         elif $test -f /etc/kconfig; then
2890                                 osname=isc
2891                                 if test "$lns" = "$ln -s"; then
2892                                         osvers=4
2893                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2894                                         osvers=3
2895                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2896                                         osvers=2
2897                                 fi
2898                         fi
2899                         tmp=''
2900                         ;;
2901                 pc*)
2902                         if test -n "$DJGPP"; then
2903                                 osname=dos
2904                                 osvers=djgpp
2905                         fi
2906                         ;;
2907                 esac
2908
2909                 case "$1" in
2910                 aix) osname=aix
2911                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2912                         case "$tmp" in
2913                         'not found') osvers="$4"."$3" ;;
2914                         '<3240'|'<>3240') osvers=3.2.0 ;;
2915                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2916                         '=3250'|'>3250') osvers=3.2.5 ;;
2917                         *) osvers=$tmp;;
2918                         esac
2919                         ;;
2920                 bsd386) osname=bsd386
2921                         osvers=`$uname -r`
2922                         ;;
2923                 cygwin*) osname=cygwin
2924                         osvers="$3"
2925                         ;;
2926                 *dc.osx) osname=dcosx
2927                         osvers="$3"
2928                         ;;
2929                 dnix) osname=dnix
2930                         osvers="$3"
2931                         ;;
2932                 domainos) osname=apollo
2933                         osvers="$3"
2934                         ;;
2935                 dgux) osname=dgux 
2936                         osvers="$3"
2937                         ;;
2938                 dynixptx*) osname=dynixptx
2939                         osvers=`echo "$4"|sed 's/^v//'`
2940                         ;;
2941                 freebsd) osname=freebsd 
2942                         osvers="$3" ;;
2943                 genix) osname=genix ;;
2944                 hp*) osname=hpux 
2945                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2946                         ;;
2947                 irix*) osname=irix
2948                         case "$3" in
2949                         4*) osvers=4 ;;
2950                         5*) osvers=5 ;;
2951                         *)      osvers="$3" ;;
2952                         esac
2953                         ;;
2954                 linux) osname=linux
2955                         case "$3" in
2956                         *)      osvers="$3" ;;
2957                         esac
2958                         ;;
2959                 MiNT) osname=mint
2960                         ;;
2961                 netbsd*) osname=netbsd
2962                         osvers="$3"
2963                         ;;
2964                 news-os) osvers="$3"
2965                         case "$3" in
2966                         4*) osname=newsos4 ;;
2967                         *) osname=newsos ;;
2968                         esac
2969                         ;;
2970                 next*) osname=next ;;
2971                 nonstop-ux) osname=nonstopux ;;
2972                 POSIX-BC | posix-bc ) osname=posix-bc
2973                         osvers="$3"
2974                         ;;
2975                 powerux | power_ux | powermax_os | powermaxos | \
2976                 powerunix | power_unix) osname=powerux
2977                         osvers="$3"
2978                         ;;
2979                 qnx) osname=qnx
2980                         osvers="$4"
2981                         ;;
2982                 solaris) osname=solaris
2983                         case "$3" in
2984                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2985                         *)      osvers="$3" ;;
2986                         esac
2987                         ;;
2988                 sunos) osname=sunos
2989                         case "$3" in
2990                         5*) osname=solaris
2991                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2992                         *)      osvers="$3" ;;
2993                         esac
2994                         ;;
2995                 titanos) osname=titanos
2996                         case "$3" in
2997                         1*) osvers=1 ;;
2998                         2*) osvers=2 ;;
2999                         3*) osvers=3 ;;
3000                         4*) osvers=4 ;;
3001                         *)      osvers="$3" ;;
3002                         esac
3003                         ;;
3004                 ultrix) osname=ultrix
3005                         osvers="$3"
3006                         ;;
3007                 osf1|mls+)      case "$5" in
3008                                 alpha)
3009                                         osname=dec_osf
3010                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3011                                         case "$osvers" in
3012                                         [1-9].[0-9]*) ;;
3013                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3014                                         esac
3015                                         ;;
3016                         hp*)    osname=hp_osf1  ;;
3017                         mips)   osname=mips_osf1 ;;
3018                         esac
3019                         ;;
3020                 unixware) osname=svr5
3021                         osvers="$4"
3022                         ;;
3023                 uts)    osname=uts
3024                         osvers="$3"
3025                         ;;
3026                 vos) osvers="$3"
3027                         ;;
3028                 $2) case "$osname" in
3029                         *isc*) ;;
3030                         *freebsd*) ;;
3031                         svr*)
3032                                 : svr4.x or possibly later
3033                                 case "svr$3" in 
3034                                 ${osname}*)
3035                                         osname=svr$3
3036                                         osvers=$4
3037                                         ;;
3038                                 esac
3039                                 case "$osname" in
3040                                 svr4.0)
3041                                         : Check for ESIX
3042                                         if test -f /stand/boot ; then
3043                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3044                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3045                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3046                                                         if test -n "$isesix"; then
3047                                                                 osname=esix4
3048                                                         fi
3049                                                 fi
3050                                         fi
3051                                         ;;
3052                                 esac
3053                                 ;;
3054                         *)      if test -f /etc/systemid; then
3055                                         osname=sco
3056                                         set `echo $3 | $sed 's/\./ /g'` $4
3057                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3058                                                 osvers=$1.$2.$3
3059                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3060                                                 osvers=$1.$2
3061                                         elif $test -f $src/hints/sco_$1.sh; then
3062                                                 osvers=$1
3063                                         fi
3064                                 else
3065                                         case "$osname" in
3066                                         '') : Still unknown.  Probably a generic Sys V.
3067                                                 osname="sysv"
3068                                                 osvers="$3"
3069                                                 ;;
3070                                         esac
3071                                 fi
3072                                 ;;
3073                         esac
3074                         ;;
3075                 *)      case "$osname" in
3076                         '') : Still unknown.  Probably a generic BSD.
3077                                 osname="$1"
3078                                 osvers="$3"
3079                                 ;;
3080                         esac
3081                         ;;
3082                 esac
3083         else
3084                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3085                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3086                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3087                                 osname=news_os
3088                         fi
3089                         $rm -f UU/kernel.what
3090                 elif test -d c:/.; then
3091                         set X $myuname
3092                         osname=os2
3093                         osvers="$5"
3094                 fi
3095         fi
3096         
3097         case "$targetarch" in
3098         '') ;;
3099         *)  hostarch=$osname
3100             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3101             osvers=''
3102             ;;
3103         esac
3104
3105         : Now look for a hint file osname_osvers, unless one has been
3106         : specified already.
3107         case "$hintfile" in
3108         ''|' ')
3109                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3110                 : Also try without trailing minor version numbers.
3111                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3112                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3113                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3114                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3115                 case "$file" in
3116                 '') dflt=none ;;
3117                 *)  case "$osvers" in
3118                         '') dflt=$file
3119                                 ;;
3120                         *)  if $test -f $src/hints/$file.sh ; then
3121                                         dflt=$file
3122                                 elif $test -f $src/hints/$xfile.sh ; then
3123                                         dflt=$xfile
3124                                 elif $test -f $src/hints/$xxfile.sh ; then
3125                                         dflt=$xxfile
3126                                 elif $test -f $src/hints/$xxxfile.sh ; then
3127                                         dflt=$xxxfile
3128                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3129                                         dflt=$xxxxfile
3130                                 elif $test -f "$src/hints/${osname}.sh" ; then
3131                                         dflt="${osname}"
3132                                 else
3133                                         dflt=none
3134                                 fi
3135                                 ;;
3136                         esac
3137                         ;;
3138                 esac
3139                 if $test -f Policy.sh ; then
3140                         case "$dflt" in
3141                         *Policy*) ;;
3142                         none) dflt="Policy" ;;
3143                         *) dflt="Policy $dflt" ;;
3144                         esac
3145                 fi
3146                 ;;
3147         *)
3148                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3149                 ;;
3150         esac
3151
3152         if $test -f Policy.sh ; then
3153                 $cat <<EOM
3154
3155 There's also a Policy hint file available, which should make the
3156 site-specific (policy) questions easier to answer.
3157 EOM
3158
3159         fi
3160
3161         $cat <<EOM
3162
3163 You may give one or more space-separated answers, or "none" if appropriate.
3164 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3165 is a good thing.  DO NOT give a wrong version or a wrong OS.
3166
3167 EOM
3168
3169         rp="Which of these apply, if any?"
3170         . UU/myread
3171         tans=$ans
3172         for file in $tans; do
3173                 if $test X$file = XPolicy -a -f Policy.sh; then
3174                         . Policy.sh
3175                         $cat Policy.sh >> UU/config.sh
3176                 elif $test -f $src/hints/$file.sh; then
3177                         . $src/hints/$file.sh
3178                         $cat $src/hints/$file.sh >> UU/config.sh
3179                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3180                         : nothing
3181                 else
3182                         : Give one chance to correct a possible typo.
3183                         echo "$file.sh does not exist"
3184                         dflt=$file
3185                         rp="hint to use instead?"
3186                         . UU/myread
3187                         for file in $ans; do
3188                                 if $test -f "$src/hints/$file.sh"; then
3189                                         . $src/hints/$file.sh
3190                                         $cat $src/hints/$file.sh >> UU/config.sh
3191                                 elif $test X$ans = X -o X$ans = Xnone ; then
3192                                         : nothing
3193                                 else
3194                                         echo "$file.sh does not exist -- ignored."
3195                                 fi
3196                         done
3197                 fi
3198         done
3199
3200         hint=recommended
3201         : Remember our hint file for later.
3202         if $test -f "$src/hints/$file.sh" ; then
3203                 hintfile="$file"
3204         else
3205                 hintfile=''
3206         fi
3207 fi
3208 cd UU
3209 ;;
3210 *)
3211         echo " "
3212         echo "Fetching default answers from $config_sh..." >&4
3213         tmp_n="$n"
3214         tmp_c="$c"
3215         cd ..
3216         cp $config_sh config.sh 2>/dev/null
3217         chmod +w config.sh
3218         . ./config.sh
3219         cd UU
3220         cp ../config.sh .
3221         n="$tmp_n"
3222         c="$tmp_c"
3223         hint=previous
3224         ;;
3225 esac
3226 test "$override" && . ./optdef.sh
3227
3228 : Restore computed paths
3229 for file in $loclist $trylist; do
3230         eval $file="\$_$file"
3231 done
3232
3233 cat << EOM
3234
3235 Configure uses the operating system name and version to set some defaults.
3236 The default value is probably right if the name rings a bell. Otherwise,
3237 since spelling matters for me, either accept the default or answer "none"
3238 to leave it blank.
3239
3240 EOM
3241 case "$osname" in
3242         ''|' ')
3243                 case "$hintfile" in
3244                 ''|' '|none) dflt=none ;;
3245                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3246                 esac
3247                 ;;
3248         *) dflt="$osname" ;;
3249 esac
3250 rp="Operating system name?"
3251 . ./myread
3252 case "$ans" in
3253 none)  osname='' ;;
3254 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3255 esac
3256 echo " "
3257 case "$osvers" in
3258         ''|' ')
3259                 case "$hintfile" in
3260                 ''|' '|none) dflt=none ;;
3261                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3262                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3263                         case "$dflt" in
3264                         ''|' ') dflt=none ;;
3265                         esac
3266                         ;;
3267                 esac
3268                 ;;
3269         *) dflt="$osvers" ;;
3270 esac
3271 rp="Operating system version?"
3272 . ./myread
3273 case "$ans" in
3274 none)  osvers='' ;;
3275 *) osvers="$ans" ;;
3276 esac
3277
3278
3279 . ./posthint.sh
3280
3281 : who configured the system
3282 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3283 cf_by=`(logname) 2>/dev/null`
3284 case "$cf_by" in
3285 "")
3286         cf_by=`(whoami) 2>/dev/null`
3287         case "$cf_by" in
3288         "") cf_by=unknown ;;
3289         esac ;;
3290 esac
3291
3292 : set up the script used to warn in case of inconsistency
3293 cat <<EOS >whoa
3294 $startsh
3295 EOS
3296 cat <<'EOSC' >>whoa
3297 dflt=y
3298 echo " "
3299 echo "*** WHOA THERE!!! ***" >&4
3300 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3301 rp="    Keep the $hint value?"
3302 . ./myread
3303 case "$ans" in
3304 y) td=$was; tu=$was;;
3305 esac
3306 EOSC
3307
3308 : function used to set $1 to $val
3309 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3310 case "$val$was" in
3311 $define$undef) . ./whoa; eval "$var=\$td";;
3312 $undef$define) . ./whoa; eval "$var=\$tu";;
3313 *) eval "$var=$val";;
3314 esac'
3315
3316 case "$usethreads" in
3317 $define|true|[yY]*)     dflt='y';;
3318 *) dflt='n';;
3319 esac
3320 cat <<EOM
3321
3322 Perl can be built to take advantage of threads on some systems.
3323 To do so, Configure can be run with -Dusethreads.
3324
3325 Note that threading is a highly experimental feature, and
3326 some known race conditions still remain.  If you choose to try
3327 it, be very sure to not actually deploy it for production
3328 purposes.  README.threads has more details, and is required
3329 reading if you enable threads.
3330
3331 If this doesn't make any sense to you, just accept the default '$dflt'.
3332 EOM
3333 rp='Build a threading Perl?'
3334 . ./myread
3335 case "$ans" in
3336 y|Y)    val="$define" ;;
3337 *)      val="$undef" ;;
3338 esac
3339 set usethreads
3340 eval $setvar
3341
3342 case "$usethreads" in
3343 $define)
3344         $cat <<EOM
3345
3346 As of 5.5.640, Perl has two different internal threading implementations,
3347 the 5.005 version (5005threads) and an interpreter-based version
3348 (ithreads) that has one interpreter per thread.  Both are very 
3349 experimental.  This arrangement exists to help developers work out
3350 which one is better.
3351
3352 If you're a casual user, you probably don't want interpreter-threads
3353 at this time.  But if you do, the 'threads' module allows their use,
3354 and the 'Thread' module offers an interface to both 5005threads and
3355 ithreads (whichever has been configured).
3356 EOM
3357         : Default to ithreads unless overridden on command line or with
3358         : old config.sh
3359         dflt='y'
3360         case "$use5005threads" in
3361                 $define|true|[yY]*) dflt='n';;
3362         esac
3363         case "$useithreads" in
3364                 $undef|false|[nN]*) dflt='n';;
3365         esac
3366         rp='Use interpreter-based ithreads?'
3367         . ./myread
3368         case "$ans" in
3369         y|Y)    val="$define" ;;
3370         *)      val="$undef" ;;
3371         esac
3372         set useithreads
3373         eval $setvar
3374         : Now set use5005threads to the opposite value.
3375         case "$useithreads" in
3376         $define) val="$undef" ;;
3377         *) val="$define" ;;
3378         esac
3379         set use5005threads
3380         eval $setvar
3381         ;;
3382 *)
3383         useithreads="$undef"
3384         use5005threads="$undef"
3385         ;;
3386 esac
3387
3388 case "$useithreads$use5005threads" in
3389 "$define$define")
3390         $cat >&4 <<EOM
3391
3392 You cannot have both the ithreads and the 5.005 threads enabled
3393 at the same time.  Disabling the 5.005 threads since they are
3394 much less stable than the ithreads.
3395
3396 EOM
3397         use5005threads="$undef"
3398         ;;
3399 esac
3400
3401 case "$d_oldpthreads" in
3402 '')     : Configure tests would be welcome here.  For now, assume undef.
3403         val="$undef" ;;
3404 *)      val="$d_oldpthreads" ;;
3405 esac
3406 set d_oldpthreads
3407 eval $setvar
3408
3409
3410 case "$usethreads" in
3411 "$define"|true|[yY]*)
3412 : Look for a hint-file generated 'call-back-unit'.  If the
3413 : user has specified that a threading perl is to be built,
3414 : we may need to set or change some other defaults.
3415         if $test -f usethreads.cbu; then
3416                 echo "Your platform has some specific hints for threaded builds, using them..."
3417                 . ./usethreads.cbu
3418         else
3419                 $cat <<EOM
3420 (Your platform doesn't have any specific hints for threaded builds.
3421  Assuming POSIX threads, then.)
3422 EOM
3423         fi
3424         ;;
3425 esac
3426
3427 cat <<EOM
3428
3429 Perl can be built so that multiple Perl interpreters can coexist
3430 within the same Perl executable.
3431 EOM
3432
3433 case "$useithreads" in
3434 $define)
3435         cat <<EOM
3436 This multiple interpreter support is required for interpreter-based threads.
3437 EOM
3438         val="$define"
3439         ;;
3440 *)      case "$usemultiplicity" in
3441         $define|true|[yY]*)     dflt='y';;
3442         *) dflt='n';;
3443         esac
3444         echo " "
3445         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3446         rp='Build Perl for multiplicity?'
3447         . ./myread
3448         case "$ans" in
3449         y|Y)    val="$define" ;;
3450         *)      val="$undef" ;;
3451         esac
3452         ;;
3453 esac
3454 set usemultiplicity
3455 eval $setvar
3456
3457
3458 case "$usemorebits" in
3459 "$define"|true|[yY]*)
3460         use64bitint="$define"
3461         uselongdouble="$define"
3462         usemorebits="$define"
3463         ;;
3464 *)      usemorebits="$undef"
3465         ;;
3466 esac
3467
3468 : make some quick guesses about what we are up against
3469 echo " "
3470 $echo $n "Hmm...  $c"
3471 echo exit 1 >bsd
3472 echo exit 1 >usg
3473 echo exit 1 >v7
3474 echo exit 1 >osf1
3475 echo exit 1 >eunice
3476 echo exit 1 >xenix
3477 echo exit 1 >venix
3478 echo exit 1 >os2
3479 d_bsd="$undef"
3480 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3481 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3482 then
3483         echo "Looks kind of like an OSF/1 system, but we'll see..."
3484         echo exit 0 >osf1
3485 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3486         xxx=`./loc addbib blurfl $pth`
3487         if $test -f $xxx; then
3488         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3489                 echo exit 0 >bsd
3490                 echo exit 0 >usg
3491         else
3492                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3493                         echo "Looks kind of like an extended USG system, but we'll see..."
3494                 else
3495                         echo "Looks kind of like a USG system, but we'll see..."
3496                 fi
3497                 echo exit 0 >usg
3498         fi
3499 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3500         echo "Looks kind of like a BSD system, but we'll see..."
3501         d_bsd="$define"
3502         echo exit 0 >bsd
3503 else
3504         echo "Looks kind of like a Version 7 system, but we'll see..."
3505         echo exit 0 >v7
3506 fi
3507 case "$eunicefix" in
3508 *unixtovms*)
3509         $cat <<'EOI'
3510 There is, however, a strange, musty smell in the air that reminds me of
3511 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3512 EOI
3513         echo exit 0 >eunice
3514         d_eunice="$define"
3515 : it so happens the Eunice I know will not run shell scripts in Unix format
3516         ;;
3517 *)
3518         echo " "
3519         echo "Congratulations.  You aren't running Eunice."
3520         d_eunice="$undef"
3521         ;;
3522 esac
3523 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3524 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3525 : semicolon as a patch separator
3526 case "$p_" in
3527 :) ;;
3528 *)
3529         $cat <<'EOI'
3530 I have the feeling something is not exactly right, however...don't tell me...
3531 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3532 (Or you may be running DOS with DJGPP.)
3533 EOI
3534         echo exit 0 >os2
3535         ;;
3536 esac
3537 if test -f /xenix; then
3538         echo "Actually, this looks more like a XENIX system..."
3539         echo exit 0 >xenix
3540         d_xenix="$define"
3541 else
3542         echo " "
3543         echo "It's not Xenix..."
3544         d_xenix="$undef"
3545 fi
3546 chmod +x xenix
3547 $eunicefix xenix
3548 if test -f /venix; then
3549         echo "Actually, this looks more like a VENIX system..."
3550         echo exit 0 >venix
3551 else
3552         echo " "
3553         if ./xenix; then
3554                 : null
3555         else
3556                 echo "Nor is it Venix..."
3557         fi
3558 fi
3559 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3560 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3561 $rm -f foo
3562
3563 case "$cc" in
3564 '') dflt=cc;;
3565 *) dflt="$cc";;
3566 esac
3567 rp="Use which C compiler?"
3568 . ./myread
3569 cc="$ans"
3570
3571 : See if they have not cc but they do have gcc
3572 . ./trygcc
3573 : Look for a hint-file generated 'call-back-unit'.  Now that the
3574 : user has specified the compiler, we may need to set or change some
3575 : other defaults.
3576 if $test -f cc.cbu; then
3577     . ./cc.cbu
3578 fi
3579 . ./checkcc
3580
3581 echo " "
3582 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3583 $cat >try.c <<EOM
3584 #include <stdio.h>
3585 int main() {
3586 #ifdef __GNUC__
3587 #ifdef __VERSION__
3588         printf("%s\n", __VERSION__);
3589 #else
3590         printf("%s\n", "1");
3591 #endif
3592 #endif
3593         exit(0);
3594 }
3595 EOM
3596 if $cc -o try $ccflags $ldflags try.c; then
3597         gccversion=`$run ./try`
3598         case "$gccversion" in
3599         '') echo "You are not using GNU cc." ;;
3600         *)  echo "You are using GNU cc $gccversion."
3601             ccname=gcc  
3602             ;;
3603         esac
3604 else
3605         echo " "
3606         echo "*** WHOA THERE!!! ***" >&4
3607         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3608         case "$knowitall" in
3609         '')
3610         echo "    You'd better start hunting for one and let me know about it." >&4
3611                 exit 1
3612                 ;;
3613         esac
3614 fi
3615 $rm -f try try.*
3616 case "$gccversion" in
3617 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3618 esac
3619 case "$gccversion" in
3620 '') gccosandvers='' ;;
3621 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3622    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3623    gccshortvers=''
3624    case "$gccosandvers" in
3625    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3626    $osname$osvers) ;; # looking good
3627    $osname*) cat <<EOM >&4
3628
3629 *** WHOA THERE!!! ***
3630
3631     Your gcc has not been compiled for the exact release of
3632     your operating system ($gccosandvers versus $osname$osvers).
3633
3634     In general it is a good idea to keep gcc synchronized with
3635     the operating system because otherwise serious problems
3636     may ensue when trying to compile software, like Perl.
3637
3638     I'm trying to be optimistic here, though, and will continue.
3639     If later during the configuration and build icky compilation
3640     problems appear (headerfile conflicts being the most common
3641     manifestation), I suggest reinstalling the gcc to match
3642     your operating system release.
3643
3644 EOM
3645       ;;
3646    *) gccosandvers='' ;; # failed to parse, better be silent
3647    esac
3648    ;;
3649 esac
3650 case "$ccname" in
3651 '') ccname="$cc" ;;
3652 esac
3653
3654
3655 : decide how portable to be.  Allow command line overrides.
3656 case "$d_portable" in
3657 "$undef") ;;
3658 *)      d_portable="$define" ;;
3659 esac
3660
3661 : set up shell script to do ~ expansion
3662 cat >filexp <<EOSS
3663 $startsh
3664 : expand filename
3665 case "\$1" in
3666  ~/*|~)
3667         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3668         ;;
3669  ~*)
3670         if $test -f /bin/csh; then
3671                 /bin/csh -f -c "glob \$1"
3672                 failed=\$?
3673                 echo ""
3674                 exit \$failed
3675         else
3676                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3677                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3678                 if $test ! -d "\$dir"; then
3679                         me=\`basename \$0\`
3680                         echo "\$me: can't locate home directory for: \$name" >&2
3681                         exit 1
3682                 fi
3683                 case "\$1" in
3684                 */*)
3685                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3686                         ;;
3687                 *)
3688                         echo \$dir
3689                         ;;
3690                 esac
3691         fi
3692         ;;
3693 *)
3694         echo \$1
3695         ;;
3696 esac
3697 EOSS
3698 chmod +x filexp
3699 $eunicefix filexp
3700
3701 : now set up to get a file name
3702 cat <<EOS >getfile
3703 $startsh
3704 EOS
3705 cat <<'EOSC' >>getfile
3706 tilde=''
3707 fullpath=''
3708 already=''
3709 skip=''
3710 none_ok=''
3711 exp_file=''
3712 nopath_ok=''
3713 orig_rp="$rp"
3714 orig_dflt="$dflt"
3715 case "$gfpth" in
3716 '') gfpth='.' ;;
3717 esac
3718
3719 case "$fn" in
3720 *\(*)
3721         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3722         fn=`echo $fn | sed 's/(.*)//'`
3723         ;;
3724 esac
3725
3726 case "$fn" in
3727 *:*)
3728         loc_file=`expr $fn : '.*:\(.*\)'`
3729         fn=`expr $fn : '\(.*\):.*'`
3730         ;;
3731 esac
3732
3733 case "$fn" in
3734 *~*) tilde=true;;
3735 esac
3736 case "$fn" in
3737 */*) fullpath=true;;
3738 esac
3739 case "$fn" in
3740 *+*) skip=true;;
3741 esac
3742 case "$fn" in
3743 *n*) none_ok=true;;
3744 esac
3745 case "$fn" in
3746 *e*) exp_file=true;;
3747 esac
3748 case "$fn" in
3749 *p*) nopath_ok=true;;
3750 esac
3751
3752 case "$fn" in
3753 *f*) type='File';;
3754 *d*) type='Directory';;
3755 *l*) type='Locate';;
3756 esac
3757
3758 what="$type"
3759 case "$what" in
3760 Locate) what='File';;
3761 esac
3762
3763 case "$exp_file" in
3764 '')
3765         case "$d_portable" in
3766         "$define") ;;
3767         *) exp_file=true;;
3768         esac
3769         ;;
3770 esac
3771
3772 cd ..
3773 while test "$type"; do
3774         redo=''
3775         rp="$orig_rp"
3776         dflt="$orig_dflt"
3777         case "$tilde" in
3778         true) rp="$rp (~name ok)";;
3779         esac
3780         . UU/myread
3781         if test -f UU/getfile.ok && \
3782                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3783         then
3784                 value="$ans"
3785                 ansexp="$ans"
3786                 break
3787         fi
3788         case "$ans" in
3789         none)
3790                 value=''
3791                 ansexp=''
3792                 case "$none_ok" in
3793                 true) type='';;
3794                 esac
3795                 ;;
3796         *)
3797                 case "$tilde" in
3798                 '') value="$ans"
3799                         ansexp="$ans";;
3800                 *)
3801                         value=`UU/filexp $ans`
3802                         case $? in
3803                         0)
3804                                 if test "$ans" != "$value"; then
3805                                         echo "(That expands to $value on this system.)"
3806                                 fi
3807                                 ;;
3808                         *) value="$ans";;
3809                         esac
3810                         ansexp="$value"
3811                         case "$exp_file" in
3812                         '') value="$ans";;
3813                         esac
3814                         ;;
3815                 esac
3816                 case "$fullpath" in
3817                 true)
3818                         case "$ansexp" in
3819                         /*) value="$ansexp" ;;
3820                         [a-zA-Z]:/*) value="$ansexp" ;;
3821                         *)
3822                                 redo=true
3823                                 case "$already" in
3824                                 true)
3825                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3826                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3827                                         ;;
3828                                 *)
3829                                 echo "Please give a full path name, starting with slash." >&4
3830                                         case "$tilde" in
3831                                         true)
3832                                 echo "Note that using ~name is ok provided it expands well." >&4
3833                                                 already=true
3834                                                 ;;
3835                                         esac
3836                                 esac
3837                                 ;;
3838                         esac
3839                         ;;
3840                 esac
3841                 case "$redo" in
3842                 '')
3843                         case "$type" in
3844                         File)
3845                                 for fp in $gfpth; do
3846                                         if test "X$fp" = X.; then
3847                                             pf="$ansexp"
3848                                         else    
3849                                             pf="$fp/$ansexp"
3850                                         fi
3851                                         if test -f "$pf"; then
3852                                                 type=''
3853                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3854                                         then
3855                                                 echo "($value is not a plain file, but that's ok.)"
3856                                                 type=''
3857                                         fi
3858                                         if test X"$type" = X; then
3859                                             value="$pf"
3860                                             break
3861                                         fi
3862                                 done
3863                                 ;;
3864                         Directory)
3865                                 for fp in $gfpth; do
3866                                         if test "X$fp" = X.; then
3867                                             dir="$ans"
3868                                             direxp="$ansexp"
3869                                         else    
3870                                             dir="$fp/$ansexp"
3871                                             direxp="$fp/$ansexp"
3872                                         fi
3873                                         if test -d "$direxp"; then
3874                                                 type=''
3875                                                 value="$dir"
3876                                                 break
3877                                         fi
3878                                 done
3879                                 ;;
3880                         Locate)
3881                                 if test -d "$ansexp"; then
3882                                         echo "(Looking for $loc_file in directory $value.)"
3883                                         value="$value/$loc_file"
3884                                         ansexp="$ansexp/$loc_file"
3885                                 fi
3886                                 if test -f "$ansexp"; then
3887                                         type=''
3888                                 fi
3889                                 case "$nopath_ok" in
3890                                 true)   case "$value" in
3891                                         */*) ;;
3892                                         *)      echo "Assuming $value will be in people's path."
3893                                                 type=''
3894                                                 ;;
3895                                         esac
3896                                         ;;
3897                                 esac
3898                                 ;;
3899                         esac
3900
3901                         case "$skip" in
3902                         true) type='';
3903                         esac
3904
3905                         case "$type" in
3906                         '') ;;
3907                         *)
3908                                 if test "$fastread" = yes; then
3909                                         dflt=y
3910                                 else
3911                                         dflt=n
3912                                 fi
3913                                 rp="$what $value doesn't exist.  Use that name anyway?"
3914                                 . UU/myread
3915                                 dflt=''
3916                                 case "$ans" in
3917                                 y*) type='';;
3918                                 *) echo " ";;
3919                                 esac
3920                                 ;;
3921                         esac
3922                         ;;
3923                 esac
3924                 ;;
3925         esac
3926 done
3927 cd UU
3928 ans="$value"
3929 rp="$orig_rp"
3930 dflt="$orig_dflt"
3931 rm -f getfile.ok
3932 test "X$gfpthkeep" != Xy && gfpth=""
3933 EOSC
3934
3935 : What should the include directory be ?
3936 echo " "
3937 $echo $n "Hmm...  $c"
3938 dflt='/usr/include'
3939 incpath=''
3940 mips_type=''
3941 if $test -f /bin/mips && /bin/mips; then
3942         echo "Looks like a MIPS system..."
3943         $cat >usr.c <<'EOCP'
3944 #ifdef SYSTYPE_BSD43
3945 /bsd43
3946 #endif
3947 EOCP
3948         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3949                 dflt='/bsd43/usr/include'
3950                 incpath='/bsd43'
3951                 mips_type='BSD 4.3'
3952         else
3953                 mips_type='System V'
3954         fi
3955         $rm -f usr.c usr.out
3956         echo "and you're compiling with the $mips_type compiler and libraries."
3957         xxx_prompt=y
3958         echo "exit 0" >mips
3959 else
3960         echo "Doesn't look like a MIPS system."
3961         xxx_prompt=n
3962         echo "exit 1" >mips
3963 fi
3964 chmod +x mips
3965 $eunicefix mips
3966 case "$usrinc" in
3967 '') ;;
3968 *) dflt="$usrinc";;
3969 esac
3970 case "$xxx_prompt" in
3971 y)      fn=d/
3972         echo " "
3973         rp='Where are the include files you want to use?'
3974         . ./getfile
3975         usrinc="$ans"
3976         ;;
3977 *)      usrinc="$dflt"
3978         ;;
3979 esac
3980
3981 : see how we invoke the C preprocessor
3982 echo " "
3983 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3984 cat <<'EOT' >testcpp.c
3985 #define ABC abc
3986 #define XYZ xyz
3987 ABC.XYZ
3988 EOT
3989 cd ..
3990 if test ! -f cppstdin; then
3991         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3992                 # AIX cc -E doesn't show the absolute headerfile
3993                 # locations but we'll cheat by using the -M flag.
3994                 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
3995         else
3996                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3997         fi
3998 else
3999         echo "Keeping your $hint cppstdin wrapper."
4000 fi
4001 chmod 755 cppstdin
4002 wrapper=`pwd`/cppstdin
4003 ok='false'
4004 cd UU
4005
4006 if $test "X$cppstdin" != "X" && \
4007         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4008         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4009 then
4010         echo "You used to use $cppstdin $cppminus so we'll use that again."
4011         case "$cpprun" in
4012         '') echo "But let's see if we can live without a wrapper..." ;;
4013         *)
4014                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4015                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4016                 then
4017                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4018                         ok='true'
4019                 else
4020                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4021                 fi
4022                 ;;
4023         esac
4024 else
4025         case "$cppstdin" in
4026         '') ;;
4027         *)
4028                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4029                 ;;
4030         esac
4031 fi
4032
4033 if $ok; then
4034         : nothing
4035 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4036         $cc -E <testcpp.c >testcpp.out 2>&1; \
4037         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4038         echo "Yup, it does."
4039         x_cpp="$cc -E"
4040         x_minus='';
4041 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4042         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4043         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4044         echo "Yup, it does."
4045         x_cpp="$cc -E"
4046         x_minus='-';
4047 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4048         $cc -P <testcpp.c >testcpp.out 2>&1; \
4049         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4050         echo "Yipee, that works!"
4051         x_cpp="$cc -P"
4052         x_minus='';
4053 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4054         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4055         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4056         echo "At long last!"
4057         x_cpp="$cc -P"
4058         x_minus='-';
4059 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4060         $cpp <testcpp.c >testcpp.out 2>&1; \
4061         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4062         echo "It works!"
4063         x_cpp="$cpp"
4064         x_minus='';
4065 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4066         $cpp - <testcpp.c >testcpp.out 2>&1; \
4067         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4068         echo "Hooray, it works!  I was beginning to wonder."
4069         x_cpp="$cpp"
4070         x_minus='-';
4071 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4072         $wrapper <testcpp.c >testcpp.out 2>&1; \
4073         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4074         x_cpp="$wrapper"
4075         x_minus=''
4076         echo "Eureka!"
4077 else
4078         dflt=''
4079         rp="No dice.  I can't find a C preprocessor.  Name one:"
4080         . ./myread
4081         x_cpp="$ans"
4082         x_minus=''
4083         $x_cpp <testcpp.c >testcpp.out 2>&1
4084         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4085                 echo "OK, that will do." >&4
4086         else
4087 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4088                 exit 1
4089         fi
4090 fi
4091
4092 case "$ok" in
4093 false)
4094         cppstdin="$x_cpp"
4095         cppminus="$x_minus"
4096         cpprun="$x_cpp"
4097         cpplast="$x_minus"
4098         set X $x_cpp
4099         shift
4100         case "$1" in
4101         "$cpp")
4102                 echo "Perhaps can we force $cc -E using a wrapper..."
4103                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4104                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4105                 then
4106                         echo "Yup, we can."
4107                         cppstdin="$wrapper"
4108                         cppminus='';
4109                 else
4110                         echo "Nope, we'll have to live without it..."
4111                 fi
4112                 ;;
4113         esac
4114         case "$cpprun" in
4115         "$wrapper")
4116                 cpprun=''
4117                 cpplast=''
4118                 ;;
4119         esac
4120         ;;
4121 esac
4122
4123 case "$cppstdin" in
4124 "$wrapper"|'cppstdin') ;;
4125 *) $rm -f $wrapper;;
4126 esac
4127 $rm -f testcpp.c testcpp.out
4128
4129 : Set private lib path
4130 case "$plibpth" in
4131 '') if ./mips; then
4132                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4133         fi;;
4134 esac
4135 case "$libpth" in
4136 ' ') dlist='';;
4137 '') dlist="$loclibpth $plibpth $glibpth";;
4138 *) dlist="$libpth";;
4139 esac
4140
4141 : Now check and see which directories actually exist, avoiding duplicates
4142 libpth=''
4143 for xxx in $dlist
4144 do
4145     if $test -d $xxx; then
4146                 case " $libpth " in
4147                 *" $xxx "*) ;;
4148                 *) libpth="$libpth $xxx";;
4149                 esac
4150     fi
4151 done
4152 $cat <<'EOM'
4153
4154 Some systems have incompatible or broken versions of libraries.  Among
4155 the directories listed in the question below, please remove any you
4156 know not to be holding relevant libraries, and add any that are needed.
4157 Say "none" for none.
4158
4159 EOM
4160 case "$libpth" in
4161 '') dflt='none';;
4162 *)
4163         set X $libpth
4164         shift
4165         dflt=${1+"$@"}
4166         ;;
4167 esac
4168 rp="Directories to use for library searches?"
4169 . ./myread
4170 case "$ans" in
4171 none) libpth=' ';;
4172 *) libpth="$ans";;
4173 esac
4174
4175 : compute shared library extension
4176 case "$so" in
4177 '')
4178         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4179                 dflt='sl'
4180         else
4181                 dflt='so'
4182         fi
4183         ;;
4184 *) dflt="$so";;
4185 esac
4186 $cat <<EOM
4187
4188 On some systems, shared libraries may be available.  Answer 'none' if
4189 you want to suppress searching of shared libraries for the remainder
4190 of this configuration.
4191
4192 EOM
4193 rp='What is the file extension used for shared libraries?'
4194 . ./myread
4195 so="$ans"
4196
4197 : Define several unixisms.
4198 : Hints files or command line option can be used to override them.
4199 : The convoluted testing is in case hints files set either the old
4200 : or the new name.
4201 case "$_exe" in
4202 '')     case "$exe_ext" in
4203         '')     ;;
4204         *)      _exe="$exe_ext" ;;
4205         esac
4206         ;;
4207 esac
4208 case "$_a" in
4209 '')     case "$lib_ext" in
4210     '') _a='.a';;
4211         *)      _a="$lib_ext" ;;
4212         esac
4213         ;;
4214 esac
4215 case "$_o" in
4216 '') case "$obj_ext" in
4217         '')     _o='.o';;
4218         *)      _o="$obj_ext";;
4219         esac
4220         ;;
4221 esac
4222 case "$p_" in
4223 '') case "$path_sep" in
4224         '')     p_=':';;
4225         *)      p_="$path_sep";;
4226         esac
4227         ;;
4228 esac
4229 exe_ext=$_exe
4230 lib_ext=$_a
4231 obj_ext=$_o
4232 path_sep=$p_
4233
4234 : Which makefile gets called first.  This is used by make depend.
4235 case "$firstmakefile" in
4236 '') firstmakefile='makefile';;
4237 esac
4238
4239 case "$usesocks" in
4240 $define|true|[yY]*)     dflt='y';;
4241 *) dflt='n';;
4242 esac
4243 cat <<EOM
4244
4245 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4246 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4247 to use the PerlIO abstraction layer, this will be implicitly selected.
4248
4249 If this doesn't make any sense to you, just accept the default '$dflt'.
4250 EOM
4251 rp='Build Perl for SOCKS?'
4252 . ./myread
4253 case "$ans" in
4254 y|Y)    val="$define" ;;     
4255 *)      val="$undef" ;;
4256 esac
4257 set usesocks
4258 eval $setvar
4259
4260 case "$usesocks" in
4261 $define|true|[yY]*) useperlio="$define";;
4262 esac
4263
4264 : Looking for optional libraries
4265 echo " "
4266 echo "Checking for optional libraries..." >&4
4267 case "$libs" in
4268 ' '|'') dflt='';;
4269 *) dflt="$libs";;
4270 esac
4271 case "$libswanted" in
4272 '') libswanted='c_s';;
4273 esac
4274 case "$usesocks" in
4275 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4276 esac
4277 libsfound=''
4278 libsfiles=''
4279 libsdirs=''
4280 libspath=''
4281 for thisdir in $libpth $xlibpth; do
4282   test -d $thisdir && libspath="$libspath $thisdir"
4283 done
4284 for thislib in $libswanted; do
4285         for thisdir in $libspath; do
4286             xxx=''
4287             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4288                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
4289                 $test -f "$xxx" && eval $libscheck
4290                 $test -f "$xxx" && libstyle=shared
4291             fi
4292             if test ! -f "$xxx"; then
4293                 xxx=$thisdir/lib$thislib.$so
4294                 $test -f "$xxx" && eval $libscheck
4295                 $test -f "$xxx" && libstyle=shared
4296             fi  
4297             if test ! -f "$xxx"; then
4298                 xxx=$thisdir/lib$thislib$_a
4299                 $test -f "$xxx" && eval $libscheck
4300                 $test -f "$xxx" && libstyle=static
4301             fi
4302             if test ! -f "$xxx"; then
4303                 xxx=$thisdir/$thislib$_a
4304                 $test -f "$xxx" && eval $libscheck
4305                 $test -f "$xxx" && libstyle=static
4306             fi
4307             if test ! -f "$xxx"; then
4308                 xxx=$thisdir/lib${thislib}_s$_a
4309                 $test -f "$xxx" && eval $libscheck
4310                 $test -f "$xxx" && libstyle=static
4311                 $test -f "$xxx" && thislib=${thislib}_s
4312             fi
4313             if test ! -f "$xxx"; then
4314                 xxx=$thisdir/Slib$thislib$_a
4315                 $test -f "$xxx" && eval $libscheck
4316                 $test -f "$xxx" && libstyle=static
4317             fi
4318             if $test -f "$xxx"; then
4319                 case "$libstyle" in
4320                 shared) echo "Found -l$thislib (shared)." ;;
4321                 static) echo "Found -l$thislib." ;;
4322                 *)      echo "Found -l$thislib ($libstyle)." ;;
4323                 esac
4324                 case " $dflt " in
4325                 *"-l$thislib "*);;
4326                 *) dflt="$dflt -l$thislib"
4327                    libsfound="$libsfound $xxx"
4328                    yyy=`basename $xxx`
4329                    libsfiles="$libsfiles $yyy"
4330                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4331                    case " $libsdirs " in
4332                    *" $yyy "*) ;;
4333                    *) libsdirs="$libsdirs $yyy" ;;
4334                    esac
4335                    ;;
4336                 esac
4337                 break
4338             fi  
4339         done
4340         if $test ! -f "$xxx"; then
4341             echo "No -l$thislib."
4342         fi
4343 done
4344 set X $dflt
4345 shift
4346 dflt="$*"
4347 case "$libs" in
4348 '') dflt="$dflt";;
4349 *) dflt="$libs";;
4350 esac
4351 case "$dflt" in
4352 ' '|'') dflt='none';;
4353 esac
4354
4355 $cat <<EOM
4356
4357 In order to compile $package on your machine, a number of libraries
4358 are usually needed.  Include any other special libraries here as well.
4359 Say "none" for none.  The default list is almost always right.
4360 EOM
4361
4362 echo " "
4363 rp="What libraries to use?"
4364 . ./myread
4365 case "$ans" in
4366 none) libs=' ';;
4367 *) libs="$ans";;
4368 esac
4369
4370 : determine optimization, if desired, or use for debug flag also
4371 case "$optimize" in
4372 ' '|$undef) dflt='none';;
4373 '') dflt='-O';;
4374 *) dflt="$optimize";;
4375 esac
4376 $cat <<EOH
4377
4378 By default, $package compiles with the -O flag to use the optimizer.
4379 Alternately, you might want to use the symbolic debugger, which uses
4380 the -g flag (on traditional Unix systems).  Either flag can be
4381 specified here.  To use neither flag, specify the word "none".
4382
4383 EOH
4384 rp="What optimizer/debugger flag should be used?"
4385 . ./myread
4386 optimize="$ans"
4387 case "$optimize" in
4388 'none') optimize=" ";;
4389 esac
4390
4391 dflt=''
4392 : We will not override a previous value, but we might want to
4393 : augment a hint file
4394 case "$hint" in
4395 default|recommended)
4396         case "$gccversion" in
4397         1*) dflt='-fpcc-struct-return' ;;
4398         esac
4399         case "$optimize" in
4400         *-g*) dflt="$dflt -DDEBUGGING";;
4401         esac
4402         case "$gccversion" in
4403         2*) if test -d /etc/conf/kconfig.d &&
4404                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4405                 then
4406                         dflt="$dflt -posix"
4407                 fi
4408                 ;;
4409         esac
4410         case "$gccversion" in
4411         1*) ;;
4412         2.[0-8]*) ;;
4413         ?*)     echo " "
4414                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4415                 echo 'int main(void) { return 0; }' > gcctest.c
4416                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4417                         echo "Yes, it does." 2>&1
4418                         case "$ccflags" in
4419                         *strict-aliasing*) 
4420                                 echo "Leaving current flags $ccflags alone." 2>&1
4421                                 ;;
4422                         *) dflt="$dflt -fno-strict-aliasing" ;;
4423                         esac
4424                 else
4425                         echo "Nope, it doesn't, but that's ok." 2>&1
4426                 fi
4427                 ;;
4428         esac
4429         ;;
4430 esac
4431
4432 case "$mips_type" in
4433 *BSD*|'') inclwanted="$locincpth $usrinc";;
4434 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4435 esac
4436 for thisincl in $inclwanted; do
4437         if $test -d $thisincl; then
4438                 if $test x$thisincl != x$usrinc; then
4439                         case "$dflt" in
4440                         *" -I$thisincl "*);;
4441                         *) dflt="$dflt -I$thisincl ";;
4442                         esac
4443                 fi
4444         fi
4445 done
4446
4447 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4448         xxx=true;
4449 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4450         xxx=true;
4451 else
4452         xxx=false;
4453 fi;
4454 if $xxx; then
4455         case "$dflt" in
4456         *$2*);;
4457         *) dflt="$dflt -D$2";;
4458         esac;
4459 fi'
4460
4461 set signal.h LANGUAGE_C; eval $inctest
4462
4463 case "$usesocks" in
4464 $define)
4465         ccflags="$ccflags -DSOCKS"
4466         ;;
4467 esac
4468
4469 case "$hint" in
4470 default|recommended) dflt="$ccflags $dflt" ;;
4471 *) dflt="$ccflags";;
4472 esac
4473
4474 case "$dflt" in
4475 ''|' ') dflt=none;;
4476 esac
4477
4478 $cat <<EOH
4479
4480 Your C compiler may want other flags.  For this question you should include
4481 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4482 but you should NOT include libraries or ld flags like -lwhatever.  If you
4483 want $package to honor its debug switch, you should include -DDEBUGGING here.
4484 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4485
4486 To use no flags, specify the word "none".
4487
4488 EOH
4489 set X $dflt
4490 shift
4491 dflt=${1+"$@"}
4492 rp="Any additional cc flags?"
4493 . ./myread
4494 case "$ans" in
4495 none) ccflags='';;
4496 *) ccflags="$ans";;
4497 esac
4498
4499 : the following weeds options from ccflags that are of no interest to cpp
4500 case "$cppflags" in
4501 '') cppflags="$ccflags" ;;
4502 *)  cppflags="$cppflags $ccflags" ;;
4503 esac
4504 case "$gccversion" in
4505 1*) cppflags="$cppflags -D__GNUC__"
4506 esac
4507 case "$mips_type" in
4508 '');;
4509 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4510 esac
4511 case "$cppflags" in
4512 '');;
4513 *)
4514         echo " "
4515         echo "Let me guess what the preprocessor flags are..." >&4
4516         set X $cppflags
4517         shift
4518         cppflags=''
4519         $cat >cpp.c <<'EOM'
4520 #define BLURFL foo
4521
4522 BLURFL xx LFRULB
4523 EOM
4524         previous=''
4525         for flag in $*
4526         do
4527                 case "$flag" in
4528                 -*) ftry="$flag";;
4529                 *) ftry="$previous $flag";;
4530                 esac
4531                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4532                         >cpp1.out 2>/dev/null && \
4533                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4534                         >cpp2.out 2>/dev/null && \
4535                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4536                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4537                 then
4538                         cppflags="$cppflags $ftry"
4539                         previous=''
4540                 else
4541                         previous="$flag"
4542                 fi
4543         done
4544         set X $cppflags
4545         shift
4546         cppflags=${1+"$@"}
4547         case "$cppflags" in
4548         *-*)  echo "They appear to be: $cppflags";;
4549         esac
4550         $rm -f cpp.c cpp?.out
4551         ;;
4552 esac
4553
4554 : flags used in final linking phase
4555 case "$ldflags" in
4556 '') if ./venix; then
4557                 dflt='-i -z'
4558         else
4559                 dflt=''
4560         fi
4561         case "$ccflags" in
4562         *-posix*) dflt="$dflt -posix" ;;
4563         esac
4564         ;;
4565 *) dflt="$ldflags";;
4566 esac
4567
4568 : Try to guess additional flags to pick up local libraries.
4569 for thislibdir in $libpth; do
4570         case " $loclibpth " in
4571         *" $thislibdir "*)
4572                 case "$dflt " in 
4573                 *"-L$thislibdir "*) ;;
4574                 *)  dflt="$dflt -L$thislibdir" ;;
4575                 esac
4576                 ;;
4577         esac
4578 done
4579
4580 case "$dflt" in
4581 '') dflt='none' ;;
4582 esac
4583
4584 $cat <<EOH
4585
4586 Your C linker may need flags.  For this question you should
4587 include -L/whatever and any other flags used by the C linker, but you
4588 should NOT include libraries like -lwhatever.
4589
4590 Make sure you include the appropriate -L/path flags if your C linker
4591 does not normally search all of the directories you specified above,
4592 namely
4593         $libpth
4594 To use no flags, specify the word "none".
4595
4596 EOH
4597
4598 rp="Any additional ld flags (NOT including libraries)?"
4599 . ./myread
4600 case "$ans" in
4601 none) ldflags='';;
4602 *) ldflags="$ans";;
4603 esac
4604 rmlist="$rmlist pdp11"
4605
4606 : coherency check
4607 echo " "
4608 echo "Checking your choice of C compiler and flags for coherency..." >&4
4609 $cat > try.c <<'EOF'
4610 #include <stdio.h>
4611 int main() { printf("Ok\n"); exit(0); }
4612 EOF
4613 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4614 shift
4615 $cat >try.msg <<'EOM'
4616 I've tried to compile and run the following simple program:
4617
4618 EOM
4619 $cat try.c >> try.msg
4620
4621 $cat >> try.msg <<EOM
4622
4623 I used the command:
4624
4625         $*
4626         $run ./try
4627
4628 and I got the following output:
4629
4630 EOM
4631 dflt=y
4632 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4633         if $sh -c "$run ./try" >>try.msg 2>&1; then
4634                 xxx=`$run ./try`
4635                 case "$xxx" in
4636                 "Ok") dflt=n ;;
4637                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4638                         case " $libs " in
4639                         *" -lsfio "*)
4640                                 cat >> try.msg <<'EOQS'
4641 If $libs contains -lsfio, and sfio is mis-configured, then it
4642 sometimes (apparently) runs and exits with a 0 status, but with no
4643 output!  It may have to do with sfio's use of _exit vs. exit.
4644
4645 EOQS
4646                                 rp="You have a big problem.  Shall I abort Configure"
4647                                 dflt=y
4648                                 ;;
4649                         esac
4650                         ;;
4651                 esac
4652         else
4653                 echo "The program compiled OK, but exited with status $?." >>try.msg
4654                 rp="You have a problem.  Shall I abort Configure"
4655                 dflt=y
4656         fi
4657 else
4658         echo "I can't compile the test program." >>try.msg
4659         rp="You have a BIG problem.  Shall I abort Configure"
4660         dflt=y
4661 fi
4662 case "$dflt" in
4663 y)
4664         $cat try.msg >&4
4665         case "$knowitall" in
4666         '')
4667                 echo "(The supplied flags or libraries might be incorrect.)"
4668                 ;;
4669         *) dflt=n;;
4670         esac
4671         echo " "
4672         . ./myread
4673         case "$ans" in
4674         n*|N*) ;;
4675         *)      echo "Ok.  Stopping Configure." >&4
4676                 exit 1
4677                 ;;
4678         esac
4679         ;;
4680 n) echo "OK, that should do.";;
4681 esac
4682 $rm -f try try.* core
4683
4684 : define a shorthand compile call
4685 compile='
4686 mc_file=$1;
4687 shift;
4688 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4689 : define a shorthand compile call for compilations that should be ok.
4690 compile_ok='
4691 mc_file=$1;
4692 shift;
4693 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4694
4695 : check for lengths of integral types
4696 echo " "
4697 case "$intsize" in
4698 '')
4699         echo "Checking to see how big your integers are..." >&4
4700         $cat >try.c <<'EOCP'
4701 #include <stdio.h>
4702 int main()
4703 {
4704         printf("intsize=%d;\n", (int)sizeof(int));
4705         printf("longsize=%d;\n", (int)sizeof(long));
4706         printf("shortsize=%d;\n", (int)sizeof(short));
4707         exit(0);
4708 }
4709 EOCP
4710         set try
4711         if eval $compile_ok && $run ./try > /dev/null; then
4712                 eval `$run ./try`
4713                 echo "Your integers are $intsize bytes long."
4714                 echo "Your long integers are $longsize bytes long."
4715                 echo "Your short integers are $shortsize bytes long."
4716         else
4717                 $cat >&4 <<EOM
4718 !
4719 Help! I can't compile and run the intsize test program: please enlighten me!
4720 (This is probably a misconfiguration in your system or libraries, and
4721 you really ought to fix it.  Still, I'll try anyway.)
4722 !
4723 EOM
4724                 dflt=4
4725                 rp="What is the size of an integer (in bytes)?"
4726                 . ./myread
4727                 intsize="$ans"
4728                 dflt=$intsize
4729                 rp="What is the size of a long integer (in bytes)?"
4730                 . ./myread
4731                 longsize="$ans"
4732                 dflt=2
4733                 rp="What is the size of a short integer (in bytes)?"
4734                 . ./myread
4735                 shortsize="$ans"
4736         fi
4737         ;;
4738 esac
4739 $rm -f try try.*
4740
4741 : check for void type
4742 echo " "
4743 echo "Checking to see how well your C compiler groks the void type..." >&4
4744 case "$voidflags" in
4745 '')
4746         $cat >try.c <<'EOCP'
4747 #if TRY & 1
4748 void sub() {
4749 #else
4750 sub() {
4751 #endif
4752         extern void moo();      /* function returning void */
4753         void (*goo)();          /* ptr to func returning void */
4754 #if TRY & 8
4755         void *hue;              /* generic ptr */
4756 #endif
4757 #if TRY & 2
4758         void (*foo[10])();
4759 #endif
4760
4761 #if TRY & 4
4762         if(goo == moo) {
4763                 exit(0);
4764         }
4765 #endif
4766         exit(0);
4767 }
4768 int main() { sub(); }
4769 EOCP
4770         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4771                 voidflags=$defvoidused
4772         echo "Good.  It appears to support void to the level $package wants.">&4
4773                 if $contains warning .out >/dev/null 2>&1; then
4774                         echo "However, you might get some warnings that look like this:"
4775                         $cat .out
4776                 fi
4777         else
4778 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4779                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4780                         echo "It supports 1..."
4781                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4782                                 echo "It also supports 2..."
4783                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4784                                         voidflags=7
4785                                         echo "And it supports 4 but not 8 definitely."
4786                                 else
4787                                         echo "It doesn't support 4..."
4788                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4789                                                 voidflags=11
4790                                                 echo "But it supports 8."
4791                                         else
4792                                                 voidflags=3
4793                                                 echo "Neither does it support 8."
4794                                         fi
4795                                 fi
4796                         else
4797                                 echo "It does not support 2..."
4798                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4799                                         voidflags=13
4800                                         echo "But it supports 4 and 8."
4801                                 else
4802                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4803                                                 voidflags=5
4804                                                 echo "And it supports 4 but has not heard about 8."
4805                                         else
4806                                                 echo "However it supports 8 but not 4."
4807                                         fi
4808                                 fi
4809                         fi
4810                 else
4811                         echo "There is no support at all for void."
4812                         voidflags=0
4813                 fi
4814         fi
4815 esac
4816 case "$voidflags" in
4817 "$defvoidused") ;;
4818 *)      $cat >&4 <<'EOM'
4819   Support flag bits are:
4820     1: basic void declarations.
4821     2: arrays of pointers to functions returning void.
4822     4: operations between pointers to and addresses of void functions.
4823     8: generic void pointers.
4824 EOM
4825         dflt="$voidflags";
4826         rp="Your void support flags add up to what?"
4827         . ./myread
4828         voidflags="$ans"
4829         ;;
4830 esac
4831 $rm -f try.* .out
4832
4833 : check for length of pointer
4834 echo " "
4835 case "$ptrsize" in
4836 '')
4837         echo "Checking to see how big your pointers are..." >&4
4838         if test "$voidflags" -gt 7; then
4839                 echo '#define VOID_PTR char *' > try.c
4840         else
4841                 echo '#define VOID_PTR void *' > try.c
4842         fi
4843         $cat >>try.c <<'EOCP'
4844 #include <stdio.h>
4845 int main()
4846 {
4847     printf("%d\n", (int)sizeof(VOID_PTR));
4848     exit(0);
4849 }
4850 EOCP
4851         set try
4852         if eval $compile_ok; then
4853                 ptrsize=`$run ./try`
4854                 echo "Your pointers are $ptrsize bytes long."
4855         else
4856                 dflt='4'
4857                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4858                 rp="What is the size of a pointer (in bytes)?"
4859                 . ./myread
4860                 ptrsize="$ans"
4861         fi
4862         ;;
4863 esac
4864 $rm -f try.c try
4865
4866 : check for long long
4867 echo " "
4868 echo "Checking to see if you have long long..." >&4
4869 echo 'int main() { long long x = 7; return 0; }' > try.c
4870 set try
4871 if eval $compile; then
4872         val="$define"
4873         echo "You have long long."
4874 else
4875         val="$undef"
4876         echo "You do not have long long."
4877 fi
4878 $rm try.*
4879 set d_longlong
4880 eval $setvar
4881
4882 : check for length of long long
4883 case "${d_longlong}${longlongsize}" in
4884 $define)
4885         echo " "
4886         echo "Checking to see how big your long longs are..." >&4
4887         $cat >try.c <<'EOCP'
4888 #include <stdio.h>
4889 int main()
4890 {
4891     printf("%d\n", (int)sizeof(long long));
4892     return(0);
4893 }
4894 EOCP
4895         set try
4896         if eval $compile_ok; then
4897                 longlongsize=`$run ./try`
4898                 echo "Your long longs are $longlongsize bytes long."
4899         else
4900                 dflt='8'
4901                 echo " "
4902                 echo "(I can't seem to compile the test program.  Guessing...)"
4903                 rp="What is the size of a long long (in bytes)?"
4904                 . ./myread
4905                 longlongsize="$ans"
4906         fi
4907         if $test "X$longsize" = "X$longlongsize"; then
4908                 echo "(That isn't any different from an ordinary long.)"
4909         fi      
4910         ;;
4911 esac
4912 $rm -f try.* try
4913
4914 : determine filename position in cpp output
4915 echo " "
4916 echo "Computing filename position in cpp output for #include directives..." >&4
4917 case "$osname" in
4918 vos) testaccess=-e ;;
4919 *)   testaccess=-r ;;
4920 esac
4921 echo '#include <stdio.h>' > foo.c
4922 $cat >fieldn <<EOF
4923 $startsh
4924 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4925 $grep '^[       ]*#.*stdio\.h' | \
4926 while read cline; do
4927         pos=1
4928         set \$cline
4929         while $test \$# -gt 0; do
4930                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4931                         echo "\$pos"
4932                         exit 0
4933                 fi
4934                 shift
4935                 pos=\`expr \$pos + 1\`
4936         done
4937 done
4938 EOF
4939 chmod +x fieldn
4940 fieldn=`./fieldn`
4941 $rm -f foo.c fieldn
4942 case $fieldn in
4943 '') pos='???';;
4944 1) pos=first;;
4945 2) pos=second;;
4946 3) pos=third;;
4947 *) pos="${fieldn}th";;
4948 esac
4949 echo "Your cpp writes the filename in the $pos field of the line."
4950
4951 case "$osname" in
4952 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4953 *)   cppfilter='' ;;
4954 esac
4955 : locate header file
4956 $cat >findhdr <<EOF
4957 $startsh
4958 wanted=\$1
4959 name=''
4960 for usrincdir in $usrinc
4961 do
4962         if test -f \$usrincdir/\$wanted; then
4963                 echo "\$usrincdir/\$wanted"
4964                 exit 0
4965         fi
4966 done
4967 awkprg='{ print \$$fieldn }'
4968 echo "#include <\$wanted>" > foo\$\$.c
4969 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4970 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4971 while read cline; do
4972         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4973         case "\$name" in
4974         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4975         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4976         *) exit 2;;
4977         esac;
4978 done;
4979 #
4980 # status = 0: grep returned 0 lines, case statement not executed
4981 # status = 1: headerfile found
4982 # status = 2: while loop executed, no headerfile found
4983 #
4984 status=\$?
4985 $rm -f foo\$\$.c;
4986 if test \$status -eq 1; then
4987         exit 0;
4988 fi
4989 exit 1
4990 EOF
4991 chmod +x findhdr
4992
4993 : define an alternate in-header-list? function
4994 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4995 cont=true; xxf="echo \"<\$1> found.\" >&4";
4996 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4997 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4998 esac;
4999 case $# in 4) instead=instead;; *) instead="at last";; esac;
5000 while $test "$cont"; do
5001         xxx=`./findhdr $1`
5002         var=$2; eval "was=\$$2";
5003         if $test "$xxx" && $test -r "$xxx";
5004         then eval $xxf;
5005         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5006                 cont="";
5007         else eval $xxnf;
5008         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5009         set $yyy; shift; shift; yyy=$@;
5010         case $# in 0) cont="";;
5011         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5012                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5013         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5014                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5015         esac;
5016 done;
5017 while $test "$yyy";
5018 do set $yyy; var=$2; eval "was=\$$2";
5019         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5020         set $yyy; shift; shift; yyy=$@;
5021 done'
5022
5023 : see if inttypes.h is available
5024 : we want a real compile instead of Inhdr because some systems
5025 : have an inttypes.h which includes non-existent headers
5026 echo " "
5027 $cat >try.c <<EOCP
5028 #include <inttypes.h>
5029 int main() {
5030         static int32_t foo32 = 0x12345678;
5031 }
5032 EOCP
5033 set try
5034 if eval $compile; then
5035         echo "<inttypes.h> found." >&4
5036         val="$define"
5037 else
5038         echo "<inttypes.h> NOT found." >&4
5039         val="$undef"
5040 fi
5041 $rm -f try.c try
5042 set i_inttypes
5043 eval $setvar
5044
5045 : check for int64_t
5046 echo " "
5047 echo "Checking to see if you have int64_t..." >&4
5048 $cat >try.c <<EOCP
5049 #include <sys/types.h>
5050 #$i_inttypes I_INTTYPES
5051 #ifdef I_INTTYPES
5052 #include <inttypes.h>
5053 #endif
5054 int main() { int64_t x = 7; }
5055 EOCP
5056 set try
5057 if eval $compile; then
5058         val="$define"
5059         echo "You have int64_t."
5060 else
5061         val="$undef"
5062         echo "You do not have int64_t."
5063 fi
5064 $rm -f try try.*
5065 set d_int64_t
5066 eval $setvar
5067
5068
5069 echo " "
5070 echo "Checking which 64-bit integer type we could use..." >&4
5071
5072 case "$intsize" in
5073 8) val=int
5074    set quadtype
5075    eval $setvar
5076    val='"unsigned int"'
5077    set uquadtype
5078    eval $setvar
5079    quadkind=1
5080    ;;
5081 *) case "$longsize" in
5082    8) val=long
5083       set quadtype
5084       eval $setvar
5085       val='"unsigned long"'
5086       set uquadtype
5087       eval $setvar
5088       quadkind=2
5089       ;;
5090    *) case "$d_longlong:$longlongsize" in
5091       define:8)
5092         val='"long long"'
5093         set quadtype
5094         eval $setvar
5095         val='"unsigned long long"'
5096         set uquadtype
5097         eval $setvar
5098         quadkind=3
5099         ;;
5100       *) case "$d_int64_t" in
5101          define)
5102            val=int64_t
5103            set quadtype
5104            eval $setvar
5105            val=uint64_t
5106            set uquadtype
5107            eval $setvar
5108            quadkind=4
5109            ;;
5110          esac
5111          ;;
5112       esac
5113       ;;
5114    esac
5115    ;;
5116 esac
5117
5118 case "$quadtype" in
5119 '')     echo "Alas, no 64-bit integer types in sight." >&4
5120         d_quad="$undef"
5121         ;;
5122 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5123         d_quad="$define"
5124         ;;
5125 esac
5126
5127
5128 case "$uselonglong" in
5129 "$define"|true|[yY]*)
5130         cat <<EOM >&4
5131
5132 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5133 EOM
5134         use64bitint="$define"
5135         ;;
5136 esac                          
5137 case "$use64bits" in
5138 "$define"|true|[yY]*)
5139         cat <<EOM >&4
5140
5141 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5142 EOM
5143         use64bitint="$define"
5144         ;;
5145 esac                          
5146 case "$use64bitints" in
5147 "$define"|true|[yY]*)
5148         cat <<EOM >&4
5149
5150 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5151 EOM
5152         use64bitint="$define"
5153         ;;
5154 esac                          
5155 case "$use64bitsint" in
5156 "$define"|true|[yY]*)
5157         cat <<EOM >&4
5158
5159 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5160 EOM
5161         use64bitint="$define"
5162         ;;
5163 esac                          
5164 case "$uselonglongs" in
5165 "$define"|true|[yY]*)
5166         cat <<EOM >&4
5167
5168 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5169 EOM
5170         use64bitint="$define"
5171         ;;
5172 esac                          
5173 case "$use64bitsall" in
5174 "$define"|true|[yY]*)
5175         cat <<EOM >&4
5176
5177 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5178 EOM
5179         use64bitall="$define"
5180         ;;
5181 esac                          
5182
5183 case "$ccflags" in
5184 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5185 esac
5186 case "$use64bitall" in
5187 "$define"|true|[yY]*) use64bitint="$define" ;;
5188 esac
5189
5190 case "$longsize" in
5191 8) cat <<EOM
5192
5193 You have natively 64-bit long integers.
5194 EOM
5195    val="$define"
5196    ;;
5197 *) case "$use64bitint" in
5198    "$define"|true|[yY]*) dflt='y';;
5199    *) dflt='n';;
5200    esac
5201    case "$d_quad" in
5202    "$define") ;;
5203    *) dflt='n' ;;
5204    esac
5205    cat <<EOM
5206
5207 Perl can be built to take advantage of 64-bit integer types
5208 on some systems.  To do so, Configure can be run with -Duse64bitint.
5209 Choosing this option will most probably introduce binary incompatibilities.
5210
5211 If this doesn't make any sense to you, just accept the default '$dflt'.
5212 (The default has been chosen based on your configuration.)
5213 EOM
5214    rp='Try to use 64-bit integers, if available?'
5215    . ./myread
5216    case "$ans" in
5217    [yY]*) val="$define" ;;
5218    *)     val="$undef"  ;;
5219    esac
5220    ;;
5221 esac
5222 set use64bitint
5223 eval $setvar
5224
5225 case "$use64bitall" in
5226 "$define"|true|[yY]*) dflt='y' ;;
5227 *) case "$longsize" in
5228    8) dflt='y' ;;
5229    *) dflt='n' ;;
5230    esac
5231    ;;
5232 esac    
5233 cat <<EOM
5234
5235 You may also choose to try maximal 64-bitness.  It means using as much
5236 64-bitness as possible on the platform.  This in turn means even more
5237 binary incompatibilities.  On the other hand, your platform may not
5238 have any more 64-bitness available than what you already have chosen.
5239
5240 If this doesn't make any sense to you, just accept the default '$dflt'.
5241 (The default has been chosen based on your configuration.)
5242 EOM
5243 rp='Try to use maximal 64-bit support, if available?'
5244 . ./myread
5245 case "$ans" in
5246 [yY]*) val="$define" ;;
5247 *)     val="$undef"  ;;
5248 esac
5249 set use64bitall
5250 eval $setvar
5251 case "$use64bitall" in
5252 "$define")
5253         case "$use64bitint" in
5254         "$undef")
5255                 cat <<EOM
5256
5257 Since you have chosen a maximally 64-bit build, I'm also turning on
5258 the use of 64-bit integers.
5259 EOM
5260                 use64bitint="$define" ;;
5261         esac
5262         ;;
5263 esac
5264
5265 case "$use64bitall" in
5266 "$define"|true|[yY]*)
5267         case "$ptrsize" in
5268         4)      cat <<EOM >&4
5269
5270 *** You have chosen a maximally 64-bit build, but your pointers
5271 *** are only 4 bytes wide, disabling maximal 64-bitness.
5272
5273 EOM
5274                 use64bitall="$undef"
5275                 case "$use64bitint" in
5276                 "$define"|true|[yY]*) ;;
5277                 *)      cat <<EOM >&4
5278
5279 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5280
5281 EOM
5282                         use64bitint="$define"
5283                         ;;
5284                 esac
5285                 ;;
5286         esac
5287         ;;
5288 esac
5289
5290 case "$use64bitint" in
5291 "$define"|true|[yY]*)
5292 : Look for a hint-file generated 'call-back-unit'.  If the
5293 : user has specified that a 64-bit perl is to be built,
5294 : we may need to set or change some other defaults.
5295         if $test -f use64bitint.cbu; then
5296                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5297                 . ./use64bitint.cbu
5298         fi
5299         case "$longsize" in
5300         4) case "$archname64" in
5301            '') archname64=64int ;;
5302            esac
5303            ;;
5304         esac
5305         ;;
5306 esac
5307
5308 case "$use64bitall" in
5309 "$define"|true|[yY]*)
5310 : Look for a hint-file generated 'call-back-unit'.  If the
5311 : user has specified that a maximally 64-bit perl is to be built,
5312 : we may need to set or change some other defaults.
5313         if $test -f use64bitall.cbu; then
5314                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5315                 . ./use64bitall.cbu
5316         fi
5317         case "$longsize" in
5318         4) case "$archname64" in
5319            ''|64int) archname64=64all ;;
5320            esac
5321            ;;
5322         esac
5323         ;;
5324 esac
5325
5326 echo " "
5327 echo "Checking for GNU C Library..." >&4
5328 cat >try.c <<EOM
5329 #include <stdio.h>
5330 int main()
5331 {
5332 #ifdef __GLIBC__
5333     exit(0);
5334 #else
5335     exit(1);
5336 #endif
5337 }
5338 EOM
5339 set try
5340 if eval $compile_ok && $run ./try; then
5341         val="$define"
5342         echo "You are using the GNU C Library"
5343 else
5344         val="$undef"
5345         echo "You are not using the GNU C Library"
5346 fi
5347 $rm -f try try.*
5348 set d_gnulibc
5349 eval $setvar
5350
5351 : see if nm is to be used to determine whether a symbol is defined or not
5352 case "$usenm" in
5353 '')
5354         dflt=''
5355         case "$d_gnulibc" in
5356         "$define")
5357                 echo " "
5358                 echo "nm probably won't work on the GNU C Library." >&4
5359                 dflt=n
5360                 ;;
5361         esac
5362         case "$dflt" in
5363         '') 
5364                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5365                         echo " "
5366                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5367                         echo "'nm' won't be sufficient on this sytem." >&4
5368                         dflt=n
5369                 fi
5370                 ;;
5371         esac
5372         case "$dflt" in
5373         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5374                 if $test $dflt -gt 20; then
5375                         dflt=y
5376                 else
5377                         dflt=n
5378                 fi
5379                 ;;
5380         esac
5381         ;;
5382 *)
5383         case "$usenm" in
5384         true|$define) dflt=y;;
5385         *) dflt=n;;
5386         esac
5387         ;;
5388 esac
5389 $cat <<EOM
5390
5391 I can use $nm to extract the symbols from your C libraries. This
5392 is a time consuming task which may generate huge output on the disk (up
5393 to 3 megabytes) but that should make the symbols extraction faster. The
5394 alternative is to skip the 'nm' extraction part and to compile a small
5395 test program instead to determine whether each symbol is present. If
5396 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5397 this may be the best solution.
5398
5399 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5400
5401 EOM
5402 rp="Shall I use $nm to extract C symbols from the libraries?"
5403 . ./myread
5404 case "$ans" in
5405 [Nn]*) usenm=false;;
5406 *) usenm=true;;
5407 esac
5408
5409 runnm=$usenm
5410 case "$reuseval" in
5411 true) runnm=false;;
5412 esac
5413
5414 : nm options which may be necessary
5415 case "$nm_opt" in
5416 '') if $test -f /mach_boot; then
5417                 nm_opt=''       # Mach
5418         elif $test -d /usr/ccs/lib; then
5419                 nm_opt='-p'     # Solaris (and SunOS?)
5420         elif $test -f /dgux; then
5421                 nm_opt='-p'     # DG-UX
5422         elif $test -f /lib64/rld; then
5423                 nm_opt='-p'     # 64-bit Irix
5424         else
5425                 nm_opt=''
5426         fi;;
5427 esac
5428
5429 : nm options which may be necessary for shared libraries but illegal
5430 : for archive libraries.  Thank you, Linux.
5431 case "$nm_so_opt" in
5432 '')     case "$myuname" in
5433         *linux*)
5434                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5435                         nm_so_opt='--dynamic'
5436                 fi
5437                 ;;
5438         esac
5439         ;;
5440 esac
5441
5442 case "$runnm" in
5443 true)
5444 : get list of predefined functions in a handy place
5445 echo " "
5446 case "$libc" in
5447 '') libc=unknown
5448         case "$libs" in
5449         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5450         esac
5451         ;;
5452 esac
5453 case "$libs" in
5454 '') ;;
5455 *)  for thislib in $libs; do
5456         case "$thislib" in
5457         -lc|-lc_s)
5458                 : Handle C library specially below.
5459                 ;;
5460         -l*)
5461                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5462                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5463                         :
5464                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5465                         :
5466                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5467                         :
5468                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5469                         :
5470                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5471                         :
5472                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5473                         :
5474                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5475                         :
5476                 else
5477                         try=''
5478                 fi
5479                 libnames="$libnames $try"
5480                 ;;
5481         *) libnames="$libnames $thislib" ;;
5482         esac
5483         done
5484         ;;
5485 esac
5486 xxx=normal
5487 case "$libc" in
5488 unknown)
5489         set /lib/libc.$so
5490         for xxx in $libpth; do
5491                 $test -r $1 || set $xxx/libc.$so
5492                 : The messy sed command sorts on library version numbers.
5493                 $test -r $1 || \
5494                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5495                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5496                                 h
5497                                 s/[0-9][0-9]*/0000&/g
5498                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5499                                 G
5500                                 s/\n/ /' | \
5501                          $sort | $sed -e 's/^.* //'`
5502                 eval set \$$#
5503         done
5504         $test -r $1 || set /usr/ccs/lib/libc.$so
5505         $test -r $1 || set /lib/libsys_s$_a
5506         ;;
5507 *)
5508         set blurfl
5509         ;;
5510 esac
5511 if $test -r "$1"; then
5512         echo "Your (shared) C library seems to be in $1."
5513         libc="$1"
5514 elif $test -r /lib/libc && $test -r /lib/clib; then
5515         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5516         xxx=apollo
5517         libc='/lib/clib /lib/libc'
5518         if $test -r /lib/syslib; then
5519                 echo "(Your math library is in /lib/syslib.)"
5520                 libc="$libc /lib/syslib"
5521         fi
5522 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5523         echo "Your C library seems to be in $libc, as you said before."
5524 elif $test -r $incpath/usr/lib/libc$_a; then
5525         libc=$incpath/usr/lib/libc$_a;
5526         echo "Your C library seems to be in $libc.  That's fine."
5527 elif $test -r /lib/libc$_a; then
5528         libc=/lib/libc$_a;
5529         echo "Your C library seems to be in $libc.  You're normal."
5530 else
5531         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5532                 :
5533         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5534                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5535         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5536                 :
5537         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5538                 :
5539         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5540                 :
5541         else
5542                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5543         fi
5544         if $test -r "$tans"; then
5545                 echo "Your C library seems to be in $tans, of all places."
5546                 libc=$tans
5547         else
5548                 libc='blurfl'
5549         fi
5550 fi
5551 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5552         dflt="$libc"
5553         cat <<EOM
5554
5555 If the guess above is wrong (which it might be if you're using a strange
5556 compiler, or your machine supports multiple models), you can override it here.
5557
5558 EOM
5559 else
5560         dflt=''
5561         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5562         cat >&4 <<EOM
5563 I can't seem to find your C library.  I've looked in the following places:
5564
5565 EOM
5566         $sed 's/^/      /' libpath
5567         cat <<EOM
5568
5569 None of these seems to contain your C library. I need to get its name...
5570
5571 EOM
5572 fi
5573 fn=f
5574 rp='Where is your C library?'
5575 . ./getfile
5576 libc="$ans"
5577
5578 echo " "
5579 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5580 set X `cat libnames`
5581 shift
5582 xxx=files
5583 case $# in 1) xxx=file; esac
5584 echo "Extracting names from the following $xxx for later perusal:" >&4
5585 echo " "
5586 $sed 's/^/      /' libnames >&4
5587 echo " "
5588 $echo $n "This may take a while...$c" >&4
5589
5590 for file in $*; do
5591         case $file in
5592         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5593         *) $nm $nm_opt $file 2>/dev/null;;
5594         esac
5595 done >libc.tmp
5596
5597 $echo $n ".$c"
5598 $grep fprintf libc.tmp > libc.ptf
5599 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5600 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5601 xxx='[ADTSIW]'
5602 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5603         eval $xscan;\
5604         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5605                 eval $xrun
5606 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5607         eval $xscan;\
5608         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5609                 eval $xrun
5610 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5611         eval $xscan;\
5612         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5613                 eval $xrun
5614 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5615         eval $xscan;\
5616         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5617                 eval $xrun
5618 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5619         eval $xscan;\
5620         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5621                 eval $xrun
5622 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5623         eval $xscan;\
5624         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5625                 eval $xrun
5626 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5627                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5628         eval $xscan;\
5629         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5630                 eval $xrun
5631 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5632         eval $xscan;\
5633         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5634                 eval $xrun
5635 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5636         eval $xscan;\
5637         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5638                 eval $xrun
5639 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5640         eval $xscan;\
5641         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5642                 eval $xrun
5643 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5644         eval $xscan;\
5645         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5646                 eval $xrun
5647 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5648         eval $xscan;\
5649         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5650                 eval $xrun
5651 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5652         eval $xscan;\
5653         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5654                 eval $xrun
5655 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5656         eval $xscan;\
5657         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5658                 eval $xrun
5659 else
5660         $nm -p $* 2>/dev/null >libc.tmp
5661         $grep fprintf libc.tmp > libc.ptf
5662         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5663                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5664         then
5665                 nm_opt='-p'
5666                 eval $xrun
5667         else
5668                 echo " "
5669                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5670                 com=''
5671                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5672                         for thisname in $libnames $libc; do
5673                                 $ar t $thisname >>libc.tmp
5674                         done
5675                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5676                         echo "Ok." >&4
5677                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5678                         # Repeat libc to extract forwarders to DLL entries too
5679                         for thisname in $libnames $libc; do
5680                                 $ar tv $thisname >>libc.tmp
5681                                 # Revision 50 of EMX has bug in $ar.
5682                                 # it will not extract forwarders to DLL entries
5683                                 # Use emximp which will extract exactly them.
5684                                 emximp -o tmp.imp $thisname \
5685                                     2>/dev/null && \
5686                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5687                                     < tmp.imp >>libc.tmp
5688                                 $rm tmp.imp
5689                         done
5690                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5691                         echo "Ok." >&4
5692                 else
5693                         echo "$ar didn't seem to work right." >&4
5694                         echo "Maybe this is a Cray...trying bld instead..." >&4
5695                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5696                         then
5697                                 for thisname in $libnames; do
5698                                         bld t $libnames | \
5699                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5700                                         $ar t $thisname >>libc.tmp
5701                                 done
5702                                 echo "Ok." >&4
5703                         else
5704                                 echo "That didn't work either.  Giving up." >&4
5705                                 exit 1
5706                         fi
5707                 fi
5708         fi
5709 fi
5710 nm_extract="$com"
5711 if $test -f /lib/syscalls.exp; then
5712         echo " "
5713         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5714         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5715 fi
5716 ;;
5717 esac
5718 $rm -f libnames libpath
5719
5720 : is a C symbol defined?
5721 csym='tlook=$1;
5722 case "$3" in
5723 -v) tf=libc.tmp; tc=""; tdc="";;
5724 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5725 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5726 esac;
5727 tx=yes;
5728 case "$reuseval-$4" in
5729 true-) ;;
5730 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5731 esac;
5732 case "$tx" in
5733 yes)
5734         case "$runnm" in
5735         true)
5736                 if $contains $tlook $tf >/dev/null 2>&1;
5737                 then tval=true;
5738                 else tval=false;
5739                 fi;;
5740         *)
5741                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5742                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5743                 then tval=true;
5744                 else tval=false;
5745                 fi;
5746                 $rm -f t t.c;;
5747         esac;;
5748 *)
5749         case "$tval" in
5750         $define) tval=true;;
5751         *) tval=false;;
5752         esac;;
5753 esac;
5754 eval "$2=$tval"'
5755
5756 : define an is-in-libc? function
5757 inlibc='echo " "; td=$define; tu=$undef;
5758 sym=$1; var=$2; eval "was=\$$2";
5759 tx=yes;
5760 case "$reuseval$was" in
5761 true) ;;
5762 true*) tx=no;;
5763 esac;
5764 case "$tx" in
5765 yes)
5766         set $sym tres -f;
5767         eval $csym;
5768         case "$tres" in
5769         true)
5770                 echo "$sym() found." >&4;
5771                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5772         *)
5773                 echo "$sym() NOT found." >&4;
5774                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5775         esac;;
5776 *)
5777         case "$was" in
5778         $define) echo "$sym() found." >&4;;
5779         *) echo "$sym() NOT found." >&4;;
5780         esac;;
5781 esac'
5782
5783 : see if sqrtl exists
5784 set sqrtl d_sqrtl
5785 eval $inlibc
5786
5787 : check for length of double
5788 echo " "
5789 case "$doublesize" in
5790 '')
5791         echo "Checking to see how big your double precision numbers are..." >&4
5792         $cat >try.c <<'EOCP'
5793 #include <stdio.h>
5794 int main()
5795 {
5796     printf("%d\n", (int)sizeof(double));
5797     exit(0);
5798 }
5799 EOCP
5800         set try
5801         if eval $compile_ok; then
5802                 doublesize=`$run ./try`
5803                 echo "Your double is $doublesize bytes long."
5804         else
5805                 dflt='8'
5806                 echo "(I can't seem to compile the test program.  Guessing...)"
5807                 rp="What is the size of a double precision number (in bytes)?"
5808                 . ./myread
5809                 doublesize="$ans"
5810         fi
5811         ;;
5812 esac
5813 $rm -f try.c try
5814
5815 : check for long doubles
5816 echo " "
5817 echo "Checking to see if you have long double..." >&4
5818 echo 'int main() { long double x = 7.0; }' > try.c
5819 set try
5820 if eval $compile; then
5821         val="$define"
5822         echo "You have long double."
5823 else
5824         val="$undef"
5825         echo "You do not have long double."
5826 fi
5827 $rm try.*
5828 set d_longdbl
5829 eval $setvar
5830
5831 : check for length of long double
5832 case "${d_longdbl}${longdblsize}" in
5833 $define)
5834         echo " "
5835         echo "Checking to see how big your long doubles are..." >&4
5836         $cat >try.c <<'EOCP'
5837 #include <stdio.h>
5838 int main()
5839 {
5840         printf("%d\n", sizeof(long double));
5841 }
5842 EOCP
5843         set try
5844         set try
5845         if eval $compile; then
5846                 longdblsize=`$run ./try`
5847                 echo "Your long doubles are $longdblsize bytes long."
5848         else
5849                 dflt='8'
5850                 echo " "
5851                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5852                 rp="What is the size of a long double (in bytes)?"
5853                 . ./myread
5854                 longdblsize="$ans"
5855         fi
5856         if $test "X$doublesize" = "X$longdblsize"; then
5857                 echo "(That isn't any different from an ordinary double.)"
5858         fi      
5859         ;;
5860 esac
5861 $rm -f try.* try
5862
5863 echo " "
5864
5865 if $test X"$d_longdbl" = X"$define"; then
5866
5867 echo "Checking how to print long doubles..." >&4
5868
5869 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5870         $cat >try.c <<'EOCP'
5871 #include <sys/types.h>
5872 #include <stdio.h>
5873 int main() {
5874   double d = 123.456;
5875   printf("%.3f\n", d);
5876 }
5877 EOCP
5878         set try
5879         if eval $compile; then
5880                 yyy=`$run ./try`
5881                 case "$yyy" in
5882                 123.456)
5883                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5884                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5885                         echo "We will use %f."
5886                         ;;
5887                 esac
5888         fi
5889 fi
5890
5891 if $test X"$sPRIfldbl" = X; then
5892         $cat >try.c <<'EOCP'
5893 #include <sys/types.h>
5894 #include <stdio.h>
5895 int main() {
5896   long double d = 123.456;
5897   printf("%.3Lf\n", d);
5898 }
5899 EOCP
5900         set try
5901         if eval $compile; then
5902                 yyy=`$run ./try`
5903                 case "$yyy" in
5904                 123.456)
5905                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5906                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5907                         echo "We will use %Lf."
5908                         ;;
5909                 esac
5910         fi
5911 fi
5912
5913 if $test X"$sPRIfldbl" = X; then
5914         $cat >try.c <<'EOCP'
5915 #include <sys/types.h>
5916 #include <stdio.h>
5917 int main() {
5918   long double d = 123.456;
5919   printf("%.3llf\n", d);
5920 }
5921 EOCP
5922         set try
5923         if eval $compile; then
5924                 yyy=`$run ./try`
5925                 case "$yyy" in
5926                 123.456)
5927                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5928                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5929                         echo "We will use %llf."
5930                         ;;
5931                 esac
5932         fi
5933 fi
5934
5935 if $test X"$sPRIfldbl" = X; then
5936         $cat >try.c <<'EOCP'
5937 #include <sys/types.h>
5938 #include <stdio.h>
5939 int main() {
5940   long double d = 123.456;
5941   printf("%.3lf\n", d);
5942 }
5943 EOCP
5944         set try
5945         if eval $compile; then
5946                 yyy=`$run ./try`
5947                 case "$yyy" in
5948                 123.456)
5949                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5950                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5951                         echo "We will use %lf."
5952                         ;;
5953                 esac
5954         fi
5955 fi
5956
5957 if $test X"$sPRIfldbl" = X; then
5958         echo "Cannot figure out how to print long doubles." >&4
5959 else
5960         sSCNfldbl=$sPRIfldbl    # expect consistency
5961 fi
5962
5963 $rm -f try try.*
5964
5965 fi # d_longdbl
5966
5967 case "$sPRIfldbl" in
5968 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5969         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5970         d_SCNfldbl="$undef";
5971         ;;
5972 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5973         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5974         d_SCNfldbl="$define";
5975         ;;
5976 esac
5977
5978 : see if modfl exists
5979 set modfl d_modfl
5980 eval $inlibc
5981
5982 d_modfl_pow32_bug="$undef"
5983
5984 case "$d_longdbl$d_modfl" in
5985 $define$define)
5986         $cat <<EOM
5987 Checking to see whether your modfl() is okay for large values...
5988 EOM
5989 $cat >try.c <<EOCP
5990 #include <math.h> 
5991 #include <stdio.h>
5992 int main() {
5993     long double nv = 4294967303.15;
5994     long double v, w;
5995     v = modfl(nv, &w);         
5996 #ifdef __GLIBC__
5997     printf("glibc");
5998 #endif
5999     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
6000     return 0;
6001 }
6002 EOCP
6003         case "$osname:$gccversion" in
6004         aix:)   saveccflags="$ccflags"
6005                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
6006         esac
6007         set try
6008         if eval $compile; then
6009                 foo=`$run ./try`
6010                 case "$foo" in
6011                 *" 4294967303.150000 1.150000 4294967302.000000")
6012                         echo >&4 "Your modfl() is broken for large values."
6013                         d_modfl_pow32_bug="$define"
6014                         case "$foo" in
6015                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
6016                         ;;
6017                         esac
6018                         ;;
6019                 *" 4294967303.150000 0.150000 4294967303.000000")
6020                         echo >&4 "Your modfl() seems okay for large values."
6021                         ;;
6022                 *)      echo >&4 "I don't understand your modfl() at all."
6023                         d_modfl="$undef"
6024                         ;;
6025                 esac
6026                 $rm -f try.* try core core.try.*
6027         else
6028                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
6029                 d_modfl="$undef"
6030         fi
6031         case "$osname:$gccversion" in
6032         aix:)   ccflags="$saveccflags" ;; # restore
6033         esac
6034         ;;
6035 esac
6036
6037 case "$ccflags" in
6038 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6039 esac
6040
6041 case "$uselongdouble" in
6042 $define|true|[yY]*)     dflt='y';;
6043 *) dflt='n';;
6044 esac
6045 cat <<EOM
6046
6047 Perl can be built to take advantage of long doubles which
6048 (if available) may give more accuracy and range for floating point numbers.
6049
6050 If this doesn't make any sense to you, just accept the default '$dflt'.
6051 EOM
6052 rp='Try to use long doubles if available?'
6053 . ./myread
6054 case "$ans" in
6055 y|Y)    val="$define"   ;;
6056 *)      val="$undef"    ;;
6057 esac
6058 set uselongdouble
6059 eval $setvar
6060
6061 case "$uselongdouble" in
6062 true|[yY]*) uselongdouble="$define" ;;
6063 esac
6064
6065 case "$uselongdouble" in
6066 $define)
6067 : Look for a hint-file generated 'call-back-unit'.  If the
6068 : user has specified that long doubles should be used,
6069 : we may need to set or change some other defaults.
6070         if $test -f uselongdouble.cbu; then
6071                 echo "Your platform has some specific hints for long doubles, using them..."
6072                 . ./uselongdouble.cbu
6073         else
6074                 $cat <<EOM
6075 (Your platform doesn't have any specific hints for long doubles.)
6076 EOM
6077         fi
6078         ;;
6079 esac
6080
6081 message=X
6082 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6083 $define:$define:$define)
6084         : You have both
6085         ;;
6086 $define:$define:$undef)
6087         message="I could not find modfl"
6088         ;;
6089 $define:$undef:$define)
6090         message="I could not find sqrtl"
6091         ;;
6092 $define:$undef:$undef)
6093         message="I found neither sqrtl nor modfl"
6094         ;;
6095 esac
6096
6097 if $test "$message" != X; then
6098         $cat <<EOM >&4
6099
6100 *** You requested the use of long doubles but you do not seem to have
6101 *** the mathematic functions for long doubles.
6102 *** ($message)
6103 *** I'm disabling the use of long doubles.
6104
6105 EOM
6106
6107         uselongdouble=$undef
6108 fi
6109
6110 case "$useperlio" in
6111 $define|true|[yY]*|'')  dflt='y';;
6112 *) dflt='n';;
6113 esac
6114 cat <<EOM
6115
6116 Previous version of $package used the standard IO mechanisms as
6117 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6118 alternate IO mechanisms via the PerlIO abstraction layer, but the
6119 stdio mechanism is still available if needed.  The abstraction layer
6120 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6121 Using PerlIO with sfio may cause problems with some extension modules.
6122
6123 If this doesn't make any sense to you, just accept the default '$dflt'.
6124 EOM
6125 rp='Use the PerlIO abstraction layer?'
6126 . ./myread
6127 case "$ans" in
6128 y|Y) 
6129         val="$define"
6130         ;;
6131 *)      
6132         echo "Ok, doing things the stdio way."
6133         val="$undef"
6134         ;;
6135 esac
6136 set useperlio
6137 eval $setvar 
6138
6139 case "$usesocks" in
6140 $define|true|[yY]*)
6141         case "$useperlio" in
6142         $define|true|[yY]*) ;;
6143         *)      cat >&4 <<EOM
6144
6145 You are using the SOCKS proxy protocol library which means that you
6146 should also use the PerlIO layer.  You may be headed for trouble.
6147
6148 EOM
6149                 ;;
6150         esac
6151         ;;
6152 esac
6153
6154         
6155 : determine the architecture name
6156 echo " "
6157 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6158         tarch=`arch`"-$osname"
6159 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6160         if uname -m > tmparch 2>&1 ; then
6161                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6162                         -e 's/$/'"-$osname/" tmparch`
6163         else
6164                 tarch="$osname"
6165         fi
6166         $rm -f tmparch
6167 else
6168         tarch="$osname"
6169 fi
6170 case "$myarchname" in
6171 ''|"$tarch") ;;
6172 *)
6173         echo "(Your architecture name used to be $myarchname.)"
6174         archname=''
6175         ;;
6176 esac
6177 case "$targetarch" in
6178 '') ;;
6179 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6180 esac
6181 myarchname="$tarch"
6182 case "$archname" in
6183 '') dflt="$tarch";;
6184 *) dflt="$archname";;
6185 esac
6186 rp='What is your architecture name'
6187 . ./myread
6188 archname="$ans"
6189 case "$usethreads" in
6190 $define)
6191         echo "Threads selected." >&4
6192         case "$archname" in
6193         *-thread*) echo "...and architecture name already has -thread." >&4
6194                 ;;
6195         *)      archname="$archname-thread"
6196                 echo "...setting architecture name to $archname." >&4
6197                 ;;
6198         esac
6199         ;;
6200 esac
6201 case "$usemultiplicity" in
6202 $define)
6203         echo "Multiplicity selected." >&4
6204         case "$archname" in
6205         *-multi*) echo "...and architecture name already has -multi." >&4
6206                 ;;
6207         *)      archname="$archname-multi"
6208                 echo "...setting architecture name to $archname." >&4
6209                 ;;
6210         esac
6211         ;;
6212 esac
6213 case "$use64bitint$use64bitall" in
6214 *"$define"*)
6215         case "$archname64" in
6216         '')
6217                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6218                 ;;
6219         *)
6220                 case "$use64bitint" in
6221                 "$define") echo "64 bit integers selected." >&4 ;;
6222                 esac
6223                 case "$use64bitall" in
6224                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6225                 esac
6226                 case "$archname" in
6227                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6228                         ;;
6229                 *)      archname="$archname-$archname64"
6230                         echo "...setting architecture name to $archname." >&4
6231                         ;;
6232                 esac
6233                 ;;
6234         esac
6235 esac
6236 case "$uselongdouble" in
6237 $define)
6238         echo "Long doubles selected." >&4
6239         case "$longdblsize" in
6240         $doublesize)
6241                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6242                 ;;
6243         *)
6244                 case "$archname" in
6245                 *-ld*) echo "...and architecture name already has -ld." >&4
6246                         ;;
6247                 *)      archname="$archname-ld"
6248                         echo "...setting architecture name to $archname." >&4
6249                         ;;
6250                 esac
6251                 ;;
6252         esac
6253         ;;
6254 esac
6255 case "$useperlio" in
6256 $define)
6257         echo "Perlio selected." >&4
6258         ;;
6259 *)
6260         echo "Perlio not selected, using stdio." >&4
6261         case "$archname" in
6262         *-stdio*) echo "...and architecture name already has -stdio." >&4
6263                 ;;
6264         *)      archname="$archname-stdio"
6265                 echo "...setting architecture name to $archname." >&4
6266                 ;;
6267         esac
6268         ;;
6269 esac
6270
6271 : determine root of directory hierarchy where package will be installed.
6272 case "$prefix" in
6273 '')
6274         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6275         ;;
6276 *)
6277         dflt="$prefix"
6278         ;;
6279 esac
6280 $cat <<EOM
6281
6282 By default, $package will be installed in $dflt/bin, manual pages
6283 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6284 installation directories. Typically this is something like /usr/local.
6285 If you wish to have binaries under /usr/bin but other parts of the
6286 installation under /usr/local, that's ok: you will be prompted
6287 separately for each of the installation directories, the prefix being
6288 only used to set the defaults.
6289
6290 EOM
6291 fn=d~
6292 rp='Installation prefix to use?'
6293 . ./getfile
6294 oldprefix=''
6295 case "$prefix" in
6296 '') ;;
6297 *)
6298         case "$ans" in
6299         "$prefix") ;;
6300         *) oldprefix="$prefix";;
6301         esac
6302         ;;
6303 esac
6304 prefix="$ans"
6305 prefixexp="$ansexp"
6306
6307 case "$afsroot" in
6308 '')     afsroot=/afs ;;
6309 *)      afsroot=$afsroot ;;
6310 esac
6311
6312 : is AFS running?
6313 echo " "
6314 case "$afs" in
6315 $define|true)   afs=true ;;
6316 $undef|false)   afs=false ;;
6317 *)      if test -d $afsroot; then
6318                 afs=true
6319         else
6320                 afs=false
6321         fi
6322         ;;
6323 esac
6324 if $afs; then
6325         echo "AFS may be running... I'll be extra cautious then..." >&4
6326 else
6327         echo "AFS does not seem to be running..." >&4
6328 fi
6329
6330 : determine installation prefix for where package is to be installed.
6331 if $afs; then 
6332 $cat <<EOM
6333
6334 Since you are running AFS, I need to distinguish the directory in which
6335 files will reside from the directory in which they are installed (and from
6336 which they are presumably copied to the former directory by occult means).
6337
6338 EOM
6339         case "$installprefix" in
6340         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6341         *) dflt="$installprefix";;
6342         esac
6343 else
6344 $cat <<EOM
6345
6346 In some special cases, particularly when building $package for distribution,
6347 it is convenient to distinguish between the directory in which files should 
6348 be installed from the directory ($prefix) in which they 
6349 will eventually reside.  For most users, these two directories are the same.
6350
6351 EOM
6352         case "$installprefix" in
6353         '') dflt=$prefix ;;
6354         *) dflt=$installprefix;;
6355         esac
6356 fi
6357 fn=d~
6358 rp='What installation prefix should I use for installing files?'
6359 . ./getfile
6360 installprefix="$ans"
6361 installprefixexp="$ansexp"
6362
6363 : set the prefixit variable, to compute a suitable default value
6364 prefixit='case "$3" in
6365 ""|none)
6366         case "$oldprefix" in
6367         "") eval "$1=\"\$$2\"";;
6368         *)
6369                 case "$3" in
6370                 "") eval "$1=";;
6371                 none)
6372                         eval "tp=\"\$$2\"";
6373                         case "$tp" in
6374                         ""|" ") eval "$1=\"\$$2\"";;
6375                         *) eval "$1=";;
6376                         esac;;
6377                 esac;;
6378         esac;;
6379 *)
6380         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6381         case "$tp" in
6382         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6383         /*-$oldprefix/*|\~*-$oldprefix/*)
6384                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6385         *) eval "$1=\"\$$2\"";;
6386         esac;;
6387 esac'
6388
6389 : get the patchlevel
6390 echo " "
6391 echo "Getting the current patchlevel..." >&4
6392 if $test -r $rsrc/patchlevel.h;then
6393         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6394         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6395         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6396         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6397         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6398         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6399        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6400 else
6401         revision=0
6402         patchlevel=0
6403         subversion=0
6404         api_revision=0
6405         api_version=0
6406         api_subversion=0
6407         perl_patchlevel=0
6408         $echo "(You do not have patchlevel.h.  Eek.)"
6409 fi
6410 if $test -r $rsrc/.patch ; then  
6411         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6412                 perl_patchlevel=`cat $rsrc/.patch`
6413         fi
6414 fi
6415 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6416 version_patchlevel_string="version $patchlevel subversion $subversion"
6417 case "$perl_patchlevel" in
6418 0|'') ;;
6419 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6420 esac
6421
6422 $echo "(You have $package $version_patchlevel_string.)"
6423
6424 case "$osname" in
6425 dos|vms)
6426         : XXX Should be a Configure test for double-dots in filenames.
6427         version=`echo $revision $patchlevel $subversion | \
6428                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6429         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6430                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6431         ;;
6432 *)
6433         version=`echo $revision $patchlevel $subversion | \
6434                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6435         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6436                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6437         ;;
6438 esac
6439 : Special case the 5.005_xx maintenance series, which used 5.005
6440 : without any subversion label as a subdirectory in $sitelib
6441 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6442         api_versionstring='5.005'
6443 fi
6444
6445 : determine installation style
6446 : For now, try to deduce it from prefix unless it is already set.
6447 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6448 case "$installstyle" in
6449 '')     case "$prefix" in
6450                 *perl*) dflt='lib';;
6451                 *) dflt='lib/perl5' ;;
6452         esac
6453         ;;
6454 *)      dflt="$installstyle" ;;
6455 esac
6456 : Probably not worth prompting for this since we prompt for all
6457 : the directories individually, and the prompt would be too long and
6458 : confusing anyway.
6459 installstyle=$dflt
6460
6461 : determine where private library files go
6462 : Usual default is /usr/local/lib/perl5/$version.
6463 : Also allow things like /opt/perl/lib/$version, since 
6464 : /opt/perl/lib/perl5... would be redundant.
6465 : The default "style" setting is made in installstyle.U
6466 case "$installstyle" in
6467 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6468 *)       set dflt privlib lib/$version ;;
6469 esac
6470 eval $prefixit
6471 $cat <<EOM
6472
6473 There are some auxiliary files for $package that need to be put into a
6474 private library directory that is accessible by everyone.
6475
6476 EOM
6477 fn=d~+
6478 rp='Pathname where the private library files will reside?'
6479 . ./getfile
6480 privlib="$ans"
6481 privlibexp="$ansexp"
6482 : Change installation prefix, if necessary.
6483 if $test X"$prefix" != X"$installprefix"; then
6484         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6485 else
6486         installprivlib="$privlibexp"
6487 fi
6488
6489 : set the prefixup variable, to restore leading tilda escape
6490 prefixup='case "$prefixexp" in
6491 "$prefix") ;;
6492 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6493 esac'
6494
6495 : determine where public architecture dependent libraries go
6496 set archlib archlib
6497 eval $prefixit
6498 : privlib default is /usr/local/lib/$package/$version
6499 : archlib default is /usr/local/lib/$package/$version/$archname
6500 : privlib may have an optional trailing /share.
6501 tdflt=`echo $privlib | $sed 's,/share$,,'`
6502 tdflt=$tdflt/$archname
6503 case "$archlib" in
6504 '')     dflt=$tdflt
6505         ;;
6506 *)      dflt="$archlib"
6507     ;;
6508 esac
6509 $cat <<EOM
6510
6511 $spackage contains architecture-dependent library files.  If you are
6512 sharing libraries in a heterogeneous environment, you might store
6513 these files in a separate location.  Otherwise, you can just include
6514 them with the rest of the public library files.
6515
6516 EOM
6517 fn=d+~
6518 rp='Where do you want to put the public architecture-dependent libraries?'
6519 . ./getfile
6520 archlib="$ans"
6521 archlibexp="$ansexp"
6522 if $test X"$archlib" = X"$privlib"; then
6523         d_archlib="$undef"
6524 else
6525         d_archlib="$define"
6526 fi
6527 : Change installation prefix, if necessary.
6528 if $test X"$prefix" != X"$installprefix"; then
6529         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6530 else
6531         installarchlib="$archlibexp"
6532 fi
6533
6534
6535 : Binary compatibility with 5.005 is not possible for builds
6536 : with advanced features
6537 case "$usethreads$usemultiplicity" in
6538 *define*)
6539         bincompat5005="$undef"
6540         d_bincompat5005="$undef"
6541         ;;
6542 *)      $cat <<EOM
6543
6544 This version of Perl can be compiled for binary compatibility with 5.005.
6545 If you decide to do so, you will be able to continue using most of the
6546 extensions that were compiled for Perl 5.005.
6547
6548 EOM
6549         case "$bincompat5005$d_bincompat5005" in
6550         *"$undef"*) dflt=n ;;
6551         *) dflt=y ;;
6552         esac
6553         rp='Binary compatibility with Perl 5.005?'
6554         . ./myread
6555         case "$ans" in
6556         y*) val="$define" ;;
6557         *)  val="$undef" ;;
6558         esac
6559         set d_bincompat5005
6560         eval $setvar
6561         case "$d_bincompat5005" in
6562         "$define")
6563                 bincompat5005="$define"
6564                 ;;
6565         *)      bincompat5005="$undef"
6566                 d_bincompat5005="$undef"
6567                 ;;
6568         esac
6569         ;;
6570 esac
6571
6572
6573 : see if setuid scripts can be secure
6574 $cat <<EOM
6575
6576 Some kernels have a bug that prevents setuid #! scripts from being
6577 secure.  Some sites have disabled setuid #! scripts because of this.
6578
6579 First let's decide if your kernel supports secure setuid #! scripts.
6580 (If setuid #! scripts would be secure but have been disabled anyway,
6581 don't say that they are secure if asked.)
6582
6583 EOM
6584
6585 val="$undef"
6586 if $test -d /dev/fd; then
6587         echo "#!$ls" >reflect
6588         chmod +x,u+s reflect
6589         ./reflect >flect 2>&1
6590         if $contains "/dev/fd" flect >/dev/null; then
6591                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6592                 val="$define"
6593         else
6594                 $cat <<EOM
6595 If you are not sure if they are secure, I can check but I'll need a
6596 username and password different from the one you are using right now.
6597 If you don't have such a username or don't want me to test, simply
6598 enter 'none'.
6599
6600 EOM
6601                 rp='Other username to test security of setuid scripts with?'
6602                 dflt='none'
6603                 . ./myread
6604                 case "$ans" in
6605                 n|none)
6606                         case "$d_suidsafe" in
6607                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6608                                 dflt=n;;
6609                         "$undef")
6610                                 echo "Well, the $hint value is *not* secure." >&4
6611                                 dflt=n;;
6612                         *)      echo "Well, the $hint value *is* secure." >&4
6613                                 dflt=y;;
6614                         esac
6615                         ;;
6616                 *)
6617                         $rm -f reflect flect
6618                         echo "#!$ls" >reflect
6619                         chmod +x,u+s reflect
6620                         echo >flect
6621                         chmod a+w flect
6622                         echo '"su" will (probably) prompt you for '"$ans's password."
6623                         su $ans -c './reflect >flect'
6624                         if $contains "/dev/fd" flect >/dev/null; then
6625                                 echo "Okay, it looks like setuid scripts are secure." >&4
6626                                 dflt=y
6627                         else
6628                                 echo "I don't think setuid scripts are secure." >&4
6629                                 dflt=n
6630                         fi
6631                         ;;
6632                 esac
6633                 rp='Does your kernel have *secure* setuid scripts?'
6634                 . ./myread
6635                 case "$ans" in
6636                 [yY]*)  val="$define";;
6637                 *)      val="$undef";;
6638                 esac
6639         fi
6640 else
6641         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6642         echo "(That's for file descriptors, not floppy disks.)"
6643         val="$undef"
6644 fi
6645 set d_suidsafe
6646 eval $setvar
6647
6648 $rm -f reflect flect
6649
6650 : now see if they want to do setuid emulation
6651 echo " "
6652 val="$undef"
6653 case "$d_suidsafe" in
6654 "$define")
6655         val="$undef"
6656         echo "No need to emulate SUID scripts since they are secure here." >&4
6657         ;;
6658 *)
6659         $cat <<EOM
6660 Some systems have disabled setuid scripts, especially systems where
6661 setuid scripts cannot be secure.  On systems where setuid scripts have
6662 been disabled, the setuid/setgid bits on scripts are currently
6663 useless.  It is possible for $package to detect those bits and emulate
6664 setuid/setgid in a secure fashion.  This emulation will only work if
6665 setuid scripts have been disabled in your kernel.
6666
6667 EOM
6668         case "$d_dosuid" in
6669         "$define") dflt=y ;;
6670         *) dflt=n ;;
6671         esac
6672         rp="Do you want to do setuid/setgid emulation?"
6673         . ./myread
6674         case "$ans" in
6675         [yY]*)  val="$define";;
6676         *)      val="$undef";;
6677         esac
6678         ;;
6679 esac
6680 set d_dosuid
6681 eval $setvar
6682
6683 : see if this is a malloc.h system
6684 set malloc.h i_malloc
6685 eval $inhdr
6686
6687 : see if stdlib is available
6688 set stdlib.h i_stdlib
6689 eval $inhdr
6690
6691 : determine which malloc to compile in
6692 echo " "
6693 case "$usemymalloc" in
6694 [yY]*|true|$define)     dflt='y' ;;
6695 [nN]*|false|$undef)     dflt='n' ;;
6696 *)      case "$ptrsize" in
6697         4) dflt='y' ;;
6698         *) dflt='n' ;;
6699         esac
6700         ;;
6701 esac
6702 rp="Do you wish to attempt to use the malloc that comes with $package?"
6703 . ./myread
6704 usemymalloc="$ans"
6705 case "$ans" in
6706 y*|true)
6707         usemymalloc='y'
6708         mallocsrc='malloc.c'
6709         mallocobj="malloc$_o"
6710         d_mymalloc="$define"
6711         case "$libs" in
6712         *-lmalloc*)
6713                 : Remove malloc from list of libraries to use
6714                 echo "Removing unneeded -lmalloc from library list" >&4
6715                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6716                 shift
6717                 libs="$*"
6718                 echo "libs = $libs" >&4
6719                 ;;
6720         esac
6721         ;;
6722 *)
6723         usemymalloc='n'
6724         mallocsrc=''
6725         mallocobj=''
6726         d_mymalloc="$undef"
6727         ;;
6728 esac
6729
6730 : compute the return types of malloc and free
6731 echo " "
6732 $cat >malloc.c <<END
6733 #$i_malloc I_MALLOC
6734 #$i_stdlib I_STDLIB
6735 #include <stdio.h>
6736 #include <sys/types.h>
6737 #ifdef I_MALLOC
6738 #include <malloc.h>
6739 #endif
6740 #ifdef I_STDLIB
6741 #include <stdlib.h>
6742 #endif
6743 #ifdef TRY_MALLOC
6744 void *malloc();
6745 #endif
6746 #ifdef TRY_FREE
6747 void free();
6748 #endif
6749 END
6750 case "$malloctype" in
6751 '')
6752         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6753                 malloctype='void *'
6754         else
6755                 malloctype='char *'
6756         fi
6757         ;;
6758 esac
6759 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6760
6761 case "$freetype" in
6762 '')
6763         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6764                 freetype='void'
6765         else
6766                 freetype='int'
6767         fi
6768         ;;
6769 esac
6770 echo "Your system uses $freetype free(), it would seem." >&4
6771 $rm -f malloc.[co]
6772 $cat <<EOM
6773
6774 After $package is installed, you may wish to install various
6775 add-on modules and utilities.  Typically, these add-ons will
6776 be installed under $prefix with the rest
6777 of this package.  However, you may wish to install such add-ons
6778 elsewhere under a different prefix.
6779
6780 If you do not wish to put everything under a single prefix, that's
6781 ok.  You will be prompted for the individual locations; this siteprefix
6782 is only used to suggest the defaults.
6783
6784 The default should be fine for most people.
6785
6786 EOM
6787 fn=d~+
6788 rp='Installation prefix to use for add-on modules and utilities?'
6789 : XXX Here might be another good place for an installstyle setting.
6790 case "$siteprefix" in
6791 '') dflt=$prefix ;;
6792 *)  dflt=$siteprefix ;;
6793 esac
6794 . ./getfile
6795 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6796 oldsiteprefix=''
6797 case "$siteprefix" in
6798 '') ;;
6799 *)      case "$ans" in
6800         "$prefix") ;;
6801         *) oldsiteprefix="$prefix";;
6802         esac
6803         ;;
6804 esac
6805 siteprefix="$ans"
6806 siteprefixexp="$ansexp"
6807
6808 : determine where site specific libraries go.
6809 : Usual default is /usr/local/lib/perl5/site_perl/$version
6810 : The default "style" setting is made in installstyle.U
6811 : XXX No longer works with Prefixit stuff.
6812 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6813 case "$sitelib" in
6814 '') case "$installstyle" in
6815         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6816         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6817         esac
6818         ;;
6819 *)      dflt="$sitelib"
6820         ;;
6821 esac
6822 $cat <<EOM
6823
6824 The installation process will create a directory for
6825 site-specific extensions and modules.  Most users find it convenient
6826 to place all site-specific files in this directory rather than in the
6827 main distribution directory.
6828
6829 EOM
6830 fn=d~+
6831 rp='Pathname for the site-specific library files?'
6832 . ./getfile
6833 sitelib="$ans"
6834 sitelibexp="$ansexp"
6835 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6836 : Change installation prefix, if necessary.
6837 if $test X"$prefix" != X"$installprefix"; then
6838         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6839 else
6840         installsitelib="$sitelibexp"
6841 fi
6842
6843 : determine where site specific architecture-dependent libraries go.
6844 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6845 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6846 : sitelib may have an optional trailing /share.
6847 case "$sitearch" in
6848 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6849         dflt="$dflt/$archname"
6850         ;;
6851 *)      dflt="$sitearch"
6852         ;;
6853 esac
6854 set sitearch sitearch none
6855 eval $prefixit
6856 $cat <<EOM
6857
6858 The installation process will also create a directory for
6859 architecture-dependent site-specific extensions and modules.
6860
6861 EOM
6862 fn=d~+
6863 rp='Pathname for the site-specific architecture-dependent library files?'
6864 . ./getfile
6865 sitearch="$ans"
6866 sitearchexp="$ansexp"
6867 : Change installation prefix, if necessary.
6868 if $test X"$prefix" != X"$installprefix"; then
6869         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6870 else
6871         installsitearch="$sitearchexp"
6872 fi
6873
6874 $cat <<EOM
6875
6876 The installation process will also create a directory for
6877 vendor-supplied add-ons.  Vendors who supply perl with their system
6878 may find it convenient to place all vendor-supplied files in this
6879 directory rather than in the main distribution directory.  This will
6880 ease upgrades between binary-compatible maintenance versions of perl.
6881
6882 Of course you may also use these directories in whatever way you see
6883 fit.  For example, you might use them to access modules shared over a
6884 company-wide network.
6885
6886 The default answer should be fine for most people.
6887 This causes further questions about vendor add-ons to be skipped
6888 and no vendor-specific directories will be configured for perl.
6889
6890 EOM
6891 rp='Do you want to configure vendor-specific add-on directories?'
6892 case "$usevendorprefix" in
6893 define|true|[yY]*) dflt=y ;;
6894 *)      : User may have set vendorprefix directly on Configure command line.
6895         case "$vendorprefix" in
6896         ''|' ') dflt=n ;;
6897         *)      dflt=y ;;
6898         esac
6899         ;;
6900 esac
6901 . ./myread
6902 case "$ans" in
6903 [yY]*)  fn=d~+
6904         rp='Installation prefix to use for vendor-supplied add-ons?'
6905         case "$vendorprefix" in
6906         '') dflt='' ;;
6907         *)  dflt=$vendorprefix ;;
6908         esac
6909         . ./getfile
6910         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6911         oldvendorprefix=''
6912         case "$vendorprefix" in
6913         '') ;;
6914         *)      case "$ans" in
6915                 "$prefix") ;;
6916                 *) oldvendorprefix="$prefix";;
6917                 esac
6918                 ;;
6919         esac
6920         usevendorprefix="$define"
6921         vendorprefix="$ans"
6922         vendorprefixexp="$ansexp"
6923         ;;
6924 *)      usevendorprefix="$undef"
6925         vendorprefix=''
6926         vendorprefixexp=''
6927         ;;
6928 esac
6929
6930 case "$vendorprefix" in
6931 '')     d_vendorlib="$undef"
6932         vendorlib=''
6933         vendorlibexp=''
6934         ;;
6935 *)      d_vendorlib="$define"
6936         : determine where vendor-supplied modules go.
6937         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6938         case "$vendorlib" in
6939         '')
6940                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6941                 case "$installstyle" in
6942                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6943                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6944                 esac
6945                 ;;
6946         *)      dflt="$vendorlib"
6947                 ;;
6948         esac
6949         fn=d~+
6950         rp='Pathname for the vendor-supplied library files?'
6951         . ./getfile
6952         vendorlib="$ans"
6953         vendorlibexp="$ansexp"
6954         ;;
6955 esac
6956 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6957 : Change installation prefix, if necessary.
6958 if $test X"$prefix" != X"$installprefix"; then
6959         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6960 else
6961         installvendorlib="$vendorlibexp"
6962 fi
6963
6964 case "$vendorprefix" in
6965 '')     d_vendorarch="$undef"
6966         vendorarch=''
6967         vendorarchexp=''
6968         ;;
6969 *)      d_vendorarch="$define"
6970         : determine where vendor-supplied architecture-dependent libraries go.
6971         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6972         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6973         : vendorlib may have an optional trailing /share.
6974         case "$vendorarch" in
6975         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6976                 dflt="$dflt/$archname"
6977                 ;;
6978         *)      dflt="$vendorarch" ;;
6979         esac
6980         fn=d~+
6981         rp='Pathname for vendor-supplied architecture-dependent files?'
6982         . ./getfile
6983         vendorarch="$ans"
6984         vendorarchexp="$ansexp"
6985         ;;
6986 esac
6987 : Change installation prefix, if necessary.
6988 if $test X"$prefix" != X"$installprefix"; then
6989         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6990 else
6991         installvendorarch="$vendorarchexp"
6992 fi
6993
6994 : Final catch-all directories to search
6995 $cat <<EOM
6996
6997 Lastly, you can have perl look in other directories for extensions and
6998 modules in addition to those already specified.
6999 These directories will be searched after 
7000         $sitearch 
7001         $sitelib 
7002 EOM
7003 test X"$vendorlib" != "X" && echo '     ' $vendorlib
7004 test X"$vendorarch" != "X" && echo '    ' $vendorarch
7005 echo ' '
7006 case "$otherlibdirs" in
7007 ''|' ') dflt='none' ;;
7008 *)      dflt="$otherlibdirs" ;;
7009 esac
7010 $cat <<EOM
7011 Enter a colon-separated set of extra paths to include in perl's @INC
7012 search path, or enter 'none' for no extra paths.
7013
7014 EOM
7015
7016 rp='Colon-separated list of additional directories for perl to search?'
7017 . ./myread
7018 case "$ans" in
7019 ' '|''|none)    otherlibdirs=' ' ;;     
7020 *)      otherlibdirs="$ans" ;;
7021 esac
7022 case "$otherlibdirs" in
7023 ' ') val=$undef ;;
7024 *)      val=$define ;;
7025 esac
7026 set d_perl_otherlibdirs
7027 eval $setvar
7028
7029 : Cruising for prototypes
7030 echo " "
7031 echo "Checking out function prototypes..." >&4
7032 $cat >prototype.c <<'EOCP'
7033 int main(int argc, char *argv[]) {
7034         exit(0);}
7035 EOCP
7036 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7037         echo "Your C compiler appears to support function prototypes."
7038         val="$define"
7039 else
7040         echo "Your C compiler doesn't seem to understand function prototypes."
7041         val="$undef"
7042 fi
7043 set prototype
7044 eval $setvar
7045 $rm -f prototype*
7046
7047 case "$prototype" in
7048 "$define") ;;
7049 *)      ansi2knr='ansi2knr'
7050         echo " "
7051         cat <<EOM >&4
7052
7053 $me:  FATAL ERROR:
7054 This version of $package can only be compiled by a compiler that 
7055 understands function prototypes.  Unfortunately, your C compiler 
7056         $cc $ccflags
7057 doesn't seem to understand them.  Sorry about that.
7058
7059 If GNU cc is available for your system, perhaps you could try that instead.  
7060
7061 Eventually, we hope to support building Perl with pre-ANSI compilers.
7062 If you would like to help in that effort, please contact <perlbug@perl.org>.
7063
7064 Aborting Configure now.
7065 EOM
7066         exit 2
7067         ;;
7068 esac
7069
7070 : determine where public executables go
7071 echo " "
7072 set dflt bin bin
7073 eval $prefixit
7074 fn=d~
7075 rp='Pathname where the public executables will reside?'
7076 . ./getfile
7077 if $test "X$ansexp" != "X$binexp"; then
7078         installbin=''
7079 fi
7080 bin="$ans"
7081 binexp="$ansexp"
7082 : Change installation prefix, if necessary.
7083 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7084 if $test X"$prefix" != X"$installprefix"; then
7085         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7086 else
7087         installbin="$binexp"
7088 fi
7089
7090 echo " "
7091 case "$extras" in
7092 '') dflt='n';;
7093 *) dflt='y';;
7094 esac
7095 cat <<EOM
7096 Perl can be built with extra modules or bundles of modules which
7097 will be fetched from the CPAN and installed alongside Perl.
7098
7099 Notice that you will need access to the CPAN; either via the Internet,
7100 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7101 be asked later to configure the CPAN.pm module which will in turn do
7102 the installation of the rest of the extra modules or bundles.)
7103
7104 Notice also that if the modules require any external software such as
7105 libraries and headers (the libz library and the zlib.h header for the
7106 Compress::Zlib module, for example) you MUST have any such software
7107 already installed, this configuration process will NOT install such
7108 things for you.
7109
7110 If this doesn't make any sense to you, just accept the default '$dflt'.
7111 EOM
7112 rp='Install any extra modules (y or n)?'
7113 . ./myread
7114 case "$ans" in
7115 y|Y)
7116         cat <<EOM
7117
7118 Please list any extra modules or bundles to be installed from CPAN,
7119 with spaces between the names.  The names can be in any format the
7120 'install' command of CPAN.pm will understand.  (Answer 'none',
7121 without the quotes, to install no extra modules or bundles.)
7122 EOM
7123         rp='Extras?'
7124         dflt="$extras"
7125         . ./myread
7126         extras="$ans"
7127 esac
7128 case "$extras" in
7129 ''|'none')
7130         val=''
7131         $rm -f ../extras.lst
7132         ;;
7133 *)      echo "(Saving the list of extras for later...)"
7134         echo "$extras" > ../extras.lst
7135         val="'$extras'"
7136         ;;
7137 esac
7138 set extras
7139 eval $setvar
7140 echo " "
7141
7142 : Find perl5.005 or later.
7143 echo "Looking for a previously installed perl5.005 or later... "
7144 case "$perl5" in
7145 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7146                 : Check if this perl is recent and can load a simple module
7147                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7148                         perl5=$tdir/perl
7149                         break;
7150                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7151                         perl5=$tdir/perl5
7152                         break;
7153                 fi
7154         done
7155         ;;
7156 *)      perl5="$perl5"
7157         ;;
7158 esac
7159 case "$perl5" in
7160 '')     echo "None found.  That's ok.";;
7161 *)      echo "Using $perl5." ;;
7162 esac
7163
7164 : Determine list of previous versions to include in @INC
7165 $cat > getverlist <<EOPL
7166 #!$perl5 -w
7167 use File::Basename;
7168 \$api_versionstring = "$api_versionstring";
7169 \$version = "$version";
7170 \$stem = "$sitelib_stem";
7171 \$archname = "$archname";
7172 EOPL
7173         $cat >> getverlist <<'EOPL'
7174 # Can't have leading @ because metaconfig interprets it as a command!
7175 ;@inc_version_list=();
7176 # XXX Redo to do opendir/readdir? 
7177 if (-d $stem) {
7178     chdir($stem);
7179     ;@candidates = glob("5.*");
7180 }
7181 else {
7182     ;@candidates = ();
7183 }
7184
7185 # XXX ToDo:  These comparisons must be reworked when two-digit
7186 # subversions come along, so that 5.7.10 compares as greater than
7187 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7188 # widespread that we can use the built-in version vectors rather
7189 # than reinventing them here.  For 5.6.0, however, we must
7190 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7191 foreach $d (@candidates) {
7192     if ($d lt $version) {
7193         if ($d ge $api_versionstring) {
7194             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7195         }
7196         elsif ($d ge "5.005") {
7197             unshift(@inc_version_list, grep { -d } $d);
7198         }
7199     }
7200     else {
7201         # Skip newer version.  I.e. don't look in
7202         # 5.7.0 if we're installing 5.6.1.
7203     }
7204 }
7205
7206 if (@inc_version_list) {
7207     print join(' ', @inc_version_list);
7208 }
7209 else {
7210     # Blank space to preserve value for next Configure run.
7211     print " ";
7212 }
7213 EOPL
7214 chmod +x getverlist
7215 case "$inc_version_list" in
7216 '')     if test -x "$perl5$exe_ext"; then
7217                 dflt=`$perl5 getverlist`
7218         else
7219                 dflt='none'
7220         fi
7221         ;;
7222 $undef) dflt='none' ;;
7223 *)  eval dflt=\"$inc_version_list\" ;;
7224 esac
7225 case "$dflt" in
7226 ''|' ') dflt=none ;;
7227 esac
7228 case "$dflt" in
7229 5.005) case "$bincompat5005" in
7230        $define|true|[yY]*) ;;
7231        *) dflt=none ;;
7232        esac
7233        ;;
7234 esac
7235 $cat <<'EOM'
7236
7237 In order to ease the process of upgrading, this version of perl 
7238 can be configured to use modules built and installed with earlier 
7239 versions of perl that were installed under $prefix.  Specify here
7240 the list of earlier versions that this version of perl should check.
7241 If Configure detected no earlier versions of perl installed under
7242 $prefix, then the list will be empty.  Answer 'none' to tell perl
7243 to not search earlier versions.
7244
7245 The default should almost always be sensible, so if you're not sure,
7246 just accept the default.
7247 EOM
7248
7249 rp='List of earlier versions to include in @INC?'
7250 . ./myread
7251 case "$ans" in
7252 [Nn]one|''|' ') inc_version_list=' ' ;;
7253 *) inc_version_list="$ans" ;;
7254 esac
7255 case "$inc_version_list" in
7256 ''|' ') 
7257         inc_version_list_init='0';;
7258 *)      inc_version_list_init=`echo $inc_version_list |
7259                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7260         ;;
7261 esac
7262 $rm -f getverlist
7263
7264 : determine whether to install perl also as /usr/bin/perl
7265
7266 echo " "
7267 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7268         $cat <<EOM
7269 Many scripts expect perl to be installed as /usr/bin/perl.
7270 I can install the perl you are about to compile also as /usr/bin/perl
7271 (in addition to $installbin/perl).
7272 EOM
7273         case "$installusrbinperl" in
7274         "$undef"|[nN]*) dflt='n';;
7275         *)              dflt='y';;
7276         esac
7277         rp="Do you want to install perl as /usr/bin/perl?"
7278         . ./myread
7279         case "$ans" in
7280         [yY]*)  val="$define";;
7281         *)      val="$undef" ;;
7282         esac
7283 else
7284         val="$undef"
7285 fi
7286 set installusrbinperl
7287 eval $setvar
7288
7289 : see if dld is available
7290 set dld.h i_dld
7291 eval $inhdr
7292
7293 : see if dlopen exists
7294 xxx_runnm="$runnm"
7295 runnm=false
7296 set dlopen d_dlopen
7297 eval $inlibc
7298 runnm="$xxx_runnm"
7299
7300 : determine which dynamic loading, if any, to compile in
7301 echo " "
7302 dldir="ext/DynaLoader"
7303 case "$usedl" in
7304 $define|y|true)
7305         dflt='y'
7306         usedl="$define"
7307         ;;
7308 $undef|n|false)
7309         dflt='n'
7310         usedl="$undef"
7311         ;;
7312 *) 
7313         dflt='n'
7314         case "$d_dlopen" in
7315             $define) dflt='y' ;;
7316         esac
7317         case "$i_dld" in
7318             $define) dflt='y' ;;
7319         esac
7320         : Does a dl_xxx.xs file exist for this operating system
7321         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7322         ;;
7323 esac
7324 rp="Do you wish to use dynamic loading?"
7325 . ./myread
7326 usedl="$ans"
7327 case "$ans" in
7328 y*) usedl="$define"
7329         case "$dlsrc" in
7330         '')
7331                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7332                         dflt="$dldir/dl_${osname}.xs"
7333                 elif $test "$d_dlopen" = "$define" ; then
7334                         dflt="$dldir/dl_dlopen.xs"
7335                 elif $test "$i_dld" = "$define" ; then
7336                         dflt="$dldir/dl_dld.xs"
7337                 else
7338                         dflt=''
7339                 fi
7340                 ;;
7341         *)      dflt="$dldir/$dlsrc"
7342                 ;;
7343         esac
7344     echo "The following dynamic loading files are available:"
7345         : Can not go over to $dldir because getfile has path hard-coded in.
7346         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7347         rp="Source file to use for dynamic loading"
7348         fn="fne"
7349         gfpth="$src"
7350         . ./getfile
7351         usedl="$define"
7352         : emulate basename
7353         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7354
7355         $cat << EOM
7356
7357 Some systems may require passing special flags to $cc -c to
7358 compile modules that will be used to create a shared library.
7359 To use no flags, say "none".
7360
7361 EOM
7362     case "$cccdlflags" in
7363     '') case "$gccversion" in
7364                 '') case "$osname" in
7365                         hpux)   dflt='+z' ;;
7366                         next)   dflt='none' ;;
7367                         irix*)  dflt='-KPIC' ;;
7368                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7369                         sunos)  dflt='-pic' ;;
7370                         *)      dflt='none' ;;
7371                     esac
7372                         ;;
7373                 *)  case "$osname" in
7374                         darwin) dflt='none' ;;
7375                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7376                         *)      dflt='-fpic' ;;
7377                     esac ;;
7378             esac ;;
7379         ' ') dflt='none' ;;
7380     *)  dflt="$cccdlflags" ;;
7381     esac
7382     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7383     . ./myread
7384     case "$ans" in
7385     none) cccdlflags=' ' ;;
7386     *) cccdlflags="$ans" ;;
7387     esac
7388
7389     cat << EOM
7390
7391 Some systems use ld to create libraries that can be dynamically loaded,
7392 while other systems (such as those using ELF) use $cc.
7393
7394 EOM
7395         case "$ld" in
7396         '')     $cat >try.c <<'EOM'
7397 /* Test for whether ELF binaries are produced */
7398 #include <fcntl.h>
7399 #include <stdlib.h>
7400 int main() {
7401         char b[4];
7402         int i = open("a.out",O_RDONLY);
7403         if(i == -1) 
7404                 exit(1); /* fail */
7405         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7406                 exit(0); /* succeed (yes, it's ELF) */
7407         else
7408                 exit(1); /* fail */
7409 }
7410 EOM
7411                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7412                         cat <<EOM
7413 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7414 EOM
7415                         dflt="$cc"
7416                 else
7417                         echo "I'll use ld to build dynamic libraries."
7418                         dflt='ld'
7419                 fi
7420                 rm -f try.c a.out
7421                 ;;
7422         *)      dflt="$ld"
7423                 ;;
7424         esac
7425
7426     rp="What command should be used to create dynamic libraries?"
7427     . ./myread
7428         ld="$ans"
7429
7430     cat << EOM
7431
7432 Some systems may require passing special flags to $ld to create a
7433 library that can be dynamically loaded.  If your ld flags include
7434 -L/other/path options to locate libraries outside your loader's normal
7435 search path, you may need to specify those -L options here as well.  To
7436 use no flags, say "none".
7437
7438 EOM
7439     case "$lddlflags" in
7440     '') case "$osname" in
7441                         beos) dflt='-nostart' ;;
7442                         hpux) dflt='-b';
7443                               case "$gccversion" in
7444                               '') dflt="$dflt +vnocompatwarnings" ;;
7445                               esac
7446                               ;;        
7447                         linux|irix*)    dflt='-shared' ;;
7448                         next)  dflt='none' ;;
7449                         solaris) dflt='-G' ;;
7450                         sunos) dflt='-assert nodefinitions' ;;
7451                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7452                 *)     dflt='none' ;;
7453                         esac
7454                         ;;
7455     *) dflt="$lddlflags" ;;
7456     esac
7457
7458         : Try to guess additional flags to pick up local libraries.
7459         : Be careful not to append to a plain 'none'
7460         case "$dflt" in
7461         none) dflt='' ;;
7462         esac
7463         for thisflag in $ldflags; do
7464                 case "$thisflag" in
7465                 -L*|-R*|-Wl,-R*)
7466                         case " $dflt " in
7467                         *" $thisflag "*) ;;
7468                         *) dflt="$dflt $thisflag" ;;
7469                         esac
7470                         ;;
7471                 esac
7472         done
7473
7474         case "$dflt" in
7475         ''|' ') dflt='none' ;;
7476         esac
7477
7478     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7479     . ./myread
7480     case "$ans" in
7481     none) lddlflags=' ' ;;
7482     *) lddlflags="$ans" ;;
7483     esac
7484
7485         cat <<EOM
7486
7487 Some systems may require passing special flags to $cc to indicate that
7488 the resulting executable will use dynamic linking.  To use no flags,
7489 say "none".
7490
7491 EOM
7492     case "$ccdlflags" in
7493     '') case "$osname" in
7494                 hpux)   dflt='-Wl,-E' ;;
7495                 linux)  dflt='-rdynamic' ;;
7496                 next)   dflt='none' ;;
7497                 sunos)  dflt='none' ;;
7498                 *)      dflt='none' ;;
7499             esac ;;
7500     ' ')  dflt='none' ;;
7501     *)  dflt="$ccdlflags" ;;
7502     esac
7503     rp="Any special flags to pass to $cc to use dynamic linking?"
7504     . ./myread
7505     case "$ans" in
7506     none) ccdlflags=' ' ;;
7507     *) ccdlflags="$ans" ;;
7508     esac
7509     ;;
7510 *)  usedl="$undef"
7511         ld='ld'
7512     dlsrc='dl_none.xs'
7513     lddlflags=''
7514     ccdlflags=''
7515     ;;
7516 esac
7517
7518 also=''
7519 case "$usedl" in
7520 $undef)
7521         # No dynamic loading being used, so don't bother even to prompt.
7522         useshrplib='false'
7523         ;;
7524 *)      case "$useshrplib" in
7525         '')     case "$osname" in
7526                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7527                         dflt=y
7528                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7529                         ;;
7530                 next*)
7531                         case "$osvers" in
7532                         4*)     dflt=y
7533                                 also='Building a shared libperl is needed for MAB support.'
7534                                 ;;
7535                         *)      dflt=n
7536                                 ;;
7537                         esac
7538                         ;;
7539                 *)      dflt=n
7540                         ;;
7541                 esac
7542                 ;;
7543         $define|true|[Yy]*)
7544                 dflt=y
7545                 ;;
7546         *)      dflt=n
7547                 ;;
7548         esac
7549         $cat << EOM
7550
7551 The perl executable is normally obtained by linking perlmain.c with
7552 libperl${_a}, any static extensions (usually just DynaLoader), and
7553 any other libraries needed on this system (such as -lm, etc.).  Since
7554 your system supports dynamic loading, it is probably possible to build
7555 a shared libperl.$so.  If you will have more than one executable linked
7556 to libperl.$so, this will significantly reduce the size of each
7557 executable, but it may have a noticeable affect on performance.  The
7558 default is probably sensible for your system.
7559 $also
7560
7561 EOM
7562         rp="Build a shared libperl.$so (y/n)"
7563         . ./myread
7564         case "$ans" in
7565         true|$define|[Yy]*)
7566                 useshrplib='true'  ;;
7567         *)      useshrplib='false' ;;
7568         esac
7569         ;;
7570 esac
7571
7572 case "$useshrplib" in
7573 true)
7574         case "$libperl" in
7575         '')
7576                 # Figure out a good name for libperl.so.  Since it gets stored in
7577                 # a version-specific architecture-dependent library, the version
7578                 # number isn't really that important, except for making cc/ld happy.
7579                 #
7580                 # A name such as libperl.so.3.1
7581                 majmin="libperl.$so.$patchlevel.$subversion"
7582                 # A name such as libperl.so.301
7583                 majonly=`echo $patchlevel $subversion |
7584                         $awk '{printf "%d%02d", $1, $2}'`
7585                 majonly=libperl.$so.$majonly
7586                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7587                 # rely on figuring it out from the naming of libc.
7588                 case "${osname}${osvers}" in
7589                 next4*)
7590                         dflt=libperl.5.$so
7591                         # XXX How handle the --version stuff for MAB?
7592                         ;;
7593                 linux*)  # ld won't link with a bare -lperl otherwise.
7594                         dflt=libperl.$so
7595                         ;;
7596                 cygwin*) # ld links against an importlib
7597                         dflt=libperl$lib_ext
7598                         ;;
7599                 *)      # Try to guess based on whether libc has major.minor.
7600                         case "$libc" in
7601                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7602                         *libc.$so.[0-9]*) dflt=$majonly ;;
7603                         *)      dflt=libperl.$so ;;
7604                         esac
7605                         ;;
7606                 esac
7607                 ;;
7608         *)      dflt=$libperl
7609                 ;;
7610         esac
7611         cat << EOM
7612
7613 I need to select a good name for the shared libperl.  If your system uses
7614 library names with major and minor numbers, then you might want something
7615 like $majmin.  Alternatively, if your system uses a single version
7616 number for shared libraries, then you might want to use $majonly.
7617 Or, your system might be quite happy with a simple libperl.$so.
7618
7619 Since the shared libperl will get installed into a version-specific
7620 architecture-dependent directory, the version number of the shared perl
7621 library probably isn't important, so the default should be o.k.
7622
7623 EOM
7624         rp='What name do you want to give to the shared libperl?'
7625         . ./myread
7626         libperl=$ans
7627         echo "Ok, I'll use $libperl"
7628         ;;
7629 *)
7630         libperl="libperl${_a}"
7631         ;;
7632 esac
7633
7634 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7635 case "$shrpdir" in
7636 '') ;;
7637 *)      $cat >&4 <<EOM
7638 WARNING:  Use of the shrpdir variable for the installation location of
7639 the shared $libperl is not supported.  It was never documented and
7640 will not work in this version.  Let me (perlbug@perl.org)
7641 know of any problems this may cause.
7642
7643 EOM
7644         case "$shrpdir" in
7645         "$archlibexp/CORE")
7646                 $cat >&4 <<EOM
7647 But your current setting of $shrpdir is
7648 the default anyway, so it's harmless.
7649 EOM
7650                 ;;
7651         *)
7652                 $cat >&4 <<EOM
7653 Further, your current attempted setting of $shrpdir
7654 conflicts with the value of $archlibexp/CORE
7655 that installperl will use.
7656 EOM
7657                 ;;
7658         esac
7659         ;;
7660 esac
7661
7662 # How will the perl executable find the installed shared $libperl?
7663 # Add $xxx to ccdlflags.
7664 # If we can't figure out a command-line option, use $shrpenv to
7665 # set env LD_RUN_PATH.  The main perl makefile uses this.
7666 shrpdir=$archlibexp/CORE
7667 xxx=''
7668 tmp_shrpenv=''
7669 if "$useshrplib"; then
7670     case "$osname" in 
7671         aix)
7672                 # We'll set it in Makefile.SH...
7673                 ;;
7674         solaris)
7675                 xxx="-R $shrpdir"
7676                 ;;
7677         freebsd|netbsd)
7678                 xxx="-Wl,-R$shrpdir"
7679                 ;;
7680         bsdos|linux|irix*|dec_osf)
7681                 xxx="-Wl,-rpath,$shrpdir"
7682                 ;;
7683         next)
7684                 # next doesn't like the default...
7685                 ;;
7686         beos)
7687                 # beos doesn't like the default, either.
7688                 ;;
7689         hpux*)
7690                 # hpux doesn't like the default, either.
7691                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7692                 ;;
7693         *)
7694                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7695                 ;;
7696         esac
7697         case "$xxx" in
7698         '') ;;
7699         *)      
7700                 # Only add $xxx if it isn't already in ccdlflags.
7701                 case " $ccdlflags " in
7702                 *" $xxx "*)     ;;
7703                 *)      ccdlflags="$ccdlflags $xxx"
7704                         cat <<EOM >&4
7705
7706 Adding $xxx to the flags
7707 passed to $ld so that the perl executable will find the 
7708 installed shared $libperl.
7709
7710 EOM
7711                         ;;
7712                 esac
7713                 ;;
7714         esac
7715 fi
7716 # Fix ccdlflags in AIX for building external extensions.
7717 # (For building Perl itself bare -bE:perl.exp is needed,
7718 #  Makefile.SH takes care of this.)
7719 case "$osname" in
7720 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7721 esac
7722 # Respect a hint or command-line value.
7723 case "$shrpenv" in
7724 '') shrpenv="$tmp_shrpenv" ;;
7725 esac
7726 case "$ldlibpthname" in
7727 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7728 none)   ldlibpthname='' ;;
7729 esac
7730
7731 : determine where manual pages are on this system
7732 echo " "
7733 case "$sysman" in
7734 '') 
7735         syspath='/usr/share/man/man1 /usr/man/man1'
7736         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7737         syspath="$syspath /usr/man/u_man/man1"
7738         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7739         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7740         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7741         sysman=`./loc . /usr/man/man1 $syspath`
7742         ;;
7743 esac
7744 if $test -d "$sysman"; then
7745         echo "System manual is in $sysman." >&4
7746 else
7747         echo "Could not find manual pages in source form." >&4
7748 fi
7749
7750 : determine where manual pages go
7751 set man1dir man1dir none
7752 eval $prefixit
7753 $cat <<EOM
7754
7755 $spackage has manual pages available in source form.
7756 EOM
7757 case "$nroff" in
7758 nroff)
7759         echo "However, you don't have nroff, so they're probably useless to you."
7760         case "$man1dir" in
7761         '') man1dir="none";;
7762         esac;;
7763 esac
7764 echo "If you don't want the manual sources installed, answer 'none'."
7765 case "$man1dir" in
7766 ' ') dflt=none
7767         ;;
7768 '')
7769         lookpath="$prefixexp/share/man/man1"
7770         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7771         lookpath="$lookpath $prefixexp/man/p_man/man1"
7772         lookpath="$lookpath $prefixexp/man/u_man/man1"
7773         lookpath="$lookpath $prefixexp/man/man.1"
7774         case "$sysman" in
7775         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7776         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7777         esac
7778         set dflt
7779         eval $prefixup
7780         ;;
7781 *)  dflt="$man1dir"
7782         ;;
7783 esac
7784 echo " "
7785 fn=dn+~
7786 rp="Where do the main $spackage manual pages (source) go?"
7787 . ./getfile
7788 if $test "X$man1direxp" != "X$ansexp"; then
7789         installman1dir=''
7790 fi
7791 man1dir="$ans"
7792 man1direxp="$ansexp"
7793 case "$man1dir" in
7794 '')     man1dir=' '
7795         installman1dir='';;
7796 esac
7797
7798 : Change installation prefix, if necessary.
7799 if $test X"$prefix" != X"$installprefix"; then
7800         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7801 else
7802         installman1dir="$man1direxp"
7803 fi
7804
7805 : What suffix to use on installed man pages
7806
7807 case "$man1dir" in
7808 ' ')
7809         man1ext='0'
7810         ;;
7811 *)
7812         rp="What suffix should be used for the main $spackage man pages?"
7813         case "$man1ext" in
7814         '')     case "$man1dir" in
7815                 *1)  dflt=1 ;;
7816                 *1p) dflt=1p ;;
7817                 *1pm) dflt=1pm ;;
7818                 *l) dflt=l;;
7819                 *n) dflt=n;;
7820                 *o) dflt=o;;
7821                 *p) dflt=p;;
7822                 *C) dflt=C;;
7823                 *L) dflt=L;;
7824                 *L1) dflt=L1;;
7825                 *) dflt=1;;
7826                 esac
7827                 ;;
7828         *)      dflt="$man1ext";;
7829         esac
7830         . ./myread
7831         man1ext="$ans"
7832         ;;
7833 esac
7834
7835 : see if we can have long filenames
7836 echo " "
7837 first=123456789abcdef
7838 $rm -f $first
7839 if (echo hi >$first) 2>/dev/null; then
7840         if $test -f 123456789abcde; then
7841                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7842                 val="$undef"
7843         else
7844                 echo 'You can have filenames longer than 14 characters.'>&4
7845                 val="$define"
7846         fi
7847 else
7848         $cat <<'EOM'
7849 You can't have filenames longer than 14 chars.
7850 You can't even think about them!
7851 EOM
7852         val="$undef"
7853 fi 
7854 set d_flexfnam
7855 eval $setvar
7856 $rm -rf 123456789abcde*
7857
7858 : determine where library module manual pages go
7859 set man3dir man3dir none
7860 eval $prefixit
7861 $cat <<EOM
7862
7863 $spackage has manual pages for many of the library modules.
7864 EOM
7865
7866 case "$nroff" in
7867 nroff)
7868         $cat <<'EOM'
7869 However, you don't have nroff, so they're probably useless to you.
7870 EOM
7871         case "$man3dir" in
7872         '') man3dir="none";;
7873         esac;;
7874 esac
7875
7876 case "$d_flexfnam" in
7877 undef)
7878         $cat <<'EOM'
7879 However, your system can't handle the long file names like File::Basename.3. 
7880 EOM
7881         case "$man3dir" in
7882         '') man3dir="none";;
7883         esac;;
7884 esac
7885
7886 echo "If you don't want the manual sources installed, answer 'none'."
7887 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7888 case "$man3dir" in
7889 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7890         if $test -d "$privlib/man/man3"; then
7891                 cat <<EOM >&4
7892
7893 WARNING:  Previous versions of perl installed man3 pages into
7894 $privlib/man/man3.  This version will suggest a 
7895 new default of $dflt.  
7896 EOM
7897                 tdflt=$dflt
7898                 dflt='n'
7899                 rp='Do you wish to preserve the old behavior?(y/n)'
7900                 . ./myread
7901                 case "$ans" in
7902                 y*) dflt="$privlib/man/man3" ;;
7903                 *)  dflt=$tdflt ;;
7904                 esac
7905     fi
7906         ;;
7907 *)      dflt="$man3dir" ;;
7908 esac
7909 case "$dflt" in
7910 ' ') dflt=none ;;
7911 esac
7912 echo " "
7913 fn=dn+~
7914 rp="Where do the $package library man pages (source) go?"
7915 . ./getfile
7916 man3dir="$ans"
7917 man3direxp="$ansexp"
7918 case "$man3dir" in
7919 '')     man3dir=' '
7920         installman3dir='';;
7921 esac
7922
7923 : Change installation prefix, if necessary.
7924 if $test X"$prefix" != X"$installprefix"; then
7925         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7926 else
7927         installman3dir="$man3direxp"
7928 fi
7929
7930 : What suffix to use on installed man pages
7931 case "$man3dir" in
7932 ' ')
7933         man3ext='0'
7934         ;;
7935 *)
7936         rp="What suffix should be used for the $package library man pages?"
7937         case "$man3ext" in
7938         '')     case "$man3dir" in
7939                 *3)  dflt=3 ;;
7940                 *3p) dflt=3p ;;
7941                 *3pm) dflt=3pm ;;
7942                 *l) dflt=l;;
7943                 *n) dflt=n;;
7944                 *o) dflt=o;;
7945                 *p) dflt=p;;
7946                 *C) dflt=C;;
7947                 *L) dflt=L;;
7948                 *L3) dflt=L3;;
7949                 *) dflt=3;;
7950                 esac
7951                 ;;
7952         *)      dflt="$man3ext";;
7953         esac
7954         . ./myread
7955         man3ext="$ans"
7956         ;;
7957 esac
7958
7959 : see if we have to deal with yellow pages, now NIS.
7960 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7961         if $test -f /usr/etc/nibindd; then
7962                 echo " "
7963                 echo "I'm fairly confident you're on a NeXT."
7964                 echo " "
7965                 rp='Do you get the hosts file via NetInfo?'
7966                 dflt=y
7967                 case "$hostcat" in
7968                 nidump*) ;;
7969                 '') ;;
7970                 *) dflt=n;;
7971                 esac
7972                 . ./myread
7973                 case "$ans" in
7974                 y*) hostcat='nidump hosts .';;
7975                 *)      case "$hostcat" in
7976                         nidump*) hostcat='';;
7977                         esac
7978                         ;;
7979                 esac
7980         fi
7981         case "$hostcat" in
7982         nidump*) ;;
7983         *)
7984                 case "$hostcat" in
7985                 *ypcat*) dflt=y;;
7986                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7987                                 dflt=y
7988                         else
7989                                 dflt=n
7990                         fi;;
7991                 *) dflt=n;;
7992                 esac
7993                 echo " "
7994                 rp='Are you getting the hosts file via yellow pages?'
7995                 . ./myread
7996                 case "$ans" in
7997                 y*) hostcat='ypcat hosts';;
7998                 *) hostcat='cat /etc/hosts';;
7999                 esac
8000                 ;;
8001         esac
8002 fi
8003 case "$hostcat" in
8004 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
8005 esac
8006 case "$groupcat" in
8007 '') test -f /etc/group && groupcat='cat /etc/group';;
8008 esac
8009 case "$passcat" in
8010 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
8011 esac
8012
8013 : now get the host name
8014 echo " "
8015 echo "Figuring out host name..." >&4
8016 case "$myhostname" in
8017 '') cont=true
8018         echo 'Maybe "hostname" will work...'
8019         if tans=`sh -c hostname 2>&1` ; then
8020                 myhostname=$tans
8021                 phostname=hostname
8022                 cont=''
8023         fi
8024         ;;
8025 *) cont='';;
8026 esac
8027 if $test "$cont"; then
8028         if ./xenix; then
8029                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
8030                 if tans=`cat /etc/systemid 2>&1` ; then
8031                         myhostname=$tans
8032                         phostname='cat /etc/systemid'
8033                         echo "Whadyaknow.  Xenix always was a bit strange..."
8034                         cont=''
8035                 fi
8036         elif $test -r /etc/systemid; then
8037                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8038         fi
8039 fi
8040 if $test "$cont"; then
8041         echo 'No, maybe "uuname -l" will work...'
8042         if tans=`sh -c 'uuname -l' 2>&1` ; then
8043                 myhostname=$tans
8044                 phostname='uuname -l'
8045         else
8046                 echo 'Strange.  Maybe "uname -n" will work...'
8047                 if tans=`sh -c 'uname -n' 2>&1` ; then
8048                         myhostname=$tans
8049                         phostname='uname -n'
8050                 else
8051                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8052                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8053                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8054                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8055                         else
8056                                 case "$myhostname" in
8057                                 '') echo "Does this machine have an identity crisis or something?"
8058                                         phostname='';;
8059                                 *)
8060                                         echo "Well, you said $myhostname before..."
8061                                         phostname='echo $myhostname';;
8062                                 esac
8063                         fi
8064                 fi
8065         fi
8066 fi
8067 case "$myhostname" in
8068 '') myhostname=noname ;;
8069 esac
8070 : you do not want to know about this
8071 set $myhostname
8072 myhostname=$1
8073
8074 : verify guess
8075 if $test "$myhostname" ; then
8076         dflt=y
8077         rp='Your host name appears to be "'$myhostname'".'" Right?"
8078         . ./myread
8079         case "$ans" in
8080         y*) ;;
8081         *) myhostname='';;
8082         esac
8083 fi
8084
8085 : bad guess or no guess
8086 while $test "X$myhostname" = X ; do
8087         dflt=''
8088         rp="Please type the (one word) name of your host:"
8089         . ./myread
8090         myhostname="$ans"
8091 done
8092
8093 : translate upper to lower if necessary
8094 case "$myhostname" in
8095 *[A-Z]*)
8096         echo "(Normalizing case in your host name)"
8097         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8098         ;;
8099 esac
8100
8101 case "$myhostname" in
8102 *.*)
8103         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8104         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8105         echo "(Trimming domain name from host name--host name is now $myhostname)"
8106         ;;
8107 *) case "$mydomain" in
8108         '')
8109                 {
8110                         test "X$hostcat" = "Xypcat hosts" &&
8111                         ypmatch "$myhostname" hosts 2>/dev/null |\
8112                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8113                         $test -s hosts
8114                 } || {
8115                         test "X$hostcat" != "X" &&
8116                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8117                                         /[       ]$myhostname[  . ]/p" > hosts
8118                 }
8119                 tmp_re="[       . ]"
8120                 if $test -f hosts; then
8121                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8122                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8123                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8124                                 hosts | $sort | $uniq | \
8125                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8126                         case `$echo X$dflt` in
8127                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8128                                 dflt=.
8129                                 ;;
8130                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8131                                 ;;
8132                         esac
8133                 else
8134                         echo "(I cannot locate a hosts database anywhere)"
8135                         dflt=.
8136                 fi
8137                 case "$dflt" in
8138                 .)
8139                         tans=`./loc resolv.conf X /etc /usr/etc`
8140                         if $test -f "$tans"; then
8141                                 echo "(Attempting domain name extraction from $tans)"
8142                                 dflt=.`$sed -n -e 's/   / /g' \
8143                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8144                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8145                                 case "$dflt" in
8146                                 .) dflt=.`$sed -n -e 's/        / /g' \
8147                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8148                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8149                                         ;;
8150                                 esac
8151                         fi
8152                         ;;
8153                 esac
8154                 case "$dflt" in
8155                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8156                         dflt=.`sh -c domainname 2>/dev/null`
8157                         case "$dflt" in
8158                         '') dflt='.';;
8159                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8160                         esac
8161                         ;;
8162                 esac
8163                 case "$dflt$osname" in
8164                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8165                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8166                         ;;
8167                 esac
8168                 case "$dflt" in
8169                 .) echo "(Lost all hope -- silly guess then)"
8170                         dflt='.nonet'
8171                         ;;
8172                 esac
8173                 $rm -f hosts
8174                 ;;
8175         *) dflt="$mydomain";;
8176         esac;;
8177 esac
8178 echo " "
8179 rp="What is your domain name?"
8180 . ./myread
8181 tans="$ans"
8182 case "$ans" in
8183 '') ;;
8184 .*) ;;
8185 *) tans=".$tans";;
8186 esac
8187 mydomain="$tans"
8188
8189 : translate upper to lower if necessary
8190 case "$mydomain" in
8191 *[A-Z]*)
8192         echo "(Normalizing case in your domain name)"
8193         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8194         ;;
8195 esac
8196
8197 : a little sanity check here
8198 case "$phostname" in
8199 '') ;;
8200 *)
8201         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8202         $myhostname$mydomain|$myhostname) ;;
8203         *)
8204                 case "$phostname" in
8205                 sed*)
8206                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8207                         ;;
8208                 *)
8209                         echo "(That doesn't agree with your $phostname command, by the way.)"
8210                         ;;
8211                 esac
8212         ;;
8213         esac
8214         ;;
8215 esac
8216
8217 $cat <<EOM
8218
8219 I need to get your e-mail address in Internet format if possible, i.e.
8220 something like user@host.domain. Please answer accurately since I have
8221 no easy means to double check it. The default value provided below
8222 is most probably close to reality but may not be valid from outside
8223 your organization...
8224
8225 EOM
8226 cont=x
8227 while test "$cont"; do
8228         case "$cf_email" in
8229         '') dflt="$cf_by@$myhostname$mydomain";;
8230         *) dflt="$cf_email";;
8231         esac
8232         rp='What is your e-mail address?'
8233         . ./myread
8234         cf_email="$ans"
8235         case "$cf_email" in
8236         *@*.*) cont='' ;;
8237         *)
8238                 rp='Address does not look like an Internet one.  Use it anyway?'
8239                 case "$fastread" in
8240                 yes) dflt=y ;;
8241                 *) dflt=n ;;
8242                 esac
8243                 . ./myread
8244                 case "$ans" in
8245                 y*) cont='' ;;
8246                 *) echo " " ;;
8247                 esac
8248                 ;;
8249         esac
8250 done
8251
8252 $cat <<EOM
8253
8254 If you or somebody else will be maintaining perl at your site, please
8255 fill in the correct e-mail address here so that they may be contacted
8256 if necessary. Currently, the "perlbug" program included with perl
8257 will send mail to this address in addition to perlbug@perl.org. You may
8258 enter "none" for no administrator.
8259
8260 EOM
8261 case "$perladmin" in
8262 '') dflt="$cf_email";;
8263 *) dflt="$perladmin";;
8264 esac
8265 rp='Perl administrator e-mail address'
8266 . ./myread
8267 perladmin="$ans"
8268
8269 : determine whether to only install version-specific parts.
8270 echo " "
8271 $cat <<EOM
8272 Do you want to install only the version-specific parts of the perl
8273 distribution?  Usually you do *not* want to do this.
8274 EOM
8275 case "$versiononly" in
8276 "$define"|[Yy]*|true) dflt='y' ;;
8277 *) dflt='n';
8278 esac
8279 rp="Do you want to install only the version-specific parts of perl?"
8280 . ./myread
8281 case "$ans" in
8282 [yY]*)  val="$define";;
8283 *)      val="$undef" ;;
8284 esac
8285 set versiononly
8286 eval $setvar
8287
8288 : figure out how to guarantee perl startup
8289 case "$startperl" in
8290 '')
8291         case "$sharpbang" in
8292         *!)
8293                 $cat <<EOH
8294
8295 I can use the #! construct to start perl on your system. This will
8296 make startup of perl scripts faster, but may cause problems if you
8297 want to share those scripts and perl is not in a standard place
8298 ($binexp/perl) on all your platforms. The alternative is to force
8299 a shell by starting the script with a single ':' character.
8300
8301 EOH
8302                 case "$versiononly" in
8303                 "$define")      dflt="$binexp/perl$version";;  
8304                 *)              dflt="$binexp/perl";;
8305                 esac
8306                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8307                 . ./myread
8308                 case "$ans" in
8309                 none)   startperl=": # use perl";;
8310                 *)      startperl="#!$ans"
8311                         if $test 30 -lt `echo "$ans" | wc -c`; then
8312                                 $cat >&4 <<EOM
8313
8314 WARNING:  Some systems limit the #! command to 32 characters.
8315 If you experience difficulty running Perl scripts with #!, try
8316 installing Perl in a directory with a shorter pathname.
8317
8318 EOM
8319                         fi ;;
8320                 esac
8321                 ;;
8322         *) startperl=": # use perl"
8323                 ;;
8324         esac
8325         ;;
8326 esac
8327 echo "I'll use $startperl to start perl scripts."
8328
8329 : figure best path for perl in scripts
8330 case "$perlpath" in
8331 '')
8332         case "$versiononly" in
8333         "$define")      perlpath="$binexp/perl$version";;
8334         *)              perlpath="$binexp/perl";;
8335         esac
8336         case "$startperl" in
8337         *!*) ;;
8338         *)
8339                 $cat <<EOH
8340
8341 I will use the "eval 'exec'" idiom to start Perl on your system.
8342 I can use the full path of your Perl binary for this purpose, but
8343 doing so may cause problems if you want to share those scripts and
8344 Perl is not always in a standard place ($binexp/perl).
8345
8346 EOH
8347                 dflt="$binexp/perl"
8348                 rp="What path shall I use in \"eval 'exec'\"?"
8349                 . ./myread
8350                 perlpath="$ans"
8351                 ;;
8352         esac
8353         ;;
8354 esac
8355 case "$startperl" in
8356 *!*)    ;;
8357 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8358 esac
8359
8360 : determine where public executable scripts go
8361 set scriptdir scriptdir
8362 eval $prefixit
8363 case "$scriptdir" in
8364 '')
8365         dflt="$bin"
8366         : guess some guesses
8367         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8368         $test -d /usr/share/bin     && dflt=/usr/share/bin
8369         $test -d /usr/local/script  && dflt=/usr/local/script
8370         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8371         $test -d $prefixexp/script  && dflt=$prefixexp/script
8372         set dflt
8373         eval $prefixup
8374         ;;
8375 *)  dflt="$scriptdir"
8376         ;;
8377 esac
8378 $cat <<EOM
8379  
8380 Some installations have a separate directory just for executable scripts so
8381 that they can mount it across multiple architectures but keep the scripts in
8382 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8383 Or you might just lump your scripts in with all your other executables.
8384  
8385 EOM
8386 fn=d~
8387 rp='Where do you keep publicly executable scripts?'
8388 . ./getfile
8389 if $test "X$ansexp" != "X$scriptdirexp"; then
8390         installscript=''
8391 fi
8392 scriptdir="$ans"
8393 scriptdirexp="$ansexp"
8394 : Change installation prefix, if necessary.
8395 if $test X"$prefix" != X"$installprefix"; then
8396         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8397 else
8398         installscript="$scriptdirexp"
8399 fi
8400
8401 : determine where add-on public executables go
8402 case "$sitebin" in
8403 '')     dflt=$siteprefix/bin ;;
8404 *)      dflt=$sitebin ;;
8405 esac
8406 fn=d~
8407 rp='Pathname where the add-on public executables should be installed?'
8408 . ./getfile
8409 sitebin="$ans"
8410 sitebinexp="$ansexp"
8411 : Change installation prefix, if necessary.
8412 if $test X"$prefix" != X"$installprefix"; then
8413         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8414 else
8415         installsitebin="$sitebinexp"
8416 fi
8417
8418 : define an is-a-typedef? function
8419 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8420 case "$inclist" in
8421 "") inclist="sys/types.h";;
8422 esac;
8423 eval "varval=\$$var";
8424 case "$varval" in
8425 "")
8426         $rm -f temp.c;
8427         for inc in $inclist; do
8428                 echo "#include <$inc>" >>temp.c;
8429         done;
8430         echo "#ifdef $type" >> temp.c;
8431         echo "printf(\"We have $type\");" >> temp.c;
8432         echo "#endif" >> temp.c;
8433         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8434         if $contains $type temp.E >/dev/null 2>&1; then
8435                 eval "$var=\$type";
8436         else
8437                 eval "$var=\$def";
8438         fi;
8439         $rm -f temp.?;;
8440 *) eval "$var=\$varval";;
8441 esac'
8442
8443 : define an is-a-typedef? function that prompts if the type is not available.
8444 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8445 case "$inclist" in
8446 "") inclist="sys/types.h";;
8447 esac;
8448 eval "varval=\$$var";
8449 case "$varval" in
8450 "")
8451         $rm -f temp.c;
8452         for inc in $inclist; do
8453                 echo "#include <$inc>" >>temp.c;
8454         done;
8455         echo "#ifdef $type" >> temp.c;
8456         echo "printf(\"We have $type\");" >> temp.c;
8457         echo "#endif" >> temp.c;
8458         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8459         echo " " ;
8460         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8461         if $contains $type temp.E >/dev/null 2>&1; then
8462                 echo "$type found." >&4;
8463                 eval "$var=\$type";
8464         else
8465                 echo "$type NOT found." >&4;
8466                 dflt="$def";
8467                 . ./myread ;
8468                 eval "$var=\$ans";
8469         fi;
8470         $rm -f temp.?;;
8471 *) eval "$var=\$varval";;
8472 esac'
8473
8474 : see what type lseek is declared as in the kernel
8475 rp="What is the type used for lseek's offset on this system?"
8476 set off_t lseektype long stdio.h sys/types.h
8477 eval $typedef_ask
8478
8479 echo " "
8480 echo "Checking to see how big your file offsets are..." >&4
8481 $cat >try.c <<EOCP
8482 #include <sys/types.h>
8483 #include <stdio.h>
8484 int main()
8485 {
8486     printf("%d\n", (int)sizeof($lseektype));
8487     return(0); 
8488 }
8489 EOCP
8490 set try
8491 if eval $compile_ok; then
8492         lseeksize=`$run ./try`
8493         echo "Your file offsets are $lseeksize bytes long."
8494 else
8495         dflt=$longsize
8496         echo " "
8497         echo "(I can't seem to compile the test program.  Guessing...)"
8498         rp="What is the size of your file offsets (in bytes)?"
8499         . ./myread
8500         lseeksize="$ans"
8501 fi
8502 $rm -f try.c try
8503
8504 : see what type file positions are declared as in the library
8505 rp="What is the type for file position used by fsetpos()?"
8506 set fpos_t fpostype long stdio.h sys/types.h
8507 eval $typedef_ask
8508
8509 echo " "
8510 case "$fpostype" in
8511 *_t) zzz="$fpostype"    ;;
8512 *)   zzz="fpos_t"       ;;
8513 esac
8514 echo "Checking the size of $zzz..." >&4 
8515 cat > try.c <<EOCP
8516 #include <sys/types.h>
8517 #include <stdio.h>
8518 int main() {
8519     printf("%d\n", (int)sizeof($fpostype));
8520     exit(0);
8521 }
8522 EOCP
8523 set try
8524 if eval $compile_ok; then
8525         yyy=`$run ./try`
8526         case "$yyy" in
8527         '')     fpossize=4
8528                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8529                 ;;
8530         *)      fpossize=$yyy
8531                 echo "Your $zzz is $fpossize bytes long."
8532                 ;;
8533         esac
8534 else
8535         dflt="$longsize"
8536         echo " " >&4
8537         echo "(I can't compile the test program.  Guessing...)" >&4
8538         rp="What is the size of your file positions (in bytes)?"
8539         . ./myread
8540         fpossize="$ans"
8541 fi
8542
8543
8544
8545 # Backward compatibility (uselfs is deprecated).
8546 case "$uselfs" in
8547 "$define"|true|[yY]*)
8548         cat <<EOM >&4
8549
8550 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8551 EOM
8552         uselargefiles="$define"
8553         ;;
8554 esac                          
8555
8556 case "$lseeksize:$fpossize" in
8557 8:8) cat <<EOM
8558
8559 You can have files larger than 2 gigabytes.
8560 EOM
8561    val="$define" ;;
8562 *)    case "$uselargefiles" in
8563    "$undef"|false|[nN]*) dflt='n' ;;
8564    *)   dflt='y' ;;
8565    esac
8566    cat <<EOM
8567
8568 Perl can be built to understand large files (files larger than 2 gigabytes)
8569 on some systems.  To do so, Configure can be run with -Duselargefiles.
8570
8571 If this doesn't make any sense to you, just accept the default '$dflt'.
8572 EOM
8573    rp='Try to understand large files, if available?'
8574    . ./myread
8575    case "$ans" in
8576    y|Y)         val="$define" ;;
8577    *)           val="$undef"  ;;
8578    esac
8579    ;;
8580 esac
8581 set uselargefiles
8582 eval $setvar
8583 case "$uselargefiles" in
8584 "$define")
8585 : Look for a hint-file generated 'call-back-unit'.  If the
8586 : user has specified that a large files perl is to be built,
8587 : we may need to set or change some other defaults.
8588         if $test -f uselargefiles.cbu; then
8589                 echo "Your platform has some specific hints for large file builds, using them..."
8590                 . ./uselargefiles.cbu
8591                 echo " "
8592                 echo "Rechecking to see how big your file offsets are..." >&4
8593                 $cat >try.c <<EOCP
8594 #include <sys/types.h>
8595 #include <stdio.h>
8596 int main()
8597 {
8598     printf("%d\n", (int)sizeof($lseektype));
8599     return(0); 
8600 }
8601 EOCP
8602                 set try
8603                 if eval $compile_ok; then
8604                         lseeksize=`$run ./try`
8605                         $echo "Your file offsets are now $lseeksize bytes long."
8606                 else
8607                         dflt="$lseeksize"
8608                         echo " "
8609                         echo "(I can't seem to compile the test program.  Guessing...)"
8610                         rp="What is the size of your file offsets (in bytes)?"
8611                         . ./myread
8612                         lseeksize="$ans"
8613                 fi
8614                 case "$fpostype" in
8615                 *_t) zzz="$fpostype"    ;;
8616                 *)   zzz="fpos_t"       ;;
8617                 esac
8618                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8619                 $cat > try.c <<EOCP
8620 #include <sys/types.h>
8621 #include <stdio.h>
8622 int main() {
8623     printf("%d\n", (int)sizeof($fpostype));
8624     exit(0);
8625 }
8626 EOCP
8627                 set try
8628                 if eval $compile_ok; then
8629                         yyy=`$run ./try`
8630                         dflt="$lseeksize"
8631                         case "$yyy" in
8632                         '')     echo " "
8633                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8634                                 ;;
8635                         *)      fpossize=$yyy
8636                                 echo " $fpossize bytes." >&4
8637                                 ;;
8638                         esac
8639                 else
8640                         dflt="$fpossize"
8641                         echo " "
8642                         echo "(I can't compile the test program.  Guessing...)" >&4
8643                         rp="What is the size of your file positions (in bytes)?"
8644                         . ./myread
8645                         fpossize="$ans"
8646                 fi
8647                 $rm -f try.c try
8648         fi
8649         ;;
8650 esac
8651
8652 case "$vendorprefix" in
8653 '')     d_vendorbin="$undef"
8654         vendorbin=''
8655         vendorbinexp=''
8656         ;;
8657 *)      d_vendorbin="$define"
8658         : determine where vendor-supplied executables go.
8659         case "$vendorbin" in
8660         '') dflt=$vendorprefix/bin ;;
8661         *)      dflt="$vendorbin" ;;
8662         esac
8663         fn=d~+
8664         rp='Pathname for the vendor-supplied executables directory?'
8665         . ./getfile
8666         vendorbin="$ans"
8667         vendorbinexp="$ansexp"
8668         ;;
8669 esac
8670 : Change installation prefix, if necessary.
8671 if $test X"$prefix" != X"$installprefix"; then
8672         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8673 else
8674         installvendorbin="$vendorbinexp"
8675 fi
8676
8677 : see if qgcvt exists
8678 set qgcvt d_qgcvt
8679 eval $inlibc
8680
8681 : Check how to convert floats to strings.
8682
8683 if test "X$d_Gconvert" = X; then
8684
8685 echo " "
8686 echo "Checking for an efficient way to convert floats to strings."
8687 echo " " > try.c
8688 case "$uselongdouble" in
8689 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8690 esac
8691 case "$d_longdbl" in
8692 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8693 esac
8694 case "$d_PRIgldbl" in
8695 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8696 esac
8697 $cat >>try.c <<EOP
8698 #ifdef TRY_gconvert
8699 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8700 char *myname = "gconvert";
8701 #endif
8702 #ifdef TRY_gcvt
8703 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8704 char *myname = "gcvt";
8705 #endif
8706 #ifdef TRY_qgcvt
8707 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8708 char *myname = "qgcvt";
8709 #define DOUBLETYPE long double
8710 #endif
8711 #ifdef TRY_sprintf
8712 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8713 #ifdef HAS_PRIgldbl
8714 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8715 #else
8716 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(double)(x))
8717 #endif
8718 #else
8719 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8720 #endif
8721 char *myname = "sprintf";
8722 #endif
8723
8724 #ifndef DOUBLETYPE
8725 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8726 #define DOUBLETYPE long double
8727 #else
8728 #define DOUBLETYPE double
8729 #endif
8730 #endif
8731
8732 #include <stdio.h>
8733
8734 #define I_STDLIB $i_stdlib
8735 #ifdef I_STDLIB
8736 #include <stdlib.h>
8737 #endif
8738
8739 int
8740 checkit(expect, got)
8741 char *expect;
8742 char *got;
8743 {
8744     if (strcmp(expect, got)) {
8745                 printf("%s oddity:  Expected %s, got %s\n",
8746                         myname, expect, got);
8747                 exit(1);
8748         }
8749 }
8750
8751 int main()
8752
8753         char buf[64]; 
8754         buf[63] = '\0';
8755
8756         /* This must be 1st test on (which?) platform */
8757         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8758         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8759         checkit("0.1", buf);
8760
8761         Gconvert((DOUBLETYPE)0.01, 8, 0, buf); 
8762         checkit("0.01", buf);
8763
8764         Gconvert((DOUBLETYPE)0.001, 8, 0, buf); 
8765         checkit("0.001", buf);
8766
8767         Gconvert((DOUBLETYPE)0.0001, 8, 0, buf); 
8768         checkit("0.0001", buf);
8769
8770         Gconvert((DOUBLETYPE)0.00009, 8, 0, buf);
8771         if (strlen(buf) > 5)
8772             checkit("9e-005", buf); /* for Microsoft ?? */
8773         else
8774             checkit("9e-05", buf);
8775
8776         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8777         checkit("1", buf);
8778
8779         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8780         checkit("1.1", buf);
8781
8782         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8783         checkit("1.01", buf);
8784
8785         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8786         checkit("1.001", buf);
8787
8788         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8789         checkit("1.0001", buf);
8790
8791         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8792         checkit("1.00001", buf);
8793
8794         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8795         checkit("1.000001", buf);
8796
8797         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8798         checkit("0", buf);
8799
8800         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8801         checkit("-1", buf);
8802
8803         /* Some Linux gcvt's give 1.e+5 here. */
8804         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8805         checkit("100000", buf);
8806         
8807         /* Some Linux gcvt's give -1.e+5 here. */
8808         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8809         checkit("-100000", buf);
8810
8811         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8812         checkit("123.456", buf);
8813
8814         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8815         Gconvert((DOUBLETYPE)1e34, 8, 0, buf);
8816         /* 34 should be enough to scare even long double
8817          * places into using the e notation. */
8818         if (strlen(buf) > 5)
8819             checkit("1e+034", buf); /* for Microsoft */
8820         else
8821             checkit("1e+34", buf);
8822
8823         /* For Perl, if you add additional tests here, also add them to
8824          * t/base/num.t for benefit of platforms not using Configure or
8825          * overriding d_Gconvert */
8826
8827         exit(0);
8828 }
8829 EOP
8830 : first add preferred functions to our list
8831 xxx_list=""
8832 for xxx_convert in $gconvert_preference; do
8833     case $xxx_convert in
8834     gcvt|gconvert|sprintf) xxx_list="$xxx_list $xxx_convert" ;;
8835     *) echo "Discarding unrecognized gconvert_preference $xxx_convert" >&4 ;;
8836     esac 
8837 done
8838 : then add any others
8839 for xxx_convert in gconvert gcvt sprintf; do
8840     case "$xxx_list" in
8841     *$xxx_convert*) ;;
8842     *) xxx_list="$xxx_list $xxx_convert" ;;
8843     esac 
8844 done
8845
8846 case "$d_longdbl$uselongdouble" in
8847 "$define$define")
8848     : again, add prefered functions to our list first
8849     xxx_ld_list=""
8850     for xxx_convert in $gconvert_ld_preference; do
8851         case $xxx_convert in
8852         qgcvt|gcvt|gconvert|sprintf) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8853         *) echo "Discarding unrecognized gconvert_ld_preference $xxx_convert" ;;
8854         esac
8855     done
8856     : then add qgcvt, sprintf--then, in xxx_list order, gconvert and gcvt
8857     for xxx_convert in qgcvt sprintf $xxx_list; do
8858         case "$xxx_ld_list" in
8859         $xxx_convert*|*" $xxx_convert"*) ;;
8860         *) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8861         esac
8862     done
8863     : if sprintf cannot do long doubles, move it to the end
8864     if test "$d_PRIgldbl" != "$define"; then
8865         xxx_ld_list="`echo $xxx_ld_list|sed s/sprintf//` sprintf"
8866     fi
8867     : if no qgcvt, remove it
8868     if test "$d_qgcvt" != "$define"; then
8869         xxx_ld_list="`echo $xxx_ld_list|sed s/qgcvt//`"
8870     fi
8871     : use the ld_list
8872     xxx_list="$xxx_ld_list"
8873     ;;
8874 esac
8875
8876 for xxx_convert in $xxx_list; do
8877         echo "Trying $xxx_convert..."
8878         $rm -f try try$_o
8879         set try -DTRY_$xxx_convert
8880         if eval $compile; then
8881                 echo "$xxx_convert() found." >&4
8882                 if $run ./try; then
8883                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8884                         break;
8885                 else
8886                         echo "...But $xxx_convert didn't work as I expected."
8887                         xxx_convert=''
8888                 fi
8889         else
8890                 echo "$xxx_convert NOT found." >&4
8891         fi
8892 done
8893
8894 if test X$xxx_convert = X; then
8895     echo "*** WHOA THERE!!! ***" >&4
8896     echo "None of ($xxx_list)  seemed to work properly.  I'll use sprintf." >&4
8897     xxx_convert=sprintf
8898 fi
8899
8900 case "$xxx_convert" in
8901 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8902 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8903 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8904 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8905    "$define$define$define")
8906       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8907    "$define$define$undef")
8908       d_Gconvert='sprintf((b),"%.*g",(n),(double)(x))' ;;
8909    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8910    esac
8911    ;;  
8912 esac
8913
8914 fi
8915
8916 : see if _fwalk exists
8917 set fwalk d__fwalk
8918 eval $inlibc
8919
8920 : Initialize h_fcntl
8921 h_fcntl=false
8922
8923 : Initialize h_sysfile
8924 h_sysfile=false
8925
8926 : access call always available on UNIX
8927 set access d_access
8928 eval $inlibc
8929
8930 : locate the flags for 'access()'
8931 case "$d_access" in
8932 "$define")
8933         echo " "
8934         $cat >access.c <<'EOCP'
8935 #include <sys/types.h>
8936 #ifdef I_FCNTL
8937 #include <fcntl.h>
8938 #endif
8939 #ifdef I_SYS_FILE
8940 #include <sys/file.h>
8941 #endif
8942 #ifdef I_UNISTD
8943 #include <unistd.h>
8944 #endif
8945 int main() {
8946         exit(R_OK);
8947 }
8948 EOCP
8949         : check sys/file.h first, no particular reason here
8950         if $test `./findhdr sys/file.h` && \
8951                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8952                 h_sysfile=true;
8953                 echo "<sys/file.h> defines the *_OK access constants." >&4
8954         elif $test `./findhdr fcntl.h` && \
8955                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8956                 h_fcntl=true;
8957                 echo "<fcntl.h> defines the *_OK access constants." >&4
8958         elif $test `./findhdr unistd.h` && \
8959                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8960                 echo "<unistd.h> defines the *_OK access constants." >&4
8961         else
8962                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8963         fi
8964         ;;
8965 esac
8966 $rm -f access*
8967
8968 : see if accessx exists
8969 set accessx d_accessx
8970 eval $inlibc
8971
8972 : see if alarm exists
8973 set alarm d_alarm
8974 eval $inlibc
8975
8976 : see if atolf exists
8977 set atolf d_atolf
8978 eval $inlibc
8979
8980 : see if atoll exists
8981 set atoll d_atoll
8982 eval $inlibc
8983
8984 : Look for GNU-cc style attribute checking
8985 echo " "
8986 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8987 $cat >attrib.c <<'EOCP'
8988 #include <stdio.h>
8989 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8990 EOCP
8991 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8992         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8993                 echo "Your C compiler doesn't fully support __attribute__."
8994                 val="$undef"
8995         else
8996                 echo "Your C compiler supports __attribute__."
8997                 val="$define"
8998         fi
8999 else
9000         echo "Your C compiler doesn't seem to understand __attribute__ at all."
9001         val="$undef"
9002 fi
9003 set d_attribut
9004 eval $setvar
9005 $rm -f attrib*
9006
9007 : see if bcmp exists
9008 set bcmp d_bcmp
9009 eval $inlibc
9010
9011 : see if bcopy exists
9012 set bcopy d_bcopy
9013 eval $inlibc
9014
9015 : see if this is a unistd.h system
9016 set unistd.h i_unistd
9017 eval $inhdr
9018
9019 : see if getpgrp exists
9020 set getpgrp d_getpgrp
9021 eval $inlibc
9022
9023 case "$d_getpgrp" in
9024 "$define")
9025         echo " "
9026         echo "Checking to see which flavor of getpgrp is in use..."
9027         $cat >try.c <<EOP
9028 #$i_unistd I_UNISTD
9029 #include <sys/types.h>
9030 #ifdef I_UNISTD
9031 #  include <unistd.h>
9032 #endif
9033 int main()
9034 {
9035         if (getuid() == 0) {
9036                 printf("(I see you are running Configure as super-user...)\n");
9037                 setuid(1);
9038         }
9039 #ifdef TRY_BSD_PGRP
9040         if (getpgrp(1) == 0)
9041                 exit(0);
9042 #else
9043         if (getpgrp() > 0)
9044                 exit(0);
9045 #endif
9046         exit(1);
9047 }
9048 EOP
9049         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9050                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
9051                 val="$define"
9052         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9053                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
9054                 val="$undef"
9055         else
9056                 echo "I can't seem to compile and run the test program."
9057                 if ./usg; then
9058                         xxx="a USG one, i.e. you use getpgrp()."
9059                 else
9060                         # SVR4 systems can appear rather BSD-ish.
9061                         case "$i_unistd" in
9062                         $undef)
9063                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
9064                                 val="$define"
9065                                 ;;
9066                         $define)
9067                                 xxx="probably a USG one, i.e. you use getpgrp()."
9068                                 val="$undef"
9069                                 ;;
9070                         esac
9071                 fi
9072                 echo "Assuming your getpgrp is $xxx" >&4
9073         fi
9074         ;;
9075 *) val="$undef";;
9076 esac
9077 set d_bsdgetpgrp
9078 eval $setvar
9079 $rm -f try try.*
9080
9081 : see if setpgrp exists
9082 set setpgrp d_setpgrp
9083 eval $inlibc
9084
9085 case "$d_setpgrp" in
9086 "$define")
9087         echo " "
9088         echo "Checking to see which flavor of setpgrp is in use..."
9089         $cat >try.c <<EOP
9090 #$i_unistd I_UNISTD
9091 #include <sys/types.h>
9092 #ifdef I_UNISTD
9093 #  include <unistd.h>
9094 #endif
9095 int main()
9096 {
9097         if (getuid() == 0) {
9098                 printf("(I see you are running Configure as super-user...)\n");
9099                 setuid(1);
9100         }
9101 #ifdef TRY_BSD_PGRP
9102         if (-1 == setpgrp(1, 1))
9103                 exit(0);
9104 #else
9105         if (setpgrp() != -1)
9106                 exit(0);
9107 #endif
9108         exit(1);
9109 }
9110 EOP
9111         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9112                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9113                 val="$define"
9114         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9115                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9116                 val="$undef"
9117         else
9118                 echo "(I can't seem to compile and run the test program.)"
9119                 if ./usg; then
9120                         xxx="a USG one, i.e. you use setpgrp()."
9121                 else
9122                         # SVR4 systems can appear rather BSD-ish.
9123                         case "$i_unistd" in
9124                         $undef)
9125                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9126                                 val="$define"
9127                                 ;;
9128                         $define)
9129                                 xxx="probably a USG one, i.e. you use setpgrp()."
9130                                 val="$undef"
9131                                 ;;
9132                         esac
9133                 fi
9134                 echo "Assuming your setpgrp is $xxx" >&4
9135         fi
9136         ;;
9137 *) val="$undef";;
9138 esac
9139 set d_bsdsetpgrp
9140 eval $setvar
9141 $rm -f try try.*
9142 : see if bzero exists
9143 set bzero d_bzero
9144 eval $inlibc
9145
9146 : see if signal is declared as pointer to function returning int or void
9147 echo " "
9148 xxx=`./findhdr signal.h`
9149 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9150 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9151         echo "You have int (*signal())() instead of void." >&4
9152         val="$undef"
9153 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9154         echo "You have void (*signal())()." >&4
9155         val="$define"
9156 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9157         echo "You have int (*signal())() instead of void." >&4
9158         val="$undef"
9159 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9160         echo "You have void (*signal())()." >&4
9161         val="$define"
9162 else
9163         case "$d_voidsig" in
9164         '')
9165         echo "I can't determine whether signal handler returns void or int..." >&4
9166                 dflt=void
9167                 rp="What type does your signal handler return?"
9168                 . ./myread
9169                 case "$ans" in
9170                 v*) val="$define";;
9171                 *) val="$undef";;
9172                 esac;;
9173         "$define")
9174                 echo "As you already told me, signal handler returns void." >&4
9175                 val="$define"
9176                 ;;
9177         *)      echo "As you already told me, signal handler returns int." >&4
9178                 val="$undef"
9179                 ;;
9180         esac
9181 fi
9182 set d_voidsig
9183 eval $setvar
9184 case "$d_voidsig" in
9185 "$define") signal_t="void";;
9186 *) signal_t="int";;
9187 esac
9188 $rm -f $$.tmp
9189
9190 : check for ability to cast large floats to 32-bit ints.
9191 echo " "
9192 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9193 if $test "$intsize" -ge 4; then
9194         xxx=int
9195 else
9196         xxx=long
9197 fi
9198 $cat >try.c <<EOCP
9199 #include <stdio.h>
9200 #include <sys/types.h>
9201 #include <signal.h>
9202 $signal_t blech(s) int s; { exit(3); }
9203 int main()
9204 {
9205         $xxx i32;
9206         double f, g;
9207         int result = 0;
9208         char str[16];
9209         signal(SIGFPE, blech);
9210
9211         /* Don't let compiler optimize the test away.  Store the number 
9212            in a writable string for gcc to pass to sscanf under HP/UX.
9213         */
9214         sprintf(str, "2147483647");
9215         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9216         g = 10 * f;
9217         i32  = ($xxx) g;
9218
9219         /* x86 processors will probably give 0x8000 0000, which is a
9220        sign change.  We don't want that.  We want to mimic SPARC
9221            behavior here, which is to preserve the sign and give
9222            back 0x7fff ffff.
9223         */
9224         if (i32 != ($xxx) f)
9225                 result |= 1;
9226         exit(result);
9227 }
9228 EOCP
9229 set try
9230 if eval $compile_ok; then
9231         $run ./try
9232         yyy=$?
9233 else
9234         echo "(I can't seem to compile the test program--assuming it can't)"
9235         yyy=1
9236 fi
9237 case "$yyy" in
9238 0)      val="$define"
9239         echo "Yup, it can."
9240         ;;
9241 *)      val="$undef"
9242         echo "Nope, it can't."
9243         ;;
9244 esac
9245 set d_casti32
9246 eval $setvar
9247 $rm -f try try.*
9248
9249 : check for ability to cast negative floats to unsigned
9250 echo " "
9251 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9252 $cat >try.c <<EOCP
9253 #include <stdio.h>
9254 #include <sys/types.h>
9255 #include <signal.h>
9256 $signal_t blech(s) int s; { exit(7); }
9257 $signal_t blech_in_list(s) int s; { exit(4); }
9258 unsigned long dummy_long(p) unsigned long p; { return p; }
9259 unsigned int dummy_int(p) unsigned int p; { return p; }
9260 unsigned short dummy_short(p) unsigned short p; { return p; }
9261 int main()
9262 {
9263         double f;
9264         unsigned long along;
9265         unsigned int aint;
9266         unsigned short ashort;
9267         int result = 0;
9268         char str[16];
9269         
9270         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9271            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9272            optimized the whole file away
9273         */
9274         /* Store the number in a writable string for gcc to pass to 
9275            sscanf under HP/UX.
9276         */
9277         sprintf(str, "-123");
9278         sscanf(str, "%lf", &f);  /* f = -123.; */
9279
9280         signal(SIGFPE, blech);
9281         along = (unsigned long)f;
9282         aint = (unsigned int)f;
9283         ashort = (unsigned short)f;
9284         if (along != (unsigned long)-123)
9285                 result |= 1;
9286         if (aint != (unsigned int)-123)
9287                 result |= 1;
9288         if (ashort != (unsigned short)-123)
9289                 result |= 1;
9290         sprintf(str, "1073741824.");
9291         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9292         f = f + f;
9293         along = 0;
9294         along = (unsigned long)f;
9295         if (along != 0x80000000)
9296                 result |= 2;
9297         f -= 1.;
9298         along = 0;
9299         along = (unsigned long)f;
9300         if (along != 0x7fffffff)
9301                 result |= 1;
9302         f += 2.;
9303         along = 0;
9304         along = (unsigned long)f;
9305         if (along != 0x80000001)
9306                 result |= 2;
9307         if (result)
9308                 exit(result);
9309         signal(SIGFPE, blech_in_list);
9310         sprintf(str, "123.");
9311         sscanf(str, "%lf", &f);  /* f = 123.; */
9312         along = dummy_long((unsigned long)f);
9313         aint = dummy_int((unsigned int)f);
9314         ashort = dummy_short((unsigned short)f);
9315         if (along != (unsigned long)123)
9316                 result |= 4;
9317         if (aint != (unsigned int)123)
9318                 result |= 4;
9319         if (ashort != (unsigned short)123)
9320                 result |= 4;
9321         exit(result);
9322
9323 }
9324 EOCP
9325 set try
9326 if eval $compile_ok; then
9327         $run ./try
9328         castflags=$?
9329 else
9330         echo "(I can't seem to compile the test program--assuming it can't)"
9331         castflags=7
9332 fi
9333 case "$castflags" in
9334 0)      val="$define"
9335         echo "Yup, it can."
9336         ;;
9337 *)      val="$undef"
9338         echo "Nope, it can't."
9339         ;;
9340 esac
9341 set d_castneg
9342 eval $setvar
9343 $rm -f try.*
9344
9345 : see if vprintf exists
9346 echo " "
9347 if set vprintf val -f d_vprintf; eval $csym; $val; then
9348         echo 'vprintf() found.' >&4
9349         val="$define"
9350         $cat >try.c <<'EOF'
9351 #include <varargs.h>
9352
9353 int main() { xxx("foo"); }
9354
9355 xxx(va_alist)
9356 va_dcl
9357 {
9358         va_list args;
9359         char buf[10];
9360
9361         va_start(args);
9362         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9363 }
9364 EOF
9365         set try
9366         if eval $compile && $run ./try; then
9367                 echo "Your vsprintf() returns (int)." >&4
9368                 val2="$undef"
9369         else
9370                 echo "Your vsprintf() returns (char*)." >&4
9371                 val2="$define"
9372         fi
9373 else
9374         echo 'vprintf() NOT found.' >&4
9375                 val="$undef"
9376                 val2="$undef"
9377 fi
9378 $rm -f try try.*
9379 set d_vprintf
9380 eval $setvar
9381 val=$val2
9382 set d_charvspr
9383 eval $setvar
9384
9385 : see if chown exists
9386 set chown d_chown
9387 eval $inlibc
9388
9389 : see if chroot exists
9390 set chroot d_chroot
9391 eval $inlibc
9392
9393 : see if chsize exists
9394 set chsize d_chsize
9395 eval $inlibc
9396
9397 : see if class exists
9398 set class d_class
9399 eval $inlibc
9400
9401 hasstruct='varname=$1; struct=$2; shift; shift;
9402 while $test $# -ge 2; do
9403         case "$1" in
9404         $define) echo "#include <$2>";;
9405         esac ;
9406     shift 2;
9407 done > try.c;
9408 echo "int main () { struct $struct foo; }" >> try.c;
9409 set try;
9410 if eval $compile; then
9411         val="$define";
9412 else
9413         val="$undef";
9414 fi;
9415 set $varname;
9416 eval $setvar;
9417 $rm -f try.c try.o'
9418
9419 : see if sys/types.h has to be included
9420 set sys/types.h i_systypes
9421 eval $inhdr
9422
9423 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9424 while $test $# -ge 2; do
9425         case "$1" in
9426         $define) echo "#include <$2>";;
9427         esac ;
9428     shift 2;
9429 done > try.c;
9430 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9431 set try;
9432 if eval $compile; then
9433         val="$define";
9434 else
9435         val="$undef";
9436 fi;
9437 set $varname;
9438 eval $setvar;
9439 $rm -f try.c try.o'
9440
9441 socketlib=''
9442 sockethdr=''
9443 : see whether socket exists
9444 echo " "
9445 $echo $n "Hmm... $c" >&4
9446 if set socket val -f d_socket; eval $csym; $val; then
9447         echo "Looks like you have Berkeley networking support." >&4
9448         d_socket="$define"
9449         if set setsockopt val -f; eval $csym; $val; then
9450                 d_oldsock="$undef"
9451         else
9452                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9453                 d_oldsock="$define"
9454         fi
9455 else
9456         if $contains socklib libc.list >/dev/null 2>&1; then
9457                 echo "Looks like you have Berkeley networking support." >&4
9458                 d_socket="$define"
9459                 : we will have to assume that it supports the 4.2 BSD interface
9460                 d_oldsock="$undef"
9461         else
9462                 echo "You don't have Berkeley networking in libc$_a..." >&4
9463                 if test "X$d_socket" = "X$define"; then
9464                    echo "...but you seem to believe that you have sockets." >&4
9465                 else
9466                         for net in net socket
9467                         do
9468                                 if test -f /usr/lib/lib$net$_a; then
9469                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9470                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9471                                         if $contains socket libc.list >/dev/null 2>&1; then
9472                                                 d_socket="$define"
9473                                                 socketlib="-l$net"
9474                                                 case "$net" in
9475                                                 net)
9476                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9477                                                         sockethdr="-I/usr/netinclude"
9478                                                         ;;
9479                                                 esac
9480                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9481                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9482                                                         d_oldsock="$undef"
9483                                                 else
9484                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9485                                                         d_oldsock="$define"
9486                                                 fi
9487                                                 break
9488                                         fi
9489                                 fi
9490                         done
9491                         if test "X$d_socket" != "X$define"; then
9492                            echo "or anywhere else I see." >&4
9493                            d_socket="$undef"
9494                            d_oldsock="$undef"
9495                         fi
9496                 fi
9497         fi
9498 fi
9499
9500 : see if socketpair exists
9501 set socketpair d_sockpair
9502 eval $inlibc
9503
9504
9505 echo " "
9506 echo "Checking the availability of certain socket constants..." >&4
9507 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9508         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9509         $cat >try.c <<EOF
9510 #include <sys/types.h>
9511 #include <sys/socket.h>
9512 int main() {
9513     int i = $ENUM;
9514 }
9515 EOF
9516         val="$undef"
9517         set try; if eval $compile; then
9518                 val="$define"
9519         fi
9520         set d_${enum}; eval $setvar
9521         $rm -f try.c try
9522 done
9523
9524 : see if this is a sys/uio.h system
9525 set sys/uio.h i_sysuio
9526 eval $inhdr
9527
9528
9529 echo " "
9530 echo "Checking to see if your system supports struct cmsghdr..." >&4
9531 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9532 eval $hasstruct
9533 case "$d_cmsghdr_s" in
9534 "$define")      echo "Yes, it does."   ;;
9535 *)              echo "No, it doesn't." ;;
9536 esac
9537
9538
9539 : check for const keyword
9540 echo " "
9541 echo 'Checking to see if your C compiler knows about "const"...' >&4
9542 $cat >const.c <<'EOCP'
9543 typedef struct spug { int drokk; } spug;
9544 int main()
9545 {
9546         const char *foo;
9547         const spug y;
9548 }
9549 EOCP
9550 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9551         val="$define"
9552         echo "Yup, it does."
9553 else
9554         val="$undef"
9555         echo "Nope, it doesn't."
9556 fi
9557 set d_const
9558 eval $setvar
9559
9560 : see if crypt exists
9561 echo " "
9562 set crypt d_crypt
9563 eval $inlibc
9564 case "$d_crypt" in
9565 $define) cryptlib='' ;;
9566 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9567                 echo 'crypt() found.' >&4
9568                 val="$define"
9569                 cryptlib=''
9570         else
9571                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9572                 if $test -z "$cryptlib"; then
9573                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9574                 else
9575                         cryptlib=-lcrypt
9576                 fi
9577                 if $test -z "$cryptlib"; then
9578                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9579                 else
9580                         cryptlib=-lcrypt
9581                 fi
9582                 if $test -z "$cryptlib"; then
9583                         cryptlib=`./loc libcrypt$_a "" $libpth`
9584                 else
9585                         cryptlib=-lcrypt
9586                 fi
9587                 if $test -z "$cryptlib"; then
9588                         echo 'crypt() NOT found.' >&4
9589                         val="$undef"
9590                 else
9591                         val="$define"
9592                 fi
9593         fi
9594         set d_crypt
9595         eval $setvar
9596         ;;
9597 esac
9598
9599 : get csh whereabouts
9600 case "$csh" in
9601 'csh') val="$undef" ;;
9602 *) val="$define" ;;
9603 esac
9604 set d_csh
9605 eval $setvar
9606 : Respect a hint or command line value for full_csh.
9607 case "$full_csh" in
9608 '') full_csh=$csh ;;
9609 esac
9610
9611 : see if cuserid exists
9612 set cuserid d_cuserid
9613 eval $inlibc
9614
9615 : see if this is a limits.h system
9616 set limits.h i_limits
9617 eval $inhdr
9618
9619 : see if this is a float.h system
9620 set float.h i_float
9621 eval $inhdr
9622
9623 : See if number of significant digits in a double precision number is known
9624 echo " "
9625 $cat >dbl_dig.c <<EOM
9626 #$i_limits I_LIMITS
9627 #$i_float I_FLOAT
9628 #ifdef I_LIMITS
9629 #include <limits.h>
9630 #endif
9631 #ifdef I_FLOAT
9632 #include <float.h>
9633 #endif
9634 #ifdef DBL_DIG
9635 printf("Contains DBL_DIG");
9636 #endif
9637 EOM
9638 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9639 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9640         echo "DBL_DIG found." >&4
9641         val="$define"
9642 else
9643         echo "DBL_DIG NOT found." >&4
9644         val="$undef"
9645 fi
9646 $rm -f dbl_dig.?
9647 set d_dbl_dig
9648 eval $setvar
9649
9650 hasproto='varname=$1; func=$2; shift; shift;
9651 while $test $# -ge 2; do
9652         case "$1" in
9653         $define) echo "#include <$2>";;
9654         esac ;
9655     shift 2;
9656 done > try.c;
9657 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9658 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9659         echo "$func() prototype found.";
9660         val="$define";
9661 else
9662         echo "$func() prototype NOT found.";
9663         val="$undef";
9664 fi;
9665 set $varname;
9666 eval $setvar;
9667 $rm -f try.c tryout.c'
9668
9669 : see if dbm.h is available
9670 : see if dbmclose exists
9671 set dbmclose d_dbmclose
9672 eval $inlibc
9673
9674 case "$d_dbmclose" in
9675 $define)
9676         set dbm.h i_dbm
9677         eval $inhdr
9678         case "$i_dbm" in
9679         $define)
9680                 val="$undef"
9681                 set i_rpcsvcdbm
9682                 eval $setvar
9683                 ;;
9684         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9685                 eval $inhdr
9686                 ;;
9687         esac
9688         ;;
9689 *)      echo "We won't be including <dbm.h>"
9690         val="$undef"
9691         set i_dbm
9692         eval $setvar
9693         val="$undef"
9694         set i_rpcsvcdbm
9695         eval $setvar
9696         ;;
9697 esac
9698
9699 : see if prototype for dbminit is available
9700 echo " "
9701 set d_dbminitproto dbminit $i_dbm dbm.h
9702 eval $hasproto
9703
9704 : see if difftime exists
9705 set difftime d_difftime
9706 eval $inlibc
9707
9708 : see if this is a dirent system
9709 echo " "
9710 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9711         val="$define"
9712         echo "<dirent.h> found." >&4
9713 else
9714         val="$undef"
9715         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9716                 echo "<sys/dir.h> found." >&4
9717                 echo " "
9718         else
9719                 xinc=`./findhdr sys/ndir.h`
9720         fi
9721         echo "<dirent.h> NOT found." >&4
9722 fi
9723 set i_dirent
9724 eval $setvar
9725
9726 : Look for type of directory structure.
9727 echo " "
9728 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9729
9730 case "$direntrytype" in
9731 ''|' ')
9732         case "$i_dirent" in
9733         $define) guess1='struct dirent' ;;
9734         *) guess1='struct direct'  ;;
9735         esac
9736         ;;
9737 *)      guess1="$direntrytype"
9738         ;;
9739 esac
9740
9741 case "$guess1" in
9742 'struct dirent') guess2='struct direct' ;;
9743 *) guess2='struct dirent' ;;
9744 esac
9745                 
9746 if $contains "$guess1" try.c >/dev/null 2>&1; then
9747         direntrytype="$guess1"
9748         echo "Your directory entries are $direntrytype." >&4
9749 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9750         direntrytype="$guess2"
9751         echo "Your directory entries seem to be $direntrytype." >&4
9752 else
9753         echo "I don't recognize your system's directory entries." >&4
9754         rp="What type is used for directory entries on this system?"
9755         dflt="$guess1"
9756         . ./myread
9757         direntrytype="$ans"
9758 fi
9759 $rm -f try.c
9760
9761
9762 : see if the directory entry stores field length
9763 echo " "
9764 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9765 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9766         echo "Good, your directory entry keeps length information in d_namlen." >&4
9767         val="$define"
9768 else
9769         echo "Your directory entry does not know about the d_namlen field." >&4
9770         val="$undef"
9771 fi
9772 set d_dirnamlen
9773 eval $setvar
9774 $rm -f try.c
9775
9776 : see if this is an sysdir system
9777 set sys/dir.h i_sysdir
9778 eval $inhdr
9779
9780 : see if this is an sysndir system
9781 set sys/ndir.h i_sysndir
9782 eval $inhdr
9783
9784 : Look for dirfd
9785 echo " "
9786 $cat >dirfd.c <<EOM
9787 #include <stdio.h>
9788 #$i_dirent I_DIRENT             /**/
9789 #$i_sysdir I_SYS_DIR            /**/
9790 #$i_sysndir I_SYS_NDIR          /**/
9791 #$i_systypes I_SYS_TYPES        /**/
9792 #if defined(I_SYS_TYPES)
9793 #include <sys/types.h>
9794 #endif
9795 #if defined(I_DIRENT)
9796 #include <dirent.h>
9797 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9798 #include <sys/dir.h>
9799 #endif
9800 #else
9801 #ifdef I_SYS_NDIR
9802 #include <sys/ndir.h>
9803 #else
9804 #ifdef I_SYS_DIR
9805 #ifdef hp9000s500
9806 #include <ndir.h>       /* may be wrong in the future */
9807 #else
9808 #include <sys/dir.h>
9809 #endif
9810 #endif
9811 #endif
9812 #endif 
9813 int main() {
9814         DIR *dirp = opendir(".");
9815         if (dirfd(dirp) >= 0)
9816                 exit(0);
9817         else
9818                 exit(1);
9819 }
9820 EOM
9821 set dirfd
9822 if eval $compile; then
9823         val="$define"
9824 fi
9825 case "$val" in
9826 $define)        echo "dirfd() found." >&4       ;;
9827 *)              echo "dirfd() NOT found." >&4   ;;
9828 esac
9829 set d_dirfd
9830 eval $setvar
9831 $rm -f dirfd*
9832
9833 : see if dlerror exists
9834 xxx_runnm="$runnm"
9835 runnm=false
9836 set dlerror d_dlerror
9837 eval $inlibc
9838 runnm="$xxx_runnm"
9839
9840 : see if dlfcn is available
9841 set dlfcn.h i_dlfcn
9842 eval $inhdr
9843
9844 case "$usedl" in
9845 $define|y|true)
9846         $cat << EOM
9847
9848 On a few systems, the dynamically loaded modules that perl generates and uses
9849 will need a different extension than shared libs. The default will probably
9850 be appropriate.
9851
9852 EOM
9853         case "$dlext" in
9854         '')     dflt="$so" ;;
9855         *)      dflt="$dlext" ;;
9856         esac
9857         rp='What is the extension of dynamically loaded modules'
9858         . ./myread
9859         dlext="$ans"
9860         ;;
9861 *)
9862         dlext="none"
9863         ;;
9864 esac
9865
9866 : Check if dlsym need a leading underscore
9867 echo " "
9868 val="$undef"
9869
9870 case "$dlsrc" in
9871 dl_dlopen.xs)
9872         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9873         $cat >dyna.c <<'EOM'
9874 fred () { }
9875 EOM
9876
9877 $cat >fred.c<<EOM
9878
9879 #include <stdio.h>
9880 #$i_dlfcn I_DLFCN
9881 #ifdef I_DLFCN
9882 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9883 #else
9884 #include <sys/types.h>
9885 #include <nlist.h>
9886 #include <link.h>
9887 #endif
9888
9889 extern int fred() ;
9890
9891 int main()
9892 {
9893     void * handle ;
9894     void * symbol ;
9895 #ifndef RTLD_LAZY
9896     int mode = 1 ;
9897 #else
9898     int mode = RTLD_LAZY ;
9899 #endif
9900     handle = dlopen("./dyna.$dlext", mode) ;
9901     if (handle == NULL) {
9902         printf ("1\n") ;
9903         fflush (stdout) ;
9904         exit(0);
9905     }
9906     symbol = dlsym(handle, "fred") ;
9907     if (symbol == NULL) {
9908         /* try putting a leading underscore */
9909         symbol = dlsym(handle, "_fred") ;
9910         if (symbol == NULL) {
9911             printf ("2\n") ;
9912             fflush (stdout) ;
9913             exit(0);
9914         }
9915         printf ("3\n") ;
9916     }
9917     else
9918         printf ("4\n") ;
9919     fflush (stdout) ;
9920     exit(0);
9921 }
9922 EOM
9923         : Call the object file tmp-dyna.o in case dlext=o.
9924         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9925                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9926                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9927                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9928                 xxx=`$run ./fred`
9929                 case $xxx in
9930                 1)      echo "Test program failed using dlopen." >&4
9931                         echo "Perhaps you should not use dynamic loading." >&4;;
9932                 2)      echo "Test program failed using dlsym." >&4
9933                         echo "Perhaps you should not use dynamic loading." >&4;;
9934                 3)      echo "dlsym needs a leading underscore" >&4
9935                         val="$define" ;;
9936                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9937                 esac
9938         else
9939                 echo "I can't compile and run the test program." >&4
9940                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9941         fi
9942         ;;
9943 esac
9944                 
9945 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9946
9947 set d_dlsymun
9948 eval $setvar
9949
9950 : see if prototype for drand48 is available
9951 echo " "
9952 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9953 eval $hasproto
9954
9955 : see if dup2 exists
9956 set dup2 d_dup2
9957 eval $inlibc
9958
9959 : see if eaccess exists
9960 set eaccess d_eaccess
9961 eval $inlibc
9962
9963 : see if endgrent exists
9964 set endgrent d_endgrent
9965 eval $inlibc
9966
9967 : see if endhostent exists
9968 set endhostent d_endhent
9969 eval $inlibc
9970
9971 : see if endnetent exists
9972 set endnetent d_endnent
9973 eval $inlibc
9974
9975 : see if endprotoent exists
9976 set endprotoent d_endpent
9977 eval $inlibc
9978
9979 : see if endpwent exists
9980 set endpwent d_endpwent
9981 eval $inlibc
9982
9983 : see if endservent exists
9984 set endservent d_endsent
9985 eval $inlibc
9986
9987 : Locate the flags for 'open()'
9988 echo " "
9989 $cat >try.c <<'EOCP'
9990 #include <sys/types.h>
9991 #ifdef I_FCNTL
9992 #include <fcntl.h>
9993 #endif
9994 #ifdef I_SYS_FILE
9995 #include <sys/file.h>
9996 #endif
9997 int main() {
9998         if(O_RDONLY);
9999 #ifdef O_TRUNC
10000         exit(0);
10001 #else
10002         exit(1);
10003 #endif
10004 }
10005 EOCP
10006 : check sys/file.h first to get FREAD on Sun
10007 if $test `./findhdr sys/file.h` && \
10008                 set try -DI_SYS_FILE && eval $compile; then
10009         h_sysfile=true;
10010         echo "<sys/file.h> defines the O_* constants..." >&4
10011         if $run ./try; then
10012                 echo "and you have the 3 argument form of open()." >&4
10013                 val="$define"
10014         else
10015                 echo "but not the 3 argument form of open().  Oh, well." >&4
10016                 val="$undef"
10017         fi
10018 elif $test `./findhdr fcntl.h` && \
10019                 set try -DI_FCNTL && eval $compile; then
10020         h_fcntl=true;
10021         echo "<fcntl.h> defines the O_* constants..." >&4
10022         if $run ./try; then
10023                 echo "and you have the 3 argument form of open()." >&4
10024                 val="$define"
10025         else
10026                 echo "but not the 3 argument form of open().  Oh, well." >&4
10027                 val="$undef"
10028         fi
10029 else
10030         val="$undef"
10031         echo "I can't find the O_* constant definitions!  You got problems." >&4
10032 fi
10033 set d_open3
10034 eval $setvar
10035 $rm -f try try.*
10036
10037 : see which of string.h or strings.h is needed
10038 echo " "
10039 strings=`./findhdr string.h`
10040 if $test "$strings" && $test -r "$strings"; then
10041         echo "Using <string.h> instead of <strings.h>." >&4
10042         val="$define"
10043 else
10044         val="$undef"
10045         strings=`./findhdr strings.h`
10046         if $test "$strings" && $test -r "$strings"; then
10047                 echo "Using <strings.h> instead of <string.h>." >&4
10048         else
10049                 echo "No string header found -- You'll surely have problems." >&4
10050         fi
10051 fi
10052 set i_string
10053 eval $setvar
10054 case "$i_string" in
10055 "$undef") strings=`./findhdr strings.h`;;
10056 *)        strings=`./findhdr string.h`;;
10057 esac
10058
10059 : see if this is a sys/file.h system
10060 val=''
10061 set sys/file.h val
10062 eval $inhdr
10063
10064 : do we need to include sys/file.h ?
10065 case "$val" in
10066 "$define")
10067         echo " "
10068         if $h_sysfile; then
10069                 val="$define"
10070                 echo "We'll be including <sys/file.h>." >&4
10071         else
10072                 val="$undef"
10073                 echo "We won't be including <sys/file.h>." >&4
10074         fi
10075         ;;
10076 *)
10077         h_sysfile=false
10078         ;;
10079 esac
10080 set i_sysfile
10081 eval $setvar
10082
10083 : see if fcntl.h is there
10084 val=''
10085 set fcntl.h val
10086 eval $inhdr
10087
10088 : see if we can include fcntl.h
10089 case "$val" in
10090 "$define")
10091         echo " "
10092         if $h_fcntl; then
10093                 val="$define"
10094                 echo "We'll be including <fcntl.h>." >&4
10095         else
10096                 val="$undef"
10097                 if $h_sysfile; then
10098         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10099                 else
10100                         echo "We won't be including <fcntl.h>." >&4
10101                 fi
10102         fi
10103         ;;
10104 *)
10105         h_fcntl=false
10106         val="$undef"
10107         ;;
10108 esac
10109 set i_fcntl
10110 eval $setvar
10111
10112 : check for non-blocking I/O stuff
10113 case "$h_sysfile" in
10114 true) echo "#include <sys/file.h>" > head.c;;
10115 *)
10116        case "$h_fcntl" in
10117        true) echo "#include <fcntl.h>" > head.c;;
10118        *) echo "#include <sys/fcntl.h>" > head.c;;
10119        esac
10120        ;;
10121 esac
10122 echo " "
10123 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10124 case "$o_nonblock" in
10125 '')
10126         $cat head.c > try.c
10127         $cat >>try.c <<EOCP
10128 #include <stdio.h>
10129 #include <stdlib.h>
10130 #$i_fcntl I_FCNTL
10131 #ifdef I_FCNTL
10132 #include <fcntl.h>
10133 #endif
10134 int main() {
10135 #ifdef O_NONBLOCK
10136         printf("O_NONBLOCK\n");
10137         exit(0);
10138 #endif
10139 #ifdef O_NDELAY
10140         printf("O_NDELAY\n");
10141         exit(0);
10142 #endif
10143 #ifdef FNDELAY
10144         printf("FNDELAY\n");
10145         exit(0);
10146 #endif
10147         exit(0);
10148 }
10149 EOCP
10150         set try
10151         if eval $compile_ok; then
10152                 o_nonblock=`$run ./try`
10153                 case "$o_nonblock" in
10154                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10155                 *) echo "Seems like we can use $o_nonblock.";;
10156                 esac
10157         else
10158                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10159         fi
10160         ;;
10161 *) echo "Using $hint value $o_nonblock.";;
10162 esac
10163 $rm -f try try.* .out core
10164
10165 echo " "
10166 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10167 case "$eagain" in
10168 '')
10169         $cat head.c > try.c
10170         $cat >>try.c <<EOCP
10171 #include <errno.h>
10172 #include <sys/types.h>
10173 #include <signal.h>
10174 #include <stdio.h> 
10175 #include <stdlib.h> 
10176 #$i_fcntl I_FCNTL
10177 #ifdef I_FCNTL
10178 #include <fcntl.h>
10179 #endif
10180 #define MY_O_NONBLOCK $o_nonblock
10181 #ifndef errno  /* XXX need better Configure test */
10182 extern int errno;
10183 #endif
10184 #$i_unistd I_UNISTD
10185 #ifdef I_UNISTD
10186 #include <unistd.h>
10187 #endif
10188 #$i_string I_STRING
10189 #ifdef I_STRING
10190 #include <string.h>
10191 #else
10192 #include <strings.h>
10193 #endif
10194 $signal_t blech(x) int x; { exit(3); }
10195 EOCP
10196         $cat >> try.c <<'EOCP'
10197 int main()
10198 {
10199         int pd[2];
10200         int pu[2];
10201         char buf[1];
10202         char string[100];
10203
10204         pipe(pd);       /* Down: child -> parent */
10205         pipe(pu);       /* Up: parent -> child */
10206         if (0 != fork()) {
10207                 int ret;
10208                 close(pd[1]);   /* Parent reads from pd[0] */
10209                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10210 #ifdef F_SETFL
10211                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10212                         exit(1);
10213 #else
10214                 exit(4);
10215 #endif
10216                 signal(SIGALRM, blech);
10217                 alarm(5);
10218                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10219                         exit(2);
10220                 sprintf(string, "%d\n", ret);
10221                 write(2, string, strlen(string));
10222                 alarm(0);
10223 #ifdef EAGAIN
10224                 if (errno == EAGAIN) {
10225                         printf("EAGAIN\n");
10226                         goto ok;
10227                 }
10228 #endif
10229 #ifdef EWOULDBLOCK
10230                 if (errno == EWOULDBLOCK)
10231                         printf("EWOULDBLOCK\n");
10232 #endif
10233         ok:
10234                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10235                 sleep(2);                               /* Give it time to close our pipe */
10236                 alarm(5);
10237                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10238                 alarm(0);
10239                 sprintf(string, "%d\n", ret);
10240                 write(4, string, strlen(string));
10241                 exit(0);
10242         }
10243
10244         close(pd[0]);                   /* We write to pd[1] */
10245         close(pu[1]);                   /* We read from pu[0] */
10246         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10247         close(pd[1]);                   /* Pipe pd is now fully closed! */
10248         exit(0);                                /* Bye bye, thank you for playing! */
10249 }
10250 EOCP
10251         set try
10252         if eval $compile_ok; then
10253                 echo "$startsh" >mtry
10254                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10255                 chmod +x mtry
10256                 ./mtry >/dev/null 2>&1
10257                 case $? in
10258                 0) eagain=`$cat try.out`;;
10259                 1) echo "Could not perform non-blocking setting!";;
10260                 2) echo "I did a successful read() for something that was not there!";;
10261                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10262                 4) echo "Could not find F_SETFL!";;
10263                 *) echo "Something terribly wrong happened during testing.";;
10264                 esac
10265                 rd_nodata=`$cat try.ret`
10266                 echo "A read() system call with no data present returns $rd_nodata."
10267                 case "$rd_nodata" in
10268                 0|-1) ;;
10269                 *)
10270                         echo "(That's peculiar, fixing that to be -1.)"
10271                         rd_nodata=-1
10272                         ;;
10273                 esac
10274                 case "$eagain" in
10275                 '')
10276                         echo "Forcing errno EAGAIN on read() with no data available."
10277                         eagain=EAGAIN
10278                         ;;
10279                 *)
10280                         echo "Your read() sets errno to $eagain when no data is available."
10281                         ;;
10282                 esac
10283                 status=`$cat try.err`
10284                 case "$status" in
10285                 0) echo "And it correctly returns 0 to signal EOF.";;
10286                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10287                 *) echo "However, your read() returns '$status' on EOF??";;
10288                 esac
10289                 val="$define"
10290                 if test "$status" = "$rd_nodata"; then
10291                         echo "WARNING: you can't distinguish between EOF and no data!"
10292                         val="$undef"
10293                 fi
10294         else
10295                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10296                 eagain=EAGAIN
10297         fi
10298         set d_eofnblk
10299         eval $setvar
10300         ;;
10301 *)
10302         echo "Using $hint value $eagain."
10303         echo "Your read() returns $rd_nodata when no data is present."
10304         case "$d_eofnblk" in
10305         "$define") echo "And you can see EOF because read() returns 0.";;
10306         "$undef") echo "But you can't see EOF status from read() returned value.";;
10307         *)
10308                 echo "(Assuming you can't see EOF status from read anyway.)"
10309                 d_eofnblk=$undef
10310                 ;;
10311         esac
10312         ;;
10313 esac
10314 $rm -f try try.* .out core head.c mtry
10315
10316 : see if fchdir exists
10317 set fchdir d_fchdir
10318 eval $inlibc
10319
10320 : see if fchmod exists
10321 set fchmod d_fchmod
10322 eval $inlibc
10323
10324 : see if fchown exists
10325 set fchown d_fchown
10326 eval $inlibc
10327
10328 : see if this is an fcntl system
10329 set fcntl d_fcntl
10330 eval $inlibc
10331
10332 echo " "
10333 : See if fcntl-based locking works.
10334 $cat >try.c <<EOCP
10335 #include <stdlib.h>
10336 #include <unistd.h>
10337 #include <fcntl.h>
10338 #include <signal.h>
10339 $signal_t blech(x) int x; { exit(3); }
10340 int main() {
10341 #if defined(F_SETLK) && defined(F_SETLKW)
10342      struct flock flock;
10343      int retval, fd;
10344      fd = open("try.c", O_RDONLY);
10345      flock.l_type = F_RDLCK;
10346      flock.l_whence = SEEK_SET;
10347      flock.l_start = flock.l_len = 0;
10348      signal(SIGALRM, blech);
10349      alarm(10);
10350      retval = fcntl(fd, F_SETLK, &flock);
10351      close(fd);
10352      (retval < 0 ? exit(2) : exit(0));
10353 #else
10354      exit(2);
10355 #endif
10356 }
10357 EOCP
10358 echo "Checking if fcntl-based file locking works... "
10359 case "$d_fcntl" in
10360 "$define")
10361         set try
10362         if eval $compile_ok; then
10363                 if $run ./try; then
10364                         echo "Yes, it seems to work."
10365                         val="$define"
10366                 else
10367                         echo "Nope, it didn't work."
10368                         val="$undef"
10369                         case "$?" in
10370                         3) $cat >&4 <<EOM
10371 ***
10372 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10373 *** This is (almost) impossible.
10374 *** If your NFS lock daemons are not feeling well, something like
10375 *** this may happen, please investigate.  Cannot continue, aborting.
10376 ***
10377 EOM
10378                                 exit 1
10379                                 ;;
10380                         esac
10381                 fi
10382         else
10383                 echo "I'm unable to compile the test program, so I'll assume not."
10384                 val="$undef"
10385         fi
10386         ;;
10387 *) val="$undef";
10388         echo "Nope, since you don't even have fcntl()."
10389         ;;
10390 esac
10391 set d_fcntl_can_lock
10392 eval $setvar
10393 $rm -f try*
10394
10395
10396 : see if sys/select.h has to be included
10397 set sys/select.h i_sysselct
10398 eval $inhdr
10399
10400 : see if we should include time.h, sys/time.h, or both
10401 echo " "
10402 if test "X$timeincl" = X; then
10403         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10404         $echo $n "I'm now running the test program...$c"
10405         $cat >try.c <<'EOCP'
10406 #include <sys/types.h>
10407 #ifdef I_TIME
10408 #include <time.h>
10409 #endif
10410 #ifdef I_SYSTIME
10411 #ifdef SYSTIMEKERNEL
10412 #define KERNEL
10413 #endif
10414 #include <sys/time.h>
10415 #endif
10416 #ifdef I_SYSSELECT
10417 #include <sys/select.h>
10418 #endif
10419 int main()
10420 {
10421         struct tm foo;
10422 #ifdef S_TIMEVAL
10423         struct timeval bar;
10424 #endif
10425 #ifdef S_TIMEZONE
10426         struct timezone tzp;
10427 #endif
10428         if (foo.tm_sec == foo.tm_sec)
10429                 exit(0);
10430 #ifdef S_TIMEVAL
10431         if (bar.tv_sec == bar.tv_sec)
10432                 exit(0);
10433 #endif
10434         exit(1);
10435 }
10436 EOCP
10437         flags=''
10438         for s_timezone in '-DS_TIMEZONE' ''; do
10439         sysselect=''
10440         for s_timeval in '-DS_TIMEVAL' ''; do
10441         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10442         for i_time in '' '-DI_TIME'; do
10443         for i_systime in '-DI_SYSTIME' ''; do
10444                 case "$flags" in
10445                 '') $echo $n ".$c"
10446                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10447                         if eval $compile; then
10448                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10449                                 shift
10450                                 flags="$*"
10451                                 echo " "
10452                                 $echo $n "Succeeded with $flags$c"
10453                         fi
10454                         ;;
10455                 esac
10456         done
10457         done
10458         done
10459         done
10460         done
10461         timeincl=''
10462         echo " "
10463         case "$flags" in
10464         *SYSTIMEKERNEL*) i_systimek="$define"
10465                 timeincl=`./findhdr sys/time.h`
10466                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10467         *) i_systimek="$undef";;
10468         esac
10469         case "$flags" in
10470         *I_TIME*) i_time="$define"
10471                 timeincl=`./findhdr time.h`" $timeincl"
10472                 echo "We'll include <time.h>." >&4;;
10473         *) i_time="$undef";;
10474         esac
10475         case "$flags" in
10476         *I_SYSTIME*) i_systime="$define"
10477                 timeincl=`./findhdr sys/time.h`" $timeincl"
10478                 echo "We'll include <sys/time.h>." >&4;;
10479         *) i_systime="$undef";;
10480         esac
10481         $rm -f try.c try
10482 fi
10483 : see if struct tm knows about tm_zone
10484 case "$i_systime$i_time" in
10485 *$define*) 
10486         echo " "
10487         echo "Checking to see if your struct tm has tm_zone field..." >&4
10488         set d_tm_tm_zone tm tm_zone $i_systime sys/time.h $i_time time.h
10489         eval $hasfield
10490         ;;
10491 *)      val="$undef"
10492         set d_tm_tm_zone
10493         eval $setvar
10494         ;;
10495 esac
10496 case "$d_tm_tm_zone" in
10497 "$define")      echo "Yes, it does."   ;;
10498 *)              echo "No, it doesn't." ;;
10499 esac
10500 : see if struct tm knows about tm_gmtoff
10501 case "$i_systime$i_time" in
10502 *$define*) 
10503         echo " "
10504         echo "Checking to see if your struct tm has tm_gmtoff field..." >&4
10505         set d_tm_tm_gmtoff tm tm_gmtoff $i_systime sys/time.h $i_time time.h
10506         eval $hasfield
10507         ;;
10508 *)      val="$undef"
10509         set d_tm_tm_gmtoff
10510         eval $setvar
10511         ;;
10512 esac
10513 case "$d_tm_tm_gmtoff" in
10514 "$define")      echo "Yes, it does."   ;;
10515 *)              echo "No, it doesn't." ;;
10516 esac
10517
10518 : check for fd_set items
10519 $cat <<EOM
10520
10521 Checking to see how well your C compiler handles fd_set and friends ...
10522 EOM
10523 $cat >try.c <<EOCP
10524 #$i_systime I_SYS_TIME
10525 #$i_sysselct I_SYS_SELECT
10526 #$d_socket HAS_SOCKET
10527 #include <sys/types.h>
10528 #ifdef HAS_SOCKET
10529 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10530 #endif
10531 #ifdef I_SYS_TIME
10532 #include <sys/time.h>
10533 #endif
10534 #ifdef I_SYS_SELECT
10535 #include <sys/select.h>
10536 #endif
10537 int main() {
10538         fd_set fds;
10539
10540 #ifdef TRYBITS
10541         if(fds.fds_bits);
10542 #endif
10543
10544 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10545         exit(0);
10546 #else
10547         exit(1);
10548 #endif
10549 }
10550 EOCP
10551 set try -DTRYBITS
10552 if eval $compile; then
10553         d_fds_bits="$define"
10554         d_fd_set="$define"
10555         echo "Well, your system knows about the normal fd_set typedef..." >&4
10556         if $run ./try; then
10557                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10558                 d_fd_macros="$define"
10559         else
10560                 $cat >&4 <<'EOM'
10561 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10562 EOM
10563                 d_fd_macros="$undef"
10564         fi
10565 else
10566         $cat <<'EOM'
10567 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10568 EOM
10569         set try
10570         if eval $compile; then
10571                 d_fds_bits="$undef"
10572                 d_fd_set="$define"
10573                 echo "Well, your system has some sort of fd_set available..." >&4
10574                 if $run ./try; then
10575                         echo "and you have the normal fd_set macros." >&4
10576                         d_fd_macros="$define"
10577                 else
10578                         $cat <<'EOM'
10579 but not the normal fd_set macros!  Gross!  More work for me...
10580 EOM
10581                         d_fd_macros="$undef"
10582                 fi
10583         else
10584         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10585                 d_fd_set="$undef"
10586                 d_fds_bits="$undef"
10587                 d_fd_macros="$undef"
10588         fi
10589 fi
10590 $rm -f try try.*
10591
10592 : see if fgetpos exists
10593 set fgetpos d_fgetpos
10594 eval $inlibc
10595
10596 : see if finite exists
10597 set finite d_finite
10598 eval $inlibc
10599
10600 : see if finitel exists
10601 set finitel d_finitel
10602 eval $inlibc
10603
10604 : see if flock exists
10605 set flock d_flock
10606 eval $inlibc
10607
10608 : see if prototype for flock is available
10609 echo " "
10610 set d_flockproto flock $i_sysfile sys/file.h
10611 eval $hasproto
10612
10613 : see if fork exists
10614 set fork d_fork
10615 eval $inlibc
10616
10617 : see if fp_class exists
10618 set fp_class d_fp_class
10619 eval $inlibc
10620
10621 : see if pathconf exists
10622 set pathconf d_pathconf
10623 eval $inlibc
10624
10625 : see if fpathconf exists
10626 set fpathconf d_fpathconf
10627 eval $inlibc
10628
10629 : see if fpclass exists
10630 set fpclass d_fpclass
10631 eval $inlibc
10632
10633 : see if fpclassify exists
10634 set fpclassify d_fpclassify
10635 eval $inlibc
10636
10637 : see if fpclassl exists
10638 set fpclassl d_fpclassl
10639 eval $inlibc
10640
10641
10642 : check for fpos64_t
10643 echo " "
10644 echo "Checking to see if you have fpos64_t..." >&4
10645 $cat >try.c <<EOCP
10646 #include <stdio.h>
10647 int main() { fpos64_t x = 7; }
10648 EOCP
10649 set try
10650 if eval $compile; then
10651         val="$define"
10652         echo "You have fpos64_t."
10653 else
10654         val="$undef"
10655         echo "You do not have fpos64_t."
10656         case "$fpossize" in
10657         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10658         esac
10659 fi
10660 $rm -f try.* try
10661 set d_fpos64_t
10662 eval $setvar
10663
10664 : see if frexpl exists
10665 set frexpl d_frexpl
10666 eval $inlibc
10667
10668 : see if this is a sys/param system
10669 set sys/param.h i_sysparam
10670 eval $inhdr
10671
10672 : see if this is a sys/mount.h system
10673 set sys/mount.h i_sysmount
10674 eval $inhdr
10675
10676
10677 echo " "
10678 echo "Checking to see if your system supports struct fs_data..." >&4
10679 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10680 eval $hasstruct
10681 case "$d_fs_data_s" in
10682 "$define")      echo "Yes, it does."   ;;
10683 *)              echo "No, it doesn't." ;;
10684 esac
10685
10686 : see if fseeko exists
10687 set fseeko d_fseeko
10688 eval $inlibc
10689 case "$longsize" in
10690 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10691 esac
10692
10693 : see if fsetpos exists
10694 set fsetpos d_fsetpos
10695 eval $inlibc
10696
10697
10698 : see if fstatfs exists
10699 set fstatfs d_fstatfs
10700 eval $inlibc
10701
10702
10703 : see if statvfs exists
10704 set statvfs d_statvfs
10705 eval $inlibc
10706
10707 : see if fstatvfs exists
10708 set fstatvfs d_fstatvfs
10709 eval $inlibc
10710
10711
10712 : see if fsync exists
10713 set fsync d_fsync
10714 eval $inlibc
10715
10716 : see if ftello exists
10717 set ftello d_ftello
10718 eval $inlibc
10719 case "$longsize" in
10720 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10721 esac
10722
10723 : see if getcwd exists
10724 set getcwd d_getcwd
10725 eval $inlibc
10726
10727 : see if getespwnam exists
10728 set getespwnam d_getespwnam
10729 eval $inlibc
10730
10731
10732 : see if getfsstat exists
10733 set getfsstat d_getfsstat
10734 eval $inlibc
10735
10736 : see if getgrent exists
10737 set getgrent d_getgrent
10738 eval $inlibc
10739
10740 : see if gethostbyaddr exists
10741 set gethostbyaddr d_gethbyaddr
10742 eval $inlibc
10743
10744 : see if gethostbyname exists
10745 set gethostbyname d_gethbyname
10746 eval $inlibc
10747
10748 : see if gethostent exists
10749 set gethostent d_gethent
10750 eval $inlibc
10751
10752 : see how we will look up host name
10753 echo " "
10754 call=''
10755 if set gethostname val -f d_gethname; eval $csym; $val; then
10756         echo 'gethostname() found.' >&4
10757         d_gethname="$define"
10758         call=gethostname
10759 fi
10760 if set uname val -f d_uname; eval $csym; $val; then
10761         if ./xenix; then
10762                 $cat <<'EOM'
10763 uname() was found, but you're running xenix, and older versions of xenix
10764 have a broken uname(). If you don't really know whether your xenix is old
10765 enough to have a broken system call, use the default answer.
10766
10767 EOM
10768                 dflt=y
10769                 case "$d_uname" in
10770                 "$define") dflt=n;;
10771                 esac
10772                 rp='Is your uname() broken?'
10773                 . ./myread
10774                 case "$ans" in
10775                 n*) d_uname="$define"; call=uname;;
10776                 esac
10777         else
10778                 echo 'uname() found.' >&4
10779                 d_uname="$define"
10780                 case "$call" in
10781                 '') call=uname ;;
10782                 esac
10783         fi
10784 fi
10785 case "$d_gethname" in
10786 '') d_gethname="$undef";;
10787 esac
10788 case "$d_uname" in
10789 '') d_uname="$undef";;
10790 esac
10791 case "$d_uname$d_gethname" in
10792 *define*)
10793         dflt=n
10794         cat <<EOM
10795  
10796 Every now and then someone has a $call() that lies about the hostname
10797 but can't be fixed for political or economic reasons.  If you wish, I can
10798 pretend $call() isn't there and maybe compute hostname at run-time
10799 thanks to the '$phostname' command.
10800
10801 EOM
10802         rp="Shall I ignore $call() from now on?"
10803         . ./myread
10804         case "$ans" in
10805         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10806         esac;;
10807 esac
10808 case "$phostname" in
10809 '') aphostname='';;
10810 *) case "$aphostname" in
10811         /*) ;;
10812         *) set X $phostname
10813                 shift
10814                 file=$1
10815                 shift
10816                 file=`./loc $file $file $pth`
10817                 aphostname=`echo $file $*`
10818                 ;;
10819         esac
10820         ;;
10821 esac
10822 case "$d_uname$d_gethname" in
10823 *define*) ;;
10824 *)
10825         case "$phostname" in
10826         '')
10827                 echo "There will be no way for $package to get your hostname." >&4;;
10828         *)
10829         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10830                 ;;
10831         esac;;
10832 esac
10833 case "$d_phostname" in
10834 '') d_phostname="$undef";;
10835 esac
10836
10837 : see if this is a netdb.h system
10838 set netdb.h i_netdb
10839 eval $inhdr
10840
10841 : see if prototypes for various gethostxxx netdb.h functions are available
10842 echo " "
10843 set d_gethostprotos gethostent $i_netdb netdb.h
10844 eval $hasproto
10845
10846 : see if getitimer exists
10847 set getitimer d_getitimer
10848 eval $inlibc
10849
10850 : see if getlogin exists
10851 set getlogin d_getlogin
10852 eval $inlibc
10853
10854 : see if getmnt exists
10855 set getmnt d_getmnt
10856 eval $inlibc
10857
10858 : see if getmntent exists
10859 set getmntent d_getmntent
10860 eval $inlibc
10861
10862 : see if getnetbyaddr exists
10863 set getnetbyaddr d_getnbyaddr
10864 eval $inlibc
10865
10866 : see if getnetbyname exists
10867 set getnetbyname d_getnbyname
10868 eval $inlibc
10869
10870 : see if getnetent exists
10871 set getnetent d_getnent
10872 eval $inlibc
10873
10874 : see if prototypes for various getnetxxx netdb.h functions are available
10875 echo " "
10876 set d_getnetprotos getnetent $i_netdb netdb.h
10877 eval $hasproto
10878
10879 : see if getpagesize exists
10880 set getpagesize d_getpagsz
10881 eval $inlibc
10882
10883
10884 : see if getprotobyname exists
10885 set getprotobyname d_getpbyname
10886 eval $inlibc
10887
10888 : see if getprotobynumber exists
10889 set getprotobynumber d_getpbynumber
10890 eval $inlibc
10891
10892 : see if getprotoent exists
10893 set getprotoent d_getpent
10894 eval $inlibc
10895
10896 : see if getpgid exists
10897 set getpgid d_getpgid
10898 eval $inlibc
10899
10900 : see if getpgrp2 exists
10901 set getpgrp2 d_getpgrp2
10902 eval $inlibc
10903
10904 : see if getppid exists
10905 set getppid d_getppid
10906 eval $inlibc
10907
10908 : see if getpriority exists
10909 set getpriority d_getprior
10910 eval $inlibc
10911
10912 : see if prototypes for various getprotoxxx netdb.h functions are available
10913 echo " "
10914 set d_getprotoprotos getprotoent $i_netdb netdb.h
10915 eval $hasproto
10916
10917 : see if getprpwnam exists
10918 set getprpwnam d_getprpwnam
10919 eval $inlibc
10920
10921 : see if getpwent exists
10922 set getpwent d_getpwent
10923 eval $inlibc
10924
10925
10926 : see if getservbyname exists
10927 set getservbyname d_getsbyname
10928 eval $inlibc
10929
10930 : see if getservbyport exists
10931 set getservbyport d_getsbyport
10932 eval $inlibc
10933
10934 : see if getservent exists
10935 set getservent d_getsent
10936 eval $inlibc
10937
10938 : see if prototypes for various getservxxx netdb.h functions are available
10939 echo " "
10940 set d_getservprotos getservent $i_netdb netdb.h
10941 eval $hasproto
10942
10943 : see if getspnam exists
10944 set getspnam d_getspnam
10945 eval $inlibc
10946
10947 : see if gettimeofday or ftime exists
10948 set gettimeofday d_gettimeod
10949 eval $inlibc
10950 case "$d_gettimeod" in
10951 "$undef")
10952         set ftime d_ftime 
10953         eval $inlibc
10954         ;;
10955 *)
10956         val="$undef"; set d_ftime; eval $setvar
10957         ;;
10958 esac
10959 case "$d_gettimeod$d_ftime" in
10960 "$undef$undef")
10961         echo " "
10962         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10963         ;;
10964 esac
10965
10966 : see if this is an grp system
10967 set grp.h i_grp
10968 eval $inhdr
10969
10970 case "$i_grp" in
10971 $define)
10972         xxx=`./findhdr grp.h`
10973         $cppstdin $cppflags $cppminus < $xxx >$$.h
10974
10975         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10976                 val="$define"
10977         else
10978                 val="$undef"
10979         fi
10980         set d_grpasswd
10981         eval $setvar
10982
10983         $rm -f $$.h
10984         ;;
10985 *)
10986         val="$undef";
10987         set d_grpasswd; eval $setvar
10988         ;;
10989 esac
10990
10991 : see if hasmntopt exists
10992 set hasmntopt d_hasmntopt
10993 eval $inlibc
10994
10995 : see if this is a netinet/in.h or sys/in.h system
10996 set netinet/in.h i_niin sys/in.h i_sysin
10997 eval $inhdr
10998
10999 : see if arpa/inet.h has to be included
11000 set arpa/inet.h i_arpainet
11001 eval $inhdr
11002
11003 : see if htonl --and friends-- exists
11004 val=''
11005 set htonl val
11006 eval $inlibc
11007
11008 : Maybe they are macros.
11009 case "$val" in
11010 $undef)
11011         $cat >htonl.c <<EOM
11012 #include <stdio.h>
11013 #include <sys/types.h>
11014 #$i_niin I_NETINET_IN
11015 #$i_sysin I_SYS_IN
11016 #$i_arpainet I_ARPA_INET
11017 #ifdef I_NETINET_IN
11018 #include <netinet/in.h>
11019 #endif
11020 #ifdef I_SYS_IN
11021 #include <sys/in.h>
11022 #endif
11023 #ifdef I_ARPA_INET
11024 #include <arpa/inet.h>
11025 #endif
11026 #ifdef htonl
11027 printf("Defined as a macro.");
11028 #endif
11029 EOM
11030         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
11031         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
11032                 val="$define"
11033                 echo "But it seems to be defined as a macro." >&4
11034         fi
11035         $rm -f htonl.?
11036         ;;
11037 esac
11038 set d_htonl
11039 eval $setvar
11040
11041 : index or strchr
11042 echo " "
11043 if set index val -f; eval $csym; $val; then
11044         if set strchr val -f d_strchr; eval $csym; $val; then
11045                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
11046                         val="$define"
11047                         vali="$undef"
11048                         echo "strchr() found." >&4
11049                 else
11050                         val="$undef"
11051                         vali="$define"
11052                         echo "index() found." >&4
11053                 fi
11054         else
11055                 val="$undef"
11056                 vali="$define"
11057                 echo "index() found." >&4
11058         fi
11059 else
11060         if set strchr val -f d_strchr; eval $csym; $val; then
11061                 val="$define"
11062                 vali="$undef"
11063                 echo "strchr() found." >&4
11064         else
11065                 echo "No index() or strchr() found!" >&4
11066                 val="$undef"
11067                 vali="$undef"
11068         fi
11069 fi
11070 set d_strchr; eval $setvar
11071 val="$vali"
11072 set d_index; eval $setvar
11073
11074 : check whether inet_aton exists
11075 set inet_aton d_inetaton
11076 eval $inlibc
11077
11078 : Look for isascii
11079 echo " "
11080 $cat >isascii.c <<'EOCP'
11081 #include <stdio.h>
11082 #include <ctype.h>
11083 int main() {
11084         int c = 'A';
11085         if (isascii(c))
11086                 exit(0);
11087         else
11088                 exit(1);
11089 }
11090 EOCP
11091 set isascii
11092 if eval $compile; then
11093         echo "isascii() found." >&4
11094         val="$define"
11095 else
11096         echo "isascii() NOT found." >&4
11097         val="$undef"
11098 fi
11099 set d_isascii
11100 eval $setvar
11101 $rm -f isascii*
11102
11103 : see if isfinite exists
11104 set isfinite d_isfinite
11105 eval $inlibc
11106
11107 : see if isinf exists
11108 set isinf d_isinf
11109 eval $inlibc
11110
11111 : see if isnan exists
11112 set isnan d_isnan
11113 eval $inlibc
11114
11115 : see if isnanl exists
11116 set isnanl d_isnanl
11117 eval $inlibc
11118
11119 : see if killpg exists
11120 set killpg d_killpg
11121 eval $inlibc
11122
11123 : see if lchown exists
11124 echo " "
11125 $cat > try.c <<'EOCP'
11126 /* System header to define __stub macros and hopefully few prototypes,
11127     which can conflict with char lchown(); below.  */
11128 #include <assert.h>
11129 /* Override any gcc2 internal prototype to avoid an error.  */
11130 /* We use char because int might match the return type of a gcc2
11131    builtin and then its argument prototype would still apply.  */
11132 char lchown();
11133 int main() {
11134     /*  The GNU C library defines this for functions which it implements
11135         to always fail with ENOSYS.  Some functions are actually named
11136         something starting with __ and the normal name is an alias.  */
11137 #if defined (__stub_lchown) || defined (__stub___lchown)
11138 choke me
11139 #else
11140 lchown();
11141 #endif
11142 ; return 0; }
11143 EOCP
11144 set try
11145 if eval $compile; then
11146     $echo "lchown() found." >&4
11147     val="$define"
11148 else
11149     $echo "lchown() NOT found." >&4
11150     val="$undef"
11151 fi
11152 set d_lchown
11153 eval $setvar
11154
11155 : See if number of significant digits in a double precision number is known
11156 echo " "
11157 $cat >ldbl_dig.c <<EOM
11158 #$i_limits I_LIMITS
11159 #$i_float I_FLOAT
11160 #ifdef I_LIMITS
11161 #include <limits.h>
11162 #endif
11163 #ifdef I_FLOAT
11164 #include <float.h>
11165 #endif
11166 #ifdef LDBL_DIG
11167 printf("Contains LDBL_DIG");
11168 #endif
11169 EOM
11170 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11171 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11172         echo "LDBL_DIG found." >&4
11173         val="$define"
11174 else
11175         echo "LDBL_DIG NOT found." >&4
11176         val="$undef"
11177 fi
11178 $rm -f ldbl_dig.?
11179 set d_ldbl_dig
11180 eval $setvar
11181
11182 : see if link exists
11183 set link d_link
11184 eval $inlibc
11185
11186 : see if localeconv exists
11187 set localeconv d_locconv
11188 eval $inlibc
11189
11190 : see if lockf exists
11191 set lockf d_lockf
11192 eval $inlibc
11193
11194 : see if prototype for lseek is available
11195 echo " "
11196 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11197 eval $hasproto
11198
11199 : see if lstat exists
11200 set lstat d_lstat
11201 eval $inlibc
11202
11203 : see if madvise exists
11204 set madvise d_madvise
11205 eval $inlibc
11206
11207 : see if mblen exists
11208 set mblen d_mblen
11209 eval $inlibc
11210
11211 : see if mbstowcs exists
11212 set mbstowcs d_mbstowcs
11213 eval $inlibc
11214
11215 : see if mbtowc exists
11216 set mbtowc d_mbtowc
11217 eval $inlibc
11218
11219 : see if memchr exists
11220 set memchr d_memchr
11221 eval $inlibc
11222
11223 : see if memcmp exists
11224 set memcmp d_memcmp
11225 eval $inlibc
11226
11227 : see if memcpy exists
11228 set memcpy d_memcpy
11229 eval $inlibc
11230
11231 : see if memmove exists
11232 set memmove d_memmove
11233 eval $inlibc
11234
11235 : see if memset exists
11236 set memset d_memset
11237 eval $inlibc
11238
11239 : see if mkdir exists
11240 set mkdir d_mkdir
11241 eval $inlibc
11242
11243 : see if mkdtemp exists
11244 set mkdtemp d_mkdtemp
11245 eval $inlibc
11246
11247 : see if mkfifo exists
11248 set mkfifo d_mkfifo
11249 eval $inlibc
11250
11251 : see if mkstemp exists
11252 set mkstemp d_mkstemp
11253 eval $inlibc
11254
11255 : see if mkstemps exists
11256 set mkstemps d_mkstemps
11257 eval $inlibc
11258
11259 : see if mktime exists
11260 set mktime d_mktime
11261 eval $inlibc
11262
11263 : see if this is a sys/mman.h system
11264 set sys/mman.h i_sysmman
11265 eval $inhdr
11266
11267 : see if mmap exists
11268 set mmap d_mmap
11269 eval $inlibc
11270 : see what shmat returns
11271 : default to something harmless
11272 mmaptype='void *'
11273 case "$i_sysmman$d_mmap" in
11274 "$define$define")
11275         $cat >mmap.c <<'END'
11276 #include <sys/mman.h>
11277 void *mmap();
11278 END
11279         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11280                 mmaptype='void *'
11281         else
11282                 mmaptype='caddr_t'
11283         fi
11284         echo "and it returns ($mmaptype)." >&4
11285         ;;
11286 esac
11287
11288
11289
11290 : see if mprotect exists
11291 set mprotect d_mprotect
11292 eval $inlibc
11293
11294 : see if msgctl exists
11295 set msgctl d_msgctl
11296 eval $inlibc
11297
11298 : see if msgget exists
11299 set msgget d_msgget
11300 eval $inlibc
11301
11302 : see if msgsnd exists
11303 set msgsnd d_msgsnd
11304 eval $inlibc
11305
11306 : see if msgrcv exists
11307 set msgrcv d_msgrcv
11308 eval $inlibc
11309
11310 : see how much of the 'msg*(2)' library is present.
11311 h_msg=true
11312 echo " "
11313 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11314 *"$undef"*) h_msg=false;;
11315 esac
11316 case "$osname" in
11317 freebsd)
11318     case "`ipcs 2>&1`" in
11319     "SVID messages"*"not configured"*)
11320         echo "Your $osname does not have the msg*(2) configured." >&4
11321         h_msg=false
11322         val="$undef"
11323         set msgctl d_msgctl
11324         eval $setvar
11325         set msgget d_msgget
11326         eval $setvar
11327         set msgsnd d_msgsnd
11328         eval $setvar
11329         set msgrcv d_msgrcv
11330         eval $setvar
11331         ;;
11332     esac
11333     ;;
11334 esac
11335 : we could also check for sys/ipc.h ...
11336 if $h_msg && $test `./findhdr sys/msg.h`; then
11337         echo "You have the full msg*(2) library." >&4
11338         val="$define"
11339 else
11340         echo "You don't have the full msg*(2) library." >&4
11341         val="$undef"
11342 fi
11343 set d_msg
11344 eval $setvar
11345
11346
11347 echo " "
11348 echo "Checking to see if your system supports struct msghdr..." >&4
11349 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11350 eval $hasstruct
11351 case "$d_msghdr_s" in
11352 "$define")      echo "Yes, it does."   ;;
11353 *)              echo "No, it doesn't." ;;
11354 esac
11355
11356
11357 : see if msync exists
11358 set msync d_msync
11359 eval $inlibc
11360
11361 : see if munmap exists
11362 set munmap d_munmap
11363 eval $inlibc
11364
11365 : see if nice exists
11366 set nice d_nice
11367 eval $inlibc
11368
11369 : see if this is a langinfo.h system
11370 set langinfo.h i_langinfo
11371 eval $inhdr
11372
11373 : see if nl_langinfo exists
11374 set nl_langinfo d_nl_langinfo
11375 eval $inlibc
11376
11377 : check for length of character
11378 echo " "
11379 case "$charsize" in
11380 '')
11381         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11382         $cat >try.c <<'EOCP'
11383 #include <stdio.h>
11384 int main()
11385 {
11386     printf("%d\n", (int)sizeof(char));
11387     exit(0);
11388 }
11389 EOCP
11390         set try
11391         if eval $compile_ok; then
11392                 dflt=`$run ./try`
11393         else
11394                 dflt='1'
11395                 echo "(I can't seem to compile the test program.  Guessing...)"
11396         fi
11397         ;;
11398 *)
11399         dflt="$charsize"
11400         ;;
11401 esac
11402 rp="What is the size of a character (in bytes)?"
11403 . ./myread
11404 charsize="$ans"
11405 $rm -f try.c try
11406
11407 : check for volatile keyword
11408 echo " "
11409 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11410 $cat >try.c <<'EOCP'
11411 int main()
11412 {
11413         typedef struct _goo_struct goo_struct;
11414         goo_struct * volatile goo = ((goo_struct *)0);
11415         struct _goo_struct {
11416                 long long_int;
11417                 int reg_int;
11418                 char char_var;
11419         };
11420         typedef unsigned short foo_t;
11421         char *volatile foo;
11422         volatile int bar;
11423         volatile foo_t blech;
11424         foo = foo;
11425 }
11426 EOCP
11427 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11428         val="$define"
11429         echo "Yup, it does."
11430 else
11431         val="$undef"
11432         echo "Nope, it doesn't."
11433 fi
11434 set d_volatile
11435 eval $setvar
11436 $rm -f try.*
11437
11438
11439 echo " "
11440 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11441
11442 case "$use64bitint:$d_quad:$quadtype" in
11443 define:define:?*)
11444         ivtype="$quadtype"
11445         uvtype="$uquadtype"
11446         ivsize=8
11447         uvsize=8
11448         ;;
11449 *)      ivtype="long"
11450         uvtype="unsigned long"
11451         ivsize=$longsize
11452         uvsize=$longsize
11453         ;;
11454 esac
11455
11456 case "$uselongdouble:$d_longdbl" in
11457 define:define)
11458         nvtype="long double"
11459         nvsize=$longdblsize
11460         ;;
11461 *)      nvtype=double
11462         nvsize=$doublesize
11463         ;;
11464 esac
11465
11466 $echo "(IV will be "$ivtype", $ivsize bytes)"
11467 $echo "(UV will be "$uvtype", $uvsize bytes)"
11468 $echo "(NV will be "$nvtype", $nvsize bytes)"
11469
11470 $cat >try.c <<EOCP
11471 #$i_inttypes I_INTTYPES
11472 #ifdef I_INTTYPES
11473 #include <inttypes.h>
11474 #endif
11475 #include <stdio.h>
11476 int main() {
11477 #ifdef INT8
11478    int8_t i =  INT8_MAX;
11479   uint8_t u = UINT8_MAX;
11480   printf("int8_t\n");
11481 #endif
11482 #ifdef INT16
11483    int16_t i =  INT16_MAX;
11484   uint16_t i = UINT16_MAX;
11485   printf("int16_t\n");
11486 #endif
11487 #ifdef INT32
11488    int32_t i =  INT32_MAX;
11489   uint32_t u = UINT32_MAX;
11490   printf("int32_t\n");
11491 #endif
11492 }
11493 EOCP
11494
11495 case "$i8type" in
11496 '')     case "$charsize" in
11497         1)      i8type=char
11498                 u8type="unsigned char"
11499                 i8size=$charsize
11500                 u8size=$charsize
11501                 ;;
11502         esac
11503         ;;
11504 esac
11505 case "$i8type" in
11506 '')     set try -DINT8
11507         if eval $compile; then
11508                 case "`$run ./try`" in
11509                 int8_t) i8type=int8_t
11510                         u8type=uint8_t
11511                         i8size=1
11512                         u8size=1
11513                         ;;
11514                 esac
11515         fi
11516         ;;
11517 esac
11518 case "$i8type" in
11519 '')     if $test $charsize -ge 1; then
11520                 i8type=char
11521                 u8type="unsigned char"
11522                 i8size=$charsize
11523                 u8size=$charsize
11524         fi
11525         ;;
11526 esac
11527
11528 case "$i16type" in
11529 '')     case "$shortsize" in
11530         2)      i16type=short
11531                 u16type="unsigned short"
11532                 i16size=$shortsize
11533                 u16size=$shortsize
11534                 ;;
11535         esac
11536         ;;
11537 esac
11538 case "$i16type" in
11539 '')     set try -DINT16
11540         if eval $compile; then
11541                 case "`$run ./try`" in
11542                 int16_t)
11543                         i16type=int16_t
11544                         u16type=uint16_t
11545                         i16size=2
11546                         u16size=2
11547                         ;;
11548                 esac
11549         fi
11550         ;;
11551 esac
11552 case "$i16type" in
11553 '')     if $test $shortsize -ge 2; then
11554                 i16type=short
11555                 u16type="unsigned short"
11556                 i16size=$shortsize
11557                 u16size=$shortsize
11558         fi
11559         ;;
11560 esac
11561
11562 case "$i32type" in
11563 '')     case "$longsize" in
11564         4)      i32type=long
11565                 u32type="unsigned long"
11566                 i32size=$longsize
11567                 u32size=$longsize
11568                 ;;
11569         *)      case "$intsize" in
11570                 4)      i32type=int
11571                         u32type="unsigned int"
11572                         i32size=$intsize
11573                         u32size=$intsize
11574                         ;;
11575                 esac
11576                 ;;
11577         esac
11578         ;;
11579 esac
11580 case "$i32type" in
11581 '')     set try -DINT32
11582         if eval $compile; then
11583                 case "`$run ./try`" in
11584                 int32_t)
11585                         i32type=int32_t
11586                         u32type=uint32_t
11587                         i32size=4
11588                         u32size=4
11589                         ;;
11590                 esac
11591         fi
11592         ;;
11593 esac
11594 case "$i32type" in
11595 '')     if $test $intsize -ge 4; then
11596                 i32type=int
11597                 u32type="unsigned int"
11598                 i32size=$intsize
11599                 u32size=$intsize
11600         fi
11601         ;;
11602 esac
11603
11604 case "$i64type" in
11605 '')     case "$d_quad:$quadtype" in
11606         define:?*)
11607                 i64type="$quadtype"
11608                 u64type="$uquadtype"
11609                 i64size=8
11610                 u64size=8
11611                 ;;
11612         esac
11613         ;;
11614 esac
11615
11616 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11617 : volatile so that the compiler has to store it out to memory.
11618 if test X"$d_volatile" = X"$define"; then
11619         volatile=volatile
11620 fi
11621 $cat <<EOP >try.c
11622 #include <stdio.h>
11623 #include <sys/types.h>
11624 #include <signal.h>
11625 #ifdef SIGFPE
11626 $volatile int bletched = 0;
11627 $signal_t blech(s) int s; { bletched = 1; }
11628 #endif
11629 int main() {
11630     $uvtype u = 0;
11631     $nvtype d;
11632     int     n = 8 * $uvsize;
11633     int     i;
11634 #ifdef SIGFPE
11635     signal(SIGFPE, blech);
11636 #endif
11637
11638     for (i = 0; i < n; i++) {
11639       u = u << 1 | ($uvtype)1;
11640       d = ($nvtype)u;
11641       if (($uvtype)d != u)
11642         break;
11643       if (d <= 0)
11644         break;
11645       d = ($nvtype)(u - 1);
11646       if (($uvtype)d != (u - 1))
11647         break;
11648 #ifdef SIGFPE
11649       if (bletched) {
11650         break;
11651 #endif
11652       } 
11653     }
11654     printf("%d\n", ((i == n) ? -n : i));
11655     exit(0);
11656 }
11657 EOP
11658 set try
11659
11660 d_nv_preserves_uv="$undef"
11661 if eval $compile; then
11662         d_nv_preserves_uv_bits="`$run ./try`"
11663 fi
11664 case "$d_nv_preserves_uv_bits" in
11665 \-[1-9]*)       
11666         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11667         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11668         d_nv_preserves_uv="$define"
11669         ;;
11670 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11671         d_nv_preserves_uv="$undef" ;;
11672 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11673         d_nv_preserves_uv_bits="$undef" ;;
11674 esac
11675
11676 $rm -f try.* try
11677
11678
11679 : check for off64_t
11680 echo " "
11681 echo "Checking to see if you have off64_t..." >&4
11682 $cat >try.c <<EOCP
11683 #include <sys/types.h>
11684 #include <unistd.h>
11685 int main() { off64_t x = 7; }
11686 EOCP
11687 set try
11688 if eval $compile; then
11689         val="$define"
11690         echo "You have off64_t."
11691 else
11692         val="$undef"
11693         echo "You do not have off64_t."
11694         case "$lseeksize" in
11695         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11696         esac
11697 fi
11698 $rm -f try.* try
11699 set d_off64_t
11700 eval $setvar
11701
11702 : see if POSIX threads are available
11703 set pthread.h i_pthread
11704 eval $inhdr
11705
11706
11707
11708
11709 : how to create joinable pthreads
11710 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11711         echo " "
11712         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11713         $cat >try.c <<'EOCP'
11714 #include <pthread.h>
11715 int main() {
11716     int detachstate = JOINABLE;
11717 }
11718 EOCP
11719         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11720         if eval $compile; then
11721                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11722                 val="$undef" # Yes, undef.
11723                 set d_old_pthread_create_joinable
11724                 eval $setvar
11725                 val=""
11726                 set old_pthread_create_joinable
11727                 eval $setvar
11728         else
11729                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11730                 if eval $compile; then
11731                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11732                         val="$define"
11733                         set d_old_pthread_create_joinable
11734                         eval $setvar
11735                         val=PTHREAD_CREATE_UNDETACHED
11736                         set old_pthread_create_joinable
11737                         eval $setvar
11738                 else            
11739                         set try -DJOINABLE=__UNDETACHED
11740                         if eval $compile; then
11741                                 echo "You seem to use __UNDETACHED." >&4
11742                                 val="$define"
11743                                 set d_old_pthread_create_joinable
11744                                 eval $setvar
11745                                 val=__UNDETACHED
11746                                 set old_pthread_create_joinable
11747                                 eval $setvar
11748                         else
11749                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11750                                 val="$define"
11751                                 set d_old_pthread_create_joinable
11752                                 eval $setvar
11753                                 val=0
11754                                 set old_pthread_create_joinable
11755                                 eval $setvar
11756                         fi
11757                 fi
11758         fi
11759         $rm -f try try.*
11760 else
11761     d_old_pthread_create_joinable="$undef"
11762     old_pthread_create_joinable=""
11763 fi
11764
11765 : see if pause exists
11766 set pause d_pause
11767 eval $inlibc
11768
11769 : see if pipe exists
11770 set pipe d_pipe
11771 eval $inlibc
11772
11773 : see if poll exists
11774 set poll d_poll
11775 eval $inlibc
11776
11777 : see if readlink exists
11778 set readlink d_readlink
11779 eval $inlibc
11780
11781 echo " "
11782 procselfexe=''
11783 val="$undef"
11784 case "$d_readlink" in
11785 "$define")
11786         if $issymlink /proc/self/exe ; then
11787                 $ls -l /proc/self/exe > reflect
11788                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11789                         echo "You have Linux-like /proc/self/exe."
11790                         procselfexe='"/proc/self/exe"'
11791                         val="$define"
11792                 fi
11793         fi
11794         if $issymlink /proc/curproc/file ; then
11795                 $ls -l /proc/curproc/file > reflect
11796                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11797                         echo "You have BSD-like /proc/curproc/file."
11798                         procselfexe='"/proc/curproc/file"'
11799                         val="$define"
11800                 fi
11801         fi
11802         ;;
11803 esac
11804 $rm -f reflect
11805 set d_procselfexe
11806 eval $setvar
11807
11808 : see if pthread_atfork exists
11809 set pthread_atfork d_pthread_atfork
11810 eval $inlibc
11811
11812
11813 : see whether the various POSIXish _yields exist
11814 $cat >try.c <<EOP
11815 #include <pthread.h>
11816 #include <stdio.h>
11817 int main() {
11818 #ifdef SCHED_YIELD
11819         sched_yield();
11820 #else
11821 #ifdef PTHREAD_YIELD
11822         pthread_yield();
11823 #else
11824 #ifdef PTHREAD_YIELD_NULL
11825         pthread_yield(NULL);
11826 #endif
11827 #endif
11828 #endif
11829 }
11830 EOP
11831 : see if sched_yield exists
11832 set try -DSCHED_YIELD
11833 if eval $compile; then
11834     val="$define"
11835     sched_yield='sched_yield()'
11836 else
11837     val="$undef"
11838 fi
11839 case "$usethreads" in
11840 $define)
11841         case "$val" in
11842         $define) echo 'sched_yield() found.' >&4        ;;
11843         *)       echo 'sched_yield() NOT found.' >&4    ;;
11844         esac
11845 esac
11846 set d_sched_yield
11847 eval $setvar
11848
11849 : see if pthread_yield exists
11850 set try -DPTHREAD_YIELD
11851 if eval $compile; then
11852     val="$define"
11853     case "$sched_yield" in
11854     '') sched_yield='pthread_yield()' ;;
11855     esac
11856 else
11857     set try -DPTHREAD_YIELD_NULL
11858     if eval $compile; then
11859         val="$define"
11860         case "$sched_yield" in
11861         '') sched_yield='pthread_yield(NULL)' ;;
11862         esac
11863     else
11864         val="$undef"
11865     fi
11866 fi
11867 case "$usethreads" in
11868 $define)
11869         case "$val" in
11870         $define) echo 'pthread_yield() found.' >&4      ;;
11871         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11872         esac
11873         ;;
11874 esac
11875 set d_pthread_yield
11876 eval $setvar
11877
11878 case "$sched_yield" in
11879 '') sched_yield=undef ;;
11880 esac
11881
11882 $rm -f try try.*
11883
11884 : see if this is a pwd.h system
11885 set pwd.h i_pwd
11886 eval $inhdr
11887
11888 case "$i_pwd" in
11889 $define)
11890         xxx=`./findhdr pwd.h`
11891         $cppstdin $cppflags $cppminus < $xxx >$$.h
11892
11893         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11894                 val="$define"
11895         else
11896                 val="$undef"
11897         fi
11898         set d_pwquota
11899         eval $setvar
11900
11901         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11902                 val="$define"
11903         else
11904                 val="$undef"
11905         fi
11906         set d_pwage
11907         eval $setvar
11908
11909         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11910                 val="$define"
11911         else
11912                 val="$undef"
11913         fi
11914         set d_pwchange
11915         eval $setvar
11916
11917         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11918                 val="$define"
11919         else
11920                 val="$undef"
11921         fi
11922         set d_pwclass
11923         eval $setvar
11924
11925         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11926                 val="$define"
11927         else
11928                 val="$undef"
11929         fi
11930         set d_pwexpire
11931         eval $setvar
11932
11933         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11934                 val="$define"
11935         else
11936                 val="$undef"
11937         fi
11938         set d_pwcomment
11939         eval $setvar
11940
11941         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11942                 val="$define"
11943         else
11944                 val="$undef"
11945         fi
11946         set d_pwgecos
11947         eval $setvar
11948
11949         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11950                 val="$define"
11951         else
11952                 val="$undef"
11953         fi
11954         set d_pwpasswd
11955         eval $setvar
11956
11957         $rm -f $$.h
11958         ;;
11959 *)
11960         val="$undef"; 
11961         set d_pwquota; eval $setvar
11962         set d_pwage; eval $setvar
11963         set d_pwchange; eval $setvar
11964         set d_pwclass; eval $setvar
11965         set d_pwexpire; eval $setvar
11966         set d_pwcomment; eval $setvar
11967         set d_pwgecos; eval $setvar
11968         set d_pwpasswd; eval $setvar
11969         ;;
11970 esac
11971
11972 : see if readdir and friends exist
11973 set readdir d_readdir
11974 eval $inlibc
11975 set seekdir d_seekdir
11976 eval $inlibc
11977 set telldir d_telldir
11978 eval $inlibc
11979 set rewinddir d_rewinddir
11980 eval $inlibc
11981
11982 : see if readv exists
11983 set readv d_readv
11984 eval $inlibc
11985
11986 : see if recvmsg exists
11987 set recvmsg d_recvmsg
11988 eval $inlibc
11989
11990 : see if rename exists
11991 set rename d_rename
11992 eval $inlibc
11993
11994 : see if rmdir exists
11995 set rmdir d_rmdir
11996 eval $inlibc
11997
11998 : see if memory.h is available.
11999 val=''
12000 set memory.h val
12001 eval $inhdr
12002
12003 : See if it conflicts with string.h
12004 case "$val" in
12005 $define)
12006         case "$strings" in
12007         '') ;;
12008         *)
12009                 $cppstdin $cppflags $cppminus < $strings > mem.h
12010                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
12011                         echo " "
12012                         echo "We won't be including <memory.h>."
12013                         val="$undef"
12014                 fi
12015                 $rm -f mem.h
12016                 ;;
12017         esac
12018 esac
12019 set i_memory
12020 eval $setvar
12021
12022 : can bcopy handle overlapping blocks?
12023 echo " "
12024 val="$undef"
12025 case "$d_memmove" in
12026 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
12027 *)      case "$d_bcopy" in
12028         "$define")
12029                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
12030                 $cat >try.c <<EOCP
12031 #$i_memory I_MEMORY
12032 #$i_stdlib I_STDLIB
12033 #$i_string I_STRING
12034 #$i_unistd I_UNISTD
12035 EOCP
12036         $cat >>try.c <<'EOCP'
12037 #include <stdio.h>
12038 #ifdef I_MEMORY
12039 #  include <memory.h>
12040 #endif
12041 #ifdef I_STDLIB
12042 #  include <stdlib.h>
12043 #endif
12044 #ifdef I_STRING
12045 #  include <string.h>
12046 #else
12047 #  include <strings.h>
12048 #endif
12049 #ifdef I_UNISTD
12050 #  include <unistd.h>  /* Needed for NetBSD */
12051 #endif
12052 int main()
12053 {
12054 char buf[128], abc[128];
12055 char *b;
12056 int len;
12057 int off;
12058 int align;
12059
12060 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12061    try to store the string in read-only memory. */
12062 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
12063
12064 for (align = 7; align >= 0; align--) {
12065         for (len = 36; len; len--) {
12066                 b = buf+align;
12067                 bcopy(abc, b, len);
12068                 for (off = 1; off <= len; off++) {
12069                         bcopy(b, b+off, len);
12070                         bcopy(b+off, b, len);
12071                         if (bcmp(b, abc, len))
12072                                 exit(1);
12073                 }
12074         }
12075 }
12076 exit(0);
12077 }
12078 EOCP
12079                 set try
12080                 if eval $compile_ok; then
12081                         if ./try 2>/dev/null; then
12082                                 echo "Yes, it can."
12083                                 val="$define"
12084                         else
12085                                 echo "It can't, sorry."
12086                         fi
12087                 else
12088                         echo "(I can't compile the test program, so we'll assume not...)"
12089                 fi
12090                 ;;
12091         esac
12092         $rm -f try.* try core
12093         ;;
12094 esac
12095 set d_safebcpy
12096 eval $setvar
12097
12098 : can memcpy handle overlapping blocks?
12099 echo " "
12100 val="$undef"
12101 case "$d_memmove" in
12102 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
12103 *)      case "$d_memcpy" in
12104         "$define")
12105                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
12106                 $cat >try.c <<EOCP
12107 #$i_memory I_MEMORY
12108 #$i_stdlib I_STDLIB
12109 #$i_string I_STRING
12110 #$i_unistd I_UNISTD
12111 EOCP
12112         $cat >>try.c <<'EOCP'
12113 #include <stdio.h>
12114 #ifdef I_MEMORY
12115 #  include <memory.h>
12116 #endif
12117 #ifdef I_STDLIB
12118 #  include <stdlib.h>
12119 #endif
12120 #ifdef I_STRING
12121 #  include <string.h>
12122 #else
12123 #  include <strings.h>
12124 #endif
12125 #ifdef I_UNISTD
12126 #  include <unistd.h>  /* Needed for NetBSD */
12127 #endif
12128 int main()
12129 {
12130 char buf[128], abc[128];
12131 char *b;
12132 int len;
12133 int off;
12134 int align;
12135
12136 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12137    try to store the string in read-only memory. */
12138 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12139
12140 for (align = 7; align >= 0; align--) {
12141         for (len = 36; len; len--) {
12142                 b = buf+align;
12143                 memcpy(b, abc, len);
12144                 for (off = 1; off <= len; off++) {
12145                         memcpy(b+off, b, len);
12146                         memcpy(b, b+off, len);
12147                         if (memcmp(b, abc, len))
12148                                 exit(1);
12149                 }
12150         }
12151 }
12152 exit(0);
12153 }
12154 EOCP
12155                 set try
12156                 if eval $compile_ok; then
12157                         if ./try 2>/dev/null; then
12158                                 echo "Yes, it can."
12159                                 val="$define"
12160                         else
12161                                 echo "It can't, sorry."
12162                         fi
12163                 else
12164                         echo "(I can't compile the test program, so we'll assume not...)"
12165                 fi
12166                 ;;
12167         esac
12168         $rm -f try.* try core
12169         ;;
12170 esac
12171 set d_safemcpy
12172 eval $setvar
12173
12174 : can memcmp be trusted to compare relative magnitude?
12175 val="$undef"
12176 case "$d_memcmp" in
12177 "$define")
12178         echo " "
12179         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12180         $cat >try.c <<EOCP
12181 #$i_memory I_MEMORY
12182 #$i_stdlib I_STDLIB
12183 #$i_string I_STRING
12184 #$i_unistd I_UNISTD
12185 EOCP
12186         $cat >>try.c <<'EOCP'
12187 #include <stdio.h>
12188 #ifdef I_MEMORY
12189 #  include <memory.h>
12190 #endif
12191 #ifdef I_STDLIB
12192 #  include <stdlib.h>
12193 #endif
12194 #ifdef I_STRING
12195 #  include <string.h>
12196 #else
12197 #  include <strings.h>
12198 #endif
12199 #ifdef I_UNISTD
12200 #  include <unistd.h>  /* Needed for NetBSD */
12201 #endif
12202 int main()
12203 {
12204 char a = -1;
12205 char b = 0;
12206 if ((a < b) && memcmp(&a, &b, 1) < 0)
12207         exit(1);
12208 exit(0);
12209 }
12210 EOCP
12211         set try
12212         if eval $compile_ok; then
12213                 if $run ./try 2>/dev/null; then
12214                         echo "Yes, it can."
12215                         val="$define"
12216                 else
12217                         echo "No, it can't (it uses signed chars)."
12218                 fi
12219         else
12220                 echo "(I can't compile the test program, so we'll assume not...)"
12221         fi
12222         ;;
12223 esac
12224 $rm -f try.* try core
12225 set d_sanemcmp
12226 eval $setvar
12227
12228 : see if prototype for sbrk is available
12229 echo " "
12230 set d_sbrkproto sbrk $i_unistd unistd.h
12231 eval $hasproto
12232
12233 : see if select exists
12234 set select d_select
12235 eval $inlibc
12236
12237 : see if semctl exists
12238 set semctl d_semctl
12239 eval $inlibc
12240
12241 : see if semget exists
12242 set semget d_semget
12243 eval $inlibc
12244
12245 : see if semop exists
12246 set semop d_semop
12247 eval $inlibc
12248
12249 : see how much of the 'sem*(2)' library is present.
12250 h_sem=true
12251 echo " "
12252 case "$d_semctl$d_semget$d_semop" in
12253 *"$undef"*) h_sem=false;;
12254 esac
12255 case "$osname" in
12256 freebsd)
12257     case "`ipcs 2>&1`" in
12258     "SVID messages"*"not configured"*)
12259         echo "Your $osname does not have the sem*(2) configured." >&4
12260         h_sem=false
12261         val="$undef"
12262         set semctl d_semctl
12263         eval $setvar
12264         set semget d_semget
12265         eval $setvar
12266         set semop d_semop
12267         eval $setvar
12268         ;;
12269     esac
12270     ;;
12271 esac
12272 : we could also check for sys/ipc.h ...
12273 if $h_sem && $test `./findhdr sys/sem.h`; then
12274         echo "You have the full sem*(2) library." >&4
12275         val="$define"
12276 else
12277         echo "You don't have the full sem*(2) library." >&4
12278         val="$undef"
12279 fi
12280 set d_sem
12281 eval $setvar
12282
12283 : see whether sys/sem.h defines union semun
12284 echo " "
12285 $cat > try.c <<'END'
12286 #include <sys/types.h>
12287 #include <sys/ipc.h>
12288 #include <sys/sem.h>
12289 int main () { union semun semun; semun.buf = 0; }
12290 END
12291 set try
12292 if eval $compile; then
12293     echo "You have union semun in <sys/sem.h>." >&4
12294     val="$define"
12295 else
12296     echo "You do not have union semun in <sys/sem.h>." >&4
12297     val="$undef"
12298 fi
12299 $rm -f try try.c try.h
12300 set d_union_semun
12301 eval $setvar
12302
12303 : see how to do semctl IPC_STAT
12304 case "$d_sem" in
12305 $define)
12306     : see whether semctl IPC_STAT can use union semun
12307     echo " "
12308     $cat > try.h <<END
12309 #ifndef S_IRUSR
12310 #   ifdef S_IREAD
12311 #       define S_IRUSR S_IREAD
12312 #       define S_IWUSR S_IWRITE
12313 #       define S_IXUSR S_IEXEC
12314 #   else
12315 #       define S_IRUSR 0400
12316 #       define S_IWUSR 0200
12317 #       define S_IXUSR 0100
12318 #   endif
12319 #   define S_IRGRP (S_IRUSR>>3)
12320 #   define S_IWGRP (S_IWUSR>>3)
12321 #   define S_IXGRP (S_IXUSR>>3)
12322 #   define S_IROTH (S_IRUSR>>6)
12323 #   define S_IWOTH (S_IWUSR>>6)
12324 #   define S_IXOTH (S_IXUSR>>6)
12325 #endif
12326 #ifndef S_IRWXU
12327 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12328 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12329 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12330 #endif
12331 END
12332
12333     $cat > try.c <<END
12334 #include <sys/types.h>
12335 #include <sys/ipc.h>
12336 #include <sys/sem.h>
12337 #include <sys/stat.h>
12338 #include <stdio.h>
12339 #include <errno.h>
12340 #include "try.h"
12341 #ifndef errno
12342 extern int errno;
12343 #endif
12344 #$d_union_semun HAS_UNION_SEMUN
12345 int main() {
12346     union semun
12347 #ifndef HAS_UNION_SEMUN
12348     {
12349         int val;
12350         struct semid_ds *buf;
12351         unsigned short *array;
12352     }
12353 #endif
12354     arg;
12355     int sem, st;
12356
12357 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12358     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12359     if (sem > -1) {
12360         struct semid_ds argbuf;
12361         arg.buf = &argbuf;
12362 #       ifdef IPC_STAT
12363         st = semctl(sem, 0, IPC_STAT, arg);
12364         if (st == 0)
12365             printf("semun\n");
12366         else
12367 #       endif /* IPC_STAT */
12368             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12369 #       ifdef IPC_RMID
12370         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12371 #       endif /* IPC_RMID */
12372             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12373     } else
12374 #endif /* IPC_PRIVATE && ... */
12375         printf("semget failed: errno = %d\n", errno);
12376   return 0;
12377 }
12378 END
12379     val="$undef"
12380     set try
12381     if eval $compile; then
12382         xxx=`$run ./try`
12383         case "$xxx" in
12384         semun) val="$define" ;;
12385         esac
12386     fi
12387     $rm -f try try.c
12388     set d_semctl_semun
12389     eval $setvar
12390     case "$d_semctl_semun" in
12391     $define)
12392         echo "You can use union semun for semctl IPC_STAT." >&4
12393         also='also'
12394         ;;
12395     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12396         also=''
12397         ;;
12398     esac
12399
12400     : see whether semctl IPC_STAT can use struct semid_ds pointer
12401     $cat > try.c <<'END'
12402 #include <sys/types.h>
12403 #include <sys/ipc.h>
12404 #include <sys/sem.h>
12405 #include <sys/stat.h>
12406 #include "try.h"
12407 #include <stdio.h>
12408 #include <errno.h>
12409 #ifndef errno
12410 extern int errno;
12411 #endif
12412 int main() {
12413     struct semid_ds arg;
12414     int sem, st;
12415
12416 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12417     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12418     if (sem > -1) {
12419 #       ifdef IPC_STAT
12420         st = semctl(sem, 0, IPC_STAT, &arg);
12421         if (st == 0)
12422             printf("semid_ds\n");
12423         else
12424 #       endif /* IPC_STAT */
12425             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12426 #       ifdef IPC_RMID
12427         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12428 #       endif /* IPC_RMID */
12429             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12430     } else
12431 #endif /* IPC_PRIVATE && ... */
12432         printf("semget failed: errno = %d\n", errno);
12433
12434     return 0;
12435 }
12436 END
12437     val="$undef"
12438     set try
12439     if eval $compile; then
12440         xxx=`$run ./try`
12441         case "$xxx" in
12442         semid_ds) val="$define" ;;
12443         esac
12444     fi
12445     $rm -f try try.c
12446     set d_semctl_semid_ds
12447     eval $setvar
12448     case "$d_semctl_semid_ds" in
12449     $define)
12450         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12451         ;;
12452     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12453         ;;
12454     esac
12455     $rm -f try.h
12456     ;;
12457 *)  val="$undef"
12458
12459     # We do not have the full sem*(2) library, so assume we can not
12460     # use either.
12461
12462     set d_semctl_semun
12463     eval $setvar
12464
12465     set d_semctl_semid_ds
12466     eval $setvar
12467     ;;
12468 esac
12469
12470 : see if sendmsg exists
12471 set sendmsg d_sendmsg
12472 eval $inlibc
12473
12474 : see if setegid exists
12475 set setegid d_setegid
12476 eval $inlibc
12477
12478 : see if seteuid exists
12479 set seteuid d_seteuid
12480 eval $inlibc
12481
12482 : see if setgrent exists
12483 set setgrent d_setgrent
12484 eval $inlibc
12485
12486 : see if sethostent exists
12487 set sethostent d_sethent
12488 eval $inlibc
12489
12490 : see if setitimer exists
12491 set setitimer d_setitimer
12492 eval $inlibc
12493
12494 : see if setlinebuf exists
12495 set setlinebuf d_setlinebuf
12496 eval $inlibc
12497
12498 : see if setlocale exists
12499 set setlocale d_setlocale
12500 eval $inlibc
12501
12502 : see if setnetent exists
12503 set setnetent d_setnent
12504 eval $inlibc
12505
12506 : see if setprotoent exists
12507 set setprotoent d_setpent
12508 eval $inlibc
12509
12510 : see if setpgid exists
12511 set setpgid d_setpgid
12512 eval $inlibc
12513
12514 : see if setpgrp2 exists
12515 set setpgrp2 d_setpgrp2
12516 eval $inlibc
12517
12518 : see if setpriority exists
12519 set setpriority d_setprior
12520 eval $inlibc
12521
12522 : see if setproctitle exists
12523 set setproctitle d_setproctitle
12524 eval $inlibc
12525
12526 : see if setpwent exists
12527 set setpwent d_setpwent
12528 eval $inlibc
12529
12530 : see if setregid exists
12531 set setregid d_setregid
12532 eval $inlibc
12533 set setresgid d_setresgid
12534 eval $inlibc
12535
12536 : see if setreuid exists
12537 set setreuid d_setreuid
12538 eval $inlibc
12539 set setresuid d_setresuid
12540 eval $inlibc
12541
12542 : see if setrgid exists
12543 set setrgid d_setrgid
12544 eval $inlibc
12545
12546 : see if setruid exists
12547 set setruid d_setruid
12548 eval $inlibc
12549
12550 : see if setservent exists
12551 set setservent d_setsent
12552 eval $inlibc
12553
12554 : see if setsid exists
12555 set setsid d_setsid
12556 eval $inlibc
12557
12558 : see if setvbuf exists
12559 set setvbuf d_setvbuf
12560 eval $inlibc
12561
12562 : see if sfio.h is available
12563 set sfio.h i_sfio
12564 eval $inhdr
12565
12566
12567 : see if sfio library is available
12568 case "$i_sfio" in
12569 $define)
12570         val=''
12571         set sfreserve val
12572         eval $inlibc
12573         ;;
12574 *)
12575         val="$undef"
12576         ;;
12577 esac
12578 : Ok, but do we want to use it.
12579 case "$val" in
12580 $define)
12581         case "$usesfio" in
12582         true|$define|[yY]*) dflt='y';;
12583         *) dflt='n';;
12584         esac
12585         echo "$package can use the sfio library, but it is experimental."
12586         case "$useperlio" in
12587         "$undef")
12588             echo "For sfio also the PerlIO abstraction layer is needed."
12589             echo "Earlier you said you wouldn't want that."
12590             ;;
12591         esac
12592         rp="You seem to have sfio available, do you want to try using it?"
12593         . ./myread
12594         case "$ans" in
12595         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12596                 useperlio="$define"
12597                 val="$define"
12598                 ;;
12599         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12600                 val="$undef"
12601                 ;;
12602         esac
12603         ;;
12604 *)      case "$usesfio" in
12605         true|$define|[yY]*)
12606                 echo "Sorry, cannot find sfio on this machine." >&4
12607                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12608                 val="$undef"
12609                 ;;
12610         esac
12611         ;;
12612 esac
12613 set d_sfio
12614 eval $setvar
12615 case "$d_sfio" in
12616 $define) usesfio='true';;
12617 *) usesfio='false';;
12618 esac
12619 case "$d_sfio" in
12620 $define) ;;
12621 *)      : Remove sfio from list of libraries to use
12622         case "$libs" in
12623         *-lsfio*)
12624                 echo "Removing unneeded -lsfio from library list" >&4
12625                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12626                 shift
12627                 libs="$*"
12628                 echo "libs = $libs" >&4
12629                 ;;
12630         esac
12631 ;;
12632 esac
12633
12634
12635 : see if shmctl exists
12636 set shmctl d_shmctl
12637 eval $inlibc
12638
12639 : see if shmget exists
12640 set shmget d_shmget
12641 eval $inlibc
12642
12643 : see if shmat exists
12644 set shmat d_shmat
12645 eval $inlibc
12646 : see what shmat returns
12647 case "$d_shmat" in
12648 "$define")
12649         $cat >shmat.c <<'END'
12650 #include <sys/shm.h>
12651 void *shmat();
12652 END
12653         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12654                 shmattype='void *'
12655         else
12656                 shmattype='char *'
12657         fi
12658         echo "and it returns ($shmattype)." >&4
12659         : see if a prototype for shmat is available
12660         xxx=`./findhdr sys/shm.h`
12661         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12662         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12663                 val="$define"
12664         else
12665                 val="$undef"
12666         fi
12667         $rm -f shmat.[co]
12668         ;;
12669 *)
12670         val="$undef"
12671         ;;
12672 esac
12673 set d_shmatprototype
12674 eval $setvar
12675
12676 : see if shmdt exists
12677 set shmdt d_shmdt
12678 eval $inlibc
12679
12680 : see how much of the 'shm*(2)' library is present.
12681 h_shm=true
12682 echo " "
12683 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12684 *"$undef"*) h_shm=false;;
12685 esac
12686 case "$osname" in
12687 freebsd)
12688     case "`ipcs 2>&1`" in
12689     "SVID shared memory"*"not configured"*)
12690         echo "Your $osname does not have the shm*(2) configured." >&4
12691         h_shm=false
12692         val="$undef"
12693         set shmctl d_shmctl
12694         evat $setvar
12695         set shmget d_shmget
12696         evat $setvar
12697         set shmat d_shmat
12698         evat $setvar
12699         set shmdt d_shmdt
12700         evat $setvar
12701         ;;
12702     esac
12703     ;;
12704 esac
12705 : we could also check for sys/ipc.h ...
12706 if $h_shm && $test `./findhdr sys/shm.h`; then
12707         echo "You have the full shm*(2) library." >&4
12708         val="$define"
12709 else
12710         echo "You don't have the full shm*(2) library." >&4
12711         val="$undef"
12712 fi
12713 set d_shm
12714 eval $setvar
12715
12716 echo " "
12717 : see if we have sigaction
12718 if set sigaction val -f d_sigaction; eval $csym; $val; then
12719         echo 'sigaction() found.' >&4
12720         $cat > try.c <<'EOP'
12721 #include <stdio.h>
12722 #include <sys/types.h>
12723 #include <signal.h>
12724 int main()
12725 {
12726     struct sigaction act, oact;
12727     act.sa_flags = 0;
12728     oact.sa_handler = 0;
12729     /* so that act and oact are used */
12730     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12731 }
12732 EOP
12733         set try
12734         if eval $compile_ok; then
12735                 val="$define"
12736         else
12737                 echo "But you don't seem to have a useable struct sigaction." >&4
12738                 val="$undef"
12739         fi
12740 else
12741         echo 'sigaction NOT found.' >&4
12742         val="$undef"
12743 fi
12744 set d_sigaction; eval $setvar
12745 $rm -f try try$_o try.c
12746
12747 : see if sigprocmask exists
12748 set sigprocmask d_sigprocmask
12749 eval $inlibc
12750
12751 : see if sigsetjmp exists
12752 echo " "
12753 case "$d_sigsetjmp" in
12754 '')
12755         $cat >try.c <<'EOP'
12756 #include <setjmp.h>
12757 sigjmp_buf env;
12758 int set = 1;
12759 int main()
12760 {
12761         if (sigsetjmp(env,1))
12762                 exit(set);
12763         set = 0;
12764         siglongjmp(env, 1);
12765         exit(1);
12766 }
12767 EOP
12768         set try
12769         if eval $compile; then
12770                 if $run ./try >/dev/null 2>&1; then
12771                         echo "POSIX sigsetjmp found." >&4
12772                         val="$define"
12773                 else
12774                         $cat >&4 <<EOM
12775 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12776 I'll ignore them.
12777 EOM
12778                         val="$undef"
12779                 fi
12780         else
12781                 echo "sigsetjmp not found." >&4
12782                 val="$undef"
12783         fi
12784         ;;
12785 *) val="$d_sigsetjmp"
12786         case "$d_sigsetjmp" in
12787         $define) echo "POSIX sigsetjmp found." >&4;;
12788         $undef) echo "sigsetjmp not found." >&4;;
12789         esac
12790         ;;
12791 esac
12792 set d_sigsetjmp
12793 eval $setvar
12794 $rm -f try.c try
12795
12796 : see if sockatmark exists
12797 set sockatmark d_sockatmark
12798 eval $inlibc
12799
12800 : see if prototype for sockatmark is available
12801 echo " "
12802 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12803 eval $hasproto
12804
12805 : see if socks5_init exists
12806 set socks5_init d_socks5_init
12807 eval $inlibc
12808
12809 : see if prototype for setresgid is available
12810 echo " "
12811 set d_sresgproto setresgid $i_unistd unistd.h
12812 eval $hasproto
12813
12814 : see if prototype for setresuid is available
12815 echo " "
12816 set d_sresuproto setresuid $i_unistd unistd.h
12817 eval $hasproto
12818
12819 : see if sys/stat.h is available
12820 set sys/stat.h i_sysstat
12821 eval $inhdr
12822
12823
12824 : see if stat knows about block sizes
12825 echo " "
12826 echo "Checking to see if your struct stat has st_blocks field..." >&4
12827 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12828 eval $hasfield
12829
12830
12831 : see if this is a sys/vfs.h system
12832 set sys/vfs.h i_sysvfs
12833 eval $inhdr
12834
12835
12836 : see if this is a sys/statfs.h system
12837 set sys/statfs.h i_sysstatfs
12838 eval $inhdr
12839
12840
12841 echo " "
12842 echo "Checking to see if your system supports struct statfs..." >&4
12843 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
12844 eval $hasstruct
12845 case "$d_statfs_s" in
12846 "$define")      echo "Yes, it does."   ;;
12847 *)              echo "No, it doesn't." ;;
12848 esac
12849
12850
12851
12852 : see if struct statfs knows about f_flags
12853 case "$d_statfs_s" in
12854 define) 
12855         echo " "
12856         echo "Checking to see if your struct statfs has f_flags field..." >&4
12857         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
12858         eval $hasfield
12859         ;;
12860 *)      val="$undef"
12861         set d_statfs_f_flags
12862         eval $setvar
12863         ;;
12864 esac
12865 case "$d_statfs_f_flags" in
12866 "$define")      echo "Yes, it does."   ;;
12867 *)              echo "No, it doesn't." ;;
12868 esac
12869
12870 : see if _ptr and _cnt from stdio act std
12871 echo " "
12872
12873 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12874         echo "(Looks like you have stdio.h from BSD.)"
12875         case "$stdio_ptr" in
12876         '') stdio_ptr='((fp)->_p)'
12877                 ptr_lval=$define
12878                 ;;
12879         *)      ptr_lval=$d_stdio_ptr_lval;;
12880         esac
12881         case "$stdio_cnt" in
12882         '') stdio_cnt='((fp)->_r)'
12883                 cnt_lval=$define
12884                 ;;
12885         *)      cnt_lval=$d_stdio_cnt_lval;;
12886         esac
12887         case "$stdio_base" in
12888         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12889         esac
12890         case "$stdio_bufsiz" in
12891         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12892         esac
12893 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12894         echo "(Looks like you have stdio.h from Linux.)"
12895         case "$stdio_ptr" in
12896         '') stdio_ptr='((fp)->_IO_read_ptr)'
12897                 ptr_lval=$define
12898                 ;;
12899         *)      ptr_lval=$d_stdio_ptr_lval;;
12900         esac
12901         case "$stdio_cnt" in
12902         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12903                 cnt_lval=$undef
12904                 ;;
12905         *)      cnt_lval=$d_stdio_cnt_lval;;
12906         esac
12907         case "$stdio_base" in
12908         '') stdio_base='((fp)->_IO_read_base)';;
12909         esac
12910         case "$stdio_bufsiz" in
12911         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12912         esac
12913 else
12914         case "$stdio_ptr" in
12915         '') stdio_ptr='((fp)->_ptr)'
12916                 ptr_lval=$define
12917                 ;;
12918         *)      ptr_lval=$d_stdio_ptr_lval;;
12919         esac
12920         case "$stdio_cnt" in
12921         '') stdio_cnt='((fp)->_cnt)'
12922                 cnt_lval=$define
12923                 ;;
12924         *)      cnt_lval=$d_stdio_cnt_lval;;
12925         esac
12926         case "$stdio_base" in
12927         '') stdio_base='((fp)->_base)';;
12928         esac
12929         case "$stdio_bufsiz" in
12930         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12931         esac
12932 fi
12933
12934 : test whether _ptr and _cnt really work
12935 echo "Checking how std your stdio is..." >&4
12936 $cat >try.c <<EOP
12937 #include <stdio.h>
12938 #define FILE_ptr(fp)    $stdio_ptr
12939 #define FILE_cnt(fp)    $stdio_cnt
12940 int main() {
12941         FILE *fp = fopen("try.c", "r");
12942         char c = getc(fp);
12943         if (
12944                 18 <= FILE_cnt(fp) &&
12945                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12946         )
12947                 exit(0);
12948         exit(1);
12949 }
12950 EOP
12951 val="$undef"
12952 set try
12953 if eval $compile && $to try.c; then
12954         if $run ./try; then
12955                 echo "Your stdio acts pretty std."
12956                 val="$define"
12957         else
12958                 echo "Your stdio isn't very std."
12959         fi
12960 else
12961         echo "Your stdio doesn't appear very std."
12962 fi
12963 $rm -f try.c try
12964 set d_stdstdio
12965 eval $setvar
12966
12967 : Can _ptr be used as an lvalue?
12968 case "$d_stdstdio$ptr_lval" in
12969 $define$define) val=$define ;;
12970 *) val=$undef ;;
12971 esac
12972 set d_stdio_ptr_lval
12973 eval $setvar
12974
12975 : Can _cnt be used as an lvalue?
12976 case "$d_stdstdio$cnt_lval" in
12977 $define$define) val=$define ;;
12978 *) val=$undef ;;
12979 esac
12980 set d_stdio_cnt_lval
12981 eval $setvar
12982
12983
12984 : test whether setting _ptr sets _cnt as a side effect
12985 d_stdio_ptr_lval_sets_cnt="$undef"
12986 d_stdio_ptr_lval_nochange_cnt="$undef"
12987 case "$d_stdio_ptr_lval$d_stdstdio" in
12988 $define$define)
12989         echo "Checking to see what happens if we set the stdio ptr..." >&4
12990 $cat >try.c <<EOP
12991 #include <stdio.h>
12992 /* Can we scream? */
12993 /* Eat dust sed :-) */
12994 /* In the buffer space, no one can hear you scream. */
12995 #define FILE_ptr(fp)    $stdio_ptr
12996 #define FILE_cnt(fp)    $stdio_cnt
12997 #include <sys/types.h>
12998 int main() {
12999         FILE *fp = fopen("try.c", "r");
13000         int c;
13001         char *ptr;
13002         size_t cnt;
13003         if (!fp) {
13004             puts("Fail even to read");
13005             exit(1);
13006         }
13007         c = getc(fp); /* Read away the first # */
13008         if (c == EOF) {
13009             puts("Fail even to read");
13010             exit(1);
13011         }
13012         if (!(
13013                 18 <= FILE_cnt(fp) &&
13014                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
13015         )) {
13016                 puts("Fail even to read");
13017                 exit (1);
13018         }
13019         ptr = (char*) FILE_ptr(fp);
13020         cnt = (size_t)FILE_cnt(fp);
13021
13022         FILE_ptr(fp) += 42;
13023
13024         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
13025                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
13026                 exit (1);
13027         }
13028         if (FILE_cnt(fp) <= 20) {
13029                 printf ("Fail (<20 chars to test)");
13030                 exit (1);
13031         }
13032         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
13033                 puts("Fail compare");
13034                 exit (1);
13035         }
13036         if (cnt == FILE_cnt(fp)) {
13037                 puts("Pass_unchanged");
13038                 exit (0);
13039         }       
13040         if (FILE_cnt(fp) == (cnt - 42)) {
13041                 puts("Pass_changed");
13042                 exit (0);
13043         }
13044         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
13045         return 1;
13046
13047 }
13048 EOP
13049         set try
13050         if eval $compile && $to try.c; then
13051                 case `$run ./try` in
13052                 Pass_changed)
13053                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
13054                         d_stdio_ptr_lval_sets_cnt="$define" ;;
13055                 Pass_unchanged)
13056                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
13057                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
13058                 Fail*)
13059                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
13060                 *)
13061                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
13062         esac
13063         else
13064                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
13065         fi
13066         $rm -f try.c try
13067         ;;
13068 esac
13069
13070 : see if _base is also standard
13071 val="$undef"
13072 case "$d_stdstdio" in
13073 $define)
13074         $cat >try.c <<EOP
13075 #include <stdio.h>
13076 #define FILE_base(fp)   $stdio_base
13077 #define FILE_bufsiz(fp) $stdio_bufsiz
13078 int main() {
13079         FILE *fp = fopen("try.c", "r");
13080         char c = getc(fp);
13081         if (
13082                 19 <= FILE_bufsiz(fp) &&
13083                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
13084         )
13085                 exit(0);
13086         exit(1);
13087 }
13088 EOP
13089         set try
13090         if eval $compile && $to try.c; then
13091                 if $run ./try; then
13092                         echo "And its _base field acts std."
13093                         val="$define"
13094                 else
13095                         echo "But its _base field isn't std."
13096                 fi
13097         else
13098                 echo "However, it seems to be lacking the _base field."
13099         fi
13100         $rm -f try.c try
13101         ;;
13102 esac
13103 set d_stdiobase
13104 eval $setvar
13105
13106 $cat >&4 <<EOM
13107 Checking how to access stdio streams by file descriptor number...
13108 EOM
13109 case "$stdio_stream_array" in
13110 '')     $cat >try.c <<EOCP
13111 #include <stdio.h>
13112 int main() {
13113   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
13114     printf("yes\n");
13115 }
13116 EOCP
13117         for s in _iob __iob __sF
13118         do
13119                 set try -DSTDIO_STREAM_ARRAY=$s
13120                 if eval $compile; then
13121                         case "`$run ./try`" in
13122                         yes)    stdio_stream_array=$s; break ;;
13123                         esac
13124                 fi
13125         done
13126         $rm -f try.* try$exe_ext
13127 esac
13128 case "$stdio_stream_array" in
13129 '')     $cat >&4 <<EOM
13130 I can't figure out how to access stdio streams by file descriptor number.
13131 EOM
13132         d_stdio_stream_array="$undef"
13133         ;;
13134 *)      $cat >&4 <<EOM
13135 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13136 EOM
13137         d_stdio_stream_array="$define"
13138         ;;
13139 esac
13140
13141 : see if strcoll exists
13142 set strcoll d_strcoll
13143 eval $inlibc
13144
13145 : check for structure copying
13146 echo " "
13147 echo "Checking to see if your C compiler can copy structs..." >&4
13148 $cat >try.c <<'EOCP'
13149 int main()
13150 {
13151         struct blurfl {
13152                 int dyick;
13153         } foo, bar;
13154
13155         foo = bar;
13156 }
13157 EOCP
13158 if $cc -c try.c >/dev/null 2>&1 ; then
13159         val="$define"
13160         echo "Yup, it can."
13161 else
13162         val="$undef"
13163         echo "Nope, it can't."
13164 fi
13165 set d_strctcpy
13166 eval $setvar
13167 $rm -f try.*
13168
13169 : see if strerror and/or sys_errlist[] exist
13170 echo " "
13171 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13172     if set strerror val -f d_strerror; eval $csym; $val; then
13173                 echo 'strerror() found.' >&4
13174                 d_strerror="$define"
13175                 d_strerrm='strerror(e)'
13176                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13177                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13178                         d_syserrlst="$define"
13179                 else
13180                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13181                         d_syserrlst="$undef"
13182                 fi
13183     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13184                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13185                 echo 'strerror() found in string header.' >&4
13186                 d_strerror="$define"
13187                 d_strerrm='strerror(e)'
13188                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13189                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13190                                 d_syserrlst="$define"
13191                 else
13192                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13193                         d_syserrlst="$undef"
13194                 fi
13195     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13196                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13197                 d_strerror="$undef"
13198                 d_syserrlst="$define"
13199                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13200     else
13201                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13202                 d_strerror="$undef"
13203                 d_syserrlst="$undef"
13204                 d_strerrm='"unknown"'
13205     fi
13206 fi
13207
13208 : see if strftime exists
13209 set strftime d_strftime
13210 eval $inlibc
13211
13212 : see if strtod exists
13213 set strtod d_strtod
13214 eval $inlibc
13215
13216 : see if strtol exists
13217 set strtol d_strtol
13218 eval $inlibc
13219
13220 : see if strtold exists
13221 set strtold d_strtold
13222 eval $inlibc
13223
13224 : see if strtoll exists
13225 set strtoll d_strtoll
13226 eval $inlibc
13227
13228 case "$d_longlong-$d_strtoll" in
13229 "$define-$define")
13230         $cat <<EOM
13231 Checking whether your strtoll() works okay...
13232 EOM
13233         $cat >try.c <<'EOCP'
13234 #include <errno.h>
13235 #ifdef __hpux
13236 #define strtoll __strtoll
13237 #endif
13238 #ifdef __EMX__
13239 #define strtoll _strtoll
13240 #endif
13241 #include <stdio.h>
13242 extern long long int strtoll(char *s, char **, int); 
13243 static int bad = 0;
13244 int check(char *s, long long ell, int een) {
13245         long long gll;
13246         errno = 0;
13247         gll = strtoll(s, 0, 10);
13248         if (!((gll == ell) && (errno == een)))
13249                 bad++;
13250 }
13251 int main() {
13252         check(" 1",                                      1LL, 0);
13253         check(" 0",                                      0LL, 0);
13254         check("-1",                                     -1LL, 0);
13255         check("-9223372036854775808", -9223372036854775808LL, 0);
13256         check("-9223372036854775808", -9223372036854775808LL, 0);
13257         check(" 9223372036854775807",  9223372036854775807LL, 0);
13258         check("-9223372036854775808", -9223372036854775808LL, 0);
13259         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13260         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13261         if (!bad)
13262                 printf("ok\n");
13263 }
13264 EOCP
13265         set try
13266         if eval $compile; then
13267                 yyy=`$run ./try`
13268                 case "$yyy" in
13269                 ok) echo "Your strtoll() seems to be working okay." ;;
13270                 *) cat <<EOM >&4
13271 Your strtoll() doesn't seem to be working okay.
13272 EOM
13273                    d_strtoll="$undef"
13274                    ;;
13275                 esac
13276         else
13277                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13278                 d_strtoll="$undef"
13279         fi
13280         ;;
13281 esac
13282
13283 : see if strtoq exists
13284 set strtoq d_strtoq
13285 eval $inlibc
13286
13287 : see if strtoul exists
13288 set strtoul d_strtoul
13289 eval $inlibc
13290
13291 case "$d_strtoul" in
13292 "$define")
13293         $cat <<EOM
13294 Checking whether your strtoul() works okay...
13295 EOM
13296         $cat >try.c <<'EOCP'
13297 #include <errno.h>
13298 #include <stdio.h>
13299 extern unsigned long int strtoul(char *s, char **, int); 
13300 static int bad = 0;
13301 void check(char *s, unsigned long eul, int een) {
13302         unsigned long gul;
13303         errno = 0;
13304         gul = strtoul(s, 0, 10);
13305         if (!((gul == eul) && (errno == een)))
13306                 bad++;
13307 }
13308 int main() {
13309         check(" 1", 1L, 0);
13310         check(" 0", 0L, 0);
13311 EOCP
13312         case "$longsize" in
13313         8)
13314             $cat >>try.c <<'EOCP'
13315         check("18446744073709551615", 18446744073709551615UL, 0);
13316         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13317 #if 0 /* strtoul() for /^-/ strings is undefined. */
13318         check("-1", 18446744073709551615UL, 0);
13319         check("-18446744073709551614", 2, 0);
13320         check("-18446744073709551615", 1, 0);
13321         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13322         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13323 #endif
13324 EOCP
13325                 ;;
13326         4)
13327                     $cat >>try.c <<'EOCP'
13328         check("4294967295", 4294967295UL, 0);
13329         check("4294967296", 4294967295UL, ERANGE);
13330 #if 0 /* strtoul() for /^-/ strings is undefined. */
13331         check("-1", 4294967295UL, 0);
13332         check("-4294967294", 2, 0);
13333         check("-4294967295", 1, 0);
13334         check("-4294967296", 4294967295UL, ERANGE);
13335         check("-4294967297", 4294967295UL, ERANGE);
13336 #endif
13337 EOCP
13338                 ;;
13339         *)
13340 : Should we write these tests to be more portable by sprintf-ing
13341 : ~0 and then manipulating that char string as input for strtol?
13342                 ;;
13343         esac
13344         $cat >>try.c <<'EOCP'
13345         if (!bad)
13346                 printf("ok\n");
13347         return 0;
13348 }
13349 EOCP
13350         set try
13351         if eval $compile; then
13352                 case "`$run ./try`" in
13353                 ok) echo "Your strtoul() seems to be working okay." ;;
13354                 *) cat <<EOM >&4
13355 Your strtoul() doesn't seem to be working okay.
13356 EOM
13357                    d_strtoul="$undef"
13358                    ;;
13359                 esac
13360         fi
13361         ;;
13362 esac
13363
13364 : see if strtoull exists
13365 set strtoull d_strtoull
13366 eval $inlibc
13367
13368 case "$d_longlong-$d_strtoull" in
13369 "$define-$define")
13370         $cat <<EOM
13371 Checking whether your strtoull() works okay...
13372 EOM
13373         $cat >try.c <<'EOCP'
13374 #include <errno.h>
13375 #ifdef __hpux
13376 #define strtoull __strtoull
13377 #endif
13378 #include <stdio.h>
13379 extern unsigned long long int strtoull(char *s, char **, int); 
13380 static int bad = 0;
13381 int check(char *s, long long eull, int een) {
13382         long long gull;
13383         errno = 0;
13384         gull = strtoull(s, 0, 10);
13385         if (!((gull == eull) && (errno == een)))
13386                 bad++;
13387 }
13388 int main() {
13389         check(" 1",                                        1LL, 0);
13390         check(" 0",                                        0LL, 0);
13391         check("18446744073709551615",  18446744073709551615ULL, 0);
13392         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13393 #if 0 /* strtoull() for /^-/ strings is undefined. */
13394         check("-1",                    18446744073709551615ULL, 0);
13395         check("-18446744073709551614",                     2LL, 0);
13396         check("-18446744073709551615",                     1LL, 0);
13397         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13398         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13399 #endif
13400         if (!bad)
13401                 printf("ok\n");
13402 }
13403 EOCP
13404         set try
13405         if eval $compile; then
13406                 case "`$run ./try`" in
13407                 ok) echo "Your strtoull() seems to be working okay." ;;
13408                 *) cat <<EOM >&4
13409 Your strtoull() doesn't seem to be working okay.
13410 EOM
13411                    d_strtoull="$undef"
13412                    ;;
13413                 esac
13414         fi
13415         ;;
13416 esac
13417
13418 : see if strtouq exists
13419 set strtouq d_strtouq
13420 eval $inlibc
13421
13422 case "$d_strtouq" in
13423 "$define")
13424         $cat <<EOM
13425 Checking whether your strtouq() works okay...
13426 EOM
13427         $cat >try.c <<'EOCP'
13428 #include <errno.h>
13429 #include <stdio.h>
13430 extern unsigned long long int strtouq(char *s, char **, int); 
13431 static int bad = 0;
13432 void check(char *s, unsigned long long eull, int een) {
13433         unsigned long long gull;
13434         errno = 0;
13435         gull = strtouq(s, 0, 10);
13436         if (!((gull == eull) && (errno == een)))
13437                 bad++;
13438 }
13439 int main() {
13440         check(" 1",                                        1LL, 0);
13441         check(" 0",                                        0LL, 0);
13442         check("18446744073709551615",  18446744073709551615ULL, 0);
13443         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13444 #if 0 /* strtouq() for /^-/ strings is undefined. */
13445         check("-1",                    18446744073709551615ULL, 0);
13446         check("-18446744073709551614",                     2LL, 0);
13447         check("-18446744073709551615",                     1LL, 0);
13448         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13449         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13450 #endif
13451         if (!bad)
13452                 printf("ok\n");
13453         return 0;
13454 }
13455 EOCP
13456         set try
13457         if eval $compile; then
13458                 case "`$run ./try`" in
13459                 ok) echo "Your strtouq() seems to be working okay." ;;
13460                 *) cat <<EOM >&4
13461 Your strtouq() doesn't seem to be working okay.
13462 EOM
13463                    d_strtouq="$undef"
13464                    ;;
13465                 esac
13466         fi
13467         ;;
13468 esac
13469
13470 : see if strxfrm exists
13471 set strxfrm d_strxfrm
13472 eval $inlibc
13473
13474 : see if symlink exists
13475 set symlink d_symlink
13476 eval $inlibc
13477
13478 : see if syscall exists
13479 set syscall d_syscall
13480 eval $inlibc
13481
13482 : see if prototype for syscall is available
13483 echo " "
13484 set d_syscallproto syscall $i_unistd unistd.h
13485 eval $hasproto
13486
13487 : see if sysconf exists
13488 set sysconf d_sysconf
13489 eval $inlibc
13490
13491 : see if system exists
13492 set system d_system
13493 eval $inlibc
13494
13495 : see if tcgetpgrp exists
13496 set tcgetpgrp d_tcgetpgrp
13497 eval $inlibc
13498
13499 : see if tcsetpgrp exists
13500 set tcsetpgrp d_tcsetpgrp
13501 eval $inlibc
13502
13503 : see if prototype for telldir is available
13504 echo " "
13505 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13506 eval $hasproto
13507
13508 : see if this is a sys/times.h system
13509 set sys/times.h i_systimes
13510 eval $inhdr
13511
13512 : see if times exists
13513 echo " "
13514 if set times val -f d_times; eval $csym; $val; then
13515         echo 'times() found.' >&4
13516         d_times="$define"
13517         inc=''
13518         case "$i_systimes" in
13519         "$define") inc='sys/times.h';;
13520         esac
13521         rp="What is the type returned by times() on this system?"
13522         set clock_t clocktype long stdio.h sys/types.h $inc
13523         eval $typedef_ask
13524 else
13525         echo 'times() NOT found, hope that will do.' >&4
13526         d_times="$undef"
13527         clocktype='int'
13528 fi
13529
13530 : see if truncate exists
13531 set truncate d_truncate
13532 eval $inlibc
13533
13534 : see if tzname[] exists
13535 echo " "
13536 if set tzname val -a d_tzname; eval $csym; $val; then
13537         val="$define"
13538         echo 'tzname[] found.' >&4
13539 else
13540         val="$undef"
13541         echo 'tzname[] NOT found.' >&4
13542 fi
13543 set d_tzname
13544 eval $setvar
13545
13546 case "$osname" in
13547 next|rhapsody|darwin) multiarch="$define" ;;
13548 esac
13549 case "$multiarch" in
13550 ''|[nN]*) multiarch="$undef" ;;
13551 esac
13552
13553 : check for ordering of bytes in a long
13554 echo " "
13555 case "$usecrosscompile$multiarch" in
13556 *$define*)
13557         $cat <<EOM
13558 You seem to be either cross-compiling or doing a multiarchitecture build,
13559 skipping the byteorder check.
13560
13561 EOM
13562         byteorder='ffff'
13563         ;;
13564 *)
13565         case "$byteorder" in
13566         '')
13567                 $cat <<'EOM'
13568 In the following, larger digits indicate more significance.  A big-endian
13569 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13570 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13571 machines may have weird orders like 3412.  A Cray will report 87654321,
13572 an Alpha will report 12345678. If the test program works the default is
13573 probably right.
13574 I'm now running the test program...
13575 EOM
13576                 $cat >try.c <<'EOCP'
13577 #include <stdio.h>
13578 int main()
13579 {
13580         int i;
13581         union {
13582                 unsigned long l;
13583                 char c[sizeof(long)];
13584         } u;
13585
13586         if (sizeof(long) > 4)
13587                 u.l = (0x08070605L << 32) | 0x04030201L;
13588         else
13589                 u.l = 0x04030201L;
13590         for (i = 0; i < sizeof(long); i++)
13591                 printf("%c", u.c[i]+'0');
13592         printf("\n");
13593         exit(0);
13594 }
13595 EOCP
13596                 xxx_prompt=y
13597                 set try
13598                 if eval $compile && ./try > /dev/null; then
13599                         dflt=`$run ./try`
13600                         case "$dflt" in
13601                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13602                                 echo "(The test program ran ok.)"
13603                                 echo "byteorder=$dflt"
13604                                 xxx_prompt=n
13605                         ;;
13606                         ????|????????) echo "(The test program ran ok.)" ;;
13607                         *) echo "(The test program didn't run right for some reason.)" ;;
13608                         esac
13609                 else
13610                         dflt='4321'
13611                         cat <<'EOM'
13612 (I can't seem to compile the test program.  Guessing big-endian...)
13613 EOM
13614                 fi
13615                 case "$xxx_prompt" in
13616                 y)
13617                         rp="What is the order of bytes in a long?"
13618                         . ./myread
13619                         byteorder="$ans"
13620                         ;;
13621                 *)      byteorder=$dflt
13622                         ;;
13623                 esac
13624                 ;;
13625         esac
13626         $rm -f try.c try
13627         ;;
13628 esac
13629
13630
13631 $cat <<EOM
13632
13633 Checking to see whether you can access character data unalignedly...
13634 EOM
13635 case "$d_u32align" in
13636 '')   $cat >try.c <<EOCP
13637 #include <stdio.h>
13638 #define U32 $u32type
13639 #define BYTEORDER 0x$byteorder
13640 #define U8 $u8type
13641 #include <signal.h>
13642 #ifdef SIGBUS
13643 $signal_t bletch(s) int s; { exit(4); }
13644 #endif
13645 int main() {
13646 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13647     U8 buf[8];
13648     U32 *up;
13649     int i;
13650
13651     if (sizeof(U32) != 4) {
13652         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13653         exit(1);
13654     }
13655
13656     fflush(stdout);
13657
13658 #ifdef SIGBUS
13659     signal(SIGBUS, bletch);
13660 #endif
13661
13662     buf[0] = 0;
13663     buf[1] = 0;
13664     buf[2] = 0;
13665     buf[3] = 1;
13666     buf[5] = 0;
13667     buf[6] = 0;
13668     buf[7] = 0;
13669     buf[8] = 1;
13670
13671     for (i = 0; i < 4; i++) {
13672         up = (U32*)(buf + i);
13673         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13674                (*up == 1 << (8*(3-i)))  /* little-endian */
13675               )
13676            )
13677         {
13678             printf("read failed (%x)\n", *up);
13679             exit(2);
13680         }
13681     }
13682
13683     /* write test */
13684     for (i = 0; i < 4; i++) {
13685         up = (U32*)(buf + i);
13686         *up = 0xBeef;
13687         if (*up != 0xBeef) {
13688             printf("write failed (%x)\n", *up);
13689             exit(3);
13690         }
13691     }
13692
13693     exit(0);
13694 #else
13695     printf("1\n");
13696     exit(1);
13697 #endif
13698     return 0;
13699 }
13700 EOCP
13701 set try
13702 if eval $compile_ok; then
13703         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13704         $run ./try 2>&1 >/dev/null
13705         case "$?" in
13706         0)      cat >&4 <<EOM
13707 You can access character data pretty unalignedly.
13708 EOM
13709                 d_u32align="$undef"
13710                 ;;
13711         *)      cat >&4 <<EOM
13712 It seems that you must access character data in an aligned manner.
13713 EOM
13714                 d_u32align="$define"
13715                 ;;
13716         esac
13717 else
13718         rp='Can you access character data at unaligned addresses?'
13719         dflt='n'
13720         . ./myread
13721         case "$ans" in
13722         [yY]*)  d_u32align="$undef"  ;;
13723         *)      d_u32align="$define" ;;
13724         esac
13725 fi
13726 $rm -f core core.try.* try.core
13727 ;;
13728 esac
13729
13730 : see if ualarm exists
13731 set ualarm d_ualarm
13732 eval $inlibc
13733
13734 : see if umask exists
13735 set umask d_umask
13736 eval $inlibc
13737
13738 : see if unordered exists
13739 set unordered d_unordered
13740 eval $inlibc
13741
13742 : see if usleep exists
13743 set usleep d_usleep
13744 eval $inlibc
13745
13746 : see if prototype for usleep is available
13747 echo " "
13748 set d_usleepproto usleep $i_unistd unistd.h
13749 eval $hasproto
13750
13751 : see if ustat exists
13752 set ustat d_ustat
13753 eval $inlibc
13754
13755 : backward compatibility for d_hvfork
13756 if test X$d_hvfork != X; then
13757         d_vfork="$d_hvfork"
13758         d_hvfork=''
13759 fi
13760 : see if there is a vfork
13761 val=''
13762 set vfork val
13763 eval $inlibc
13764
13765 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13766 : perl on Solaris 2.x, and probably elsewhere.
13767 case "$val" in
13768 $define)
13769         echo " "
13770         case "$usevfork" in
13771         false) dflt='n';;
13772         *) dflt='y';;
13773         esac
13774         cat <<'EOM'
13775  
13776 Perl can only use a vfork() that doesn't suffer from strict
13777 restrictions on calling functions or modifying global data in
13778 the child.  For example, glibc-2.1 contains such a vfork()
13779 that is unsuitable.  If your system provides a proper fork()
13780 call, chances are that you do NOT want perl to use vfork().
13781
13782 EOM
13783         rp="Do you still want to use vfork()?"
13784         . ./myread
13785         case "$ans" in
13786         y|Y) ;;
13787         *)
13788                 echo "Ok, we won't use vfork()."
13789                 val="$undef"
13790                 ;;
13791         esac
13792         ;;
13793 esac
13794 set d_vfork
13795 eval $setvar
13796 case "$d_vfork" in
13797 $define) usevfork='true';;
13798 *) usevfork='false';;
13799 esac
13800
13801 : see if closedir exists
13802 set closedir d_closedir
13803 eval $inlibc
13804
13805 case "$d_closedir" in
13806 "$define")
13807         echo " "
13808         echo "Checking whether closedir() returns a status..." >&4
13809         cat > try.c <<EOM
13810 #$i_dirent I_DIRENT             /**/
13811 #$i_sysdir I_SYS_DIR            /**/
13812 #$i_sysndir I_SYS_NDIR          /**/
13813 #$i_systypes I_SYS_TYPES        /**/
13814
13815 #if defined(I_SYS_TYPES)
13816 #include <sys/types.h>
13817 #endif
13818 #if defined(I_DIRENT)
13819 #include <dirent.h>
13820 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13821 #include <sys/dir.h>
13822 #endif
13823 #else
13824 #ifdef I_SYS_NDIR
13825 #include <sys/ndir.h>
13826 #else
13827 #ifdef I_SYS_DIR
13828 #ifdef hp9000s500
13829 #include <ndir.h>       /* may be wrong in the future */
13830 #else
13831 #include <sys/dir.h>
13832 #endif
13833 #endif
13834 #endif
13835 #endif 
13836 int main() { return closedir(opendir(".")); }
13837 EOM
13838         set try
13839         if eval $compile_ok; then
13840                 if $run ./try > /dev/null 2>&1 ; then
13841                         echo "Yes, it does."
13842                         val="$undef"
13843                 else
13844                         echo "No, it doesn't."
13845                         val="$define"
13846                 fi
13847         else
13848                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13849                 val="$define"
13850         fi
13851         ;;
13852 *)
13853         val="$undef";
13854         ;;
13855 esac
13856 set d_void_closedir
13857 eval $setvar
13858 $rm -f try try.*
13859 : see if there is a wait4
13860 set wait4 d_wait4
13861 eval $inlibc
13862
13863 : see if waitpid exists
13864 set waitpid d_waitpid
13865 eval $inlibc
13866
13867 : see if wcstombs exists
13868 set wcstombs d_wcstombs
13869 eval $inlibc
13870
13871 : see if wctomb exists
13872 set wctomb d_wctomb
13873 eval $inlibc
13874
13875 : see if writev exists
13876 set writev d_writev
13877 eval $inlibc
13878
13879 : preserve RCS keywords in files with variable substitution, grrr
13880 Date='$Date'
13881 Id='$Id'
13882 Log='$Log'
13883 RCSfile='$RCSfile'
13884 Revision='$Revision'
13885
13886 : check for alignment requirements
13887 echo " "
13888 case "$usecrosscompile$multiarch" in
13889 *$define*)
13890         $cat <<EOM
13891 You seem to be either cross-compiling or doing a multiarchitecture build,
13892 skipping the memory alignment check.
13893
13894 EOM
13895         case "$alignbytes" in
13896         '') alignbytes=8 ;;
13897         esac
13898         ;;
13899 *)
13900         case "$alignbytes" in
13901         '') echo "Checking alignment constraints..." >&4
13902                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13903                         $cat >try.c <<'EOCP'
13904 typedef long double NV;
13905 EOCP
13906                 else
13907                         $cat >try.c <<'EOCP'
13908 typedef double NV;
13909 EOCP
13910                 fi
13911                 $cat >>try.c <<'EOCP'
13912 #include <stdio.h>
13913 struct foobar {
13914         char foo;
13915         NV bar;
13916 } try_algn;
13917 int main()
13918 {
13919     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13920     return(0);
13921 }
13922 EOCP
13923                 set try
13924                 if eval $compile_ok; then
13925                         dflt=`$run ./try`
13926                 else
13927                         dflt='8'
13928                         echo "(I can't seem to compile the test program...)"
13929                 fi
13930                 ;;
13931         *) dflt="$alignbytes"
13932                 ;;
13933         esac
13934         rp="Doubles must be aligned on a how-many-byte boundary?"
13935         . ./myread
13936         alignbytes="$ans"
13937         $rm -f try.c try
13938         ;;
13939 esac
13940
13941
13942 : set the base revision
13943 baserev=5.0
13944
13945 : how do we catenate cpp tokens here?
13946 echo " "
13947 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13948 $cat >cpp_stuff.c <<'EOCP'
13949 #define RCAT(a,b)a/**/b
13950 #define ACAT(a,b)a ## b
13951 RCAT(Rei,ser)
13952 ACAT(Cir,cus)
13953 EOCP
13954 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13955 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13956         echo "Oh!  Smells like ANSI's been here." >&4
13957         echo "We can catify or stringify, separately or together!"
13958         cpp_stuff=42
13959 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13960         echo "Ah, yes!  The good old days!" >&4
13961         echo "However, in the good old days we don't know how to stringify and"
13962         echo "catify at the same time."
13963         cpp_stuff=1
13964 else
13965         $cat >&4 <<EOM
13966 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13967 to have to edit the values of CAT[2-5] in config.h...
13968 EOM
13969         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13970 fi
13971 $rm -f cpp_stuff.*
13972
13973 : see if this is a db.h system
13974 set db.h i_db
13975 eval $inhdr
13976
13977 case "$i_db" in
13978 $define)
13979         : Check db version.
13980         echo " "
13981         echo "Checking Berkeley DB version ..." >&4
13982         $cat >try.c <<EOCP
13983 #$d_const HASCONST
13984 #ifndef HASCONST
13985 #define const
13986 #endif
13987 #include <sys/types.h>
13988 #include <stdio.h>
13989 #include <db.h>
13990 int main(int argc, char *argv[])
13991 {
13992 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13993     int Major, Minor, Patch ;
13994     unsigned long Version ;
13995     (void)db_version(&Major, &Minor, &Patch) ;
13996     if (argc == 2) {
13997         printf("%d %d %d %d %d %d\n",
13998                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13999                Major, Minor, Patch);
14000         exit(0);
14001     }
14002     printf("You have Berkeley DB Version 2 or greater.\n");
14003
14004     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
14005                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
14006     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
14007                 Major, Minor, Patch) ;
14008
14009     /* check that db.h & libdb are compatible */
14010     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
14011         printf("db.h and libdb are incompatible.\n") ;
14012         exit(3);        
14013     }
14014
14015     printf("db.h and libdb are compatible.\n") ;
14016
14017     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
14018                 + DB_VERSION_PATCH ;
14019
14020     /* needs to be >= 2.3.4 */
14021     if (Version < 2003004) {
14022     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
14023         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
14024         exit(2);        
14025     }
14026
14027     exit(0);
14028 #else
14029 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
14030     if (argc == 2) {
14031         printf("1 0 0\n");
14032         exit(0);
14033     }
14034     printf("You have Berkeley DB Version 1.\n");
14035     exit(0);    /* DB version < 2: the coast is clear. */
14036 #else
14037     exit(1);    /* <db.h> not Berkeley DB? */
14038 #endif
14039 #endif
14040 }
14041 EOCP
14042         set try
14043         if eval $compile_ok && $run ./try; then
14044                 echo 'Looks OK.' >&4
14045                 set `$run ./try 1`
14046                 db_version_major=$1
14047                 db_version_minor=$2
14048                 db_version_patch=$3
14049         else
14050                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
14051                 i_db=$undef
14052                 case " $libs " in
14053                 *"-ldb "*)
14054                         : Remove db from list of libraries to use
14055                         echo "Removing unusable -ldb from library list" >&4
14056                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
14057                         shift
14058                         libs="$*"
14059                         echo "libs = $libs" >&4
14060                         ;;
14061                 esac
14062         fi
14063         $rm -f try.*
14064         ;;
14065 esac
14066
14067 case "$i_db" in
14068 define)
14069         : Check the return type needed for hash 
14070         echo " "
14071         echo "Checking return type needed for hash for Berkeley DB ..." >&4
14072         $cat >try.c <<EOCP
14073 #$d_const HASCONST
14074 #ifndef HASCONST
14075 #define const
14076 #endif
14077 #include <sys/types.h>
14078 #include <db.h>
14079
14080 #ifndef DB_VERSION_MAJOR
14081 u_int32_t hash_cb (ptr, size)
14082 const void *ptr;
14083 size_t size;
14084 {
14085 }
14086 HASHINFO info;
14087 int main()
14088 {
14089         info.hash = hash_cb;
14090 }
14091 #endif
14092 EOCP
14093         if $cc $ccflags -c try.c >try.out 2>&1 ; then
14094                 if $contains warning try.out >>/dev/null 2>&1 ; then
14095                         db_hashtype='int'
14096                 else
14097                         db_hashtype='u_int32_t'
14098                 fi
14099         else
14100                 : XXX Maybe we should just give up here.
14101                 db_hashtype=u_int32_t
14102                 $cat try.out >&4
14103                 echo "Help:  I can't seem to compile the db test program." >&4
14104                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
14105         fi
14106         $rm -f try.*
14107         echo "Your version of Berkeley DB uses $db_hashtype for hash."
14108         ;;
14109 *)      db_hashtype=u_int32_t
14110         ;;
14111 esac
14112 case "$i_db" in
14113 define)
14114         : Check the return type needed for prefix 
14115         echo " "
14116         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
14117         cat >try.c <<EOCP
14118 #$d_const HASCONST
14119 #ifndef HASCONST
14120 #define const
14121 #endif
14122 #include <sys/types.h>
14123 #include <db.h>
14124
14125 #ifndef DB_VERSION_MAJOR
14126 size_t prefix_cb (key1, key2)
14127 const DBT *key1;
14128 const DBT *key2;
14129 {
14130 }
14131 BTREEINFO info;
14132 int main()
14133 {
14134         info.prefix = prefix_cb;
14135 }
14136 #endif
14137 EOCP
14138         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
14139                 if $contains warning try.out >>/dev/null 2>&1 ; then
14140                         db_prefixtype='int'
14141                 else
14142                         db_prefixtype='size_t'
14143                 fi
14144         else
14145                 db_prefixtype='size_t'
14146                 : XXX Maybe we should just give up here.
14147                 $cat try.out >&4
14148                 echo "Help:  I can't seem to compile the db test program." >&4
14149                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14150         fi
14151         $rm -f try.*
14152         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14153         ;;
14154 *)      db_prefixtype='size_t'
14155         ;;
14156 esac
14157
14158
14159 : How can we generate normalized random numbers ?
14160 echo " "
14161 echo "Looking for a random number function..." >&4
14162 case "$randfunc" in
14163 '')
14164         if set drand48 val -f; eval $csym; $val; then
14165                 dflt="drand48"
14166                 echo "Good, found drand48()." >&4
14167         elif set random val -f; eval $csym; $val; then
14168                 dflt="random"
14169                 echo "OK, found random()." >&4
14170         else
14171                 dflt="rand"
14172                 echo "Yick, looks like I have to use rand()." >&4
14173         fi
14174         echo " "
14175         ;;
14176 *)
14177         dflt="$randfunc"
14178         ;;
14179 esac
14180 cont=true
14181
14182 case "$ccflags" in
14183 *-Dmy_rand=*|*-Dmy_srand=*)
14184         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14185         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14186         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14187         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14188         ;;
14189 esac
14190
14191 while $test "$cont"; do
14192         rp="Use which function to generate random numbers?"
14193         . ./myread
14194         if $test "$ans" = "$dflt"; then
14195                 : null
14196         else
14197                 randbits=''
14198         fi
14199         randfunc="$ans"
14200         if set $ans val -f; eval $csym; $val; then
14201                 cont=''
14202         else
14203                 dflt=y
14204                 rp="I cannot find function $ans. Use that name anyway?"
14205                 . ./myread
14206                 dflt=rand
14207                 case "$ans" in
14208                         [yY]*) cont='';;
14209                 esac
14210         fi
14211         case "$cont" in
14212         '')
14213                 case "$randfunc" in
14214                 drand48)
14215                         drand01="drand48()"
14216                         seedfunc="srand48"
14217                         randbits=48
14218                         randseedtype=long
14219                         ;;
14220                 rand|random)
14221                         case "$randbits" in
14222                         '')
14223 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14224                                 $cat >try.c <<EOCP
14225 #$i_unistd I_UNISTD
14226 #$i_stdlib I_STDLIB
14227 #include <stdio.h>
14228 #ifdef I_UNISTD
14229 #  include <unistd.h>
14230 #endif
14231 #ifdef I_STDLIB
14232 #  include <stdlib.h>
14233 #endif
14234 int main()
14235 {
14236         register int i;
14237         register unsigned long tmp;
14238         register unsigned long max = 0L;
14239
14240         for (i = 1000; i; i--) {
14241                 tmp = (unsigned long) $randfunc();
14242                 if (tmp > max) max = tmp;
14243         }
14244         for (i = 0; max; i++)
14245                 max /= 2;
14246         printf("%d\n",i);
14247 }
14248 EOCP
14249                                 set try
14250                                 if eval $compile_ok; then
14251                                         dflt=`try`
14252                                 else
14253                                         dflt='?'
14254                                         echo "(I can't seem to compile the test program...)"
14255                                 fi
14256                                 ;;
14257                         *)
14258                                 dflt="$randbits"
14259                                 ;;
14260                         esac
14261                         rp="How many bits does your $randfunc() function produce?"
14262                         . ./myread
14263                         randbits="$ans"
14264                         $rm -f try.c try
14265                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14266                         seedfunc="s$randfunc"
14267                         randseedtype=unsigned
14268                         ;;
14269                 *)
14270                         dflt="31"
14271                         rp="How many bits does your $randfunc() function produce?"
14272                         . ./myread
14273                         randbits="$ans"
14274                         seedfunc="s$randfunc"
14275                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14276                         if set $seedfunc val -f; eval $csym; $val; then
14277                                 echo "(Using $seedfunc() to seed random generator)"
14278                         else
14279                                 echo "(Warning: no $seedfunc() to seed random generator)"
14280                                 seedfunc=rand
14281                         fi
14282                         randseedtype=unsigned
14283                         ;;
14284                 esac
14285                 ;;
14286         esac
14287 done
14288
14289 echo " "
14290 echo "Determining whether or not we are on an EBCDIC system..." >&4
14291 $cat >try.c <<'EOM'
14292 int main()
14293 {
14294   if ('M'==0xd4) return 0;
14295   return 1;
14296 }
14297 EOM
14298
14299 val=$undef
14300 set try
14301 if eval $compile_ok; then
14302         if $run ./try; then
14303                 echo "You seem to speak EBCDIC." >&4
14304                 val="$define"
14305         else
14306                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14307         fi
14308 else
14309         echo "I'm unable to compile the test program." >&4
14310         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14311 fi
14312 $rm -f try try.*
14313 set ebcdic
14314 eval $setvar
14315
14316 echo " "
14317 $cat >&4 <<EOM
14318 Checking how to flush all pending stdio output...
14319 EOM
14320 # I only know how to find the first 32 possibly open files on SunOS.
14321 # See also hints/sunos_4_1.sh and util.c  --AD
14322 case "$osname" in
14323 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14324 esac
14325 $cat >>try.c <<EOCP
14326 #include <stdio.h>
14327 #$i_unistd I_UNISTD
14328 #ifdef I_UNISTD
14329 # include <unistd.h>
14330 #endif
14331 #$d_sysconf HAS_SYSCONF
14332 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14333 #ifdef HAS_STDIO_STREAM_ARRAY
14334 # define STDIO_STREAM_ARRAY $stdio_stream_array
14335 #endif
14336 int main() {
14337   FILE* p;
14338   unlink("try.out");
14339   p = fopen("try.out", "w");
14340 #ifdef TRY_FPUTC
14341   fputc('x', p);
14342 #else
14343 # ifdef TRY_FPRINTF
14344   fprintf(p, "x");
14345 # endif
14346 #endif
14347 #ifdef TRY_FFLUSH_NULL
14348   fflush(NULL);
14349 #endif
14350 #ifdef TRY_FFLUSH_ALL
14351   {
14352     long open_max = -1;
14353 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14354     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14355 # else
14356 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14357     open_max = sysconf(_SC_OPEN_MAX);
14358 #  else
14359 #   ifdef FOPEN_MAX
14360     open_max = FOPEN_MAX;
14361 #   else
14362 #    ifdef OPEN_MAX
14363     open_max = OPEN_MAX;
14364 #    else
14365 #     ifdef _NFILE
14366     open_max = _NFILE;
14367 #     endif
14368 #    endif
14369 #   endif
14370 #  endif
14371 # endif 
14372 # ifdef HAS_STDIO_STREAM_ARRAY
14373     if (open_max > 0) {
14374       long i;
14375       for (i = 0; i < open_max; i++)
14376             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14377                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14378                 STDIO_STREAM_ARRAY[i]._flag)
14379                 fflush(&STDIO_STREAM_ARRAY[i]);
14380     }   
14381   }
14382 # endif
14383 #endif
14384   _exit(42);
14385 }
14386 EOCP
14387 : first we have to find out how _not_ to flush
14388 $to try.c
14389 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14390     output=''
14391     set try -DTRY_FPUTC
14392     if eval $compile; then
14393             $run ./try 2>/dev/null
14394             code="$?"
14395             $from try.out
14396             if $test ! -s try.out -a "X$code" = X42; then
14397                 output=-DTRY_FPUTC
14398             fi
14399     fi
14400     case "$output" in
14401     '')
14402             set try -DTRY_FPRINTF
14403             if eval $compile; then
14404                     $run ./try 2>/dev/null
14405                     code="$?"
14406                     $from try.out
14407                     if $test ! -s try.out -a "X$code" = X42; then
14408                         output=-DTRY_FPRINTF
14409                     fi
14410             fi
14411         ;;
14412     esac
14413 fi
14414 : check for fflush NULL behaviour
14415 case "$fflushNULL" in
14416 '')     set try -DTRY_FFLUSH_NULL $output
14417         if eval $compile; then
14418                 $run ./try 2>/dev/null
14419                 code="$?"
14420                 $from try.out
14421                 if $test -s try.out -a "X$code" = X42; then
14422                         fflushNULL="`$cat try.out`"
14423                 else
14424                         if $test "X$code" != X42; then
14425                                 $cat >&4 <<EOM
14426 (If this test failed, don't worry, we'll try another method shortly.)
14427 EOM
14428                         fi
14429                 fi
14430         fi
14431         $rm -f core try.core core.try.*
14432         case "$fflushNULL" in
14433         x)      $cat >&4 <<EOM
14434 Your fflush(NULL) works okay for output streams.
14435 Let's see if it clobbers input pipes...
14436 EOM
14437 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14438 # bug that improperly flushes the input end of pipes.  So we avoid the
14439 # autoflush on fork/system/exec support for now. :-(
14440 $cat >tryp.c <<EOCP
14441 #include <stdio.h>
14442 int
14443 main(int argc, char **argv)
14444 {
14445     char buf[1024];
14446     int i;
14447     char *bp = buf;
14448     while (1) {
14449         while ((i = getc(stdin)) != -1
14450                && (*bp++ = i) != '\n'
14451                && bp < &buf[1024])
14452         /* DO NOTHING */ ;
14453         *bp = '\0';
14454         fprintf(stdout, "%s", buf);
14455         fflush(NULL);
14456         if (i == -1)
14457             return 0;
14458         bp = buf;
14459     }
14460 }
14461 EOCP
14462                 fflushNULL="$define"
14463                 set tryp
14464                 if eval $compile; then
14465                     $rm -f tryp.out
14466                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14467                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14468                        $cat >&4 <<EOM
14469 fflush(NULL) seems to behave okay with input streams.
14470 EOM
14471                         fflushNULL="$define"
14472                     else
14473                         $cat >&4 <<EOM
14474 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14475 EOM
14476                         fflushNULL="$undef"
14477                     fi
14478                 fi
14479                 $rm -f core tryp.c tryp.core core.tryp.*
14480                 ;;
14481         '')     $cat >&4 <<EOM
14482 Your fflush(NULL) isn't working (contrary to ANSI C).
14483 EOM
14484                 fflushNULL="$undef"
14485                 ;;
14486         *)      $cat >&4 <<EOM
14487 Cannot figure out whether your fflush(NULL) works or not.
14488 I'm assuming it doesn't (contrary to ANSI C).
14489 EOM
14490                 fflushNULL="$undef"
14491                 ;;
14492         esac
14493         ;;
14494 $define|true|[yY]*)
14495         fflushNULL="$define"
14496         ;;
14497 *)
14498         fflushNULL="$undef"
14499         ;;
14500 esac
14501 : check explicit looping only if NULL did not work, and if the pipe
14502 : bug does not show up on an explicit flush too
14503 case "$fflushNULL" in
14504 "$undef")
14505         $cat >tryp.c <<EOCP
14506 #include <stdio.h>
14507 int
14508 main(int argc, char **argv)
14509 {
14510     char buf[1024];
14511     int i;
14512     char *bp = buf;
14513     while (1) {
14514         while ((i = getc(stdin)) != -1
14515                && (*bp++ = i) != '\n'
14516                && bp < &buf[1024])
14517         /* DO NOTHING */ ;
14518         *bp = '\0';
14519         fprintf(stdout, "%s", buf);
14520         fflush(stdin);
14521         if (i == -1)
14522             return 0;
14523         bp = buf;
14524     }
14525 }
14526 EOCP
14527         set tryp
14528         if eval $compile; then
14529             $rm -f tryp.out
14530             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14531             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14532                $cat >&4 <<EOM
14533 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14534 EOM
14535                 : now check for fflushall behaviour
14536                 case "$fflushall" in
14537                 '')     set try -DTRY_FFLUSH_ALL $output
14538                         if eval $compile; then
14539                                 $cat >&4 <<EOM
14540 (Now testing the other method--but note that this also may fail.)
14541 EOM
14542                                 $run ./try 2>/dev/null
14543                                 code=$?
14544                                 $from try.out
14545                                 if $test -s try.out -a "X$code" = X42; then
14546                                         fflushall="`$cat try.out`"
14547                                 fi
14548                         fi
14549                         $rm -f core try.core core.try.*
14550                         case "$fflushall" in
14551                         x)      $cat >&4 <<EOM
14552 Whew. Flushing explicitly all the stdio streams works.
14553 EOM
14554                                 fflushall="$define"
14555                                 ;;
14556                         '')     $cat >&4 <<EOM
14557 Sigh. Flushing explicitly all the stdio streams doesn't work.
14558 EOM
14559                                 fflushall="$undef"
14560                                 ;;
14561                         *)      $cat >&4 <<EOM
14562 Cannot figure out whether flushing stdio streams explicitly works or not.
14563 I'm assuming it doesn't.
14564 EOM
14565                                 fflushall="$undef"
14566                                 ;;
14567                         esac
14568                         ;;
14569                 "$define"|true|[yY]*)
14570                         fflushall="$define"
14571                         ;;
14572                 *)
14573                         fflushall="$undef"
14574                         ;;
14575                 esac
14576             else
14577                 $cat >&4 <<EOM
14578 All is futile.  Even fflush(stdin) clobbers input pipes!
14579 EOM
14580                 fflushall="$undef"
14581             fi
14582         else
14583             fflushall="$undef"
14584         fi
14585         $rm -f core tryp.c tryp.core core.tryp.*
14586         ;;
14587 *)      fflushall="$undef"
14588         ;;
14589 esac
14590
14591 case "$fflushNULL$fflushall" in
14592 undefundef)
14593         $cat <<EOM
14594 OK, I give up.  I cannot figure out how to flush pending stdio output.
14595 We won't be flushing handles at all before fork/exec/popen.
14596 EOM
14597         ;;
14598 esac
14599 $rm -f try.* try$exe_ext
14600
14601 : Store the full pathname to the ar program for use in the C program
14602 : Respect a hint or command line value for full_ar.
14603 case "$full_ar" in
14604 '') full_ar=$ar ;;
14605 esac
14606
14607 : Store the full pathname to the sed program for use in the C program
14608 full_sed=$sed
14609
14610 : see what type gids are declared as in the kernel
14611 echo " "
14612 echo "Looking for the type for group ids returned by getgid()."
14613 set gid_t gidtype xxx stdio.h sys/types.h
14614 eval $typedef
14615 case "$gidtype" in
14616 xxx)
14617         xxx=`./findhdr sys/user.h`
14618         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14619         case $1 in
14620         unsigned) dflt="$1 $2" ;;
14621         *) dflt="$1" ;;
14622         esac
14623         ;;
14624 *) dflt="$gidtype";;
14625 esac
14626 case "$gidtype" in
14627 gid_t) echo "gid_t found." ;;
14628 *)      rp="What is the type for group ids returned by getgid()?"
14629         . ./myread
14630         gidtype="$ans"
14631         ;;
14632 esac
14633
14634 echo " "
14635 case "$gidtype" in
14636 *_t) zzz="$gidtype"     ;;
14637 *)   zzz="gid"          ;;
14638 esac
14639 echo "Checking the size of $zzz..." >&4 
14640 cat > try.c <<EOCP
14641 #include <sys/types.h>
14642 #include <stdio.h>
14643 int main() {
14644     printf("%d\n", (int)sizeof($gidtype));
14645     exit(0);
14646 }
14647 EOCP
14648 set try
14649 if eval $compile_ok; then
14650         yyy=`$run ./try`
14651         case "$yyy" in
14652         '')     gidsize=4
14653                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14654                 ;;
14655         *)      gidsize=$yyy
14656                 echo "Your $zzz is $gidsize bytes long."
14657                 ;;
14658         esac
14659 else
14660         gidsize=4
14661         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14662 fi
14663
14664
14665 echo " "
14666 case "$gidtype" in
14667 *_t) zzz="$gidtype"     ;;
14668 *)   zzz="gid"          ;;
14669 esac
14670 echo "Checking the sign of $zzz..." >&4 
14671 cat > try.c <<EOCP
14672 #include <sys/types.h>
14673 #include <stdio.h>
14674 int main() {
14675         $gidtype foo = -1;
14676         if (foo < 0)
14677                 printf("-1\n");
14678         else
14679                 printf("1\n");
14680 }
14681 EOCP
14682 set try
14683 if eval $compile; then
14684         yyy=`$run ./try`
14685         case "$yyy" in
14686         '')     gidsign=1
14687                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14688                 ;;
14689         *)      gidsign=$yyy
14690                 case "$gidsign" in
14691                  1) echo "Your $zzz is unsigned." ;;
14692                 -1) echo "Your $zzz is signed."   ;;
14693                 esac
14694                 ;;
14695         esac
14696 else
14697         gidsign=1
14698         echo "(I can't compile the test program--guessing unsigned.)" >&4
14699 fi
14700
14701
14702 echo " "
14703
14704 if $test X"$quadtype" != X; then
14705
14706 echo "Checking how to print 64-bit integers..." >&4
14707
14708 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14709         $cat >try.c <<'EOCP'
14710 #include <sys/types.h>
14711 #include <stdio.h>
14712 int main() {
14713   int q = 12345678901;
14714   printf("%ld\n", q);
14715 }
14716 EOCP
14717         set try
14718         if eval $compile; then
14719                 yyy=`$run ./try`
14720                 case "$yyy" in
14721                 12345678901)
14722                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14723                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14724                         echo "We will use %d."
14725                         ;;
14726                 esac
14727         fi
14728 fi
14729
14730 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14731         $cat >try.c <<'EOCP'
14732 #include <sys/types.h>
14733 #include <stdio.h>
14734 int main() {
14735   long q = 12345678901;
14736   printf("%ld\n", q);
14737 }
14738 EOCP
14739         set try
14740         if eval $compile; then
14741                 yyy=`$run ./try`
14742                 case "$yyy" in
14743                 12345678901)
14744                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14745                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14746                         echo "We will use %ld."
14747                         ;;
14748                 esac
14749         fi
14750 fi
14751
14752 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14753         $cat >try.c <<'EOCP'
14754 #include <sys/types.h>
14755 #include <inttypes.h>
14756 #include <stdio.h>
14757 int main() {
14758   int64_t q = 12345678901;
14759   printf("%" PRId64 "\n", q);
14760 }
14761 EOCP
14762         set try
14763         if eval $compile; then
14764                 yyy=`$run ./try`
14765                 case "$yyy" in
14766                 12345678901)
14767                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14768                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14769                         echo "We will use the C9X style."
14770                         ;;
14771                 esac
14772         fi
14773 fi
14774
14775 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14776         $cat >try.c <<EOCP
14777 #include <sys/types.h>
14778 #include <stdio.h>
14779 int main() {
14780   $quadtype q = 12345678901;
14781   printf("%Ld\n", q);
14782 }
14783 EOCP
14784         set try
14785         if eval $compile; then
14786                 yyy=`$run ./try`
14787                 case "$yyy" in
14788                 12345678901)
14789                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14790                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14791                         echo "We will use %Ld."
14792                         ;;
14793                 esac
14794         fi
14795 fi
14796
14797 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14798         $cat >try.c <<'EOCP'
14799 #include <sys/types.h>
14800 #include <stdio.h>
14801 int main() {
14802   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14803   printf("%lld\n", q);
14804 }
14805 EOCP
14806         set try
14807         if eval $compile; then
14808                 yyy=`$run ./try`
14809                 case "$yyy" in
14810                 12345678901)
14811                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14812                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14813                         echo "We will use the %lld style."
14814                         ;;
14815                 esac
14816         fi
14817 fi
14818
14819 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14820         $cat >try.c <<EOCP
14821 #include <sys/types.h>
14822 #include <stdio.h>
14823 int main() {
14824   $quadtype q = 12345678901;
14825   printf("%qd\n", q);
14826 }
14827 EOCP
14828         set try
14829         if eval $compile; then
14830                 yyy=`$run ./try`
14831                 case "$yyy" in
14832                 12345678901)
14833                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14834                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14835                         echo "We will use %qd."
14836                         ;;
14837                 esac
14838         fi
14839 fi
14840
14841 if $test X"$sPRId64" = X; then
14842         echo "Cannot figure out how to print 64-bit integers." >&4
14843 fi
14844
14845 $rm -f try try.*
14846
14847 fi
14848
14849 case "$sPRId64" in
14850 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14851         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14852         ;;
14853 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14854         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14855         ;;
14856 esac
14857
14858
14859 echo " "
14860 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14861
14862 if $test X"$ivsize" = X8; then
14863         ivdformat="$sPRId64"
14864         uvuformat="$sPRIu64"
14865         uvoformat="$sPRIo64"
14866         uvxformat="$sPRIx64"
14867         uvXUformat="$sPRIXU64"
14868 else
14869         if $test X"$ivsize" = X"$longsize"; then
14870                 ivdformat='"ld"'
14871                 uvuformat='"lu"'
14872                 uvoformat='"lo"'
14873                 uvxformat='"lx"'
14874                 uvXUformat='"lX"'
14875         else
14876                 if $test X"$ivsize" = X"$intsize"; then
14877                         ivdformat='"d"'
14878                         uvuformat='"u"'
14879                         uvoformat='"o"'
14880                         uvxformat='"x"'
14881                         uvXUformat='"X"'
14882                 else
14883                         : far out
14884                         if $test X"$ivsize" = X"$shortsize"; then
14885                                 ivdformat='"hd"'
14886                                 uvuformat='"hu"'
14887                                 uvoformat='"ho"'
14888                                 uvxformat='"hx"'
14889                                 uvXUformat='"hX"'
14890                         fi
14891                 fi
14892         fi
14893 fi
14894
14895 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14896         nveformat="$sPRIeldbl"
14897         nvfformat="$sPRIfldbl"
14898         nvgformat="$sPRIgldbl"
14899         nvEUformat="$sPRIEUldbl"
14900         nvFUformat="$sPRIFUldbl"
14901         nvGUformat="$sPRIGUldbl"
14902 else
14903         nveformat='"e"'
14904         nvfformat='"f"'
14905         nvgformat='"g"'
14906         nvEUformat='"E"'
14907         nvFUformat='"F"'
14908         nvGUformat='"G"'
14909 fi
14910
14911 case "$ivdformat" in
14912 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14913     exit 1
14914     ;;
14915 esac
14916
14917
14918 echo " "
14919 $echo "Checking the format string to be used for gids..." >&4
14920
14921 case "$gidsign" in
14922 -1)     if $test X"$gidsize" = X"$ivsize"; then
14923                 gidformat="$ivdformat"
14924         else
14925                 if $test X"$gidsize" = X"$longsize"; then
14926                         gidformat='"ld"'
14927                 else
14928                         if $test X"$gidsize" = X"$intsize"; then
14929                                 gidformat='"d"'
14930                         else
14931                                 if $test X"$gidsize" = X"$shortsize"; then
14932                                         gidformat='"hd"'
14933                                 fi
14934                         fi
14935                 fi
14936         fi
14937         ;;
14938 *)      if $test X"$gidsize" = X"$uvsize"; then
14939                 gidformat="$uvuformat"
14940         else
14941                 if $test X"$gidsize" = X"$longsize"; then
14942                         gidformat='"lu"'
14943                 else
14944                         if $test X"$gidsize" = X"$intsize"; then
14945                                 gidformat='"u"'
14946                         else
14947                                 if $test X"$gidsize" = X"$shortsize"; then
14948                                         gidformat='"hu"'
14949                                 fi
14950                         fi
14951                 fi
14952         fi
14953         ;;
14954 esac
14955
14956 : see if getgroups exists
14957 set getgroups d_getgrps
14958 eval $inlibc
14959
14960 : see if setgroups exists
14961 set setgroups d_setgrps
14962 eval $inlibc
14963
14964
14965 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14966 echo " "
14967 case "$d_getgrps$d_setgrps" in
14968 *define*)
14969         case "$groupstype" in
14970         '') dflt="$gidtype" ;;
14971         *)  dflt="$groupstype" ;;
14972         esac
14973         $cat <<EOM
14974 What type of pointer is the second argument to getgroups() and setgroups()?
14975 Usually this is the same as group ids, $gidtype, but not always.
14976
14977 EOM
14978         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14979         . ./myread
14980         groupstype="$ans"
14981         ;;
14982 *)  groupstype="$gidtype";;
14983 esac
14984
14985 echo " "
14986 echo "Checking if your $make program sets \$(MAKE)..." >&4
14987 case "$make_set_make" in
14988 '')
14989         $sed 's/^X //' > testmake.mak << 'EOF'
14990 Xall:
14991 X       @echo 'maketemp="$(MAKE)"'
14992 EOF
14993         case "`$make -f testmake.mak 2>/dev/null`" in
14994         *maketemp=*) make_set_make='#' ;;
14995         *)      make_set_make="MAKE=$make" ;;
14996         esac
14997         $rm -f testmake.mak
14998         ;;
14999 esac
15000 case "$make_set_make" in
15001 '#') echo "Yup, it does.";;
15002 *) echo "Nope, it doesn't.";;
15003 esac
15004
15005 : see what type is used for mode_t
15006 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
15007 set mode_t modetype int stdio.h sys/types.h
15008 eval $typedef_ask
15009
15010 : see if stdarg is available
15011 echo " "
15012 if $test `./findhdr stdarg.h`; then
15013         echo "<stdarg.h> found." >&4
15014         valstd="$define"
15015 else
15016         echo "<stdarg.h> NOT found." >&4
15017         valstd="$undef"
15018 fi
15019
15020 : see if varags is available
15021 echo " "
15022 if $test `./findhdr varargs.h`; then
15023         echo "<varargs.h> found." >&4
15024 else
15025         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
15026 fi
15027
15028 : set up the varargs testing programs
15029 $cat > varargs.c <<EOP
15030 #ifdef I_STDARG
15031 #include <stdarg.h>
15032 #endif
15033 #ifdef I_VARARGS
15034 #include <varargs.h>
15035 #endif
15036
15037 #ifdef I_STDARG
15038 int f(char *p, ...)
15039 #else
15040 int f(va_alist)
15041 va_dcl
15042 #endif
15043 {
15044         va_list ap;
15045 #ifndef I_STDARG
15046         char *p;
15047 #endif
15048 #ifdef I_STDARG
15049         va_start(ap,p);
15050 #else
15051         va_start(ap);
15052         p = va_arg(ap, char *);
15053 #endif
15054         va_end(ap);
15055 }
15056 EOP
15057 $cat > varargs <<EOP
15058 $startsh
15059 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
15060         echo "true"
15061 else
15062         echo "false"
15063 fi
15064 $rm -f varargs$_o
15065 EOP
15066 chmod +x varargs
15067
15068 : now check which varargs header should be included
15069 echo " "
15070 i_varhdr=''
15071 case "$valstd" in
15072 "$define")
15073         if `./varargs I_STDARG`; then
15074                 val='stdarg.h'
15075         elif `./varargs I_VARARGS`; then
15076                 val='varargs.h'
15077         fi
15078         ;;
15079 *)
15080         if `./varargs I_VARARGS`; then
15081                 val='varargs.h'
15082         fi
15083         ;;
15084 esac
15085 case "$val" in
15086 '')
15087 echo "I could not find the definition for va_dcl... You have problems..." >&4
15088         val="$undef"; set i_stdarg; eval $setvar
15089         val="$undef"; set i_varargs; eval $setvar
15090         ;;
15091 *) 
15092         set i_varhdr
15093         eval $setvar
15094         case "$i_varhdr" in
15095         stdarg.h)
15096                 val="$define"; set i_stdarg; eval $setvar
15097                 val="$undef"; set i_varargs; eval $setvar
15098                 ;;
15099         varargs.h)
15100                 val="$undef"; set i_stdarg; eval $setvar
15101                 val="$define"; set i_varargs; eval $setvar
15102                 ;;
15103         esac
15104         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
15105 esac
15106 $rm -f varargs*
15107
15108 : see if we need va_copy
15109 echo " "
15110 case "$i_stdarg" in
15111 "$define")
15112         $cat >try.c <<EOCP
15113 #include <stdarg.h>
15114 #include <stdio.h>
15115 #$i_stdlib I_STDLIB
15116 #ifdef I_STDLIB
15117 #include <stdlib.h>
15118 #endif
15119 #include <signal.h>
15120
15121 int
15122 ivfprintf(FILE *f, const char *fmt, va_list *valp)
15123 {
15124   return vfprintf(f, fmt, *valp);
15125 }
15126  
15127 int    
15128 myvfprintf(FILE *f, const  char *fmt, va_list val)
15129 {
15130   return ivfprintf(f, fmt, &val);
15131 }
15132       
15133 int
15134 myprintf(char *fmt, ...) 
15135 {
15136   va_list val;
15137   va_start(val, fmt);
15138   return myvfprintf(stdout, fmt, val); 
15139 }         
15140
15141 int
15142 main(int ac, char **av)
15143 {
15144   signal(SIGSEGV, exit);
15145
15146   myprintf("%s%cs all right, then\n", "that", '\'');                            
15147   exit(0);      
15148 }
15149 EOCP
15150         set try
15151         if eval $compile && $run ./try 2>&1 >/dev/null; then
15152                 case "`$run ./try`" in
15153                 "that's all right, then")
15154                         okay=yes
15155                         ;;
15156                 esac
15157         fi
15158         case "$okay" in
15159         yes)    echo "It seems that you don't need va_copy()." >&4
15160                 need_va_copy="$undef"
15161                 ;;
15162         *)      echo "It seems that va_copy() or similar will be needed." >&4
15163                 need_va_copy="$define"
15164                 ;;
15165         esac
15166         $rm -f try.* core core.* *.core *.core.*
15167         ;;
15168 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15169         ;;
15170 esac
15171
15172 : define a fucntion to check prototypes
15173 $cat > protochk <<EOSH
15174 $startsh
15175 cc="$cc"
15176 optimize="$optimize"
15177 ccflags="$ccflags"
15178 prototype="$prototype"
15179 define="$define"
15180 rm=$rm
15181 EOSH
15182
15183 $cat >> protochk <<'EOSH'
15184
15185 $rm -f try.c
15186 foo="$1"
15187 shift
15188 while test $# -ge 2; do
15189         case "$1" in
15190                 $define) echo "#include <$2>" >> try.c ;;
15191                 literal) echo "$2" >> try.c ;;
15192         esac
15193     shift 2
15194 done
15195 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15196 cat >> try.c <<'EOCP'
15197 #ifdef CAN_PROTOTYPE
15198 #define _(args) args
15199 #else
15200 #define _(args) ()
15201 #endif
15202 EOCP
15203 echo "$foo" >> try.c
15204 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15205 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15206 status=$?
15207 $rm -f try.[co]
15208 exit $status
15209 EOSH
15210 chmod +x protochk
15211 $eunicefix protochk
15212
15213 : see what type is used for size_t
15214 rp="What is the type used for the length parameter for string functions?"
15215 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15216 eval $typedef_ask
15217
15218 : check for type of arguments to gethostbyaddr. 
15219 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15220         case "$d_gethbyaddr" in
15221         $define)
15222                 $cat <<EOM
15223
15224 Checking to see what type of arguments are accepted by gethostbyaddr().
15225 EOM
15226                 hdrs="$define sys/types.h
15227                         $d_socket sys/socket.h 
15228                         $i_niin netinet/in.h 
15229                         $i_netdb netdb.h
15230                         $i_unistd unistd.h"
15231                 : The first arg can 'char *' or 'void *'
15232                 : The second arg is some of integral type
15233                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15234                         for yyy in size_t long int; do
15235                                 case "$netdb_host_type" in
15236                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15237                                         if ./protochk "$try" $hdrs; then
15238                                                 echo "Your system accepts $xxx for the first arg."
15239                                                 echo "...and $yyy for the second arg."
15240                                                 netdb_host_type="$xxx"
15241                                                 netdb_hlen_type="$yyy"
15242                                         fi
15243                                         ;;
15244                                 esac
15245                         done
15246                 done
15247                 : In case none of those worked, prompt the user.
15248                 case "$netdb_host_type" in
15249                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15250                         dflt='char *'
15251                         . ./myread
15252                         netdb_host_type=$ans
15253                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15254                         dflt="$sizetype"
15255                         . ./myread
15256                         netdb_hlen_type=$ans
15257                         ;;
15258                 esac
15259                 ;;
15260         *)      : no gethostbyaddr, so pick harmless defaults
15261                 netdb_host_type='char *'
15262                 netdb_hlen_type="$sizetype"
15263                 ;;
15264         esac
15265         # Remove the "const" if needed. -- but then we'll have a 
15266         # prototype clash!
15267         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15268 fi
15269
15270 : check for type of argument to gethostbyname. 
15271 if test "X$netdb_name_type" = X ; then
15272         case "$d_gethbyname" in
15273         $define)
15274                 $cat <<EOM
15275
15276 Checking to see what type of argument is accepted by gethostbyname().
15277 EOM
15278                 hdrs="$define sys/types.h
15279                         $d_socket sys/socket.h 
15280                         $i_niin netinet/in.h 
15281                         $i_netdb netdb.h
15282                         $i_unistd unistd.h"
15283                 for xxx in "const char *" "char *"; do
15284                         case "$netdb_name_type" in
15285                         '')     try="extern struct hostent *gethostbyname($xxx);"
15286                                 if ./protochk "$try" $hdrs; then
15287                                         echo "Your system accepts $xxx."
15288                                         netdb_name_type="$xxx"
15289                                 fi
15290                                 ;;
15291                         esac
15292                 done
15293                 : In case none of those worked, prompt the user.
15294                 case "$netdb_name_type" in
15295                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15296                         dflt='char *'
15297                         . ./myread
15298                         netdb_name_type=$ans
15299                         ;;
15300                 esac
15301                 ;;
15302         *)      : no gethostbyname, so pick harmless default
15303                 netdb_name_type='char *'
15304                 ;;
15305         esac
15306 fi
15307
15308 : check for type of 1st argument to getnetbyaddr. 
15309 if test "X$netdb_net_type" = X ; then
15310         case "$d_getnbyaddr" in
15311         $define)
15312                 $cat <<EOM
15313
15314 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15315 EOM
15316                 hdrs="$define sys/types.h
15317                         $d_socket sys/socket.h 
15318                         $i_niin netinet/in.h 
15319                         $i_netdb netdb.h
15320                         $i_unistd unistd.h"
15321                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15322                         case "$netdb_net_type" in
15323                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15324                                 if ./protochk "$try" $hdrs; then
15325                                         echo "Your system accepts $xxx."
15326                                         netdb_net_type="$xxx"
15327                                 fi
15328                                 ;;
15329                         esac
15330                 done
15331                 : In case none of those worked, prompt the user.
15332                 case "$netdb_net_type" in
15333                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15334                         dflt='long'
15335                         . ./myread
15336                         netdb_net_type=$ans
15337                         ;;
15338                 esac
15339                 ;;
15340         *)      : no getnetbyaddr, so pick harmless default
15341                 netdb_net_type='long'
15342                 ;;
15343         esac
15344 fi
15345 : locate the preferred pager for this system
15346 case "$pager" in
15347 '')
15348         dflt=''
15349         case "$pg" in
15350         /*) dflt=$pg;;
15351         [a-zA-Z]:/*) dflt=$pg;;
15352         esac
15353         case "$more" in
15354         /*) dflt=$more;;
15355         [a-zA-Z]:/*) dflt=$more;;
15356         esac
15357         case "$less" in
15358         /*) dflt=$less;;
15359         [a-zA-Z]:/*) dflt=$less;;
15360         esac
15361         case "$dflt" in
15362         '') dflt=/usr/ucb/more;;
15363         esac
15364         ;;
15365 *) dflt="$pager";;
15366 esac
15367 echo " "
15368 fn=f/
15369 rp='What pager is used on your system?'
15370 . ./getfile
15371 pager="$ans"
15372
15373 : see what type pids are declared as in the kernel
15374 rp="What is the type of process ids on this system?"
15375 set pid_t pidtype int stdio.h sys/types.h
15376 eval $typedef_ask
15377
15378 : Find earliest binary compatible site_perl subdirectory perl can use.
15379 case "$bincompat5005" in
15380 "$define") xs_apiversion='5.005' ;;
15381 *) xs_apiversion=$version ;;   # The current site_perl version.
15382 esac
15383 : Find earliest pure perl site_perl subdirectory perl can use.
15384 : The versioned directories started at 5.005.
15385 pm_apiversion='5.005'
15386
15387 : see if ar generates random libraries by itself
15388 echo " "
15389 echo "Checking how to generate random libraries on your machine..." >&4
15390 echo 'int bar1() { return bar2(); }' > bar1.c
15391 echo 'int bar2() { return 2; }' > bar2.c
15392 $cat > foo.c <<'EOP'
15393 int main() { printf("%d\n", bar1()); exit(0); }
15394 EOP
15395 $cc $ccflags -c bar1.c >/dev/null 2>&1
15396 $cc $ccflags -c bar2.c >/dev/null 2>&1
15397 $cc $ccflags -c foo.c >/dev/null 2>&1
15398 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15399 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15400         $run ./foobar >/dev/null 2>&1; then
15401         echo "$ar appears to generate random libraries itself."
15402         orderlib=false
15403         ranlib=":"
15404 elif $ar ts bar$_a >/dev/null 2>&1 &&
15405         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15406         $run ./foobar >/dev/null 2>&1; then
15407                 echo "a table of contents needs to be added with '$ar ts'."
15408                 orderlib=false
15409                 ranlib="$ar ts"
15410 else
15411         case "$ranlib" in
15412         :) ranlib='';;
15413         '')
15414                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15415                 $test -f $ranlib || ranlib=''
15416                 ;;
15417         esac
15418         if $test -n "$ranlib"; then
15419                 echo "your system has '$ranlib'; we'll use that."
15420                 orderlib=false
15421         else
15422                 echo "your system doesn't seem to support random libraries"
15423                 echo "so we'll use lorder and tsort to order the libraries."
15424                 orderlib=true
15425                 ranlib=":"
15426         fi
15427 fi
15428 $rm -f foo* bar* 
15429
15430 : check for type of arguments to select. 
15431 case "$selecttype" in
15432 '') case "$d_select" in
15433         $define)
15434                 echo " "
15435                 $cat <<EOM
15436 Checking to see what type of arguments are accepted by select().
15437 EOM
15438                 hdrs="$define sys/types.h
15439                         $i_systime sys/time.h 
15440                         $i_sysselct sys/select.h
15441                         $d_socket sys/socket.h"
15442                 : The first arg can be int, unsigned, or size_t
15443                 : The last arg may or may not be 'const'
15444                 val=''
15445                 : void pointer has been seen but using that
15446                 : breaks the selectminbits test
15447                 for xxx in 'fd_set *' 'int *'; do
15448                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15449                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15450                                         case "$val" in
15451                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15452                                                 if ./protochk "$try" $hdrs; then
15453                                                         echo "Your system accepts $xxx."
15454                                                         val="$xxx"
15455                                                 fi
15456                                                 ;;
15457                                         esac
15458                                 done
15459                         done
15460                 done
15461                 case "$val" in
15462                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15463                         case "$d_fd_set" in
15464                                 $define) dflt="fd_set *" ;;
15465                                 *)              dflt="int *" ;;
15466                         esac
15467                         . ./myread
15468                         val=$ans
15469                         ;;
15470                 esac
15471                 selecttype="$val"
15472                 ;;
15473         *)      : no select, so pick a harmless default
15474                 selecttype='int *'
15475                 ;;
15476         esac
15477         ;;
15478 esac
15479
15480 : check for the select 'width'
15481 case "$selectminbits" in
15482 '') case "$d_select" in
15483         $define)
15484                 $cat <<EOM
15485
15486 Checking to see on how many bits at a time your select() operates...
15487 EOM
15488                 $cat >try.c <<EOCP
15489 #include <sys/types.h>
15490 #$i_time I_TIME
15491 #$i_systime I_SYS_TIME
15492 #$i_systimek I_SYS_TIME_KERNEL
15493 #ifdef I_TIME
15494 #   include <time.h>
15495 #endif
15496 #ifdef I_SYS_TIME
15497 #   ifdef I_SYS_TIME_KERNEL
15498 #       define KERNEL
15499 #   endif
15500 #   include <sys/time.h>
15501 #   ifdef I_SYS_TIME_KERNEL
15502 #       undef KERNEL
15503 #   endif
15504 #endif
15505 #$i_sysselct I_SYS_SELECT
15506 #ifdef I_SYS_SELECT
15507 #include <sys/select.h>
15508 #endif
15509 #$d_socket HAS_SOCKET
15510 #ifdef HAS_SOCKET
15511 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15512 #endif
15513 #include <stdio.h>
15514 $selecttype b;
15515 #define S sizeof(*(b))
15516 #define MINBITS 64
15517 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15518 #define NBITS  (NBYTES * 8)
15519 int main() {
15520     char s[NBYTES];
15521     struct timeval t;
15522     int i;
15523     FILE* fp;
15524     int fd;
15525
15526     fclose(stdin);
15527     fp = fopen("try.c", "r");
15528     if (fp == 0)
15529       exit(1);
15530     fd = fileno(fp);
15531     if (fd < 0)
15532       exit(2);
15533     b = ($selecttype)s;
15534     for (i = 0; i < NBITS; i++)
15535         FD_SET(i, b);
15536     t.tv_sec  = 0;
15537     t.tv_usec = 0;
15538     select(fd + 1, b, 0, 0, &t);
15539     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15540     printf("%d\n", i + 1);
15541     return 0;
15542 }
15543 EOCP
15544                 set try
15545                 if eval $compile_ok; then
15546                         selectminbits=`$run ./try`
15547                         case "$selectminbits" in
15548                         '')     cat >&4 <<EOM
15549 Cannot figure out on how many bits at a time your select() operates.
15550 I'll play safe and guess it is 32 bits.
15551 EOM
15552                                 selectminbits=32
15553                                 bits="32 bits"
15554                                 ;;
15555                         1)      bits="1 bit" ;;
15556                         *)      bits="$selectminbits bits" ;;
15557                         esac
15558                         echo "Your select() operates on $bits at a time." >&4
15559                 else
15560                         rp='What is the minimum number of bits your select() operates on?'
15561                         case "$byteorder" in
15562                         1234|12345678)  dflt=32 ;;
15563                         *)              dflt=1  ;;
15564                         esac
15565                         . ./myread
15566                         val=$ans
15567                         selectminbits="$val"
15568                 fi
15569                 $rm -f try.* try
15570                 ;;
15571         *)      : no select, so pick a harmless default
15572                 selectminbits='32'
15573                 ;;
15574         esac
15575         ;;
15576 esac
15577
15578 : Trace out the files included by signal.h, then look for SIGxxx names.
15579 : Remove SIGARRAYSIZE used by HPUX.
15580 : Remove SIGSTKSIZE used by Linux.
15581 : Remove SIGSTKSZ used by Posix.
15582 : Remove SIGTYP void lines used by OS2.
15583 : Some cpps, like os390, dont give the file name anywhere
15584 if [ "X$fieldn" = X ]; then
15585         : Just make some guesses.  We check them later.
15586         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15587 else
15588         xxx=`echo '#include <signal.h>' |
15589         $cppstdin $cppminus $cppflags 2>/dev/null |
15590         $grep '^[       ]*#.*include' | 
15591         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15592 fi
15593 : Check this list of files to be sure we have parsed the cpp output ok.
15594 : This will also avoid potentially non-existent files, such 
15595 : as ../foo/bar.h
15596 xxxfiles=''
15597 for xx in $xxx /dev/null ; do
15598         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15599 done
15600 : If we have found no files, at least try signal.h
15601 case "$xxxfiles" in
15602 '')     xxxfiles=`./findhdr signal.h` ;;
15603 esac
15604 xxx=`awk '
15605 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15606         print substr($2, 4, 20)
15607 }
15608 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15609         print substr($3, 4, 20)
15610 }' $xxxfiles`
15611 : Append some common names just in case the awk scan failed.
15612 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15613 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15614 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15615 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15616 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15617
15618 : generate a few handy files for later
15619 $cat > signal.c <<'EOCP'
15620 #include <sys/types.h>
15621 #include <signal.h>
15622 #include <stdio.h>
15623 int main() {
15624
15625 /* Strange style to avoid deeply-nested #if/#else/#endif */
15626 #ifndef NSIG
15627 #  ifdef _NSIG
15628 #    define NSIG (_NSIG)
15629 #  endif
15630 #endif
15631
15632 #ifndef NSIG
15633 #  ifdef SIGMAX
15634 #    define NSIG (SIGMAX+1)
15635 #  endif
15636 #endif
15637
15638 #ifndef NSIG
15639 #  ifdef SIG_MAX
15640 #    define NSIG (SIG_MAX+1)
15641 #  endif
15642 #endif
15643
15644 #ifndef NSIG
15645 #  ifdef MAXSIG
15646 #    define NSIG (MAXSIG+1)
15647 #  endif
15648 #endif
15649
15650 #ifndef NSIG
15651 #  ifdef MAX_SIG
15652 #    define NSIG (MAX_SIG+1)
15653 #  endif
15654 #endif
15655
15656 #ifndef NSIG
15657 #  ifdef SIGARRAYSIZE
15658 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15659 #  endif
15660 #endif
15661
15662 #ifndef NSIG
15663 #  ifdef _sys_nsig
15664 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15665 #  endif
15666 #endif
15667
15668 /* Default to some arbitrary number that's big enough to get most
15669    of the common signals.
15670 */
15671 #ifndef NSIG
15672 #    define NSIG 50
15673 #endif
15674
15675 printf("NSIG %d\n", NSIG);
15676
15677 #ifndef JUST_NSIG
15678
15679 EOCP
15680
15681 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15682 {
15683         printf "#ifdef SIG"; printf $1; printf "\n"
15684         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15685         printf $1; printf ");\n"
15686         printf "#endif\n"
15687 }
15688 END {
15689         printf "#endif /* JUST_NSIG */\n";
15690         printf "exit(0);\n}\n";
15691 }
15692 ' >>signal.c
15693 $cat >signal.awk <<'EOP'
15694 BEGIN { ndups = 0 }
15695 $1 ~ /^NSIG$/ { nsig = $2 }
15696 ($1 !~ /^NSIG$/) && (NF == 2) {
15697     if ($2 > maxsig) { maxsig = $2 }
15698     if (sig_name[$2]) {
15699         dup_name[ndups] = $1
15700         dup_num[ndups] = $2
15701         ndups++ 
15702     }
15703     else {
15704         sig_name[$2] = $1
15705         sig_num[$2] = $2
15706     }
15707 }
15708 END { 
15709     if (nsig == 0) {
15710         nsig = maxsig + 1
15711     }
15712     printf("NSIG %d\n", nsig);
15713     for (n = 1; n < nsig; n++) {
15714         if (sig_name[n]) {
15715             printf("%s %d\n", sig_name[n], sig_num[n])
15716         }
15717         else {
15718             printf("NUM%d %d\n", n, n) 
15719         }
15720     }
15721     for (n = 0; n < ndups; n++) {
15722         printf("%s %d\n", dup_name[n], dup_num[n])
15723     }
15724 }
15725 EOP
15726 $cat >signal_cmd <<EOS
15727 $startsh
15728 if $test -s signal.lst; then
15729     echo "Using your existing signal.lst file"
15730         exit 0
15731 fi
15732 xxx="$xxx"
15733 EOS
15734 $cat >>signal_cmd <<'EOS'
15735
15736 set signal
15737 if eval $compile_ok; then
15738         $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | $uniq | $awk -f signal.awk >signal.lst
15739 else
15740         echo "(I can't seem be able to compile the whole test program)" >&4
15741         echo "(I'll try it in little pieces.)" >&4
15742         set signal -DJUST_NSIG
15743         if eval $compile_ok; then
15744                 $run ./signal$_exe > signal.nsg
15745                 $cat signal.nsg
15746         else
15747                 echo "I can't seem to figure out how many signals you have." >&4
15748                 echo "Guessing 50." >&4
15749                 echo 'NSIG 50' > signal.nsg
15750         fi
15751         : Now look at all the signal names, one at a time.
15752         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15753                 $cat > signal.c <<EOCP
15754 #include <sys/types.h>
15755 #include <signal.h>
15756 #include <stdio.h>
15757 int main() {
15758 printf("$xx %d\n", SIG${xx});
15759 return 0;
15760 }
15761 EOCP
15762                 set signal
15763                 if eval $compile; then
15764                         echo "SIG${xx} found."
15765                         $run ./signal$_exe  >> signal.ls1
15766                 else
15767                         echo "SIG${xx} NOT found."
15768                 fi
15769         done
15770         if $test -s signal.ls1; then
15771                 $cat signal.nsg signal.ls1 |
15772                         $sort -n | $uniq | $awk -f signal.awk >signal.lst
15773         fi
15774
15775 fi
15776 if $test -s signal.lst; then
15777         :
15778 else
15779         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15780         echo 'kill -l' >signal
15781         set X `csh -f <signal`
15782         $rm -f signal
15783         shift
15784         case $# in
15785         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15786         esac
15787         echo $@ | $tr ' ' $trnl | \
15788             $awk '{ printf "%s %d\n", $1, ++s; }
15789                   END { printf "NSIG %d\n", ++s }' >signal.lst
15790 fi
15791 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15792 EOS
15793 chmod a+x signal_cmd
15794 $eunicefix signal_cmd
15795
15796 : generate list of signal names
15797 echo " "
15798 case "$sig_name_init" in
15799 '') doinit=yes ;;
15800 *)  case "$sig_num_init" in
15801     ''|*,*) doinit=yes ;;
15802     esac ;;
15803 esac
15804 case "$doinit" in
15805 yes)
15806         echo "Generating a list of signal names and numbers..." >&4
15807         . ./signal_cmd
15808         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15809         sig_name=`$awk 'BEGIN { printf "ZERO " }
15810                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15811         sig_num=`$awk  'BEGIN { printf "0 " }
15812                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15813         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15814                              !/^NSIG/   { printf "\"%s\", ", $1 }
15815                              END        { printf "0\n" }' signal.lst`
15816         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15817                              !/^NSIG/   { printf "%d, ", $2}
15818                              END        { printf "0\n"}' signal.lst`
15819         ;;
15820 esac
15821 echo "The following $sig_count signals are available:"
15822 echo " "
15823 echo $sig_name | $awk \
15824 'BEGIN { linelen = 0 }
15825 {
15826         for (i = 1; i <= NF; i++) {
15827                 name = "SIG" $i " "
15828                 linelen = linelen + length(name)
15829                 if (linelen > 70) {
15830                         printf "\n"
15831                         linelen = length(name)
15832                 }
15833                 printf "%s", name
15834         }
15835         printf "\n"
15836 }'
15837 sig_size=`echo $sig_name | awk '{print NF}'`
15838 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15839
15840 echo " "
15841 case "$sizetype" in
15842 *_t) zzz="$sizetype"    ;;
15843 *)   zzz="filesize"     ;;
15844 esac
15845 echo "Checking the size of $zzz..." >&4 
15846 cat > try.c <<EOCP
15847 #include <sys/types.h>
15848 #include <stdio.h>
15849 int main() {
15850     printf("%d\n", (int)sizeof($sizetype));
15851     exit(0);
15852 }
15853 EOCP
15854 set try
15855 if eval $compile_ok; then
15856         yyy=`$run ./try`
15857         case "$yyy" in
15858         '')     sizesize=4
15859                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15860                 ;;
15861         *)      sizesize=$yyy
15862                 echo "Your $zzz size is $sizesize bytes."
15863                 ;;
15864         esac
15865 else
15866         sizesize=4
15867         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15868 fi
15869
15870
15871 : check for socklen_t
15872 echo " "
15873 echo "Checking to see if you have socklen_t..." >&4
15874 $cat >try.c <<EOCP
15875 #include <sys/types.h>
15876 #$d_socket HAS_SOCKET
15877 #ifdef HAS_SOCKET
15878 #include <sys/socket.h>
15879 #endif
15880 int main() { socklen_t x = 16; }
15881 EOCP
15882 set try
15883 if eval $compile; then
15884         val="$define"
15885         echo "You have socklen_t."
15886 else
15887         val="$undef"
15888         echo "You do not have socklen_t."
15889         case "$sizetype" in
15890         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15891         esac
15892 fi
15893 $rm -f try try.*
15894 set d_socklen_t
15895 eval $setvar
15896
15897 : see if this is a socks.h system
15898 set socks.h i_socks
15899 eval $inhdr
15900
15901 : check for type of the size argument to socket calls
15902 case "$d_socket" in
15903 "$define")
15904         $cat <<EOM
15905
15906 Checking to see what type is the last argument of accept().
15907 EOM
15908         yyy=''
15909         case "$d_socklen_t" in
15910         "$define") yyy="$yyy socklen_t"
15911         esac
15912         yyy="$yyy $sizetype int long unsigned"
15913         for xxx in $yyy; do
15914                 case "$socksizetype" in
15915                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15916                         case "$usesocks" in
15917                         "$define")
15918                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15919                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15920                                         socksizetype="$xxx"
15921                                 fi
15922                                 ;;
15923                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15924                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15925                                         socksizetype="$xxx"
15926                                 fi
15927                                 ;;
15928                         esac
15929                         ;;
15930                 esac
15931         done
15932 : In case none of those worked, prompt the user.
15933         case "$socksizetype" in
15934         '')     rp='What is the type for socket address structure sizes?'
15935                 dflt='int'
15936                 . ./myread
15937                 socksizetype=$ans
15938                 ;;
15939         esac
15940         ;;
15941 *)      : no sockets, so pick relatively harmless default
15942         socksizetype='int'
15943         ;;
15944 esac
15945
15946 : see what type is used for signed size_t
15947 set ssize_t ssizetype int stdio.h sys/types.h
15948 eval $typedef
15949 dflt="$ssizetype"
15950 $cat > try.c <<EOM
15951 #include <stdio.h>
15952 #include <sys/types.h>
15953 #define Size_t $sizetype
15954 #define SSize_t $dflt
15955 int main()
15956 {
15957         if (sizeof(Size_t) == sizeof(SSize_t))
15958                 printf("$dflt\n");
15959         else if (sizeof(Size_t) == sizeof(int))
15960                 printf("int\n");
15961         else 
15962                 printf("long\n");
15963         exit(0);
15964 }
15965 EOM
15966 echo " "
15967 set try
15968 if eval $compile_ok && $run ./try > /dev/null; then
15969         ssizetype=`$run ./try`
15970         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15971 else
15972         $cat >&4 <<EOM
15973 Help! I can't compile and run the ssize_t test program: please enlighten me!
15974 (This is probably a misconfiguration in your system or libraries, and
15975 you really ought to fix it.  Still, I'll try anyway.)
15976
15977 I need a type that is the same size as $sizetype, but is guaranteed to
15978 be signed.  Common values are ssize_t, int and long.
15979
15980 EOM
15981         rp="What signed type is the same size as $sizetype?"
15982         . ./myread
15983         ssizetype="$ans"
15984 fi
15985 $rm -f try try.*
15986
15987 : see what type of char stdio uses.
15988 echo " "
15989 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15990 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15991         echo "Your stdio uses unsigned chars." >&4
15992         stdchar="unsigned char"
15993 else
15994         echo "Your stdio uses signed chars." >&4
15995         stdchar="char"
15996 fi
15997 $rm -f stdioh
15998
15999
16000
16001 : see if time exists
16002 echo " "
16003 if test "X$d_time" = X -o X"$timetype" = X; then
16004     if set time val -f d_time; eval $csym; $val; then
16005                 echo 'time() found.' >&4
16006                 val="$define"
16007                 rp="What is the type returned by time() on this system?"
16008                 set time_t timetype long stdio.h sys/types.h
16009                 eval $typedef_ask
16010     else
16011                 echo 'time() not found, hope that will do.' >&4
16012                 val="$undef"
16013                 timetype='int';
16014     fi
16015     set d_time
16016     eval $setvar
16017 fi
16018
16019 : see what type uids are declared as in the kernel
16020 echo " "
16021 echo "Looking for the type for user ids returned by getuid()."
16022 set uid_t uidtype xxx stdio.h sys/types.h
16023 eval $typedef
16024 case "$uidtype" in
16025 xxx)
16026         xxx=`./findhdr sys/user.h`
16027         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
16028         case $1 in
16029         unsigned) dflt="$1 $2" ;;
16030         *) dflt="$1" ;;
16031         esac
16032         ;;
16033 *) dflt="$uidtype";;
16034 esac
16035 case "$uidtype" in
16036 uid_t)  echo "uid_t found." ;;
16037 *)      rp="What is the type for user ids returned by getuid()?"
16038         . ./myread
16039         uidtype="$ans"
16040         ;;
16041 esac
16042
16043 echo " "
16044 case "$uidtype" in
16045 *_t) zzz="$uidtype"     ;;
16046 *)   zzz="uid"          ;;
16047 esac
16048 echo "Checking the size of $zzz..." >&4 
16049 cat > try.c <<EOCP
16050 #include <sys/types.h>
16051 #include <stdio.h>
16052 int main() {
16053     printf("%d\n", (int)sizeof($uidtype));
16054     exit(0);
16055 }
16056 EOCP
16057 set try
16058 if eval $compile_ok; then
16059         yyy=`$run ./try`
16060         case "$yyy" in
16061         '')     uidsize=4
16062                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
16063                 ;;
16064         *)      uidsize=$yyy
16065                 echo "Your $zzz is $uidsize bytes long."
16066                 ;;
16067         esac
16068 else
16069         uidsize=4
16070         echo "(I can't compile the test program--guessing $uidsize.)" >&4
16071 fi
16072
16073 echo " "
16074 case "$uidtype" in
16075 *_t) zzz="$uidtype"     ;;
16076 *)   zzz="uid"          ;;
16077 esac
16078 echo "Checking the sign of $zzz..." >&4
16079 cat > try.c <<EOCP
16080 #include <sys/types.h>
16081 #include <stdio.h>
16082 int main() {
16083         $uidtype foo = -1;
16084         if (foo < 0)
16085                 printf("-1\n");
16086         else
16087                 printf("1\n");
16088 }
16089 EOCP
16090 set try
16091 if eval $compile; then
16092         yyy=`$run ./try`
16093         case "$yyy" in
16094         '')     uidsign=1
16095                 echo "(I can't execute the test program--guessing unsigned.)" >&4
16096                 ;;
16097         *)      uidsign=$yyy
16098                 case "$uidsign" in
16099                  1) echo "Your $zzz is unsigned." ;;
16100                 -1) echo "Your $zzz is signed."   ;;
16101                 esac
16102                 ;;
16103         esac
16104 else
16105         uidsign=1
16106         echo "(I can't compile the test program--guessing unsigned.)" >&4
16107 fi
16108
16109
16110
16111 echo " "
16112 $echo "Checking the format string to be used for uids..." >&4
16113
16114 case "$uidsign" in
16115 -1)     if $test X"$uidsize" = X"$ivsize"; then
16116                 uidformat="$ivdformat"
16117         else
16118                 if $test X"$uidsize" = X"$longsize"; then
16119                         uidformat='"ld"'
16120                 else
16121                         if $test X"$uidsize" = X"$intsize"; then
16122                                 uidformat='"d"'
16123                         else
16124                                 if $test X"$uidsize" = X"$shortsize"; then
16125                                         uidformat='"hd"'
16126                                 fi
16127                         fi
16128                 fi
16129         fi
16130         ;;
16131 *)      if $test X"$uidsize" = X"$uvsize"; then
16132                 uidformat="$uvuformat"
16133         else
16134                 if $test X"$uidsize" = X"$longsize"; then
16135                         uidformat='"lu"'
16136                 else
16137                         if $test X"$uidsize" = X"$intsize"; then
16138                                 uidformat='"u"'
16139                         else
16140                                 if $test X"$uidsize" = X"$shortsize"; then
16141                                         uidformat='"hu"'
16142                                 fi
16143                         fi
16144                 fi
16145         fi
16146         ;;
16147 esac
16148
16149 : determine compiler compiler
16150 case "$yacc" in
16151 '')
16152         dflt=yacc;;
16153 *)
16154         dflt="$yacc";;
16155 esac
16156 echo " "
16157 comp='yacc'
16158 if $test -f "$byacc$_exe"; then
16159         dflt="$byacc"
16160         comp="byacc or $comp"
16161 fi
16162 if $test -f "$bison$_exe"; then
16163         comp="$comp or bison -y"
16164 fi
16165 rp="Which compiler compiler ($comp) shall I use?"
16166 . ./myread
16167 yacc="$ans"
16168 case "$yacc" in
16169 *bis*)
16170         case "$yacc" in
16171         *-y*) ;;
16172         *)
16173                 yacc="$yacc -y"
16174                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16175                 ;;
16176         esac
16177         ;;
16178 esac
16179
16180 : see if this is a fp.h system
16181 set fp.h i_fp
16182 eval $inhdr
16183
16184 : see if this is a fp_class.h system
16185 set fp_class.h i_fp_class
16186 eval $inhdr
16187
16188 : see if this is a ieeefp.h system
16189 case "$i_ieeefp" in
16190 '' ) set ieeefp.h i_ieeefp
16191      eval $inhdr
16192      ;;
16193 esac
16194
16195 : see if this is a libutil.h system
16196 set libutil.h i_libutil
16197 eval $inhdr
16198
16199 : see if locale.h is available
16200 set locale.h i_locale
16201 eval $inhdr
16202
16203 : see if mach cthreads are available
16204 if test "X$usethreads" = "X$define"; then
16205         set mach/cthreads.h i_machcthr
16206         eval $inhdr
16207 else
16208         i_machcthr="$undef"
16209 fi
16210
16211
16212
16213 : see if this is a math.h system
16214 set math.h i_math
16215 eval $inhdr
16216
16217 : see if this is a mntent.h system
16218 set mntent.h i_mntent
16219 eval $inhdr
16220
16221 : see if ndbm.h is available
16222 set ndbm.h t_ndbm
16223 eval $inhdr
16224
16225 case "$t_ndbm" in
16226 $undef)
16227     # Some Linux distributions such as RedHat 7.1 put the
16228     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16229     if $test -f /usr/include/gdbm/ndbm.h; then
16230         echo '<gdbm/ndbm.h> found.'
16231         ccflags="$ccflags -I/usr/include/gdbm"
16232         cppflags="$cppflags -I/usr/include/gdbm"
16233         t_ndbm=$define
16234     fi
16235     ;;
16236 esac
16237
16238 case "$t_ndbm" in
16239 $define)
16240         : see if dbm_open exists
16241         set dbm_open d_dbm_open
16242         eval $inlibc
16243         case "$d_dbm_open" in
16244         $undef)
16245                 t_ndbm="$undef"
16246                 echo "We won't be including <ndbm.h>"
16247                 ;;
16248         esac
16249         ;;
16250 esac
16251 val="$t_ndbm"
16252 set i_ndbm
16253 eval $setvar
16254
16255 : see if net/errno.h is available
16256 val=''
16257 set net/errno.h val
16258 eval $inhdr
16259
16260 : Unfortunately, it causes problems on some systems.  Arrgh.
16261 case "$val" in
16262 $define)
16263         cat > try.c <<'EOM'
16264 #include <stdio.h>
16265 #include <errno.h>
16266 #include <net/errno.h>
16267 int func()
16268 {
16269         return ENOTSOCK;
16270 }
16271 EOM
16272         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16273                 echo "We'll be including <net/errno.h>." >&4
16274         else
16275                 echo "We won't be including <net/errno.h>." >&4
16276                 val="$undef"
16277         fi
16278         $rm -f try.* try
16279         ;;
16280 esac
16281 set i_neterrno
16282 eval $setvar
16283
16284 : see if netinet/tcp.h is available
16285 set netinet/tcp.h i_netinettcp
16286 eval $inhdr
16287
16288 : see if this is a poll.h system
16289 set poll.h i_poll
16290 eval $inhdr
16291
16292 : see if this is a prot.h system
16293 set prot.h i_prot
16294 eval $inhdr
16295
16296 echo " "
16297 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16298 $cat <<'EOSH' > Cppsym.know
16299 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16300 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16301 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16302 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16303 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16304 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16305 bull c cadmus clipper CMU COFF COMPILER_VERSION
16306 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16307 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16308 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16309 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16310 GLIBC GLIBC_MINOR
16311 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16312 H3050R H3050RX hbullx20 hcx host_mips
16313 hp200 hp300 hp700 HP700 hp800 hp9000
16314 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16315 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16316 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16317 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16318 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16319 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16320 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16321 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16322 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16323 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16324 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16325 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16326 MATH_HAS_NO_SIDE_EFFECTS
16327 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16328 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16329 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16330 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16331 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16332 NetBSD news1500 news1700 news1800 news1900 news3700
16333 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16334 ns32016 ns32332 ns32k nsc32000
16335 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16336 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16337 pc532 pdp11 PGC PIC plexus PORTAR posix
16338 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16339 POSIX_C_SOURCE POSIX_SOURCE POWER
16340 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16341 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16342 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16343 sony sony_news sonyrisc sparc sparclite spectrum
16344 stardent stdc STDC_EXT stratos sun sun3 sun386
16345 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16346 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16347 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16348 sysV68 sysV88 Tek4132 Tek4300 titan
16349 TM3200 TM5400 TM5600
16350 tower tower32 tower32_200 tower32_600 tower32_700
16351 tower32_800 tower32_850 tss
16352 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16353 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16354 unix UNIX95 UNIX99 unixpc unos
16355 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16356 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16357 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16358 USGr4 USGr4_2
16359 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16360 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16361 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16362 z8000
16363 EOSH
16364 # Maybe put other stuff here too.
16365 cat <<EOSH >>Cppsym.know
16366 $osname
16367 EOSH
16368 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16369 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16370 $cat Cppsym.know > Cppsym.c
16371 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16372 $rm -f Cppsym.a Cppsym.b Cppsym.c
16373 cat <<EOSH > Cppsym
16374 $startsh
16375 if $test \$# -gt 0; then
16376     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16377     if $test -s Cppsym.got; then
16378         $rm -f Cppsym.got
16379         exit 0
16380     fi
16381     $rm -f Cppsym.got
16382     exit 1
16383 else
16384     $tr " " "$trnl" | ./Cppsym.try
16385     exit 0
16386 fi
16387 EOSH
16388 chmod +x Cppsym
16389 $eunicefix Cppsym
16390 cat <<EOSH > Cppsym.try
16391 $startsh
16392 cat <<'EOCP' > try.c
16393 #include <stdio.h>
16394 int main() {
16395 EOCP
16396 $awk \\
16397 EOSH
16398 cat <<'EOSH' >> Cppsym.try
16399 'length($1) > 0 {
16400     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
16401     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
16402     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
16403     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
16404 }'       >> try.c
16405 echo 'return 0;}' >> try.c
16406 EOSH
16407 cat <<EOSH >> Cppsym.try
16408 ccflags="$ccflags"
16409 case "$osname-$gccversion" in
16410 irix-) ccflags="\$ccflags -woff 1178" ;;
16411 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16412 esac
16413 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16414 EOSH
16415 chmod +x Cppsym.try
16416 $eunicefix Cppsym.try
16417 ./Cppsym < Cppsym.know > Cppsym.true
16418 : now check the C compiler for additional symbols
16419 postprocess_cc_v=''
16420 case "$osname" in
16421 aix) postprocess_cc_v="|$tr , ' '" ;;
16422 esac
16423 $cat >ccsym <<EOS
16424 $startsh
16425 $cat >tmp.c <<EOF
16426 extern int foo;
16427 EOF
16428 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16429 do
16430         case "\$i" in
16431         -D*) echo "\$i" | $sed 's/^-D//';;
16432         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16433         esac
16434 done
16435 $rm -f try.c
16436 EOS
16437 postprocess_cc_v=''
16438 chmod +x ccsym
16439 $eunicefix ccsym
16440 ./ccsym > ccsym1.raw
16441 if $test -s ccsym1.raw; then
16442        $sort ccsym1.raw | $uniq >ccsym.raw
16443 else
16444        mv ccsym1.raw ccsym.raw
16445 fi
16446
16447 $awk '/\=/ { print $0; next }
16448         { print $0"=1" }' ccsym.raw >ccsym.list
16449 $awk '/\=/ { print $0; next }
16450         { print $0"=1" }' Cppsym.true >ccsym.true
16451 $comm -13 ccsym.true ccsym.list >ccsym.own
16452 $comm -12 ccsym.true ccsym.list >ccsym.com
16453 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16454 also=''
16455 if $test -z ccsym.raw; then
16456         echo "Your C compiler doesn't seem to define any symbols!" >&4
16457         echo " "
16458         echo "However, your C preprocessor defines the following symbols:"
16459         $cat Cppsym.true
16460         ccsymbols=''
16461         cppsymbols=`$cat Cppsym.true`
16462         cppsymbols=`echo $cppsymbols`
16463         cppccsymbols="$cppsymbols"
16464 else
16465         if $test -s ccsym.com; then
16466                 echo "Your C compiler and pre-processor define these symbols:"
16467                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16468                 also='also '
16469                 symbols='ones'
16470                 cppccsymbols=`$cat ccsym.com`
16471                 cppccsymbols=`echo $cppccsymbols`
16472                 $test "$silent" || sleep 1
16473         fi
16474         if $test -s ccsym.cpp; then
16475                 $test "$also" && echo " "
16476                 echo "Your C pre-processor ${also}defines the following symbols:"
16477                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16478                 also='further '
16479                 cppsymbols=`$cat ccsym.cpp`
16480                 cppsymbols=`echo $cppsymbols`
16481                 $test "$silent" || sleep 1
16482         fi
16483         if $test -s ccsym.own; then
16484                 $test "$also" && echo " "
16485                 echo "Your C compiler ${also}defines the following cpp symbols:"
16486                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16487                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16488                 ccsymbols=`$cat ccsym.own`
16489                 ccsymbols=`echo $ccsymbols`
16490                 $test "$silent" || sleep 1
16491         fi
16492 fi
16493
16494 : see if this is a termio system
16495 val="$undef"
16496 val2="$undef"
16497 val3="$undef"
16498 if $test `./findhdr termios.h`; then
16499         set tcsetattr i_termios
16500         eval $inlibc
16501         val3="$i_termios"
16502 fi
16503 echo " "
16504 case "$val3" in
16505 "$define") echo "You have POSIX termios.h... good!" >&4;;
16506 *) if ./Cppsym pyr; then
16507                 case "`/bin/universe`" in
16508                 ucb) if $test `./findhdr sgtty.h`; then
16509                                 val2="$define"
16510                                 echo "<sgtty.h> found." >&4
16511                         else
16512                                 echo "System is pyramid with BSD universe."
16513                                 echo "<sgtty.h> not found--you could have problems." >&4
16514                         fi;;
16515                 *) if $test `./findhdr termio.h`; then
16516                                 val="$define"
16517                                 echo "<termio.h> found." >&4
16518                         else
16519                                 echo "System is pyramid with USG universe."
16520                                 echo "<termio.h> not found--you could have problems." >&4
16521                         fi;;
16522                 esac
16523         elif ./usg; then
16524                 if $test `./findhdr termio.h`; then
16525                         echo "<termio.h> found." >&4
16526                         val="$define"
16527                 elif $test `./findhdr sgtty.h`; then
16528                         echo "<sgtty.h> found." >&4
16529                         val2="$define"
16530                 else
16531 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16532                 fi
16533         else
16534                 if $test `./findhdr sgtty.h`; then
16535                         echo "<sgtty.h> found." >&4
16536                         val2="$define"
16537                 elif $test `./findhdr termio.h`; then
16538                         echo "<termio.h> found." >&4
16539                         val="$define"
16540                 else
16541 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16542                 fi
16543         fi;;
16544 esac
16545 set i_termio; eval $setvar
16546 val=$val2; set i_sgtty; eval $setvar
16547 val=$val3; set i_termios; eval $setvar
16548
16549 : see if this is a shadow.h system
16550 set shadow.h i_shadow
16551 eval $inhdr
16552
16553 : see if stddef is available
16554 set stddef.h i_stddef
16555 eval $inhdr
16556
16557 : see if this is a sunmath.h system
16558 set sunmath.h i_sunmath
16559 eval $inhdr
16560
16561 : see if sys/access.h is available
16562 set sys/access.h i_sysaccess
16563 eval $inhdr
16564
16565 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16566 set sys/filio.h i_sysfilio
16567 eval $inhdr
16568 echo " "
16569 if $test `./findhdr sys/ioctl.h`; then
16570         val="$define"
16571         echo '<sys/ioctl.h> found.' >&4
16572 else
16573         val="$undef"
16574         if $test $i_sysfilio = "$define"; then
16575             echo '<sys/ioctl.h> NOT found.' >&4
16576         else
16577                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16578                 $test $i_termio = "$define" && xxx="termio.h"
16579                 $test $i_termios = "$define" && xxx="termios.h"
16580 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16581         fi
16582 fi
16583 set i_sysioctl
16584 eval $setvar
16585
16586 : see if socket ioctl defs are in sys/sockio.h
16587 echo " "
16588 xxx=`./findhdr sys/sockio.h`
16589 if $test "$xxx"; then
16590         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16591                 val="$define"
16592                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16593         else
16594                 val="$undef"
16595                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16596         fi
16597 else
16598         val="$undef"
16599         $cat <<EOM
16600 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16601 EOM
16602 fi
16603 set i_syssockio
16604 eval $setvar
16605
16606
16607 : see if this is a syslog.h system
16608 set syslog.h i_syslog
16609 eval $inhdr
16610
16611
16612 : see if this is a sys/mode.h system
16613 set sys/mode.h i_sysmode
16614 eval $inhdr
16615
16616 : see if sys/resource.h has to be included
16617 set sys/resource.h i_sysresrc
16618 eval $inhdr
16619
16620 : see if sys/security.h is available
16621 set sys/security.h i_syssecrt
16622 eval $inhdr
16623
16624 : see if this is a sys/statvfs.h system
16625 set sys/statvfs.h i_sysstatvfs
16626 eval $inhdr
16627
16628 : see if this is a sys/un.h system
16629 set sys/un.h i_sysun
16630 eval $inhdr
16631
16632
16633 : see if this is a sys/utsname.h system
16634 set sys/utsname.h i_sysutsname
16635 eval $inhdr
16636
16637 : see if this is a syswait system
16638 set sys/wait.h i_syswait
16639 eval $inhdr
16640
16641 : see if this is a ustat.h system
16642 set ustat.h i_ustat
16643 eval $inhdr
16644
16645 : see if this is an utime system
16646 set utime.h i_utime
16647 eval $inhdr
16648
16649 : see if this is a values.h system
16650 set values.h i_values
16651 eval $inhdr
16652
16653 : see if this is a vfork system
16654 case "$d_vfork" in
16655 "$define")
16656         set vfork.h i_vfork
16657         eval $inhdr
16658         ;;
16659 *)
16660         i_vfork="$undef"
16661         ;;
16662 esac
16663
16664 : see if gdbm.h is available
16665 set gdbm.h t_gdbm
16666 eval $inhdr
16667 case "$t_gdbm" in
16668 $define)
16669         : see if gdbm_open exists
16670         set gdbm_open d_gdbm_open
16671         eval $inlibc
16672         case "$d_gdbm_open" in
16673         $undef)
16674                 t_gdbm="$undef"
16675                 echo "We won't be including <gdbm.h>"
16676                 ;;
16677         esac
16678         ;;
16679 esac
16680 val="$t_gdbm"
16681 set i_gdbm
16682 eval $setvar
16683
16684 echo " "
16685 echo "Looking for extensions..." >&4
16686 : If we are using the old config.sh, known_extensions may contain
16687 : old or inaccurate or duplicate values.
16688 known_extensions=''
16689 nonxs_extensions=''
16690 : We do not use find because it might not be available.
16691 : We do not just use MANIFEST because the user may have dropped
16692 : some additional extensions into the source tree and expect them
16693 : to be built.
16694
16695 : Function to recursively find available extensions, ignoring DynaLoader
16696 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16697 find_extensions='
16698     for xxx in *; do
16699        case "$xxx" in
16700            DynaLoader|dynaload) ;;
16701            *)
16702            if $test -f $xxx/$xxx.xs; then
16703                known_extensions="$known_extensions $1$xxx";
16704            elif $test -f $xxx/Makefile.PL; then
16705                nonxs_extensions="$nonxs_extensions $1$xxx";
16706            else
16707                if $test -d $xxx -a $# -lt 10; then
16708                    set $1$xxx/ $*;
16709                    cd "$xxx";
16710                    eval $find_extensions;
16711                    cd ..;
16712                    shift;
16713                fi;
16714            fi
16715            ;;
16716        esac;
16717     done'
16718 tdir=`pwd`
16719 cd "$rsrc/ext"
16720 set X
16721 shift
16722 eval $find_extensions
16723 # Special case:  Add in threads/shared since it is not picked up by the
16724 # recursive find above (and adding in general recursive finding breaks
16725 # SDBM_File/sdbm).  A.D.  10/25/2001.
16726 # Encode::XX need explicit mentions for the same reason.
16727 # --jhi 2002-03-04
16728 known_extensions="$known_extensions threads/shared Encode/CN Encode/JP Encode/KR Encode/TW"
16729 set X $nonxs_extensions
16730 shift
16731 nonxs_extensions="$*"
16732 set X $known_extensions
16733 shift
16734 known_extensions="$*"
16735 cd "$tdir"
16736
16737 : Now see which are supported on this system.
16738 avail_ext=''
16739 for xxx in $known_extensions ; do
16740         case "$xxx" in
16741         DB_File|db_file)
16742                 case "$i_db" in
16743                 $define) avail_ext="$avail_ext $xxx" ;;
16744                 esac
16745                 ;;
16746         GDBM_File|gdbm_fil)
16747                 case "$i_gdbm" in 
16748                 $define) avail_ext="$avail_ext $xxx" ;;
16749                 esac
16750                 ;;
16751         I18N/Langinfo|i18n_lan)
16752                 case "$i_langinfo$d_nl_langinfo" in 
16753                 $define$define) avail_ext="$avail_ext $xxx" ;;
16754                 esac
16755                 ;;
16756         NDBM_File|ndbm_fil)
16757                 case "$i_ndbm" in
16758                 $define)
16759                     case "$osname-$use64bitint" in
16760                     cygwin-*|hpux-define)
16761                         case "$libs" in
16762                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16763                         esac
16764                         ;;
16765                     *) avail_ext="$avail_ext $xxx" ;;
16766                     esac
16767                     ;;
16768                 esac
16769                 ;;
16770         ODBM_File|odbm_fil) 
16771                 case "${i_dbm}${i_rpcsvcdbm}" in
16772                 *"${define}"*)
16773                     case "$osname-$use64bitint" in
16774                     cygwin-*|hpux-define)
16775                         case "$libs" in
16776                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16777                         esac
16778                         ;;
16779                     *) avail_ext="$avail_ext $xxx" ;;
16780                     esac
16781                     ;;
16782                 esac
16783                 ;;
16784         POSIX|posix)
16785                 case "$useposix" in
16786                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16787                 esac
16788                 ;;
16789         Opcode|opcode)
16790                 case "$useopcode" in
16791                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16792                 esac
16793                 ;;
16794         Socket|socket)
16795                 case "$d_socket" in 
16796                 true|$define|y)
16797                     case "$osname" in
16798                     beos) ;; # not unless BONE
16799                     *) avail_ext="$avail_ext $xxx" ;;
16800                     esac
16801                     ;;
16802                 esac
16803                 ;;
16804         Sys/Syslog|sys/syslog)
16805                 : XXX syslog requires socket
16806                 case "$d_socket" in 
16807                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16808                 esac
16809                 ;;
16810         Thread|thread)
16811                 case "$usethreads" in
16812                 true|$define|y)
16813                         case "$useithreads" in
16814                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16815                         esac
16816                 esac
16817                 ;;
16818         threads|threads/shared)
16819                 case "$usethreads" in
16820                 true|$define|y)
16821                         case "$useithreads" in
16822                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16823                         esac
16824                 esac
16825                 ;;
16826         IPC/SysV|ipc/sysv)
16827                 : XXX Do we need a useipcsysv variable here
16828                 case "${d_msg}${d_sem}${d_shm}" in 
16829                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16830                 esac
16831                 ;;
16832         *)      avail_ext="$avail_ext $xxx"
16833                 ;;
16834         esac
16835 done
16836
16837 set X $avail_ext
16838 shift
16839 avail_ext="$*"
16840
16841 : Now see which nonxs extensions are supported on this system.
16842 : For now assume all are.
16843 nonxs_ext=''
16844 for xxx in $nonxs_extensions ; do
16845         case "$xxx" in
16846         *)      nonxs_ext="$nonxs_ext $xxx"
16847                 ;;
16848         esac
16849 done
16850
16851 set X $nonxs_ext
16852 shift
16853 nonxs_ext="$*"
16854
16855 case $usedl in
16856 $define)
16857         $cat <<EOM
16858 A number of extensions are supplied with $package.  You may choose to
16859 compile these extensions for dynamic loading (the default), compile
16860 them into the $package executable (static loading), or not include
16861 them at all.  Answer "none" to include no extensions.
16862 Note that DynaLoader is always built and need not be mentioned here.
16863
16864 EOM
16865         case "$dynamic_ext" in
16866         '') dflt="$avail_ext" ;;
16867         *)      dflt="$dynamic_ext"
16868                 # Perhaps we are reusing an old out-of-date config.sh.
16869                 case "$hint" in
16870                 previous)
16871                         if test X"$dynamic_ext" != X"$avail_ext"; then
16872                                 $cat <<EOM
16873 NOTICE:  Your previous config.sh list may be incorrect. 
16874 The extensions now available to you are 
16875         ${avail_ext}
16876 but the default list from your previous config.sh is
16877         ${dynamic_ext} 
16878
16879 EOM
16880                         fi
16881                         ;;
16882                 esac
16883                 ;;
16884         esac
16885         case "$dflt" in
16886         '')     dflt=none;;
16887         esac
16888         rp="What extensions do you wish to load dynamically?"
16889         . ./myread
16890         case "$ans" in
16891         none) dynamic_ext=' ' ;;
16892         *) dynamic_ext="$ans" ;;
16893         esac
16894
16895         case "$static_ext" in
16896         '')
16897                 : Exclude those already listed in dynamic linking
16898                 dflt=''
16899                 for xxx in $avail_ext; do
16900                         case " $dynamic_ext " in
16901                         *" $xxx "*) ;;
16902                         *) dflt="$dflt $xxx" ;;
16903                         esac
16904                 done
16905                 set X $dflt
16906                 shift
16907                 dflt="$*"
16908                 ;;
16909         *)  dflt="$static_ext" 
16910                 ;;
16911         esac
16912
16913         case "$dflt" in
16914         '')     dflt=none;;
16915         esac
16916         rp="What extensions do you wish to load statically?"
16917         . ./myread
16918         case "$ans" in
16919         none) static_ext=' ' ;;
16920         *) static_ext="$ans" ;;
16921         esac
16922         ;;
16923 *)
16924         $cat <<EOM
16925 A number of extensions are supplied with $package.  Answer "none" 
16926 to include no extensions. 
16927 Note that DynaLoader is always built and need not be mentioned here.
16928
16929 EOM
16930         case "$static_ext" in
16931         '') dflt="$avail_ext" ;;
16932         *)      dflt="$static_ext"
16933                 # Perhaps we are reusing an old out-of-date config.sh.
16934                 case "$hint" in
16935                 previous)
16936                         if test X"$static_ext" != X"$avail_ext"; then
16937                                 $cat <<EOM
16938 NOTICE:  Your previous config.sh list may be incorrect. 
16939 The extensions now available to you are 
16940         ${avail_ext}
16941 but the default list from your previous config.sh is
16942         ${static_ext} 
16943
16944 EOM
16945                         fi
16946                         ;;
16947                 esac
16948                 ;;
16949         esac
16950         : Exclude those that are not xs extensions
16951         case "$dflt" in
16952         '')     dflt=none;;
16953         esac
16954         rp="What extensions do you wish to include?"
16955         . ./myread
16956         case "$ans" in
16957         none) static_ext=' ' ;;
16958         *) static_ext="$ans" ;;
16959         esac
16960         ;;
16961 esac
16962
16963 set X $dynamic_ext $static_ext $nonxs_ext
16964 shift
16965 extensions="$*"
16966
16967 : Remove libraries needed only for extensions
16968 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16969 : The exception is SunOS 4.x, which needs them.
16970 case "${osname}X${osvers}" in
16971 sunos*X4*)
16972     perllibs="$libs"
16973     ;;
16974 *) case "$usedl" in
16975     $define|true|[yY]*)
16976             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16977             shift
16978             perllibs="$*"
16979             ;;
16980     *)  perllibs="$libs"
16981             ;;
16982     esac
16983     ;;
16984 esac
16985
16986 : Remove build directory name from cppstdin so it can be used from
16987 : either the present location or the final installed location.
16988 echo " "
16989 : Get out of the UU directory to get correct path name.
16990 cd ..
16991 case "$cppstdin" in
16992 `pwd`/cppstdin)
16993         echo "Stripping down cppstdin path name"
16994         cppstdin=cppstdin
16995         ;;
16996 esac
16997 cd UU
16998
16999 : end of configuration questions
17000 echo " "
17001 echo "End of configuration questions."
17002 echo " "
17003
17004 : back to where it started
17005 if test -d ../UU; then
17006         cd ..
17007 fi
17008
17009 : configuration may be patched via a 'config.arch' file
17010 if $test -f config.arch; then
17011         echo "I see a config.arch file, loading it."
17012         . ./config.arch
17013 fi
17014
17015 : configuration may be patched via a 'config.over' file
17016 if $test -f config.over; then
17017         echo " "
17018         dflt=y
17019         rp='I see a config.over file.  Do you wish to load it?'
17020         . UU/myread
17021         case "$ans" in
17022         n*) echo "OK, I'll ignore it.";;
17023         *)      . ./config.over
17024                 echo "Configuration override changes have been loaded."
17025                 ;;
17026         esac
17027 fi
17028
17029 : in case they want portability, strip down executable paths
17030 case "$d_portable" in
17031 "$define")
17032         echo " "
17033         echo "Stripping down executable paths..." >&4
17034         for file in $loclist $trylist; do
17035                 eval temp=\$$file
17036                 eval $file=`basename $temp`
17037         done
17038         ;;
17039 esac
17040
17041 : create config.sh file
17042 echo " "
17043 echo "Creating config.sh..." >&4
17044 $spitshell <<EOT >config.sh
17045 $startsh
17046 #
17047 # This file was produced by running the Configure script. It holds all the
17048 # definitions figured out by Configure. Should you modify one of these values,
17049 # do not forget to propagate your changes by running "Configure -der". You may
17050 # instead choose to run each of the .SH files by yourself, or "Configure -S".
17051 #
17052
17053 # Package name      : $package
17054 # Source directory  : $src
17055 # Configuration time: $cf_time
17056 # Configured by     : $cf_by
17057 # Target system     : $myuname
17058
17059 Author='$Author'
17060 Date='$Date'
17061 Header='$Header'
17062 Id='$Id'
17063 Locker='$Locker'
17064 Log='$Log'
17065 Mcc='$Mcc'
17066 RCSfile='$RCSfile'
17067 Revision='$Revision'
17068 Source='$Source'
17069 State='$State'
17070 _a='$_a'
17071 _exe='$_exe'
17072 _o='$_o'
17073 afs='$afs'
17074 afsroot='$afsroot'
17075 alignbytes='$alignbytes'
17076 ansi2knr='$ansi2knr'
17077 aphostname='$aphostname'
17078 api_revision='$api_revision'
17079 api_subversion='$api_subversion'
17080 api_version='$api_version'
17081 api_versionstring='$api_versionstring'
17082 ar='$ar'
17083 archlib='$archlib'
17084 archlibexp='$archlibexp'
17085 archname64='$archname64'
17086 archname='$archname'
17087 archobjs='$archobjs'
17088 awk='$awk'
17089 baserev='$baserev'
17090 bash='$bash'
17091 bin='$bin'
17092 bincompat5005='$bincompat5005'
17093 binexp='$binexp'
17094 bison='$bison'
17095 byacc='$byacc'
17096 byteorder='$byteorder'
17097 c='$c'
17098 castflags='$castflags'
17099 cat='$cat'
17100 cc='$cc'
17101 cccdlflags='$cccdlflags'
17102 ccdlflags='$ccdlflags'
17103 ccflags='$ccflags'
17104 ccflags_uselargefiles='$ccflags_uselargefiles'
17105 ccname='$ccname'
17106 ccsymbols='$ccsymbols'
17107 ccversion='$ccversion'
17108 cf_by='$cf_by'
17109 cf_email='$cf_email'
17110 cf_time='$cf_time'
17111 charsize='$charsize'
17112 chgrp='$chgrp'
17113 chmod='$chmod'
17114 chown='$chown'
17115 clocktype='$clocktype'
17116 comm='$comm'
17117 compress='$compress'
17118 contains='$contains'
17119 cp='$cp'
17120 cpio='$cpio'
17121 cpp='$cpp'
17122 cpp_stuff='$cpp_stuff'
17123 cppccsymbols='$cppccsymbols'
17124 cppflags='$cppflags'
17125 cpplast='$cpplast'
17126 cppminus='$cppminus'
17127 cpprun='$cpprun'
17128 cppstdin='$cppstdin'
17129 cppsymbols='$cppsymbols'
17130 cryptlib='$cryptlib'
17131 csh='$csh'
17132 d_Gconvert='$d_Gconvert'
17133 d_PRIEUldbl='$d_PRIEUldbl'
17134 d_PRIFUldbl='$d_PRIFUldbl'
17135 d_PRIGUldbl='$d_PRIGUldbl'
17136 d_PRIXU64='$d_PRIXU64'
17137 d_PRId64='$d_PRId64'
17138 d_PRIeldbl='$d_PRIeldbl'
17139 d_PRIfldbl='$d_PRIfldbl'
17140 d_PRIgldbl='$d_PRIgldbl'
17141 d_PRIi64='$d_PRIi64'
17142 d_PRIo64='$d_PRIo64'
17143 d_PRIu64='$d_PRIu64'
17144 d_PRIx64='$d_PRIx64'
17145 d_SCNfldbl='$d_SCNfldbl'
17146 d__fwalk='$d__fwalk'
17147 d_access='$d_access'
17148 d_accessx='$d_accessx'
17149 d_alarm='$d_alarm'
17150 d_archlib='$d_archlib'
17151 d_atolf='$d_atolf'
17152 d_atoll='$d_atoll'
17153 d_attribut='$d_attribut'
17154 d_bcmp='$d_bcmp'
17155 d_bcopy='$d_bcopy'
17156 d_bincompat5005='$d_bincompat5005'
17157 d_bsd='$d_bsd'
17158 d_bsdgetpgrp='$d_bsdgetpgrp'
17159 d_bsdsetpgrp='$d_bsdsetpgrp'
17160 d_bzero='$d_bzero'
17161 d_casti32='$d_casti32'
17162 d_castneg='$d_castneg'
17163 d_charvspr='$d_charvspr'
17164 d_chown='$d_chown'
17165 d_chroot='$d_chroot'
17166 d_chsize='$d_chsize'
17167 d_class='$d_class'
17168 d_closedir='$d_closedir'
17169 d_cmsghdr_s='$d_cmsghdr_s'
17170 d_const='$d_const'
17171 d_crypt='$d_crypt'
17172 d_csh='$d_csh'
17173 d_cuserid='$d_cuserid'
17174 d_dbl_dig='$d_dbl_dig'
17175 d_dbminitproto='$d_dbminitproto'
17176 d_difftime='$d_difftime'
17177 d_dirfd='$d_dirfd'
17178 d_dirnamlen='$d_dirnamlen'
17179 d_dlerror='$d_dlerror'
17180 d_dlopen='$d_dlopen'
17181 d_dlsymun='$d_dlsymun'
17182 d_dosuid='$d_dosuid'
17183 d_drand48proto='$d_drand48proto'
17184 d_dup2='$d_dup2'
17185 d_eaccess='$d_eaccess'
17186 d_endgrent='$d_endgrent'
17187 d_endhent='$d_endhent'
17188 d_endnent='$d_endnent'
17189 d_endpent='$d_endpent'
17190 d_endpwent='$d_endpwent'
17191 d_endsent='$d_endsent'
17192 d_eofnblk='$d_eofnblk'
17193 d_eunice='$d_eunice'
17194 d_fchdir='$d_fchdir'
17195 d_fchmod='$d_fchmod'
17196 d_fchown='$d_fchown'
17197 d_fcntl='$d_fcntl'
17198 d_fcntl_can_lock='$d_fcntl_can_lock'
17199 d_fd_macros='$d_fd_macros'
17200 d_fd_set='$d_fd_set'
17201 d_fds_bits='$d_fds_bits'
17202 d_fgetpos='$d_fgetpos'
17203 d_finite='$d_finite'
17204 d_finitel='$d_finitel'
17205 d_flexfnam='$d_flexfnam'
17206 d_flock='$d_flock'
17207 d_flockproto='$d_flockproto'
17208 d_fork='$d_fork'
17209 d_fp_class='$d_fp_class'
17210 d_fpathconf='$d_fpathconf'
17211 d_fpclass='$d_fpclass'
17212 d_fpclassify='$d_fpclassify'
17213 d_fpclassl='$d_fpclassl'
17214 d_fpos64_t='$d_fpos64_t'
17215 d_frexpl='$d_frexpl'
17216 d_fs_data_s='$d_fs_data_s'
17217 d_fseeko='$d_fseeko'
17218 d_fsetpos='$d_fsetpos'
17219 d_fstatfs='$d_fstatfs'
17220 d_fstatvfs='$d_fstatvfs'
17221 d_fsync='$d_fsync'
17222 d_ftello='$d_ftello'
17223 d_ftime='$d_ftime'
17224 d_getcwd='$d_getcwd'
17225 d_getespwnam='$d_getespwnam'
17226 d_getfsstat='$d_getfsstat'
17227 d_getgrent='$d_getgrent'
17228 d_getgrps='$d_getgrps'
17229 d_gethbyaddr='$d_gethbyaddr'
17230 d_gethbyname='$d_gethbyname'
17231 d_gethent='$d_gethent'
17232 d_gethname='$d_gethname'
17233 d_gethostprotos='$d_gethostprotos'
17234 d_getitimer='$d_getitimer'
17235 d_getlogin='$d_getlogin'
17236 d_getmnt='$d_getmnt'
17237 d_getmntent='$d_getmntent'
17238 d_getnbyaddr='$d_getnbyaddr'
17239 d_getnbyname='$d_getnbyname'
17240 d_getnent='$d_getnent'
17241 d_getnetprotos='$d_getnetprotos'
17242 d_getpagsz='$d_getpagsz'
17243 d_getpbyname='$d_getpbyname'
17244 d_getpbynumber='$d_getpbynumber'
17245 d_getpent='$d_getpent'
17246 d_getpgid='$d_getpgid'
17247 d_getpgrp2='$d_getpgrp2'
17248 d_getpgrp='$d_getpgrp'
17249 d_getppid='$d_getppid'
17250 d_getprior='$d_getprior'
17251 d_getprotoprotos='$d_getprotoprotos'
17252 d_getprpwnam='$d_getprpwnam'
17253 d_getpwent='$d_getpwent'
17254 d_getsbyname='$d_getsbyname'
17255 d_getsbyport='$d_getsbyport'
17256 d_getsent='$d_getsent'
17257 d_getservprotos='$d_getservprotos'
17258 d_getspnam='$d_getspnam'
17259 d_gettimeod='$d_gettimeod'
17260 d_gnulibc='$d_gnulibc'
17261 d_grpasswd='$d_grpasswd'
17262 d_hasmntopt='$d_hasmntopt'
17263 d_htonl='$d_htonl'
17264 d_index='$d_index'
17265 d_inetaton='$d_inetaton'
17266 d_int64_t='$d_int64_t'
17267 d_isascii='$d_isascii'
17268 d_isfinite='$d_isfinite'
17269 d_isinf='$d_isinf'
17270 d_isnan='$d_isnan'
17271 d_isnanl='$d_isnanl'
17272 d_killpg='$d_killpg'
17273 d_lchown='$d_lchown'
17274 d_ldbl_dig='$d_ldbl_dig'
17275 d_link='$d_link'
17276 d_locconv='$d_locconv'
17277 d_lockf='$d_lockf'
17278 d_longdbl='$d_longdbl'
17279 d_longlong='$d_longlong'
17280 d_lseekproto='$d_lseekproto'
17281 d_lstat='$d_lstat'
17282 d_madvise='$d_madvise'
17283 d_mblen='$d_mblen'
17284 d_mbstowcs='$d_mbstowcs'
17285 d_mbtowc='$d_mbtowc'
17286 d_memchr='$d_memchr'
17287 d_memcmp='$d_memcmp'
17288 d_memcpy='$d_memcpy'
17289 d_memmove='$d_memmove'
17290 d_memset='$d_memset'
17291 d_mkdir='$d_mkdir'
17292 d_mkdtemp='$d_mkdtemp'
17293 d_mkfifo='$d_mkfifo'
17294 d_mkstemp='$d_mkstemp'
17295 d_mkstemps='$d_mkstemps'
17296 d_mktime='$d_mktime'
17297 d_mmap='$d_mmap'
17298 d_modfl='$d_modfl'
17299 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17300 d_mprotect='$d_mprotect'
17301 d_msg='$d_msg'
17302 d_msg_ctrunc='$d_msg_ctrunc'
17303 d_msg_dontroute='$d_msg_dontroute'
17304 d_msg_oob='$d_msg_oob'
17305 d_msg_peek='$d_msg_peek'
17306 d_msg_proxy='$d_msg_proxy'
17307 d_msgctl='$d_msgctl'
17308 d_msgget='$d_msgget'
17309 d_msghdr_s='$d_msghdr_s'
17310 d_msgrcv='$d_msgrcv'
17311 d_msgsnd='$d_msgsnd'
17312 d_msync='$d_msync'
17313 d_munmap='$d_munmap'
17314 d_mymalloc='$d_mymalloc'
17315 d_nice='$d_nice'
17316 d_nl_langinfo='$d_nl_langinfo'
17317 d_nv_preserves_uv='$d_nv_preserves_uv'
17318 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17319 d_off64_t='$d_off64_t'
17320 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17321 d_oldpthreads='$d_oldpthreads'
17322 d_oldsock='$d_oldsock'
17323 d_open3='$d_open3'
17324 d_pathconf='$d_pathconf'
17325 d_pause='$d_pause'
17326 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17327 d_phostname='$d_phostname'
17328 d_pipe='$d_pipe'
17329 d_poll='$d_poll'
17330 d_portable='$d_portable'
17331 d_procselfexe='$d_procselfexe'
17332 d_pthread_atfork='$d_pthread_atfork'
17333 d_pthread_yield='$d_pthread_yield'
17334 d_pwage='$d_pwage'
17335 d_pwchange='$d_pwchange'
17336 d_pwclass='$d_pwclass'
17337 d_pwcomment='$d_pwcomment'
17338 d_pwexpire='$d_pwexpire'
17339 d_pwgecos='$d_pwgecos'
17340 d_pwpasswd='$d_pwpasswd'
17341 d_pwquota='$d_pwquota'
17342 d_qgcvt='$d_qgcvt'
17343 d_quad='$d_quad'
17344 d_readdir='$d_readdir'
17345 d_readlink='$d_readlink'
17346 d_readv='$d_readv'
17347 d_recvmsg='$d_recvmsg'
17348 d_rename='$d_rename'
17349 d_rewinddir='$d_rewinddir'
17350 d_rmdir='$d_rmdir'
17351 d_safebcpy='$d_safebcpy'
17352 d_safemcpy='$d_safemcpy'
17353 d_sanemcmp='$d_sanemcmp'
17354 d_sbrkproto='$d_sbrkproto'
17355 d_sched_yield='$d_sched_yield'
17356 d_scm_rights='$d_scm_rights'
17357 d_seekdir='$d_seekdir'
17358 d_select='$d_select'
17359 d_sem='$d_sem'
17360 d_semctl='$d_semctl'
17361 d_semctl_semid_ds='$d_semctl_semid_ds'
17362 d_semctl_semun='$d_semctl_semun'
17363 d_semget='$d_semget'
17364 d_semop='$d_semop'
17365 d_sendmsg='$d_sendmsg'
17366 d_setegid='$d_setegid'
17367 d_seteuid='$d_seteuid'
17368 d_setgrent='$d_setgrent'
17369 d_setgrps='$d_setgrps'
17370 d_sethent='$d_sethent'
17371 d_setitimer='$d_setitimer'
17372 d_setlinebuf='$d_setlinebuf'
17373 d_setlocale='$d_setlocale'
17374 d_setnent='$d_setnent'
17375 d_setpent='$d_setpent'
17376 d_setpgid='$d_setpgid'
17377 d_setpgrp2='$d_setpgrp2'
17378 d_setpgrp='$d_setpgrp'
17379 d_setprior='$d_setprior'
17380 d_setproctitle='$d_setproctitle'
17381 d_setpwent='$d_setpwent'
17382 d_setregid='$d_setregid'
17383 d_setresgid='$d_setresgid'
17384 d_setresuid='$d_setresuid'
17385 d_setreuid='$d_setreuid'
17386 d_setrgid='$d_setrgid'
17387 d_setruid='$d_setruid'
17388 d_setsent='$d_setsent'
17389 d_setsid='$d_setsid'
17390 d_setvbuf='$d_setvbuf'
17391 d_sfio='$d_sfio'
17392 d_shm='$d_shm'
17393 d_shmat='$d_shmat'
17394 d_shmatprototype='$d_shmatprototype'
17395 d_shmctl='$d_shmctl'
17396 d_shmdt='$d_shmdt'
17397 d_shmget='$d_shmget'
17398 d_sigaction='$d_sigaction'
17399 d_sigprocmask='$d_sigprocmask'
17400 d_sigsetjmp='$d_sigsetjmp'
17401 d_sockatmark='$d_sockatmark'
17402 d_sockatmarkproto='$d_sockatmarkproto'
17403 d_socket='$d_socket'
17404 d_socklen_t='$d_socklen_t'
17405 d_sockpair='$d_sockpair'
17406 d_socks5_init='$d_socks5_init'
17407 d_sqrtl='$d_sqrtl'
17408 d_sresgproto='$d_sresgproto'
17409 d_sresuproto='$d_sresuproto'
17410 d_statblks='$d_statblks'
17411 d_statfs_f_flags='$d_statfs_f_flags'
17412 d_statfs_s='$d_statfs_s'
17413 d_statvfs='$d_statvfs'
17414 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17415 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17416 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17417 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17418 d_stdio_stream_array='$d_stdio_stream_array'
17419 d_stdiobase='$d_stdiobase'
17420 d_stdstdio='$d_stdstdio'
17421 d_strchr='$d_strchr'
17422 d_strcoll='$d_strcoll'
17423 d_strctcpy='$d_strctcpy'
17424 d_strerrm='$d_strerrm'
17425 d_strerror='$d_strerror'
17426 d_strftime='$d_strftime'
17427 d_strtod='$d_strtod'
17428 d_strtol='$d_strtol'
17429 d_strtold='$d_strtold'
17430 d_strtoll='$d_strtoll'
17431 d_strtoq='$d_strtoq'
17432 d_strtoul='$d_strtoul'
17433 d_strtoull='$d_strtoull'
17434 d_strtouq='$d_strtouq'
17435 d_strxfrm='$d_strxfrm'
17436 d_suidsafe='$d_suidsafe'
17437 d_symlink='$d_symlink'
17438 d_syscall='$d_syscall'
17439 d_syscallproto='$d_syscallproto'
17440 d_sysconf='$d_sysconf'
17441 d_sysernlst='$d_sysernlst'
17442 d_syserrlst='$d_syserrlst'
17443 d_system='$d_system'
17444 d_tcgetpgrp='$d_tcgetpgrp'
17445 d_tcsetpgrp='$d_tcsetpgrp'
17446 d_telldir='$d_telldir'
17447 d_telldirproto='$d_telldirproto'
17448 d_time='$d_time'
17449 d_times='$d_times'
17450 d_tm_tm_gmtoff='$d_tm_tm_gmtoff'
17451 d_tm_tm_zone='$d_tm_tm_zone'
17452 d_truncate='$d_truncate'
17453 d_tzname='$d_tzname'
17454 d_u32align='$d_u32align'
17455 d_ualarm='$d_ualarm'
17456 d_umask='$d_umask'
17457 d_uname='$d_uname'
17458 d_union_semun='$d_union_semun'
17459 d_unordered='$d_unordered'
17460 d_usleep='$d_usleep'
17461 d_usleepproto='$d_usleepproto'
17462 d_ustat='$d_ustat'
17463 d_vendorarch='$d_vendorarch'
17464 d_vendorbin='$d_vendorbin'
17465 d_vendorlib='$d_vendorlib'
17466 d_vfork='$d_vfork'
17467 d_void_closedir='$d_void_closedir'
17468 d_voidsig='$d_voidsig'
17469 d_voidtty='$d_voidtty'
17470 d_volatile='$d_volatile'
17471 d_vprintf='$d_vprintf'
17472 d_wait4='$d_wait4'
17473 d_waitpid='$d_waitpid'
17474 d_wcstombs='$d_wcstombs'
17475 d_wctomb='$d_wctomb'
17476 d_writev='$d_writev'
17477 d_xenix='$d_xenix'
17478 date='$date'
17479 db_hashtype='$db_hashtype'
17480 db_prefixtype='$db_prefixtype'
17481 db_version_major='$db_version_major'
17482 db_version_minor='$db_version_minor'
17483 db_version_patch='$db_version_patch'
17484 defvoidused='$defvoidused'
17485 direntrytype='$direntrytype'
17486 dlext='$dlext'
17487 dlsrc='$dlsrc'
17488 doublesize='$doublesize'
17489 drand01='$drand01'
17490 dynamic_ext='$dynamic_ext'
17491 eagain='$eagain'
17492 ebcdic='$ebcdic'
17493 echo='$echo'
17494 egrep='$egrep'
17495 emacs='$emacs'
17496 eunicefix='$eunicefix'
17497 exe_ext='$exe_ext'
17498 expr='$expr'
17499 extensions='$extensions'
17500 extras='$extras'
17501 fflushNULL='$fflushNULL'
17502 fflushall='$fflushall'
17503 find='$find'
17504 firstmakefile='$firstmakefile'
17505 flex='$flex'
17506 fpossize='$fpossize'
17507 fpostype='$fpostype'
17508 freetype='$freetype'
17509 from='$from'
17510 full_ar='$full_ar'
17511 full_csh='$full_csh'
17512 full_sed='$full_sed'
17513 gccosandvers='$gccosandvers'
17514 gccversion='$gccversion'
17515 gidformat='$gidformat'
17516 gidsign='$gidsign'
17517 gidsize='$gidsize'
17518 gidtype='$gidtype'
17519 glibpth='$glibpth'
17520 gmake='$gmake'
17521 grep='$grep'
17522 groupcat='$groupcat'
17523 groupstype='$groupstype'
17524 gzip='$gzip'
17525 h_fcntl='$h_fcntl'
17526 h_sysfile='$h_sysfile'
17527 hint='$hint'
17528 hostcat='$hostcat'
17529 i16size='$i16size'
17530 i16type='$i16type'
17531 i32size='$i32size'
17532 i32type='$i32type'
17533 i64size='$i64size'
17534 i64type='$i64type'
17535 i8size='$i8size'
17536 i8type='$i8type'
17537 i_arpainet='$i_arpainet'
17538 i_bsdioctl='$i_bsdioctl'
17539 i_db='$i_db'
17540 i_dbm='$i_dbm'
17541 i_dirent='$i_dirent'
17542 i_dld='$i_dld'
17543 i_dlfcn='$i_dlfcn'
17544 i_fcntl='$i_fcntl'
17545 i_float='$i_float'
17546 i_fp='$i_fp'
17547 i_fp_class='$i_fp_class'
17548 i_gdbm='$i_gdbm'
17549 i_grp='$i_grp'
17550 i_ieeefp='$i_ieeefp'
17551 i_inttypes='$i_inttypes'
17552 i_langinfo='$i_langinfo'
17553 i_libutil='$i_libutil'
17554 i_limits='$i_limits'
17555 i_locale='$i_locale'
17556 i_machcthr='$i_machcthr'
17557 i_malloc='$i_malloc'
17558 i_math='$i_math'
17559 i_memory='$i_memory'
17560 i_mntent='$i_mntent'
17561 i_ndbm='$i_ndbm'
17562 i_netdb='$i_netdb'
17563 i_neterrno='$i_neterrno'
17564 i_netinettcp='$i_netinettcp'
17565 i_niin='$i_niin'
17566 i_poll='$i_poll'
17567 i_prot='$i_prot'
17568 i_pthread='$i_pthread'
17569 i_pwd='$i_pwd'
17570 i_rpcsvcdbm='$i_rpcsvcdbm'
17571 i_sfio='$i_sfio'
17572 i_sgtty='$i_sgtty'
17573 i_shadow='$i_shadow'
17574 i_socks='$i_socks'
17575 i_stdarg='$i_stdarg'
17576 i_stddef='$i_stddef'
17577 i_stdlib='$i_stdlib'
17578 i_string='$i_string'
17579 i_sunmath='$i_sunmath'
17580 i_sysaccess='$i_sysaccess'
17581 i_sysdir='$i_sysdir'
17582 i_sysfile='$i_sysfile'
17583 i_sysfilio='$i_sysfilio'
17584 i_sysin='$i_sysin'
17585 i_sysioctl='$i_sysioctl'
17586 i_syslog='$i_syslog'
17587 i_sysmman='$i_sysmman'
17588 i_sysmode='$i_sysmode'
17589 i_sysmount='$i_sysmount'
17590 i_sysndir='$i_sysndir'
17591 i_sysparam='$i_sysparam'
17592 i_sysresrc='$i_sysresrc'
17593 i_syssecrt='$i_syssecrt'
17594 i_sysselct='$i_sysselct'
17595 i_syssockio='$i_syssockio'
17596 i_sysstat='$i_sysstat'
17597 i_sysstatfs='$i_sysstatfs'
17598 i_sysstatvfs='$i_sysstatvfs'
17599 i_systime='$i_systime'
17600 i_systimek='$i_systimek'
17601 i_systimes='$i_systimes'
17602 i_systypes='$i_systypes'
17603 i_sysuio='$i_sysuio'
17604 i_sysun='$i_sysun'
17605 i_sysutsname='$i_sysutsname'
17606 i_sysvfs='$i_sysvfs'
17607 i_syswait='$i_syswait'
17608 i_termio='$i_termio'
17609 i_termios='$i_termios'
17610 i_time='$i_time'
17611 i_unistd='$i_unistd'
17612 i_ustat='$i_ustat'
17613 i_utime='$i_utime'
17614 i_values='$i_values'
17615 i_varargs='$i_varargs'
17616 i_varhdr='$i_varhdr'
17617 i_vfork='$i_vfork'
17618 ignore_versioned_solibs='$ignore_versioned_solibs'
17619 inc_version_list='$inc_version_list'
17620 inc_version_list_init='$inc_version_list_init'
17621 incpath='$incpath'
17622 inews='$inews'
17623 installarchlib='$installarchlib'
17624 installbin='$installbin'
17625 installman1dir='$installman1dir'
17626 installman3dir='$installman3dir'
17627 installprefix='$installprefix'
17628 installprefixexp='$installprefixexp'
17629 installprivlib='$installprivlib'
17630 installscript='$installscript'
17631 installsitearch='$installsitearch'
17632 installsitebin='$installsitebin'
17633 installsitelib='$installsitelib'
17634 installstyle='$installstyle'
17635 installusrbinperl='$installusrbinperl'
17636 installvendorarch='$installvendorarch'
17637 installvendorbin='$installvendorbin'
17638 installvendorlib='$installvendorlib'
17639 intsize='$intsize'
17640 issymlink='$issymlink'
17641 ivdformat='$ivdformat'
17642 ivsize='$ivsize'
17643 ivtype='$ivtype'
17644 known_extensions='$known_extensions'
17645 ksh='$ksh'
17646 ld='$ld'
17647 lddlflags='$lddlflags'
17648 ldflags='$ldflags'
17649 ldflags_uselargefiles='$ldflags_uselargefiles'
17650 ldlibpthname='$ldlibpthname'
17651 less='$less'
17652 lib_ext='$lib_ext'
17653 libc='$libc'
17654 libperl='$libperl'
17655 libpth='$libpth'
17656 libs='$libs'
17657 libsdirs='$libsdirs'
17658 libsfiles='$libsfiles'
17659 libsfound='$libsfound'
17660 libspath='$libspath'
17661 libswanted='$libswanted'
17662 libswanted_uselargefiles='$libswanted_uselargefiles'
17663 line='$line'
17664 lint='$lint'
17665 lkflags='$lkflags'
17666 ln='$ln'
17667 lns='$lns'
17668 locincpth='$locincpth'
17669 loclibpth='$loclibpth'
17670 longdblsize='$longdblsize'
17671 longlongsize='$longlongsize'
17672 longsize='$longsize'
17673 lp='$lp'
17674 lpr='$lpr'
17675 ls='$ls'
17676 lseeksize='$lseeksize'
17677 lseektype='$lseektype'
17678 mail='$mail'
17679 mailx='$mailx'
17680 make='$make'
17681 make_set_make='$make_set_make'
17682 mallocobj='$mallocobj'
17683 mallocsrc='$mallocsrc'
17684 malloctype='$malloctype'
17685 man1dir='$man1dir'
17686 man1direxp='$man1direxp'
17687 man1ext='$man1ext'
17688 man3dir='$man3dir'
17689 man3direxp='$man3direxp'
17690 man3ext='$man3ext'
17691 mips_type='$mips_type'
17692 mkdir='$mkdir'
17693 mmaptype='$mmaptype'
17694 modetype='$modetype'
17695 more='$more'
17696 multiarch='$multiarch'
17697 mv='$mv'
17698 myarchname='$myarchname'
17699 mydomain='$mydomain'
17700 myhostname='$myhostname'
17701 myuname='$myuname'
17702 n='$n'
17703 need_va_copy='$need_va_copy'
17704 netdb_hlen_type='$netdb_hlen_type'
17705 netdb_host_type='$netdb_host_type'
17706 netdb_name_type='$netdb_name_type'
17707 netdb_net_type='$netdb_net_type'
17708 nm='$nm'
17709 nm_opt='$nm_opt'
17710 nm_so_opt='$nm_so_opt'
17711 nonxs_ext='$nonxs_ext'
17712 nroff='$nroff'
17713 nvEUformat='$nvEUformat'
17714 nvFUformat='$nvFUformat'
17715 nvGUformat='$nvGUformat'
17716 nveformat='$nveformat'
17717 nvfformat='$nvfformat'
17718 nvgformat='$nvgformat'
17719 nvsize='$nvsize'
17720 nvtype='$nvtype'
17721 o_nonblock='$o_nonblock'
17722 obj_ext='$obj_ext'
17723 old_pthread_create_joinable='$old_pthread_create_joinable'
17724 optimize='$optimize'
17725 orderlib='$orderlib'
17726 osname='$osname'
17727 osvers='$osvers'
17728 otherlibdirs='$otherlibdirs'
17729 package='$package'
17730 pager='$pager'
17731 passcat='$passcat'
17732 patchlevel='$patchlevel'
17733 path_sep='$path_sep'
17734 perl5='$perl5'
17735 perl='$perl'
17736 perl_patchlevel='$perl_patchlevel'
17737 perladmin='$perladmin'
17738 perllibs='$perllibs'
17739 perlpath='$perlpath'
17740 pg='$pg'
17741 phostname='$phostname'
17742 pidtype='$pidtype'
17743 plibpth='$plibpth'
17744 pm_apiversion='$pm_apiversion'
17745 pmake='$pmake'
17746 pr='$pr'
17747 prefix='$prefix'
17748 prefixexp='$prefixexp'
17749 privlib='$privlib'
17750 privlibexp='$privlibexp'
17751 procselfexe='$procselfexe'
17752 prototype='$prototype'
17753 ptrsize='$ptrsize'
17754 quadkind='$quadkind'
17755 quadtype='$quadtype'
17756 randbits='$randbits'
17757 randfunc='$randfunc'
17758 randseedtype='$randseedtype'
17759 ranlib='$ranlib'
17760 rd_nodata='$rd_nodata'
17761 revision='$revision'
17762 rm='$rm'
17763 rmail='$rmail'
17764 run='$run'
17765 runnm='$runnm'
17766 sPRIEUldbl='$sPRIEUldbl'
17767 sPRIFUldbl='$sPRIFUldbl'
17768 sPRIGUldbl='$sPRIGUldbl'
17769 sPRIXU64='$sPRIXU64'
17770 sPRId64='$sPRId64'
17771 sPRIeldbl='$sPRIeldbl'
17772 sPRIfldbl='$sPRIfldbl'
17773 sPRIgldbl='$sPRIgldbl'
17774 sPRIi64='$sPRIi64'
17775 sPRIo64='$sPRIo64'
17776 sPRIu64='$sPRIu64'
17777 sPRIx64='$sPRIx64'
17778 sSCNfldbl='$sSCNfldbl'
17779 sched_yield='$sched_yield'
17780 scriptdir='$scriptdir'
17781 scriptdirexp='$scriptdirexp'
17782 sed='$sed'
17783 seedfunc='$seedfunc'
17784 selectminbits='$selectminbits'
17785 selecttype='$selecttype'
17786 sendmail='$sendmail'
17787 sh='$sh'
17788 shar='$shar'
17789 sharpbang='$sharpbang'
17790 shmattype='$shmattype'
17791 shortsize='$shortsize'
17792 shrpenv='$shrpenv'
17793 shsharp='$shsharp'
17794 sig_count='$sig_count'
17795 sig_name='$sig_name'
17796 sig_name_init='$sig_name_init'
17797 sig_num='$sig_num'
17798 sig_num_init='$sig_num_init'
17799 sig_size='$sig_size'
17800 signal_t='$signal_t'
17801 sitearch='$sitearch'
17802 sitearchexp='$sitearchexp'
17803 sitebin='$sitebin'
17804 sitebinexp='$sitebinexp'
17805 sitelib='$sitelib'
17806 sitelib_stem='$sitelib_stem'
17807 sitelibexp='$sitelibexp'
17808 siteprefix='$siteprefix'
17809 siteprefixexp='$siteprefixexp'
17810 sizesize='$sizesize'
17811 sizetype='$sizetype'
17812 sleep='$sleep'
17813 smail='$smail'
17814 so='$so'
17815 sockethdr='$sockethdr'
17816 socketlib='$socketlib'
17817 socksizetype='$socksizetype'
17818 sort='$sort'
17819 spackage='$spackage'
17820 spitshell='$spitshell'
17821 src='$src'
17822 ssizetype='$ssizetype'
17823 startperl='$startperl'
17824 startsh='$startsh'
17825 static_ext='$static_ext'
17826 stdchar='$stdchar'
17827 stdio_base='$stdio_base'
17828 stdio_bufsiz='$stdio_bufsiz'
17829 stdio_cnt='$stdio_cnt'
17830 stdio_filbuf='$stdio_filbuf'
17831 stdio_ptr='$stdio_ptr'
17832 stdio_stream_array='$stdio_stream_array'
17833 strings='$strings'
17834 submit='$submit'
17835 subversion='$subversion'
17836 sysman='$sysman'
17837 tail='$tail'
17838 tar='$tar'
17839 targetarch='$targetarch'
17840 tbl='$tbl'
17841 tee='$tee'
17842 test='$test'
17843 timeincl='$timeincl'
17844 timetype='$timetype'
17845 to='$to'
17846 touch='$touch'
17847 tr='$tr'
17848 trnl='$trnl'
17849 troff='$troff'
17850 u16size='$u16size'
17851 u16type='$u16type'
17852 u32size='$u32size'
17853 u32type='$u32type'
17854 u64size='$u64size'
17855 u64type='$u64type'
17856 u8size='$u8size'
17857 u8type='$u8type'
17858 uidformat='$uidformat'
17859 uidsign='$uidsign'
17860 uidsize='$uidsize'
17861 uidtype='$uidtype'
17862 uname='$uname'
17863 uniq='$uniq'
17864 uquadtype='$uquadtype'
17865 use5005threads='$use5005threads'
17866 use64bitall='$use64bitall'
17867 use64bitint='$use64bitint'
17868 usecrosscompile='$usecrosscompile'
17869 usedl='$usedl'
17870 useithreads='$useithreads'
17871 uselargefiles='$uselargefiles'
17872 uselongdouble='$uselongdouble'
17873 usemorebits='$usemorebits'
17874 usemultiplicity='$usemultiplicity'
17875 usemymalloc='$usemymalloc'
17876 usenm='$usenm'
17877 useopcode='$useopcode'
17878 useperlio='$useperlio'
17879 useposix='$useposix'
17880 usereentrant='$usereentrant'
17881 usesfio='$usesfio'
17882 useshrplib='$useshrplib'
17883 usesocks='$usesocks'
17884 usethreads='$usethreads'
17885 usevendorprefix='$usevendorprefix'
17886 usevfork='$usevfork'
17887 usrinc='$usrinc'
17888 uuname='$uuname'
17889 uvXUformat='$uvXUformat'
17890 uvoformat='$uvoformat'
17891 uvsize='$uvsize'
17892 uvtype='$uvtype'
17893 uvuformat='$uvuformat'
17894 uvxformat='$uvxformat'
17895 vendorarch='$vendorarch'
17896 vendorarchexp='$vendorarchexp'
17897 vendorbin='$vendorbin'
17898 vendorbinexp='$vendorbinexp'
17899 vendorlib='$vendorlib'
17900 vendorlib_stem='$vendorlib_stem'
17901 vendorlibexp='$vendorlibexp'
17902 vendorprefix='$vendorprefix'
17903 vendorprefixexp='$vendorprefixexp'
17904 version='$version'
17905 version_patchlevel_string='$version_patchlevel_string'
17906 versiononly='$versiononly'
17907 vi='$vi'
17908 voidflags='$voidflags'
17909 xlibpth='$xlibpth'
17910 xs_apiversion='$xs_apiversion'
17911 yacc='$yacc'
17912 yaccflags='$yaccflags'
17913 zcat='$zcat'
17914 zip='$zip'
17915 EOT
17916
17917 : Add in command line options if available
17918 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17919
17920 : add special variables
17921 $test -f $src/patchlevel.h && \
17922 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17923 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17924 echo "PERL_CONFIG_SH=true" >>config.sh
17925
17926 : propagate old symbols
17927 if $test -f UU/config.sh; then
17928         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17929         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17930         $sort | $uniq -u >UU/oldsyms
17931         set X `cat UU/oldsyms`
17932         shift
17933         case $# in
17934         0) ;;
17935         *)
17936                 cat <<EOM
17937 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17938 EOM
17939                 echo "# Variables propagated from previous config.sh file." >>config.sh
17940                 for sym in `cat UU/oldsyms`; do
17941                         echo "    Propagating $hint variable "'$'"$sym..."
17942                         eval 'tmp="$'"${sym}"'"'
17943                         echo "$tmp" | \
17944                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17945                 done
17946                 ;;
17947         esac
17948 fi
17949
17950 : Finish up by extracting the .SH files
17951 case "$alldone" in
17952 exit)
17953         $rm -rf UU
17954         echo "Extraction done."
17955         exit 0
17956         ;;
17957 cont)
17958         ;;
17959 '')
17960         dflt=''
17961         nostick=true
17962         $cat <<EOM
17963
17964 If you'd like to make any changes to the config.sh file before I begin
17965 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17966
17967 EOM
17968         rp="Press return or use a shell escape to edit config.sh:"
17969         . UU/myread
17970         nostick=''
17971         case "$ans" in
17972         '') ;;
17973         *) : in case they cannot read
17974                 sh 1>&4 -c "$ans";;
17975         esac
17976         ;;
17977 esac
17978
17979 : if this fails, just run all the .SH files by hand
17980 . ./config.sh
17981
17982 echo " "
17983 exec 1>&4
17984 pwd=`pwd`
17985 . ./UU/extract
17986 cd "$pwd"
17987
17988 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17989         dflt=y
17990         case "$silent" in
17991         true) ;;
17992         *)
17993                 $cat <<EOM
17994
17995 Now you need to generate make dependencies by running "$make depend".
17996 You might prefer to run it in background: "$make depend > makedepend.out &"
17997 It can take a while, so you might not want to run it right now.
17998
17999 EOM
18000                 ;;
18001         esac
18002         rp="Run $make depend now?"
18003         . UU/myread
18004         case "$ans" in
18005         y*)
18006                 $make depend && echo "Now you must run '$make'."
18007                 ;;
18008         *)
18009                 echo "You must run '$make depend' then '$make'."
18010                 ;;
18011         esac
18012 elif test -f [Mm]akefile; then
18013         echo " "
18014         echo "Now you must run a $make."
18015 else
18016         echo "Configure done."
18017 fi
18018
18019 if $test -f Policy.sh; then
18020     $cat <<EOM
18021
18022 If you compile $package on a different machine or from a different object
18023 directory, copy the Policy.sh file from this object directory to the
18024 new one before you run Configure -- this will help you with most of
18025 the policy defaults.
18026
18027 EOM
18028 fi
18029 if $test -f config.msg; then
18030     echo "Hmm.  I also noted the following information while running:"
18031     echo " "
18032     $cat config.msg >&4
18033     $rm -f config.msg
18034 fi
18035 $rm -f kit*isdone ark*isdone
18036 $rm -rf UU
18037
18038 : End of Configure
18039