Revert #4457 for more investigation.
[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 Tue Oct 26 16:44:39 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/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 >/tmp/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 /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/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                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 contains=''
302 cpp_stuff=''
303 cpplast=''
304 cppminus=''
305 cpprun=''
306 cppstdin=''
307 crosscompile=''
308 d_access=''
309 d_accessx=''
310 d_alarm=''
311 d_attribut=''
312 d_bcmp=''
313 d_bcopy=''
314 d_bzero=''
315 d_casti32=''
316 castflags=''
317 d_castneg=''
318 d_chown=''
319 d_chroot=''
320 d_chsize=''
321 d_closedir=''
322 d_void_closedir=''
323 d_const=''
324 cryptlib=''
325 d_crypt=''
326 d_csh=''
327 full_csh=''
328 d_cuserid=''
329 d_dbl_dig=''
330 d_difftime=''
331 d_dlerror=''
332 d_dlopen=''
333 d_dlsymun=''
334 d_dosuid=''
335 d_suidsafe=''
336 d_drand48proto=''
337 d_dup2=''
338 d_eaccess=''
339 d_endgrent=''
340 d_endhent=''
341 d_endnent=''
342 d_endpent=''
343 d_endpwent=''
344 d_endsent=''
345 d_endspent=''
346 d_fchmod=''
347 d_fchown=''
348 d_fcntl=''
349 d_fd_macros=''
350 d_fd_set=''
351 d_fds_bits=''
352 d_fgetpos=''
353 d_flexfnam=''
354 d_flock=''
355 d_fork=''
356 d_fseeko=''
357 d_fsetpos=''
358 d_ftello=''
359 d_ftime=''
360 d_gettimeod=''
361 d_Gconvert=''
362 d_getgrent=''
363 d_getgrps=''
364 d_gethbyaddr=''
365 d_gethbyname=''
366 d_gethent=''
367 aphostname=''
368 d_gethname=''
369 d_phostname=''
370 d_uname=''
371 d_gethostprotos=''
372 d_getlogin=''
373 d_getmntent=''
374 d_getnbyaddr=''
375 d_getnbyname=''
376 d_getnent=''
377 d_getnetprotos=''
378 d_getpent=''
379 d_getpgid=''
380 d_getpgrp2=''
381 d_bsdgetpgrp=''
382 d_getpgrp=''
383 d_getppid=''
384 d_getprior=''
385 d_getpbyname=''
386 d_getpbynumber=''
387 d_getprotoprotos=''
388 d_getpwent=''
389 d_getsent=''
390 d_getservprotos=''
391 d_getspent=''
392 d_getspnam=''
393 d_getsbyname=''
394 d_getsbyport=''
395 d_gnulibc=''
396 d_hasmntopt=''
397 d_htonl=''
398 d_inetaton=''
399 d_isascii=''
400 d_killpg=''
401 d_lchown=''
402 d_ldbl_dig=''
403 d_link=''
404 d_locconv=''
405 d_lockf=''
406 d_longdbl=''
407 longdblsize=''
408 d_longlong=''
409 longlongsize=''
410 d_lstat=''
411 d_madvise=''
412 d_mblen=''
413 d_mbstowcs=''
414 d_mbtowc=''
415 d_memchr=''
416 d_memcmp=''
417 d_memcpy=''
418 d_memmove=''
419 d_memset=''
420 d_mkdir=''
421 d_mkfifo=''
422 d_mktime=''
423 d_mmap=''
424 mmaptype=''
425 d_mprotect=''
426 d_msg=''
427 d_msgctl=''
428 d_msgget=''
429 d_msgrcv=''
430 d_msgsnd=''
431 d_msync=''
432 d_munmap=''
433 d_nice=''
434 d_open3=''
435 d_fpathconf=''
436 d_pathconf=''
437 d_pause=''
438 d_pipe=''
439 d_poll=''
440 d_portable=''
441 d_old_pthread_create_joinable=''
442 old_pthread_create_joinable=''
443 d_pthread_yield=''
444 d_sched_yield=''
445 sched_yield=''
446 d_readdir=''
447 d_rewinddir=''
448 d_seekdir=''
449 d_telldir=''
450 d_readlink=''
451 d_readv=''
452 d_rename=''
453 d_rmdir=''
454 d_safebcpy=''
455 d_safemcpy=''
456 d_sanemcmp=''
457 d_select=''
458 d_sem=''
459 d_semctl=''
460 d_semget=''
461 d_semop=''
462 d_setegid=''
463 d_seteuid=''
464 d_setgrent=''
465 d_setgrps=''
466 d_sethent=''
467 d_setlinebuf=''
468 d_setlocale=''
469 d_setnent=''
470 d_setpent=''
471 d_setpgid=''
472 d_setpgrp2=''
473 d_bsdsetpgrp=''
474 d_setpgrp=''
475 d_setprior=''
476 d_setpwent=''
477 d_setregid=''
478 d_setresgid=''
479 d_setresuid=''
480 d_setreuid=''
481 d_setrgid=''
482 d_setruid=''
483 d_setsent=''
484 d_setsid=''
485 d_setspent=''
486 d_setvbuf=''
487 d_sfio=''
488 usesfio=''
489 d_shm=''
490 d_shmat=''
491 d_shmatprototype=''
492 shmattype=''
493 d_shmctl=''
494 d_shmdt=''
495 d_shmget=''
496 d_sigaction=''
497 d_sigsetjmp=''
498 d_cmsghdr_s=''
499 d_msg_ctrunc=''
500 d_msg_dontroute=''
501 d_msg_oob=''
502 d_msg_peek=''
503 d_msg_proxy=''
504 d_msghdr_s=''
505 d_oldsock=''
506 d_recvmsg=''
507 d_scm_rights=''
508 d_sendmsg=''
509 d_socket=''
510 d_sockpair=''
511 sockethdr=''
512 socketlib=''
513 d_sqrtl=''
514 d_statblks=''
515 d_fstatfs=''
516 d_statfs=''
517 d_statfsflags=''
518 d_fstatvfs=''
519 d_statvfs=''
520 d_stdio_cnt_lval=''
521 d_stdio_ptr_lval=''
522 d_stdiobase=''
523 d_stdstdio=''
524 stdio_base=''
525 stdio_bufsiz=''
526 stdio_cnt=''
527 stdio_filbuf=''
528 stdio_ptr=''
529 d_index=''
530 d_strchr=''
531 d_strcoll=''
532 d_strctcpy=''
533 d_strerrm=''
534 d_strerror=''
535 d_sysernlst=''
536 d_syserrlst=''
537 d_strtod=''
538 d_strtol=''
539 d_strtoul=''
540 d_strxfrm=''
541 d_symlink=''
542 d_syscall=''
543 d_sysconf=''
544 d_system=''
545 d_tcgetpgrp=''
546 d_tcsetpgrp=''
547 d_telldirproto=''
548 d_time=''
549 timetype=''
550 clocktype=''
551 d_times=''
552 d_truncate=''
553 d_tzname=''
554 d_umask=''
555 d_semctl_semid_ds=''
556 d_semctl_semun=''
557 d_union_semun=''
558 d_vfork=''
559 usevfork=''
560 d_voidsig=''
561 signal_t=''
562 d_volatile=''
563 d_charvspr=''
564 d_vprintf=''
565 d_wait4=''
566 d_waitpid=''
567 d_wcstombs=''
568 d_wctomb=''
569 d_writev=''
570 dlext=''
571 cccdlflags=''
572 ccdlflags=''
573 dlsrc=''
574 ld=''
575 lddlflags=''
576 usedl=''
577 doublesize=''
578 ebcdic=''
579 fflushNULL=''
580 fflushall=''
581 fpostype=''
582 gidtype=''
583 groupstype=''
584 h_fcntl=''
585 h_sysfile=''
586 i_arpainet=''
587 db_hashtype=''
588 db_prefixtype=''
589 i_db=''
590 i_dbm=''
591 i_rpcsvcdbm=''
592 d_dirnamlen=''
593 direntrytype=''
594 i_dirent=''
595 i_dld=''
596 i_dlfcn=''
597 i_fcntl=''
598 i_float=''
599 i_gdbm=''
600 d_grpasswd=''
601 i_grp=''
602 d_int64t=''
603 i_inttypes=''
604 i_limits=''
605 i_locale=''
606 i_machcthr=''
607 i_malloc=''
608 i_math=''
609 i_memory=''
610 i_mntent=''
611 i_ndbm=''
612 i_netdb=''
613 i_neterrno=''
614 i_netinettcp=''
615 i_niin=''
616 i_sysin=''
617 i_poll=''
618 i_pthread=''
619 d_pwage=''
620 d_pwchange=''
621 d_pwclass=''
622 d_pwcomment=''
623 d_pwexpire=''
624 d_pwgecos=''
625 d_pwpasswd=''
626 d_pwquota=''
627 i_pwd=''
628 i_sfio=''
629 i_shadow=''
630 i_socks=''
631 i_stddef=''
632 i_stdlib=''
633 i_string=''
634 strings=''
635 i_sysaccess=''
636 i_sysdir=''
637 i_sysfile=''
638 d_voidtty=''
639 i_bsdioctl=''
640 i_sysfilio=''
641 i_sysioctl=''
642 i_syssockio=''
643 i_sysmman=''
644 i_sysmount=''
645 i_sysndir=''
646 i_sysparam=''
647 i_sysresrc=''
648 i_syssecrt=''
649 i_sysselct=''
650 i_sysstat=''
651 i_sysstatvfs=''
652 i_systimes=''
653 i_systypes=''
654 d_iovec_s=''
655 i_sysuio=''
656 i_sysun=''
657 i_syswait=''
658 i_sgtty=''
659 i_termio=''
660 i_termios=''
661 i_systime=''
662 i_systimek=''
663 i_time=''
664 timeincl=''
665 i_unistd=''
666 i_utime=''
667 i_values=''
668 i_stdarg=''
669 i_varargs=''
670 i_varhdr=''
671 i_vfork=''
672 installprefix=''
673 installprefixexp=''
674 installstyle=''
675 installusrbinperl=''
676 intsize=''
677 longsize=''
678 shortsize=''
679 d_fpos64_t=''
680 d_llseek=''
681 d_off64_t=''
682 libc=''
683 ldlibpthname=''
684 libperl=''
685 shrpenv=''
686 useshrplib=''
687 glibpth=''
688 libpth=''
689 loclibpth=''
690 plibpth=''
691 xlibpth=''
692 ignore_versioned_solibs=''
693 libs=''
694 lns=''
695 d_PRIEldbl=''
696 d_PRIFldbl=''
697 d_PRIGldbl=''
698 d_PRIeldbl=''
699 d_PRIfldbl=''
700 d_PRIgldbl=''
701 sPRIEldbl=''
702 sPRIFldbl=''
703 sPRIGldbl=''
704 sPRIeldbl=''
705 sPRIfldbl=''
706 sPRIgldbl=''
707 lseeksize=''
708 lseektype=''
709 make_set_make=''
710 d_mymalloc=''
711 freetype=''
712 mallocobj=''
713 mallocsrc=''
714 malloctype=''
715 usemymalloc=''
716 installman1dir=''
717 man1dir=''
718 man1direxp=''
719 man1ext=''
720 installman3dir=''
721 man3dir=''
722 man3direxp=''
723 man3ext=''
724 huge=''
725 large=''
726 medium=''
727 models=''
728 small=''
729 split=''
730 modetype=''
731 multiarch=''
732 mydomain=''
733 myhostname=''
734 phostname=''
735 c=''
736 n=''
737 d_eofnblk=''
738 eagain=''
739 o_nonblock=''
740 rd_nodata=''
741 netdb_hlen_type=''
742 netdb_host_type=''
743 netdb_name_type=''
744 netdb_net_type=''
745 groupcat=''
746 hostcat=''
747 passcat=''
748 orderlib=''
749 ranlib=''
750 package=''
751 spackage=''
752 pager=''
753 apiversion=''
754 patchlevel=''
755 subversion=''
756 version=''
757 perladmin=''
758 perlpath=''
759 pidtype=''
760 prefix=''
761 prefixexp=''
762 installprivlib=''
763 privlib=''
764 privlibexp=''
765 prototype=''
766 ptrsize=''
767 d_PRIX64=''
768 d_PRId64=''
769 d_PRIi64=''
770 d_PRIo64=''
771 d_PRIu64=''
772 d_PRIx64=''
773 sPRIX64=''
774 sPRId64=''
775 sPRIi64=''
776 sPRIo64=''
777 sPRIu64=''
778 sPRIx64=''
779 drand01=''
780 randbits=''
781 randfunc=''
782 randseedtype=''
783 seedfunc=''
784 installscript=''
785 scriptdir=''
786 scriptdirexp=''
787 selectminbits=''
788 selecttype=''
789 sh=''
790 sig_count=''
791 sig_name=''
792 sig_name_init=''
793 sig_num=''
794 sig_num_init=''
795 installsitearch=''
796 sitearch=''
797 sitearchexp=''
798 installsitebin=''
799 sitebin=''
800 sitebinexp=''
801 installsitelib=''
802 sitelib=''
803 sitelibexp=''
804 siteprefix=''
805 siteprefixexp=''
806 sizetype=''
807 so=''
808 sharpbang=''
809 shsharp=''
810 spitshell=''
811 src=''
812 ssizetype=''
813 startperl=''
814 startsh=''
815 stdchar=''
816 d_stdio_stream_array=''
817 stdio_stream_array=''
818 d_strtoull=''
819 sysman=''
820 trnl=''
821 uidsign=''
822 uidtype=''
823 archname64=''
824 use64bits=''
825 uselargefiles=''
826 uselongdouble=''
827 usemorebits=''
828 usemultiplicity=''
829 nm_opt=''
830 nm_so_opt=''
831 runnm=''
832 usenm=''
833 useperlio=''
834 usesocks=''
835 d_oldpthreads=''
836 usethreads=''
837 incpath=''
838 mips=''
839 mips_type=''
840 usrinc=''
841 d_vendorbin=''
842 installvendorbin=''
843 vendorbin=''
844 vendorbinexp=''
845 d_vendorlib=''
846 installvendorlib=''
847 vendorlib=''
848 vendorlibexp=''
849 usevendorprefix=''
850 vendorprefix=''
851 vendorprefixexp=''
852 defvoidused=''
853 voidflags=''
854 pm_apiversion=''
855 xs_apiversion=''
856 CONFIG=''
857
858 define='define'
859 undef='undef'
860 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
861 rmlist=''
862
863 : We must find out about Eunice early
864 eunicefix=':'
865 if test -f /etc/unixtovms; then
866         eunicefix=/etc/unixtovms
867 fi
868 if test -f /etc/unixtovms.exe; then
869         eunicefix=/etc/unixtovms.exe
870 fi
871
872 i_whoami=''
873 : Possible local include directories to search.
874 : Set locincpth to "" in a hint file to defeat local include searches.
875 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
876 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
877 :
878 : no include file wanted by default
879 inclwanted=''
880
881 : list of known cpp symbols, sorted alphabetically
882 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
883 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
884 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
885 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
886 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
887 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
888 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4 SVR5"
889 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
890 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
891 al="$al VMS Xenix286"
892 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
893 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
894 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
895 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
896 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
897 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
898 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
899 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
900 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
901 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
902 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
903 al="$al __SVR4_2__ __UMAXV__"
904 al="$al ____386BSD____ __alpha __alpha__ __amiga"
905 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
906 al="$al __host_mips__"
907 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
908 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
909 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
910 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
911 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
912 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
913 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
914 al="$al __mc88100 __mc88100__ __mips __mips__"
915 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
916 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
917 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
918 al="$al _host_mips _mips _unix"
919 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
920 al="$al apollo ardent att386 att3b"
921 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
922 al="$al cadmus clipper concurrent convex cray ctix"
923 al="$al dmert encore gcos gcx gimpel gould"
924 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
925 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
926 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
927 al="$al i186 i286 i386 i486 i8086"
928 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
929 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
930 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
931 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
932 al="$al mc88000 mc88100 merlin mert mips mvs n16"
933 al="$al ncl_el ncl_mr"
934 al="$al news1500 news1700 news1800 news1900 news3700"
935 al="$al news700 news800 news900 ns16000 ns32000"
936 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
937 al="$al parisc pc532 pdp11 plexus posix pyr"
938 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
939 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
940 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
941 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
942 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
943 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
944 al="$al xenix z8000"
945
946 : Trailing extension.  Override this in a hint file, if needed.
947 _exe=''
948 : Extra object files, if any, needed on this platform.
949 archobjs=''
950 groupstype=''
951 : change the next line if compiling for Xenix/286 on Xenix/386
952 xlibpth='/usr/lib/386 /lib/386'
953
954 : Possible local library directories to search.
955 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
956 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
957
958 : general looking path for locating libraries
959 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
960 glibpth="$glibpth /lib /usr/lib $xlibpth"
961 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
962 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
963
964 : Private path used by Configure to find libraries.  Its value
965 : is prepended to libpth. This variable takes care of special
966 : machines, like the mips.  Usually, it should be empty.
967 plibpth=''
968
969 : default library list
970 libswanted=''
971 : some systems want to use only the non-versioned libso:s
972 ignore_versioned_solibs=''
973 : full support for void wanted by default
974 defvoidused=15
975
976 : set useposix=false in your hint file to disable the POSIX extension.
977 useposix=true
978 : set useopcode=false in your hint file to disable the Opcode extension.
979 useopcode=true
980 : set usemultiplicity on the Configure command line to enable multiplicity.
981 : set usesocks on the Configure command line to enable socks.
982 : set usethreads on the Configure command line to enable threads.
983 : List of libraries we want.
984 : If anyone needs -lnet, put it in a hint file.
985 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
986 libswanted="$libswanted dld ld sun m c cposix posix"
987 libswanted="$libswanted ndir dir crypt sec"
988 libswanted="$libswanted ucb bsd BSD PW x"
989 : We probably want to search /usr/shlib before most other libraries.
990 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
991 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
992 glibpth="/usr/shlib $glibpth"
993 : Do not use vfork unless overridden by a hint file.
994 usevfork=false
995
996 : Find the basic shell for Bourne shell scripts
997 case "$sh" in
998 '')
999         case "$SYSTYPE" in
1000         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1001         *) xxx='/bin/sh';;
1002         esac
1003         if test -f "$xxx"; then
1004                 sh="$xxx"
1005         else
1006                 : Build up a list and do a single loop so we can 'break' out.
1007                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1008                 for xxx in sh bash ksh pdksh ash; do
1009                         for p in $pth; do
1010                                 try="$try ${p}/${xxx}"
1011                         done
1012                 done
1013                 for xxx in $try; do
1014                         if test -f "$xxx"; then
1015                                 sh="$xxx";
1016                                 break
1017                         elif test -f "$xxx.exe"; then
1018                                 sh="$xxx";
1019                                 break
1020                         fi
1021                 done
1022         fi
1023         ;;
1024 esac
1025
1026 case "$sh" in
1027 '')     cat <<EOM >&2
1028 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1029
1030 Usually it's in /bin/sh.  How did you even get this far?
1031 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1032 we'll try to straighten this all out.
1033 EOM
1034         exit 1
1035         ;;
1036 esac
1037
1038 : see if sh knows # comments
1039 if `$sh -c '#' >/dev/null 2>&1`; then
1040         shsharp=true
1041         spitshell=cat
1042         xcat=/bin/cat
1043         test -f $xcat || xcat=/usr/bin/cat
1044         echo "#!$xcat" >try
1045         $eunicefix try
1046         chmod +x try
1047         ./try > today
1048         if test -s today; then
1049                 sharpbang='#!'
1050         else
1051                 echo "#! $xcat" > try
1052                 $eunicefix try
1053                 chmod +x try
1054                 ./try > today
1055                 if test -s today; then
1056                         sharpbang='#! '
1057                 else
1058                         sharpbang=': use '
1059                 fi
1060         fi
1061 else
1062         echo " "
1063         echo "Your $sh doesn't grok # comments--I will strip them later on."
1064         shsharp=false
1065         cd ..
1066         echo "exec grep -v '^[  ]*#'" >spitshell
1067         chmod +x spitshell
1068         $eunicefix spitshell
1069         spitshell=`pwd`/spitshell
1070         cd UU
1071         echo "I presume that if # doesn't work, #! won't work either!"
1072         sharpbang=': use '
1073 fi
1074 rm -f try today
1075
1076 : figure out how to guarantee sh startup
1077 case "$startsh" in
1078 '') startsh=${sharpbang}${sh} ;;
1079 *)
1080 esac
1081 cat >try <<EOSS
1082 $startsh
1083 set abc
1084 test "$?abc" != 1
1085 EOSS
1086
1087 chmod +x try
1088 $eunicefix try
1089 if ./try; then
1090         : echo "Yup, it does."
1091 else
1092         echo "Hmm... '$startsh' does not guarantee sh startup..."
1093         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1094 fi
1095 rm -f try
1096
1097
1098 : Save command line options in file UU/cmdline.opt for later use in
1099 : generating config.sh.
1100 cat > cmdline.opt <<EOSH
1101 # Configure command line arguments.
1102 config_arg0='$0'
1103 config_args='$*'
1104 config_argc=$#
1105 EOSH
1106 argn=1
1107 for arg in "$@"; do
1108         cat >>cmdline.opt <<EOSH
1109 config_arg$argn='$arg'
1110 EOSH
1111         argn=`expr $argn + 1`
1112 done
1113
1114 : produce awk script to parse command line options
1115 cat >options.awk <<'EOF'
1116 BEGIN {
1117         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1118
1119         len = length(optstr);
1120         for (i = 1; i <= len; i++) {
1121                 c = substr(optstr, i, 1);
1122                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1123                 if (a == ":") {
1124                         arg[c] = 1;
1125                         i++;
1126                 }
1127                 opt[c] = 1;
1128         }
1129 }
1130 {
1131         expect = 0;
1132         str = $0;
1133         if (substr(str, 1, 1) != "-") {
1134                 printf("'%s'\n", str);
1135                 next;
1136         }
1137         len = length($0);
1138         for (i = 2; i <= len; i++) {
1139                 c = substr(str, i, 1);
1140                 if (!opt[c]) {
1141                         printf("-%s\n", substr(str, i));
1142                         next;
1143                 }
1144                 printf("-%s\n", c);
1145                 if (arg[c]) {
1146                         if (i < len)
1147                                 printf("'%s'\n", substr(str, i + 1));
1148                         else
1149                                 expect = 1;
1150                         next;
1151                 }
1152         }
1153 }
1154 END {
1155         if (expect)
1156                 print "?";
1157 }
1158 EOF
1159
1160 : process the command line options
1161 set X `for arg in "$@"; do echo "X$arg"; done |
1162         sed -e s/X// | awk -f options.awk`
1163 eval "set $*"
1164 shift
1165 rm -f options.awk
1166
1167 : set up default values
1168 fastread=''
1169 reuseval=false
1170 config_sh=''
1171 alldone=''
1172 error=''
1173 silent=''
1174 extractsh=''
1175 override=''
1176 knowitall=''
1177 rm -f optdef.sh posthint.sh
1178 cat >optdef.sh <<EOS
1179 $startsh
1180 EOS
1181
1182
1183 : option parsing
1184 while test $# -gt 0; do
1185         case "$1" in
1186         -d) shift; fastread=yes;;
1187         -e) shift; alldone=cont;;
1188         -f)
1189                 shift
1190                 cd ..
1191                 if test -r "$1"; then
1192                         config_sh="$1"
1193                 else
1194                         echo "$me: cannot read config file $1." >&2
1195                         error=true
1196                 fi
1197                 cd UU
1198                 shift;;
1199         -h) shift; error=true;;
1200         -r) shift; reuseval=true;;
1201         -s) shift; silent=true; realsilent=true;;
1202         -E) shift; alldone=exit;;
1203         -K) shift; knowitall=true;;
1204         -O) shift; override=true;;
1205         -S) shift; silent=true; extractsh=true;;
1206         -D)
1207                 shift
1208                 case "$1" in
1209                 *=)
1210                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1211                         echo "$me: ignoring -D $1" >&2
1212                         ;;
1213                 *=*) echo "$1" | \
1214                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1215                 *) echo "$1='define'" >> optdef.sh;;
1216                 esac
1217                 shift
1218                 ;;
1219         -U)
1220                 shift
1221                 case "$1" in
1222                 *=) echo "$1" >> optdef.sh;;
1223                 *=*)
1224                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1225                         echo "$me: ignoring -U $1" >&2
1226                         ;;
1227                 *) echo "$1='undef'" >> optdef.sh;;
1228                 esac
1229                 shift
1230                 ;;
1231         -A)
1232             shift
1233             xxx=''
1234             yyy="$1"
1235             zzz=''
1236             uuu=undef
1237             case "$yyy" in
1238             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1239                  case "$zzz" in
1240                  *:*) zzz='' ;;
1241                  *)   xxx=append
1242                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1243                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1244                  esac
1245                  ;;
1246             esac
1247             case "$xxx" in
1248             '')  case "$yyy" in
1249                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1250                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1251                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1252                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1253                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1254                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1255                  esac
1256                  ;;       
1257             esac
1258             case "$xxx" in
1259             append)
1260                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1261             clear)
1262                 echo "$yyy=''"                  >> posthint.sh ;;
1263             define)
1264                 case "$zzz" in
1265                 '') zzz=define ;;
1266                 esac
1267                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1268             eval)
1269                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1270             prepend)
1271                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1272             undef)
1273                 case "$zzz" in
1274                 '') zzz="$uuu" ;;
1275                 esac
1276                 echo "$yyy=$zzz"                >> posthint.sh ;;
1277             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1278             esac
1279             ;;
1280         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1281             exit 0;;
1282         --) break;;
1283         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1284         *) break;;
1285         esac
1286 done
1287
1288 case "$error" in
1289 true)
1290         cat >&2 <<EOM
1291 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1292                  [-U symbol] [-U symbol=] [-A command:symbol...]
1293   -d : use defaults for all answers.
1294   -e : go on without questioning past the production of config.sh.
1295   -f : specify an alternate default configuration file.
1296   -h : print this help message and exit (with an error status).
1297   -r : reuse C symbols value if possible (skips costly nm extraction).
1298   -s : silent mode, only echoes questions and essential information.
1299   -D : define symbol to have some value:
1300          -D symbol         symbol gets the value 'define'
1301          -D symbol=value   symbol gets the value 'value'
1302   -E : stop at the end of questions, after having produced config.sh.
1303   -K : do not use unless you know what you are doing.
1304   -O : let -D and -U override definitions from loaded configuration file.
1305   -S : perform variable substitutions on all .SH files (can mix with -f)
1306   -U : undefine symbol:
1307          -U symbol    symbol gets the value 'undef'
1308          -U symbol=   symbol gets completely empty
1309   -A : manipulate symbol after the platform specific hints have been applied:
1310          -A symbol=value                append " "value to symbol
1311          -A append:symbol=value         append value to symbol
1312          -A define:symbol=value         define symbol to have value
1313          -A clear:symbol                define symbol to be ''
1314          -A define:symbol               define symbol to be 'define'
1315          -A eval:symbol=value           define symbol to be eval of value
1316          -A prepend:symbol=value        prepend value to symbol
1317          -A undef:symbol                define symbol to be 'undef'
1318          -A undef:symbol=               define symbol to be ''
1319   -V : print version number and exit (with a zero status).
1320 EOM
1321         exit 1
1322         ;;
1323 esac
1324
1325 : Sanity checks
1326 case "$fastread$alldone" in
1327 yescont|yesexit) ;;
1328 *)
1329         if test ! -t 0; then
1330                 echo "Say 'sh Configure', not 'sh <Configure'"
1331                 exit 1
1332         fi
1333         ;;
1334 esac
1335
1336 exec 4>&1
1337 case "$silent" in
1338 true) exec 1>/dev/null;;
1339 esac
1340
1341 : run the defines and the undefines, if any, but leave the file out there...
1342 touch optdef.sh
1343 . ./optdef.sh
1344 : create the posthint manipulation script and leave the file out there...
1345 touch posthint.sh
1346
1347 : set package name
1348 package=perl5
1349 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1350 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1351 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1352 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1353 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1354 esac
1355
1356 : Some greps do not return status, grrr.
1357 echo "grimblepritz" >grimble
1358 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1359         contains=contains
1360 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1361         contains=grep
1362 else
1363         contains=contains
1364 fi
1365 rm -f grimble
1366 : the following should work in any shell
1367 case "$contains" in
1368 contains*)
1369         echo " "
1370         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1371         cat >contains <<'EOSS'
1372 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1373 EOSS
1374 chmod +x contains
1375 esac
1376
1377 : Find the path to the source tree
1378 case "$src" in
1379 '') case "$0" in
1380     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1381          case "$src" in
1382          /*)    ;;
1383          *)     src=`cd ../$src && pwd` ;;
1384          esac
1385          ;;
1386     *)   src='.';;
1387     esac;;
1388 esac
1389 case "$src" in
1390 '')     src=/
1391         rsrc=/
1392         ;;
1393 /*) rsrc="$src";;
1394 *) rsrc="../$src";;
1395 esac
1396 if test -f $rsrc/Configure && \
1397         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1398 then
1399    : found it, so we are ok.
1400 else
1401         rsrc=''
1402         for src in . .. ../.. ../../.. ../../../..; do
1403                 if test -f ../$src/Configure && \
1404                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1405                 then
1406                         rsrc=../$src
1407                         break
1408                 fi
1409         done
1410 fi
1411 case "$rsrc" in
1412 '')
1413         cat <<EOM >&4
1414
1415 Sorry, I can't seem to locate the source dir for $package.  Please start
1416 Configure with an explicit path -- i.e. /some/path/Configure.
1417
1418 EOM
1419         exit 1
1420         ;;
1421 ../.)   rsrc='..';;
1422 *)
1423         echo " "
1424         echo "Sources for $package found in \"$src\"." >&4
1425         ;;
1426 esac
1427
1428 : script used to extract .SH files with variable substitutions
1429 cat >extract <<'EOS'
1430 CONFIGDOTSH=true
1431 echo "Doing variable substitutions on .SH files..."
1432 if test -f $src/MANIFEST; then
1433         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1434 else
1435         echo "(Looking for .SH files under the source directory.)"
1436         set x `(cd $src; find . -name "*.SH" -print)`
1437 fi
1438 shift
1439 case $# in
1440 0) set x `(cd $src; echo *.SH)`; shift;;
1441 esac
1442 if test ! -f $src/$1; then
1443         shift
1444 fi
1445 mkdir_p='
1446 name=$1;
1447 create="";
1448 while test $name; do
1449         if test ! -d "$name"; then
1450                 create="$name $create";
1451                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1452                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1453         else
1454                 name="";
1455         fi;
1456 done;
1457 for file in $create; do
1458         mkdir $file;
1459 done
1460 '
1461 for file in $*; do
1462         case "$src" in
1463         ".")
1464                 case "$file" in
1465                 */*)
1466                         dir=`expr X$file : 'X\(.*\)/'`
1467                         file=`expr X$file : 'X.*/\(.*\)'`
1468                         (cd $dir && . ./$file)
1469                         ;;
1470                 *)
1471                         . ./$file
1472                         ;;
1473                 esac
1474                 ;;
1475         *)
1476                 case "$file" in
1477                 */*)
1478                         dir=`expr X$file : 'X\(.*\)/'`
1479                         file=`expr X$file : 'X.*/\(.*\)'`
1480                         (set x $dir; shift; eval $mkdir_p)
1481                         sh <$src/$dir/$file
1482                         ;;
1483                 *)
1484                         sh <$src/$file
1485                         ;;
1486                 esac
1487                 ;;
1488         esac
1489 done
1490 if test -f $src/config_h.SH; then
1491         if test ! -f config.h; then
1492         : oops, they left it out of MANIFEST, probably, so do it anyway.
1493         . $src/config_h.SH
1494         fi
1495 fi
1496 EOS
1497
1498 : extract files and exit if asked to do so
1499 case "$extractsh" in
1500 true)
1501         case "$realsilent" in
1502         true) ;;
1503         *) exec 1>&4;;
1504         esac
1505         case "$config_sh" in
1506         '') config_sh='config.sh';;
1507         esac
1508         echo " "
1509         echo "Fetching answers from $config_sh..."
1510         cd ..
1511         . $config_sh
1512         test "$override" && . ./optdef.sh
1513         echo " "
1514         . UU/extract
1515         rm -rf UU
1516         echo "Done."
1517         exit 0
1518         ;;
1519 esac
1520
1521 : Eunice requires " " instead of "", can you believe it
1522 echo " "
1523 : Here we go...
1524 echo "Beginning of configuration questions for $package."
1525
1526 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1527
1528 : first determine how to suppress newline on echo command
1529 echo " "
1530 echo "Checking echo to see how to suppress newlines..."
1531 (echo "hi there\c" ; echo " ") >.echotmp
1532 if $contains c .echotmp >/dev/null 2>&1 ; then
1533         echo "...using -n."
1534         n='-n'
1535         c=''
1536 else
1537         cat <<'EOM'
1538 ...using \c
1539 EOM
1540         n=''
1541         c='\c'
1542 fi
1543 echo $n "The star should be here-->$c"
1544 echo '*'
1545 rm -f .echotmp
1546
1547 : Now test for existence of everything in MANIFEST
1548 echo " "
1549 if test -f $rsrc/MANIFEST; then
1550         echo "First let's make sure your kit is complete.  Checking..." >&4
1551         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1552         rm -f missing
1553         tmppwd=`pwd`
1554         for filelist in x??; do
1555                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1556         done
1557         if test -s missing; then
1558                 cat missing >&4
1559                 cat >&4 <<'EOM'
1560
1561 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1562
1563 You have the option of continuing the configuration process, despite the
1564 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1565 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1566 and contact the author (perlbug@perl.com).
1567
1568 EOM
1569                 echo $n "Continue? [n] $c" >&4
1570                 read ans
1571                 case "$ans" in
1572                 y*)
1573                         echo "Continuing..." >&4
1574                         rm -f missing
1575                         ;;
1576                 *)
1577                         echo "ABORTING..." >&4
1578                         kill $$
1579                         ;;
1580                 esac
1581         else
1582                 echo "Looks good..."
1583         fi
1584 else
1585         echo "There is no MANIFEST file.  I hope your kit is complete !"
1586 fi
1587 rm -f missing x??
1588
1589 echo " "
1590 : Find the appropriate value for a newline for tr
1591 if test -n "$DJGPP"; then
1592        trnl='\012'
1593 fi
1594 if test X"$trnl" = X; then
1595         case "`echo foo|tr '\n' x 2>/dev/null`" in
1596         foox) trnl='\n' ;;
1597         esac
1598 fi
1599 if test X"$trnl" = X; then
1600         case "`echo foo|tr '\012' x 2>/dev/null`" in
1601         foox) trnl='\012' ;;
1602         esac
1603 fi
1604 if test X"$trnl" = X; then
1605         cat <<EOM >&2
1606
1607 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1608
1609 EOM
1610         exit 1
1611 fi
1612
1613 : compute the number of columns on the terminal for proper question formatting
1614 case "$COLUMNS" in
1615 '') COLUMNS='80';;
1616 esac
1617
1618 : set up the echo used in my read
1619 myecho="case \"\$xxxm\" in
1620 '') echo $n \"\$rp $c\" >&4;;
1621 *) case \"\$rp\" in
1622         '') echo $n \"[\$xxxm] $c\";;
1623         *)
1624                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1625                         echo \"\$rp\" >&4
1626                         echo $n \"[\$xxxm] $c\" >&4
1627                 else
1628                         echo $n \"\$rp [\$xxxm] $c\" >&4
1629                 fi
1630                 ;;
1631         esac;;
1632 esac"
1633
1634 : now set up to do reads with possible shell escape and default assignment
1635 cat <<EOSC >myread
1636 $startsh
1637 xxxm=\$dflt
1638 $myecho
1639 ans='!'
1640 case "\$fastread" in
1641 yes) case "\$dflt" in
1642         '') ;;
1643         *) ans='';
1644                 case "\$silent-\$rp" in
1645                 true-) ;;
1646                 *) echo " " >&4;;
1647                 esac;;
1648         esac;;
1649 *) case "\$silent" in
1650         true) case "\$rp" in
1651                 '') ans='';;
1652                 esac;;
1653         esac;;
1654 esac
1655 while expr "X\$ans" : "X!" >/dev/null; do
1656         read answ
1657         set x \$xxxm
1658         shift
1659         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1660         case  "\$answ" in
1661         "!")
1662                 sh 1>&4
1663                 echo " "
1664                 $myecho
1665                 ;;
1666         !*)
1667                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1668                 shift
1669                 sh 1>&4 -c "\$*"
1670                 echo " "
1671                 $myecho
1672                 ;;
1673         "\$ans")
1674                 case "\$ans" in
1675                 \\&*)
1676                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1677                         shift
1678                         case "\$1" in
1679                         -d)
1680                                 fastread=yes
1681                                 echo "(OK, I'll run with -d after this question.)" >&4
1682                                 ;;
1683                         -*)
1684                                 echo "*** Sorry, \$1 not supported yet." >&4
1685                                 ;;
1686                         esac
1687                         $myecho
1688                         ans=!
1689                         ;;
1690                 esac;;
1691         *)
1692                 case "\$aok" in
1693                 y)
1694                         echo "*** Substitution done -- please confirm."
1695                         xxxm="\$ans"
1696                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1697                         xxxm="\$ans"
1698                         ans=!
1699                         ;;
1700                 *)
1701                         echo "*** Error -- try again."
1702                         ans=!
1703                         ;;
1704                 esac
1705                 $myecho
1706                 ;;
1707         esac
1708         case "\$ans\$xxxm\$nostick" in
1709         '')
1710                 ans=!
1711                 $myecho
1712                 ;;
1713         esac
1714 done
1715 case "\$ans" in
1716 '') ans="\$xxxm";;
1717 esac
1718 EOSC
1719
1720 : create .config dir to save info across Configure sessions
1721 test -d ../.config || mkdir ../.config
1722 cat >../.config/README <<EOF
1723 This directory created by Configure to save information that should
1724 persist across sessions for $package.
1725
1726 You may safely delete it if you wish.
1727 EOF
1728
1729 : general instructions
1730 needman=true
1731 firsttime=true
1732 user=`(logname) 2>/dev/null`
1733 case "$user" in
1734 '') user=`whoami 2>&1`;;
1735 esac
1736 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1737         firsttime=false
1738         echo " "
1739         rp='Would you like to see the instructions?'
1740         dflt=n
1741         . ./myread
1742         case "$ans" in
1743         [yY]*) ;;
1744         *) needman=false;;
1745         esac
1746 fi
1747 if $needman; then
1748         cat <<EOH
1749
1750 This installation shell script will examine your system and ask you questions
1751 to determine how the perl5 package should be installed. If you get
1752 stuck on a question, you may use a ! shell escape to start a subshell or
1753 execute a command.  Many of the questions will have default answers in square
1754 brackets; typing carriage return will give you the default.
1755
1756 On some of the questions which ask for file or directory names you are allowed
1757 to use the ~name construct to specify the login directory belonging to "name",
1758 even if you don't have a shell which knows about that.  Questions where this is
1759 allowed will be marked "(~name ok)".
1760
1761 EOH
1762         rp=''
1763         dflt='Type carriage return to continue'
1764         . ./myread
1765         cat <<'EOH'
1766
1767 The prompter used in this script allows you to use shell variables and
1768 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1769 in the default answer, as if the default line was a set of arguments given to a
1770 script shell.  This means you may also use $* to repeat the whole default line,
1771 so you do not have to re-type everything to add something to the default.
1772
1773 Everytime there is a substitution, you will have to confirm.  If there is an
1774 error (e.g. an unmatched backtick), the default answer will remain unchanged
1775 and you will be prompted again.
1776
1777 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1778 the questions and use the computed defaults (or the previous answers if there
1779 was already a config.sh file). Type 'Configure -h' for a list of options.
1780 You may also start interactively and then answer '& -d' at any prompt to turn
1781 on the non-interactive behaviour for the remainder of the execution.
1782
1783 EOH
1784         . ./myread
1785         cat <<EOH
1786
1787 Much effort has been expended to ensure that this shell script will run on any
1788 Unix system.  If despite that it blows up on yours, your best bet is to edit
1789 Configure and run it again.  If you can't run Configure for some reason,
1790 you'll have to generate a config.sh file by hand.  Whatever problems you
1791 have, let me (perlbug@perl.com) know how I blew it.
1792
1793 This installation script affects things in two ways:
1794
1795 1) it may do direct variable substitutions on some of the files included
1796    in this kit.
1797 2) it builds a config.h file for inclusion in C programs.  You may edit
1798    any of these files as the need arises after running this script.
1799
1800 If you make a mistake on a question, there is no easy way to back up to it
1801 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1802 files.  Configure will offer to let you do this before it runs the SH files.
1803
1804 EOH
1805         dflt='Type carriage return to continue'
1806         . ./myread
1807         case "$firsttime" in
1808         true) echo $user >>../.config/instruct;;
1809         esac
1810 fi
1811
1812 : find out where common programs are
1813 echo " "
1814 echo "Locating common programs..." >&4
1815 cat <<EOSC >loc
1816 $startsh
1817 case \$# in
1818 0) exit 1;;
1819 esac
1820 thing=\$1
1821 shift
1822 dflt=\$1
1823 shift
1824 for dir in \$*; do
1825         case "\$thing" in
1826         .)
1827         if test -d \$dir/\$thing; then
1828                 echo \$dir
1829                 exit 0
1830         fi
1831         ;;
1832         *)
1833         for thisthing in \$dir/\$thing; do
1834                 : just loop through to pick last item
1835         done
1836         if test -f \$thisthing; then
1837                 echo \$thisthing
1838                 exit 0
1839         elif test -f \$dir/\$thing.exe; then
1840                 if test -n "$DJGPP"; then
1841                         echo \$dir/\$thing.exe
1842                 else
1843                         : on Eunice apparently
1844                         echo \$dir/\$thing
1845                 fi
1846                 exit 0
1847         fi
1848         ;;
1849         esac
1850 done
1851 echo \$dflt
1852 exit 1
1853 EOSC
1854 chmod +x loc
1855 $eunicefix loc
1856 loclist="
1857 awk
1858 cat
1859 comm
1860 cp
1861 echo
1862 expr
1863 grep
1864 ls
1865 make
1866 mkdir
1867 rm
1868 sed
1869 sort
1870 touch
1871 tr
1872 uniq
1873 "
1874 trylist="
1875 Mcc
1876 ar
1877 byacc
1878 cpp
1879 csh
1880 date
1881 egrep
1882 gzip
1883 less
1884 ln
1885 more
1886 nm
1887 nroff
1888 pg
1889 test
1890 uname
1891 zip
1892 "
1893 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1894 pth="$pth /lib /usr/lib"
1895 for file in $loclist; do
1896         eval xxx=\$$file
1897         case "$xxx" in
1898         /*|?:[\\/]*)
1899                 if test -f "$xxx"; then
1900                         : ok
1901                 else
1902                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1903                         xxx=`./loc $file $file $pth`
1904                 fi
1905                 ;;
1906         '') xxx=`./loc $file $file $pth`;;
1907         *) xxx=`./loc $xxx $xxx $pth`;;
1908         esac
1909         eval $file=$xxx
1910         eval _$file=$xxx
1911         case "$xxx" in
1912         /*)
1913                 echo $file is in $xxx.
1914                 ;;
1915         ?:[\\/]*)
1916                 echo $file is in $xxx.
1917                 ;;
1918         *)
1919                 echo "I don't know where '$file' is, and my life depends on it." >&4
1920                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1921                 exit 1
1922                 ;;
1923         esac
1924 done
1925 echo " "
1926 echo "Don't worry if any of the following aren't found..."
1927 say=offhand
1928 for file in $trylist; do
1929         eval xxx=\$$file
1930         case "$xxx" in
1931         /*|?:[\\/]*)
1932                 if test -f "$xxx"; then
1933                         : ok
1934                 else
1935                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1936                         xxx=`./loc $file $file $pth`
1937                 fi
1938                 ;;
1939         '') xxx=`./loc $file $file $pth`;;
1940         *) xxx=`./loc $xxx $xxx $pth`;;
1941         esac
1942         eval $file=$xxx
1943         eval _$file=$xxx
1944         case "$xxx" in
1945         /*)
1946                 echo $file is in $xxx.
1947                 ;;
1948         ?:[\\/]*)
1949                 echo $file is in $xxx.
1950                 ;;
1951         *)
1952                 echo "I don't see $file out there, $say."
1953                 say=either
1954                 ;;
1955         esac
1956 done
1957 case "$egrep" in
1958 egrep)
1959         echo "Substituting grep for egrep."
1960         egrep=$grep
1961         ;;
1962 esac
1963 case "$ln" in
1964 ln)
1965         echo "Substituting cp for ln."
1966         ln=$cp
1967         ;;
1968 esac
1969 case "$test" in
1970 test)
1971         echo "Hopefully test is built into your sh."
1972         ;;
1973 *)
1974         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1975                 echo "Using the test built into your sh."
1976                 test=test
1977                 _test=test
1978         fi
1979         ;;
1980 esac
1981 case "$echo" in
1982 echo)
1983         echo "Hopefully echo is built into your sh."
1984         ;;
1985 '') ;;
1986 *)
1987         echo " "
1988 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1989         $echo $n "hi there$c" >foo1
1990         echo $n "hi there$c" >foo2
1991         if cmp foo1 foo2 >/dev/null 2>&1; then
1992                 echo "They are compatible.  In fact, they may be identical."
1993         else
1994                 case "$n" in
1995                 '-n') n='' c='\c';;
1996                 *) n='-n' c='';;
1997                 esac
1998                 cat <<FOO
1999 They are not compatible!  You are probably running ksh on a non-USG system.
2000 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2001 have echo built in and we may have to run some Bourne shell scripts.  That
2002 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2003
2004 FOO
2005                 $echo $n "The star should be here-->$c"
2006                 $echo "*"
2007         fi
2008         $rm -f foo1 foo2
2009         ;;
2010 esac
2011
2012 : determine whether symbolic links are supported
2013 echo " "
2014 $touch blurfl
2015 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2016         echo "Symbolic links are supported." >&4
2017         lns="$ln -s"
2018 else
2019         echo "Symbolic links are NOT supported." >&4
2020         lns="$ln"
2021 fi
2022 $rm -f blurfl sym
2023
2024 : see whether [:lower:] and [:upper:] are supported character classes
2025 echo " "
2026 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2027 ABYZ)
2028         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2029         up='[:upper:]'
2030         low='[:lower:]'
2031         ;;
2032 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2033         # (0xc9 and 0xd1), therefore that is a nice testing point.
2034         if test "X$up" = X -o "X$low" = X; then
2035             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2036             ij) up='[A-Z]'
2037                 low='[a-z]'
2038                 ;;
2039             esac
2040         fi
2041         if test "X$up" = X -o "X$low" = X; then
2042             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2043             ij) up='A-Z'
2044                 low='a-z'
2045                 ;;
2046             esac
2047         fi
2048         if test "X$up" = X -o "X$low" = X; then
2049             case "`echo IJ | od -x 2>/dev/null`" in
2050             *C9D1*|*c9d1*)
2051                 echo "Hey, this might be EBCDIC." >&4
2052                 if test "X$up" = X -o "X$low" = X; then
2053                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2054                     ij) up='[A-IJ-RS-Z]'
2055                         low='[a-ij-rs-z]'
2056                         ;;
2057                     esac
2058                 fi
2059                 if test "X$up" = X -o "X$low" = X; then
2060                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2061                     ij) up='A-IJ-RS-Z'
2062                         low='a-ij-rs-z'
2063                         ;;
2064                     esac
2065                 fi
2066                 ;;
2067             esac
2068         fi
2069 esac
2070 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2071 ij)
2072     echo "Using $up and $low to convert case." >&4
2073     ;;
2074 *)
2075     echo "I don't know how to translate letters from upper to lower case." >&4
2076     echo "Your tr is not acting any way I know of." >&4
2077     exit 1
2078     ;;
2079 esac
2080 : set up the translation script tr, must be called with ./tr of course
2081 cat >tr <<EOSC
2082 $startsh
2083 case "\$1\$2" in
2084 '[A-Z][a-z]') exec $tr '$up' '$low';;
2085 '[a-z][A-Z]') exec $tr '$low' '$up';;
2086 esac
2087 exec $tr "\$@"
2088 EOSC
2089 chmod +x tr
2090 $eunicefix tr
2091
2092 : Try to determine whether config.sh was made on this system
2093 case "$config_sh" in
2094 '')
2095 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2096 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2097 # because the A-Z/a-z are not consecutive.
2098 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2099         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2100 newmyuname="$myuname"
2101 dflt=n
2102 case "$knowitall" in
2103 '')
2104         if test -f ../config.sh; then
2105                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2106                         eval "`grep myuname= ../config.sh`"
2107                 fi
2108                 if test "X$myuname" = "X$newmyuname"; then
2109                         dflt=y
2110                 fi
2111         fi
2112         ;;
2113 *) dflt=y;;
2114 esac
2115
2116 : Get old answers from old config file if Configure was run on the
2117 : same system, otherwise use the hints.
2118 hint=default
2119 cd ..
2120 if test -f config.sh; then
2121         echo " "
2122         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2123         . UU/myread
2124         case "$ans" in
2125         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2126         *)  echo "Fetching default answers from your old config.sh file..." >&4
2127                 tmp_n="$n"
2128                 tmp_c="$c"
2129                 tmp_sh="$sh"
2130                 . ./config.sh
2131                 cp config.sh UU
2132                 n="$tmp_n"
2133                 c="$tmp_c"
2134                 : Older versions did not always set $sh.  Catch re-use of such
2135                 : an old config.sh.
2136                 case "$sh" in
2137                 '') sh="$tmp_sh" ;;
2138                 esac
2139                 hint=previous
2140                 ;;
2141         esac
2142 fi
2143 if test ! -f config.sh; then
2144         $cat <<EOM
2145
2146 First time through, eh?  I have some defaults handy for some systems
2147 that need some extra help getting the Configure answers right:
2148
2149 EOM
2150         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2151         dflt=''
2152         : Half the following guesses are probably wrong... If you have better
2153         : tests or hints, please send them to perlbug@perl.com
2154         : The metaconfig authors would also appreciate a copy...
2155         $test -f /irix && osname=irix
2156         $test -f /xenix && osname=sco_xenix
2157         $test -f /dynix && osname=dynix
2158         $test -f /dnix && osname=dnix
2159         $test -f /lynx.os && osname=lynxos
2160         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2161         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2162         $test -f /bin/mips && /bin/mips && osname=mips
2163         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2164                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2165         $test -d /usr/apollo/bin && osname=apollo
2166         $test -f /etc/saf/_sactab && osname=svr4
2167         $test -d /usr/include/minix && osname=minix
2168         if $test -d /MachTen -o -d /MachTen_Folder; then
2169                 osname=machten
2170                 if $test -x /sbin/version; then
2171                         osvers=`/sbin/version | $awk '{print $2}' |
2172                         $sed -e 's/[A-Za-z]$//'`
2173                 elif $test -x /usr/etc/version; then
2174                         osvers=`/usr/etc/version | $awk '{print $2}' |
2175                         $sed -e 's/[A-Za-z]$//'`
2176                 else
2177                         osvers="$2.$3"
2178                 fi
2179         fi
2180        $test -f /sys/posix.dll &&
2181                $test -f /usr/bin/what &&
2182                set X `/usr/bin/what /sys/posix.dll` &&
2183                $test "$3" = UWIN &&
2184                osname=uwin &&
2185                osvers="$5"
2186         if $test -f $uname; then
2187                 set X $myuname
2188                 shift
2189
2190                 case "$5" in
2191                 fps*) osname=fps ;;
2192                 mips*)
2193                         case "$4" in
2194                         umips) osname=umips ;;
2195                         *) osname=mips ;;
2196                         esac;;
2197                 [23]100) osname=mips ;;
2198                 next*) osname=next ;;
2199                 i386*)
2200                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2201                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2202                                 osname='sco'
2203                                 osvers=$tmp
2204                         elif $test -f /etc/kconfig; then
2205                                 osname=isc
2206                                 if test "$lns" = "$ln -s"; then
2207                                         osvers=4
2208                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2209                                         osvers=3
2210                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2211                                         osvers=2
2212                                 fi
2213                         fi
2214                         tmp=''
2215                         ;;
2216                 pc*)
2217                         if test -n "$DJGPP"; then
2218                                 osname=dos
2219                                 osvers=djgpp
2220                         fi
2221                         ;;
2222                 esac
2223
2224                 case "$1" in
2225                 aix) osname=aix
2226                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2227                         case "$tmp" in
2228                         'not found') osvers="$4"."$3" ;;
2229                         '<3240'|'<>3240') osvers=3.2.0 ;;
2230                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2231                         '=3250'|'>3250') osvers=3.2.5 ;;
2232                         *) osvers=$tmp;;
2233                         esac
2234                         ;;
2235                 *dc.osx) osname=dcosx
2236                         osvers="$3"
2237                         ;;
2238                 dnix) osname=dnix
2239                         osvers="$3"
2240                         ;;
2241                 domainos) osname=apollo
2242                         osvers="$3"
2243                         ;;
2244                 dgux) osname=dgux 
2245                         osvers="$3"
2246                         ;;
2247                 dynixptx*) osname=dynixptx
2248                         osvers=`echo "$4"|sed 's/^v//'`
2249                         ;;
2250                 freebsd) osname=freebsd 
2251                         osvers="$3" ;;
2252                 genix) osname=genix ;;
2253                 hp*) osname=hpux 
2254                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2255                         ;;
2256                 irix*) osname=irix
2257                         case "$3" in
2258                         4*) osvers=4 ;;
2259                         5*) osvers=5 ;;
2260                         *)      osvers="$3" ;;
2261                         esac
2262                         ;;
2263                 linux) osname=linux
2264                         case "$3" in
2265                         *)      osvers="$3" ;;
2266                         esac
2267                         ;;
2268                 MiNT) osname=mint
2269                         ;;
2270                 netbsd*) osname=netbsd
2271                         osvers="$3"
2272                         ;;
2273                 news-os) osvers="$3"
2274                         case "$3" in
2275                         4*) osname=newsos4 ;;
2276                         *) osname=newsos ;;
2277                         esac
2278                         ;;
2279                 bsd386) osname=bsd386
2280                         osvers=`$uname -r`
2281                         ;;
2282                 POSIX-BC | posix-bc ) osname=posix-bc
2283                         osvers="$3"
2284                         ;;
2285                 powerux | power_ux | powermax_os | powermaxos | \
2286                 powerunix | power_unix) osname=powerux
2287                         osvers="$3"
2288                         ;;
2289                 next*) osname=next ;;
2290                 solaris) osname=solaris
2291                         case "$3" in
2292                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2293                         *)      osvers="$3" ;;
2294                         esac
2295                         ;;
2296                 sunos) osname=sunos
2297                         case "$3" in
2298                         5*) osname=solaris
2299                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2300                         *)      osvers="$3" ;;
2301                         esac
2302                         ;;
2303                 titanos) osname=titanos
2304                         case "$3" in
2305                         1*) osvers=1 ;;
2306                         2*) osvers=2 ;;
2307                         3*) osvers=3 ;;
2308                         4*) osvers=4 ;;
2309                         *)      osvers="$3" ;;
2310                         esac
2311                         ;;
2312                 ultrix) osname=ultrix
2313                         osvers="$3"
2314                         ;;
2315                 osf1|mls+)      case "$5" in
2316                                 alpha)
2317                                         osname=dec_osf
2318                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2319                                         ;;
2320                         hp*)    osname=hp_osf1  ;;
2321                         mips)   osname=mips_osf1 ;;
2322                         esac
2323                         ;;
2324                 unixware) osname=svr5
2325                         osvers="$4"
2326                         ;;
2327                 uts) osname=uts
2328                         osvers="$3"
2329                         ;;
2330                 qnx) osname=qnx
2331                         osvers="$4"
2332                         ;;
2333                 $2) case "$osname" in
2334                         *isc*) ;;
2335                         *freebsd*) ;;
2336                         svr*)
2337                                 : svr4.x or possibly later
2338                                 case "svr$3" in 
2339                                 ${osname}*)
2340                                         osname=svr$3
2341                                         osvers=$4
2342                                         ;;
2343                                 esac
2344                                 case "$osname" in
2345                                 svr4.0)
2346                                         : Check for ESIX
2347                                         if test -f /stand/boot ; then
2348                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2349                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2350                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2351                                                         if test -n "$isesix"; then
2352                                                                 osname=esix4
2353                                                         fi
2354                                                 fi
2355                                         fi
2356                                         ;;
2357                                 esac
2358                                 ;;
2359                         *)      if test -f /etc/systemid; then
2360                                         osname=sco
2361                                         set `echo $3 | $sed 's/\./ /g'` $4
2362                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2363                                                 osvers=$1.$2.$3
2364                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2365                                                 osvers=$1.$2
2366                                         elif $test -f $src/hints/sco_$1.sh; then
2367                                                 osvers=$1
2368                                         fi
2369                                 else
2370                                         case "$osname" in
2371                                         '') : Still unknown.  Probably a generic Sys V.
2372                                                 osname="sysv"
2373                                                 osvers="$3"
2374                                                 ;;
2375                                         esac
2376                                 fi
2377                                 ;;
2378                         esac
2379                         ;;
2380                 *)      case "$osname" in
2381                         '') : Still unknown.  Probably a generic BSD.
2382                                 osname="$1"
2383                                 osvers="$3"
2384                                 ;;
2385                         esac
2386                         ;;
2387                 esac
2388         else
2389                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2390                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2391                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2392                                 osname=news_os
2393                         fi
2394                         $rm -f UU/kernel.what
2395                 elif test -d c:/.; then
2396                         set X $myuname
2397                         osname=os2
2398                         osvers="$5"
2399                 fi
2400         fi
2401         
2402         : Now look for a hint file osname_osvers, unless one has been
2403         : specified already.
2404         case "$hintfile" in
2405         ''|' ')
2406                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2407                 : Also try without trailing minor version numbers.
2408                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2409                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2410                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2411                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2412                 case "$file" in
2413                 '') dflt=none ;;
2414                 *)  case "$osvers" in
2415                         '') dflt=$file
2416                                 ;;
2417                         *)  if $test -f $src/hints/$file.sh ; then
2418                                         dflt=$file
2419                                 elif $test -f $src/hints/$xfile.sh ; then
2420                                         dflt=$xfile
2421                                 elif $test -f $src/hints/$xxfile.sh ; then
2422                                         dflt=$xxfile
2423                                 elif $test -f $src/hints/$xxxfile.sh ; then
2424                                         dflt=$xxxfile
2425                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2426                                         dflt=$xxxxfile
2427                                 elif $test -f "$src/hints/${osname}.sh" ; then
2428                                         dflt="${osname}"
2429                                 else
2430                                         dflt=none
2431                                 fi
2432                                 ;;
2433                         esac
2434                         ;;
2435                 esac
2436                 if $test -f Policy.sh ; then
2437                         case "$dflt" in
2438                         *Policy*) ;;
2439                         none) dflt="Policy" ;;
2440                         *) dflt="Policy $dflt" ;;
2441                         esac
2442                 fi
2443                 ;;
2444         *)
2445                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2446                 ;;
2447         esac
2448
2449         if $test -f Policy.sh ; then
2450                 $cat <<EOM
2451
2452 There's also a Policy hint file available, which should make the
2453 site-specific (policy) questions easier to answer.
2454 EOM
2455
2456         fi
2457
2458         $cat <<EOM
2459
2460 You may give one or more space-separated answers, or "none" if appropriate.
2461 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2462 is a good thing.  DO NOT give a wrong version or a wrong OS.
2463
2464 EOM
2465
2466         rp="Which of these apply, if any?"
2467         . UU/myread
2468         tans=$ans
2469         for file in $tans; do
2470                 if $test X$file = XPolicy -a -f Policy.sh; then
2471                         . Policy.sh
2472                         $cat Policy.sh >> UU/config.sh
2473                 elif $test -f $src/hints/$file.sh; then
2474                         . $src/hints/$file.sh
2475                         $cat $src/hints/$file.sh >> UU/config.sh
2476                 elif $test X$tans = X -o X$tans = Xnone ; then
2477                         : nothing
2478                 else
2479                         : Give one chance to correct a possible typo.
2480                         echo "$file.sh does not exist"
2481                         dflt=$file
2482                         rp="hint to use instead?"
2483                         . UU/myread
2484                         for file in $ans; do
2485                                 if $test -f "$src/hints/$file.sh"; then
2486                                         . $src/hints/$file.sh
2487                                         $cat $src/hints/$file.sh >> UU/config.sh
2488                                 elif $test X$ans = X -o X$ans = Xnone ; then
2489                                         : nothing
2490                                 else
2491                                         echo "$file.sh does not exist -- ignored."
2492                                 fi
2493                         done
2494                 fi
2495         done
2496
2497         hint=recommended
2498         : Remember our hint file for later.
2499         if $test -f "$src/hints/$file.sh" ; then
2500                 hintfile="$file"
2501         else
2502                 hintfile=''
2503         fi
2504 fi
2505 cd UU
2506 ;;
2507 *)
2508         echo " "
2509         echo "Fetching default answers from $config_sh..." >&4
2510         tmp_n="$n"
2511         tmp_c="$c"
2512         cd ..
2513         cp $config_sh config.sh 2>/dev/null
2514         chmod +w config.sh
2515         . ./config.sh
2516         cd UU
2517         cp ../config.sh .
2518         n="$tmp_n"
2519         c="$tmp_c"
2520         hint=previous
2521         ;;
2522 esac
2523 test "$override" && . ./optdef.sh
2524 myuname="$newmyuname"
2525
2526 : Restore computed paths
2527 for file in $loclist $trylist; do
2528         eval $file="\$_$file"
2529 done
2530
2531 cat << EOM
2532
2533 Configure uses the operating system name and version to set some defaults.
2534 The default value is probably right if the name rings a bell. Otherwise,
2535 since spelling matters for me, either accept the default or answer "none"
2536 to leave it blank.
2537
2538 EOM
2539 case "$osname" in
2540         ''|' ')
2541                 case "$hintfile" in
2542                 ''|' '|none) dflt=none ;;
2543                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2544                 esac
2545                 ;;
2546         *) dflt="$osname" ;;
2547 esac
2548 rp="Operating system name?"
2549 . ./myread
2550 case "$ans" in
2551 none)  osname='' ;;
2552 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2553 esac
2554 echo " "
2555 case "$osvers" in
2556         ''|' ')
2557                 case "$hintfile" in
2558                 ''|' '|none) dflt=none ;;
2559                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2560                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2561                         case "$dflt" in
2562                         ''|' ') dflt=none ;;
2563                         esac
2564                         ;;
2565                 esac
2566                 ;;
2567         *) dflt="$osvers" ;;
2568 esac
2569 rp="Operating system version?"
2570 . ./myread
2571 case "$ans" in
2572 none)  osvers='' ;;
2573 *) osvers="$ans" ;;
2574 esac
2575
2576
2577 . ./posthint.sh
2578
2579 : who configured the system
2580 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2581 cf_by=`(logname) 2>/dev/null`
2582 case "$cf_by" in
2583 "")
2584         cf_by=`(whoami) 2>/dev/null`
2585         case "$cf_by" in
2586         "") cf_by=unknown ;;
2587         esac ;;
2588 esac
2589
2590 : set up the script used to warn in case of inconsistency
2591 cat <<EOS >whoa
2592 $startsh
2593 EOS
2594 cat <<'EOSC' >>whoa
2595 dflt=y
2596 echo " "
2597 echo "*** WHOA THERE!!! ***" >&4
2598 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2599 rp="    Keep the $hint value?"
2600 . ./myread
2601 case "$ans" in
2602 y) td=$was; tu=$was;;
2603 esac
2604 EOSC
2605
2606 : function used to set $1 to $val
2607 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2608 case "$val$was" in
2609 $define$undef) . ./whoa; eval "$var=\$td";;
2610 $undef$define) . ./whoa; eval "$var=\$tu";;
2611 *) eval "$var=$val";;
2612 esac'
2613
2614 cat <<EOM
2615
2616 Perl can be built to take advantage of threads, on some systems.
2617 To do so, Configure must be run with -Dusethreads.
2618
2619 Note that threading is a highly experimental feature, and
2620 some known race conditions still remain.  If you choose to try
2621 it, be very sure to not actually deploy it for production
2622 purposes.  README.threads has more details, and is required
2623 reading if you enable threads.
2624 EOM
2625 case "$usethreads" in
2626 $define|true|[yY]*)     dflt='y';;
2627 *) dflt='n';;
2628 esac
2629 rp='Build a threading Perl?'
2630 . ./myread
2631 case "$ans" in
2632 y|Y)    val="$define" ;;     
2633 *)      val="$undef" ;;
2634 esac
2635 set usethreads
2636 eval $setvar 
2637
2638 case "$d_oldpthreads" in
2639 '')     : Configure tests would be welcome here.  For now, assume undef.
2640         val="$undef" ;;
2641 *)      val="$d_oldpthreads" ;;
2642 esac
2643 set d_oldpthreads
2644 eval $setvar
2645
2646
2647 case "$usethreads" in
2648 "$define"|true|[yY]*)
2649 : Look for a hint-file generated 'call-back-unit'.  If the
2650 : user has specified that a threading perl is to be built,
2651 : we may need to set or change some other defaults.
2652         if $test -f usethreads.cbu; then
2653                 echo "Your platform has some specific hints for threaded builds, using them..."
2654                 . ./usethreads.cbu
2655         else
2656                 $cat <<EOM
2657 (Your platform doesn't have any specific hints for threaded builds.
2658  Assuming POSIX threads, then.)
2659 EOM
2660         fi
2661     ;;
2662 esac
2663
2664 cat <<EOM
2665
2666 Perl can be built so that multiple Perl interpreters can coexist
2667 within the same Perl executable.  To do so, Configure must be run with
2668 -Dusemultiplicity.
2669
2670 Normally you do not need this and you should answer no.
2671
2672 EOM
2673 case "$usemultiplicity" in
2674 $define|true|[yY]*)     dflt='y';;
2675 *) dflt='n';;
2676 esac
2677 rp='Build Perl for multiplicity?'
2678 . ./myread
2679 case "$ans" in
2680 y|Y)    val="$define" ;;     
2681 *)      val="$undef" ;;
2682 esac
2683 set usemultiplicity
2684 eval $setvar 
2685
2686 : determine where manual pages are on this system
2687 echo " "
2688 case "$sysman" in
2689 '') 
2690         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2691         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2692         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2693         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2694         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2695         sysman=`./loc . /usr/man/man1 $syspath`
2696         ;;
2697 esac
2698 if $test -d "$sysman"; then
2699         echo "System manual is in $sysman." >&4
2700 else
2701         echo "Could not find manual pages in source form." >&4
2702 fi
2703
2704 : see what memory models we can support
2705 case "$models" in
2706 '')
2707         $cat >pdp11.c <<'EOP'
2708 int main() {
2709 #ifdef pdp11
2710         exit(0);
2711 #else
2712         exit(1);
2713 #endif
2714 }
2715 EOP
2716         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2717         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2718                 dflt='unsplit split'
2719         else
2720                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2721                 case "$tans" in
2722                 X) dflt='none';;
2723                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2724                                 dflt='small'
2725                         else
2726                                 dflt=''
2727                         fi
2728                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2729                                 dflt="$dflt medium"
2730                         fi
2731                         if $test -d /lib/large || $test -d /usr/lib/large; then
2732                                 dflt="$dflt large"
2733                         fi
2734                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2735                                 dflt="$dflt huge"
2736                         fi
2737                 esac
2738         fi;;
2739 *) dflt="$models";;
2740 esac
2741 $cat <<EOM
2742  
2743 Some systems have different model sizes.  On most systems they are called
2744 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2745 split.  If your system doesn't support different memory models, say "none".
2746 If you wish to force everything to one memory model, say "none" here and
2747 put the appropriate flags later when it asks you for other cc and ld flags.
2748 Venix systems may wish to put "none" and let the compiler figure things out.
2749 (In the following question multiple model names should be space separated.)
2750
2751 The default for most systems is "none".
2752
2753 EOM
2754 rp="Which memory models are supported?"
2755 . ./myread
2756 models="$ans"
2757
2758 case "$models" in
2759 none)
2760         small=''
2761         medium=''
2762         large=''
2763         huge=''
2764         unsplit=''
2765         split=''
2766         ;;
2767 *split)
2768         case "$split" in
2769         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2770                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2771                         dflt='-i'
2772                 else
2773                         dflt='none'
2774                 fi;;
2775         *) dflt="$split";;
2776         esac
2777         rp="What flag indicates separate I and D space?"
2778         . ./myread
2779         tans="$ans"
2780         case "$tans" in
2781         none) tans='';;
2782         esac
2783         split="$tans"
2784         unsplit='';;
2785 *large*|*small*|*medium*|*huge*)
2786         case "$models" in
2787         *large*)
2788                 case "$large" in
2789                 '') dflt='-Ml';;
2790                 *) dflt="$large";;
2791                 esac
2792         rp="What flag indicates large model?"
2793         . ./myread
2794         tans="$ans"
2795         case "$tans" in
2796         none) tans='';
2797         esac
2798         large="$tans";;
2799         *) large='';;
2800         esac
2801         case "$models" in
2802         *huge*) case "$huge" in
2803                 '') dflt='-Mh';;
2804                 *) dflt="$huge";;
2805                 esac
2806                 rp="What flag indicates huge model?"
2807                 . ./myread
2808                 tans="$ans"
2809                 case "$tans" in
2810                 none) tans='';
2811                 esac
2812                 huge="$tans";;
2813         *) huge="$large";;
2814         esac
2815         case "$models" in
2816         *medium*) case "$medium" in
2817                 '') dflt='-Mm';;
2818                 *) dflt="$medium";;
2819                 esac
2820                 rp="What flag indicates medium model?"
2821                 . ./myread
2822                 tans="$ans"
2823                 case "$tans" in
2824                 none) tans='';
2825                 esac
2826                 medium="$tans";;
2827         *) medium="$large";;
2828         esac
2829         case "$models" in
2830         *small*) case "$small" in
2831                 '') dflt='none';;
2832                 *) dflt="$small";;
2833                 esac
2834                 rp="What flag indicates small model?"
2835                 . ./myread
2836                 tans="$ans"
2837                 case "$tans" in
2838                 none) tans='';
2839                 esac
2840                 small="$tans";;
2841         *) small='';;
2842         esac
2843         ;;
2844 *)
2845         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2846         ;;
2847 esac
2848 $rm -f pdp11.* pdp11
2849
2850 : make some quick guesses about what we are up against
2851 echo " "
2852 $echo $n "Hmm...  $c"
2853 echo exit 1 >bsd
2854 echo exit 1 >usg
2855 echo exit 1 >v7
2856 echo exit 1 >osf1
2857 echo exit 1 >eunice
2858 echo exit 1 >xenix
2859 echo exit 1 >venix
2860 echo exit 1 >os2
2861 d_bsd="$undef"
2862 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2863 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2864 then
2865         echo "Looks kind of like an OSF/1 system, but we'll see..."
2866         echo exit 0 >osf1
2867 elif test `echo abc | tr a-z A-Z` = Abc ; then
2868         xxx=`./loc addbib blurfl $pth`
2869         if $test -f $xxx; then
2870         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2871                 echo exit 0 >bsd
2872                 echo exit 0 >usg
2873         else
2874                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2875                         echo "Looks kind of like an extended USG system, but we'll see..."
2876                 else
2877                         echo "Looks kind of like a USG system, but we'll see..."
2878                 fi
2879                 echo exit 0 >usg
2880         fi
2881 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2882         echo "Looks kind of like a BSD system, but we'll see..."
2883         d_bsd="$define"
2884         echo exit 0 >bsd
2885 else
2886         echo "Looks kind of like a Version 7 system, but we'll see..."
2887         echo exit 0 >v7
2888 fi
2889 case "$eunicefix" in
2890 *unixtovms*)
2891         $cat <<'EOI'
2892 There is, however, a strange, musty smell in the air that reminds me of
2893 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2894 EOI
2895         echo exit 0 >eunice
2896         d_eunice="$define"
2897 : it so happens the Eunice I know will not run shell scripts in Unix format
2898         ;;
2899 *)
2900         echo " "
2901         echo "Congratulations.  You aren't running Eunice."
2902         d_eunice="$undef"
2903         ;;
2904 esac
2905 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2906 case "$p_" in
2907 :) ;;
2908 *)
2909         $cat <<'EOI'
2910 I have the feeling something is not exactly right, however...don't tell me...
2911 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2912 EOI
2913         echo exit 0 >os2
2914         ;;
2915 esac
2916 if test -f /xenix; then
2917         echo "Actually, this looks more like a XENIX system..."
2918         echo exit 0 >xenix
2919         d_xenix="$define"
2920 else
2921         echo " "
2922         echo "It's not Xenix..."
2923         d_xenix="$undef"
2924 fi
2925 chmod +x xenix
2926 $eunicefix xenix
2927 if test -f /venix; then
2928         echo "Actually, this looks more like a VENIX system..."
2929         echo exit 0 >venix
2930 else
2931         echo " "
2932         if ./xenix; then
2933                 : null
2934         else
2935                 echo "Nor is it Venix..."
2936         fi
2937 fi
2938 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2939 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2940 $rm -f foo
2941
2942 : see if we need a special compiler
2943 echo " "
2944 if ./usg; then
2945         case "$cc" in
2946         '') case "$Mcc" in
2947                 /*) dflt='Mcc';;
2948                 *) case "$large" in
2949                         -M*) dflt='cc';;
2950                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2951                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2952                                                 dflt='cc'
2953                                         else
2954                                                 dflt='cc -M'
2955                                         fi
2956                                 else
2957                                         dflt='cc'
2958                                 fi;;
2959                         esac;;
2960                 esac;;
2961         *)  dflt="$cc";;
2962         esac
2963         case "$dflt" in
2964         *M*)    $cat <<'EOM'
2965 On some older systems the default C compiler will not resolve multiple global
2966 references that happen to have the same name.  On some such systems the "Mcc"
2967 command may be used to force these to be resolved.  On other systems a "cc -M"
2968 command is required.  (Note that the -M flag on other systems indicates a
2969 memory model to use!) If you have the Gnu C compiler, you might wish to use
2970 that instead.
2971
2972 EOM
2973         ;;
2974         esac
2975         rp="Use which C compiler?"
2976         . ./myread
2977         cc="$ans"
2978 else
2979         case "$cc" in
2980         '') dflt=cc;;
2981         *) dflt="$cc";;
2982         esac
2983         rp="Use which C compiler?"
2984         . ./myread
2985         cc="$ans"
2986 fi
2987 : Look for a hint-file generated 'call-back-unit'.  Now that the
2988 : user has specified the compiler, we may need to set or change some
2989 : other defaults.
2990 if $test -f cc.cbu; then
2991     . ./cc.cbu
2992 fi
2993 echo " "
2994 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2995 $cat >gccvers.c <<EOM
2996 #include <stdio.h>
2997 int main() {
2998 #ifdef __GNUC__
2999 #ifdef __VERSION__
3000         printf("%s\n", __VERSION__);
3001 #else
3002         printf("%s\n", "1");
3003 #endif
3004 #endif
3005         exit(0);
3006 }
3007 EOM
3008 if $cc -o gccvers gccvers.c; then
3009         gccversion=`./gccvers`
3010         case "$gccversion" in
3011         '') echo "You are not using GNU cc." ;;
3012         *)  echo "You are using GNU cc $gccversion." ;;
3013         esac
3014 else
3015         echo " "
3016         echo "*** WHOA THERE!!! ***" >&4
3017         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3018         case "$knowitall" in
3019         '')
3020         echo "    You'd better start hunting for one and let me know about it." >&4
3021                 exit 1
3022                 ;;
3023         esac
3024 fi
3025 $rm -f gccvers*
3026 case "$gccversion" in
3027 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3028 esac
3029
3030
3031 case "$usemorebits" in
3032 "$define"|true|[yY]*)
3033         use64bits="$define"
3034         uselongdouble="$define"
3035         usemorebits="$define"
3036         ;;
3037 *)      usemorebits="$undef"
3038         ;;
3039 esac
3040
3041
3042 cat <<EOM
3043
3044 Perl can be built to understand large files (files larger than 2 gigabytes)
3045 on some systems.  To do so, Configure must be run with -Duselargefiles.
3046
3047 If this doesn't make any sense to you, just accept the default.
3048 EOM
3049 case "$uselargefiles" in
3050 "$define"|true|[yY]*) dflt='y' ;;
3051 *)      dflt='n' ;;
3052 esac
3053 rp='Try to understand large files?'
3054 . ./myread
3055 case "$ans" in
3056 y|Y)    val="$define" ;;
3057 *)      val="$undef"  ;;
3058 esac
3059 set uselargefiles
3060 eval $setvar
3061 case "$uselargefiles" in
3062 "$define") use64bits="$define" ;;
3063 esac
3064
3065 cat <<EOM
3066
3067 Perl can be built to take advantage of explicit 64-bit interfaces,
3068 on some systems.  To do so, Configure must be run with -Duse64bits.
3069
3070 If this doesn't make any sense to you, just accept the default.
3071 EOM
3072 case "$use64bits" in
3073 $define|true|[yY]*)     dflt='y';;
3074 *) dflt='n';;
3075 esac
3076 rp='Try to use explicit 64-bit interfaces, if available?'
3077 . ./myread
3078 case "$ans" in
3079 y|Y) 
3080         val="$define"
3081         ;;     
3082 *)      
3083         val="$undef"
3084         ;;
3085 esac
3086 set use64bits
3087 eval $setvar
3088
3089 case "$archname64" in
3090 '') archname64='' ;;    # not a typo
3091 esac
3092
3093 case "$use64bits" in
3094 "$define"|true|[yY]*)
3095 : Look for a hint-file generated 'call-back-unit'.  If the
3096 : user has specified that a 64 bit perl is to be built,
3097 : we may need to set or change some other defaults.
3098         if $test -f use64bits.cbu; then
3099                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3100                 . ./use64bits.cbu
3101         else
3102                 $cat <<EOM
3103 (Your platform doesn't have any specific hints for 64-bit builds.
3104  This is probably okay, especially if your system is a true 64-bit system.)
3105 EOM
3106                 case "$gccversion" in
3107                 '')     ;;
3108                 *)      $cat <<EOM
3109 But since you seem to be using gcc,
3110 I will now add -DUSE_LONG_LONG to the compilation flags.
3111 EOM
3112                         ccflags="$ccflags -DUSE_LONG_LONG"
3113                         ;;
3114                 esac
3115         fi
3116         ;;
3117 esac
3118
3119 : determine the architecture name
3120 echo " "
3121 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3122         tarch=`arch`"-$osname"
3123 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3124         if uname -m > tmparch 2>&1 ; then
3125                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3126                         -e 's/$/'"-$osname/" tmparch`
3127         else
3128                 tarch="$osname"
3129         fi
3130         $rm -f tmparch
3131 else
3132         tarch="$osname"
3133 fi
3134 case "$myarchname" in
3135 ''|"$tarch") ;;
3136 *)
3137         echo "(Your architecture name used to be $myarchname.)"
3138         archname=''
3139         ;;
3140 esac
3141 myarchname="$tarch"
3142 case "$archname" in
3143 '') dflt="$tarch";;
3144 *) dflt="$archname";;
3145 esac
3146 rp='What is your architecture name'
3147 . ./myread
3148 archname="$ans"
3149 case "$usethreads" in
3150 $define)
3151         echo "Threads selected." >&4
3152         case "$archname" in
3153         *-thread*) echo "...and architecture name already has -thread." >&4
3154                 ;;
3155         *)      archname="$archname-thread"
3156                 echo "...setting architecture name to $archname." >&4
3157                 ;;
3158         esac
3159         ;;
3160 esac
3161 case "$usemultiplicity" in
3162 $define)
3163         echo "Multiplicity selected." >&4
3164         case "$archname" in
3165         *-multi*) echo "...and architecture name already has -multi." >&4
3166                 ;;
3167         *)      archname="$archname-multi"
3168                 echo "...setting architecture name to $archname." >&4
3169                 ;;
3170         esac
3171         ;;
3172 esac
3173 case "$use64bits" in
3174 $define)
3175         echo "Explicit 64-bitness selected." >&4
3176         case "$archname64" in
3177         '')
3178                 ;;
3179         *)
3180                 case "$archname" in
3181                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3182                         ;;
3183                 *)      archname="$archname-$archname64"
3184                         echo "...setting architecture name to $archname." >&4
3185                         ;;
3186                 esac
3187                 ;;
3188         esac
3189 esac
3190
3191 : decide how portable to be.  Allow command line overrides.
3192 case "$d_portable" in
3193 "$undef") ;;
3194 *)      d_portable="$define" ;;
3195 esac
3196
3197 : set up shell script to do ~ expansion
3198 cat >filexp <<EOSS
3199 $startsh
3200 : expand filename
3201 case "\$1" in
3202  ~/*|~)
3203         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3204         ;;
3205  ~*)
3206         if $test -f /bin/csh; then
3207                 /bin/csh -f -c "glob \$1"
3208                 failed=\$?
3209                 echo ""
3210                 exit \$failed
3211         else
3212                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3213                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3214                 if $test ! -d "\$dir"; then
3215                         me=\`basename \$0\`
3216                         echo "\$me: can't locate home directory for: \$name" >&2
3217                         exit 1
3218                 fi
3219                 case "\$1" in
3220                 */*)
3221                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3222                         ;;
3223                 *)
3224                         echo \$dir
3225                         ;;
3226                 esac
3227         fi
3228         ;;
3229 *)
3230         echo \$1
3231         ;;
3232 esac
3233 EOSS
3234 chmod +x filexp
3235 $eunicefix filexp
3236
3237 : now set up to get a file name
3238 cat <<EOS >getfile
3239 $startsh
3240 EOS
3241 cat <<'EOSC' >>getfile
3242 tilde=''
3243 fullpath=''
3244 already=''
3245 skip=''
3246 none_ok=''
3247 exp_file=''
3248 nopath_ok=''
3249 orig_rp="$rp"
3250 orig_dflt="$dflt"
3251 case "$gfpth" in
3252 '') gfpth='.' ;;
3253 esac
3254
3255 case "$fn" in
3256 *\(*)
3257         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3258         fn=`echo $fn | sed 's/(.*)//'`
3259         ;;
3260 esac
3261
3262 case "$fn" in
3263 *:*)
3264         loc_file=`expr $fn : '.*:\(.*\)'`
3265         fn=`expr $fn : '\(.*\):.*'`
3266         ;;
3267 esac
3268
3269 case "$fn" in
3270 *~*) tilde=true;;
3271 esac
3272 case "$fn" in
3273 */*) fullpath=true;;
3274 esac
3275 case "$fn" in
3276 *+*) skip=true;;
3277 esac
3278 case "$fn" in
3279 *n*) none_ok=true;;
3280 esac
3281 case "$fn" in
3282 *e*) exp_file=true;;
3283 esac
3284 case "$fn" in
3285 *p*) nopath_ok=true;;
3286 esac
3287
3288 case "$fn" in
3289 *f*) type='File';;
3290 *d*) type='Directory';;
3291 *l*) type='Locate';;
3292 esac
3293
3294 what="$type"
3295 case "$what" in
3296 Locate) what='File';;
3297 esac
3298
3299 case "$exp_file" in
3300 '')
3301         case "$d_portable" in
3302         "$define") ;;
3303         *) exp_file=true;;
3304         esac
3305         ;;
3306 esac
3307
3308 cd ..
3309 while test "$type"; do
3310         redo=''
3311         rp="$orig_rp"
3312         dflt="$orig_dflt"
3313         case "$tilde" in
3314         true) rp="$rp (~name ok)";;
3315         esac
3316         . UU/myread
3317         if test -f UU/getfile.ok && \
3318                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3319         then
3320                 value="$ans"
3321                 ansexp="$ans"
3322                 break
3323         fi
3324         case "$ans" in
3325         none)
3326                 value=''
3327                 ansexp=''
3328                 case "$none_ok" in
3329                 true) type='';;
3330                 esac
3331                 ;;
3332         *)
3333                 case "$tilde" in
3334                 '') value="$ans"
3335                         ansexp="$ans";;
3336                 *)
3337                         value=`UU/filexp $ans`
3338                         case $? in
3339                         0)
3340                                 if test "$ans" != "$value"; then
3341                                         echo "(That expands to $value on this system.)"
3342                                 fi
3343                                 ;;
3344                         *) value="$ans";;
3345                         esac
3346                         ansexp="$value"
3347                         case "$exp_file" in
3348                         '') value="$ans";;
3349                         esac
3350                         ;;
3351                 esac
3352                 case "$fullpath" in
3353                 true)
3354                         case "$ansexp" in
3355                         /*) value="$ansexp" ;;
3356                         *)
3357                                 redo=true
3358                                 case "$already" in
3359                                 true)
3360                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3361                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3362                                         ;;
3363                                 *)
3364                                 echo "Please give a full path name, starting with slash." >&4
3365                                         case "$tilde" in
3366                                         true)
3367                                 echo "Note that using ~name is ok provided it expands well." >&4
3368                                                 already=true
3369                                                 ;;
3370                                         esac
3371                                 esac
3372                                 ;;
3373                         esac
3374                         ;;
3375                 esac
3376                 case "$redo" in
3377                 '')
3378                         case "$type" in
3379                         File)
3380                                 for fp in $gfpth; do
3381                                         if test "X$fp" = X.; then
3382                                             pf="$ansexp"
3383                                         else    
3384                                             pf="$fp/$ansexp"
3385                                         fi
3386                                         if test -f "$pf"; then
3387                                                 type=''
3388                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3389                                         then
3390                                                 echo "($value is not a plain file, but that's ok.)"
3391                                                 type=''
3392                                         fi
3393                                         if test X"$type" = X; then
3394                                             value="$pf"
3395                                             break
3396                                         fi
3397                                 done
3398                                 ;;
3399                         Directory)
3400                                 for fp in $gfpth; do
3401                                         if test "X$fp" = X.; then
3402                                             pf="$ansexp"
3403                                         else    
3404                                             pf="$fp/$ansexp"
3405                                         fi
3406                                         if test -d "$pf"; then
3407                                                 type=''
3408                                                 value="$pf"
3409                                                 break
3410                                         fi
3411                                 done
3412                                 ;;
3413                         Locate)
3414                                 if test -d "$ansexp"; then
3415                                         echo "(Looking for $loc_file in directory $value.)"
3416                                         value="$value/$loc_file"
3417                                         ansexp="$ansexp/$loc_file"
3418                                 fi
3419                                 if test -f "$ansexp"; then
3420                                         type=''
3421                                 fi
3422                                 case "$nopath_ok" in
3423                                 true)   case "$value" in
3424                                         */*) ;;
3425                                         *)      echo "Assuming $value will be in people's path."
3426                                                 type=''
3427                                                 ;;
3428                                         esac
3429                                         ;;
3430                                 esac
3431                                 ;;
3432                         esac
3433
3434                         case "$skip" in
3435                         true) type='';
3436                         esac
3437
3438                         case "$type" in
3439                         '') ;;
3440                         *)
3441                                 if test "$fastread" = yes; then
3442                                         dflt=y
3443                                 else
3444                                         dflt=n
3445                                 fi
3446                                 rp="$what $value doesn't exist.  Use that name anyway?"
3447                                 . UU/myread
3448                                 dflt=''
3449                                 case "$ans" in
3450                                 y*) type='';;
3451                                 *) echo " ";;
3452                                 esac
3453                                 ;;
3454                         esac
3455                         ;;
3456                 esac
3457                 ;;
3458         esac
3459 done
3460 cd UU
3461 ans="$value"
3462 rp="$orig_rp"
3463 dflt="$orig_dflt"
3464 rm -f getfile.ok
3465 test "X$gfpthkeep" != Xy && gfpth=""
3466 EOSC
3467
3468 : determine root of directory hierarchy where package will be installed.
3469 case "$prefix" in
3470 '')
3471         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3472         ;;
3473 *)
3474         dflt="$prefix"
3475         ;;
3476 esac
3477 $cat <<EOM
3478
3479 By default, $package will be installed in $dflt/bin, manual pages
3480 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3481 installation directories. Typically this is something like /usr/local.
3482 If you wish to have binaries under /usr/bin but other parts of the
3483 installation under /usr/local, that's ok: you will be prompted
3484 separately for each of the installation directories, the prefix being
3485 only used to set the defaults.
3486
3487 EOM
3488 fn=d~
3489 rp='Installation prefix to use?'
3490 . ./getfile
3491 oldprefix=''
3492 case "$prefix" in
3493 '') ;;
3494 *)
3495         case "$ans" in
3496         "$prefix") ;;
3497         *) oldprefix="$prefix";;
3498         esac
3499         ;;
3500 esac
3501 prefix="$ans"
3502 prefixexp="$ansexp"
3503
3504 : is AFS running?
3505 echo " "
3506 case "$afs" in
3507 $define|true)   afs=true ;;
3508 $undef|false)   afs=false ;;
3509 *)      if test -d /afs; then
3510                 afs=true
3511         else
3512                 afs=false
3513         fi
3514         ;;
3515 esac
3516 if $afs; then
3517         echo "AFS may be running... I'll be extra cautious then..." >&4
3518 else
3519         echo "AFS does not seem to be running..." >&4
3520 fi
3521
3522 : determine installation prefix for where package is to be installed.
3523 if $afs; then 
3524 $cat <<EOM
3525
3526 Since you are running AFS, I need to distinguish the directory in which
3527 files will reside from the directory in which they are installed (and from
3528 which they are presumably copied to the former directory by occult means).
3529
3530 EOM
3531         case "$installprefix" in
3532         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3533         *) dflt="$installprefix";;
3534         esac
3535 else
3536 $cat <<EOM
3537
3538 In some special cases, particularly when building $package for distribution,
3539 it is convenient to distinguish between the directory in which files should 
3540 be installed from the directory ($prefix) in which they 
3541 will eventually reside.  For most users, these two directories are the same.
3542
3543 EOM
3544         case "$installprefix" in
3545         '') dflt=$prefix ;;
3546         *) dflt=$installprefix;;
3547         esac
3548 fi
3549 fn=d~
3550 rp='What installation prefix should I use for installing files?'
3551 . ./getfile
3552 installprefix="$ans"
3553 installprefixexp="$ansexp"
3554
3555 : set the prefixit variable, to compute a suitable default value
3556 prefixit='case "$3" in
3557 ""|none)
3558         case "$oldprefix" in
3559         "") eval "$1=\"\$$2\"";;
3560         *)
3561                 case "$3" in
3562                 "") eval "$1=";;
3563                 none)
3564                         eval "tp=\"\$$2\"";
3565                         case "$tp" in
3566                         ""|" ") eval "$1=\"\$$2\"";;
3567                         *) eval "$1=";;
3568                         esac;;
3569                 esac;;
3570         esac;;
3571 *)
3572         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3573         case "$tp" in
3574         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3575         /*-$oldprefix/*|\~*-$oldprefix/*)
3576                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3577         *) eval "$1=\"\$$2\"";;
3578         esac;;
3579 esac'
3580
3581 : set the base revision
3582 baserev=5.0
3583
3584 : get the patchlevel
3585 echo " "
3586 echo "Getting the current patchlevel..." >&4
3587 if $test -r $rsrc/patchlevel.h;then
3588         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3589         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3590         apiversion=`awk '/define[       ]+PERL_APIVERSION/ {print $3}' $rsrc/patchlevel.h`
3591 else
3592         patchlevel=0
3593         subversion=0
3594         apiversion=0
3595 fi
3596 $echo $n "(You have $package" $c
3597 case "$package" in
3598 "*$baserev")    ;;
3599 *)              $echo $n " $baserev" $c ;;
3600 esac
3601 $echo $n " patchlevel $patchlevel" $c
3602 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3603 echo ".)"
3604
3605 if test 0 -eq "$subversion"; then
3606         version=`LC_ALL=C; export LC_ALL; \
3607                  echo $baserev $patchlevel | \
3608                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3609 else
3610         version=`LC_ALL=C; export LC_ALL; \
3611                  echo $baserev $patchlevel $subversion | \
3612                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3613 fi
3614
3615 : determine installation style
3616 : For now, try to deduce it from prefix unless it is already set.
3617 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3618 case "$installstyle" in
3619 '')     case "$prefix" in
3620                 *perl*) dflt='lib';;
3621                 *) dflt='lib/perl5' ;;
3622         esac
3623         ;;
3624 *)      dflt='lib/perl5' ;;
3625 esac
3626 : Probably not worth prompting for this since we prompt for all
3627 : the directories individually, and the prompt would be too long and
3628 : confusing anyway.
3629 installstyle=$dflt
3630
3631 : determine where private library files go
3632 : Usual default is /usr/local/lib/perl5/$version.
3633 : Also allow things like /opt/perl/lib/$version, since 
3634 : /opt/perl/lib/perl5... would be redundant.
3635 : The default "style" setting is made in installstyle.U
3636 case "$installstyle" in
3637 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3638 *)       set dflt privlib lib/$version ;;
3639 esac
3640 eval $prefixit
3641 $cat <<EOM
3642
3643 There are some auxiliary files for $package that need to be put into a
3644 private library directory that is accessible by everyone.
3645
3646 EOM
3647 fn=d~+
3648 rp='Pathname where the private library files will reside?'
3649 . ./getfile
3650 privlib="$ans"
3651 privlibexp="$ansexp"
3652 : Change installation prefix, if necessary.
3653 if $test X"$prefix" != X"$installprefix"; then
3654         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
3655 else
3656         installprivlib="$privlibexp"
3657 fi
3658
3659 : set the prefixup variable, to restore leading tilda escape
3660 prefixup='case "$prefixexp" in
3661 "$prefix") ;;
3662 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3663 esac'
3664
3665 : determine where public architecture dependent libraries go
3666 set archlib archlib
3667 eval $prefixit
3668 : privlib default is /usr/local/lib/$package/$version
3669 : archlib default is /usr/local/lib/$package/$version/$archname
3670 : privlib may have an optional trailing /share.
3671 tdflt=`echo $privlib | $sed 's,/share$,,'`
3672 tdflt=$tdflt/$archname
3673 case "$archlib" in
3674 '')     dflt=$tdflt
3675         ;;
3676 *)      dflt="$archlib"
3677     ;;
3678 esac
3679 $cat <<EOM
3680
3681 $spackage contains architecture-dependent library files.  If you are
3682 sharing libraries in a heterogeneous environment, you might store
3683 these files in a separate location.  Otherwise, you can just include
3684 them with the rest of the public library files.
3685
3686 EOM
3687 fn=d+~
3688 rp='Where do you want to put the public architecture-dependent libraries?'
3689 . ./getfile
3690 archlib="$ans"
3691 archlibexp="$ansexp"
3692 if $test X"$archlib" = X"$privlib"; then
3693         d_archlib="$undef"
3694 else
3695         d_archlib="$define"
3696 fi
3697 : Change installation prefix, if necessary.
3698 if $test X"$prefix" != X"$installprefix"; then
3699         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
3700 else
3701         installarchlib="$archlibexp"
3702 fi
3703
3704
3705 : Binary compatibility with 5.005 is not possible for builds
3706 : with advanced features
3707 case "$usethreads$usemultiplicity" in
3708 *define*)
3709         bincompat5005="$undef"
3710         d_bincompat5005="$undef"
3711         ;;
3712 *)      $cat <<EOM
3713
3714 Perl 5.006 can be compiled for binary compatibility with 5.005.
3715 If you decide to do so, you will be able to continue using most
3716 of the extensions that were compiled for Perl 5.005.
3717
3718 EOM
3719         case "$bincompat5005$d_bincompat5005" in
3720         *"$undef"*) dflt=n ;;
3721         *) dflt=y ;;
3722         esac
3723         rp='Binary compatibility with Perl 5.005?'
3724         . ./myread
3725         case "$ans" in
3726         y*) val="$define" ;;
3727         *)  val="$undef" ;;
3728         esac
3729         set d_bincompat5005
3730         eval $setvar
3731         case "$d_bincompat5005" in
3732         "$define")
3733                 bincompat5005="$define"
3734                 ;;
3735         *)      bincompat5005="$undef"
3736                 d_bincompat5005="$undef"
3737                 ;;
3738         esac
3739         ;;
3740 esac
3741
3742
3743 : see if setuid scripts can be secure
3744 $cat <<EOM
3745
3746 Some kernels have a bug that prevents setuid #! scripts from being
3747 secure.  Some sites have disabled setuid #! scripts because of this.
3748
3749 First let's decide if your kernel supports secure setuid #! scripts.
3750 (If setuid #! scripts would be secure but have been disabled anyway,
3751 don't say that they are secure if asked.)
3752
3753 EOM
3754
3755 val="$undef"
3756 if $test -d /dev/fd; then
3757         echo "#!$ls" >reflect
3758         chmod +x,u+s reflect
3759         ./reflect >flect 2>&1
3760         if $contains "/dev/fd" flect >/dev/null; then
3761                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3762                 val="$define"
3763         else
3764                 $cat <<EOM
3765 If you are not sure if they are secure, I can check but I'll need a
3766 username and password different from the one you are using right now.
3767 If you don't have such a username or don't want me to test, simply
3768 enter 'none'.
3769
3770 EOM
3771                 rp='Other username to test security of setuid scripts with?'
3772                 dflt='none'
3773                 . ./myread
3774                 case "$ans" in
3775                 n|none)
3776                         case "$d_suidsafe" in
3777                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3778                                 dflt=n;;
3779                         "$undef")
3780                                 echo "Well, the $hint value is *not* secure." >&4
3781                                 dflt=n;;
3782                         *)      echo "Well, the $hint value *is* secure." >&4
3783                                 dflt=y;;
3784                         esac
3785                         ;;
3786                 *)
3787                         $rm -f reflect flect
3788                         echo "#!$ls" >reflect
3789                         chmod +x,u+s reflect
3790                         echo >flect
3791                         chmod a+w flect
3792                         echo '"su" will (probably) prompt you for '"$ans's password."
3793                         su $ans -c './reflect >flect'
3794                         if $contains "/dev/fd" flect >/dev/null; then
3795                                 echo "Okay, it looks like setuid scripts are secure." >&4
3796                                 dflt=y
3797                         else
3798                                 echo "I don't think setuid scripts are secure." >&4
3799                                 dflt=n
3800                         fi
3801                         ;;
3802                 esac
3803                 rp='Does your kernel have *secure* setuid scripts?'
3804                 . ./myread
3805                 case "$ans" in
3806                 [yY]*)  val="$define";;
3807                 *)      val="$undef";;
3808                 esac
3809         fi
3810 else
3811         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3812         echo "(That's for file descriptors, not floppy disks.)"
3813         val="$undef"
3814 fi
3815 set d_suidsafe
3816 eval $setvar
3817
3818 $rm -f reflect flect
3819
3820 : now see if they want to do setuid emulation
3821 echo " "
3822 val="$undef"
3823 case "$d_suidsafe" in
3824 "$define")
3825         val="$undef"
3826         echo "No need to emulate SUID scripts since they are secure here." >& 4
3827         ;;
3828 *)
3829         $cat <<EOM
3830 Some systems have disabled setuid scripts, especially systems where
3831 setuid scripts cannot be secure.  On systems where setuid scripts have
3832 been disabled, the setuid/setgid bits on scripts are currently
3833 useless.  It is possible for $package to detect those bits and emulate
3834 setuid/setgid in a secure fashion.  This emulation will only work if
3835 setuid scripts have been disabled in your kernel.
3836
3837 EOM
3838         case "$d_dosuid" in
3839         "$define") dflt=y ;;
3840         *) dflt=n ;;
3841         esac
3842         rp="Do you want to do setuid/setgid emulation?"
3843         . ./myread
3844         case "$ans" in
3845         [yY]*)  val="$define";;
3846         *)      val="$undef";;
3847         esac
3848         ;;
3849 esac
3850 set d_dosuid
3851 eval $setvar
3852
3853 : What should the include directory be ?
3854 echo " "
3855 $echo $n "Hmm...  $c"
3856 dflt='/usr/include'
3857 incpath=''
3858 mips_type=''
3859 if $test -f /bin/mips && /bin/mips; then
3860         echo "Looks like a MIPS system..."
3861         $cat >usr.c <<'EOCP'
3862 #ifdef SYSTYPE_BSD43
3863 /bsd43
3864 #endif
3865 EOCP
3866         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3867                 dflt='/bsd43/usr/include'
3868                 incpath='/bsd43'
3869                 mips_type='BSD 4.3'
3870         else
3871                 mips_type='System V'
3872         fi
3873         $rm -f usr.c usr.out
3874         echo "and you're compiling with the $mips_type compiler and libraries."
3875         xxx_prompt=y
3876         echo "exit 0" >mips
3877 else
3878         echo "Doesn't look like a MIPS system."
3879         xxx_prompt=n
3880         echo "exit 1" >mips
3881 fi
3882 chmod +x mips
3883 $eunicefix mips
3884 case "$usrinc" in
3885 '') ;;
3886 *) dflt="$usrinc";;
3887 esac
3888 case "$xxx_prompt" in
3889 y)      fn=d/
3890         echo " "
3891         rp='Where are the include files you want to use?'
3892         . ./getfile
3893         usrinc="$ans"
3894         ;;
3895 *)      usrinc="$dflt"
3896         ;;
3897 esac
3898
3899 : see how we invoke the C preprocessor
3900 echo " "
3901 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3902 cat <<'EOT' >testcpp.c
3903 #define ABC abc
3904 #define XYZ xyz
3905 ABC.XYZ
3906 EOT
3907 cd ..
3908 if test ! -f cppstdin; then
3909         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3910                 # AIX cc -E doesn't show the absolute headerfile
3911                 # locations but we'll cheat by using the -M flag.
3912                 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
3913         else
3914                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3915         fi
3916 else
3917         echo "Keeping your $hint cppstdin wrapper."
3918 fi
3919 chmod 755 cppstdin
3920 wrapper=`pwd`/cppstdin
3921 ok='false'
3922 cd UU
3923
3924 if $test "X$cppstdin" != "X" && \
3925         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3926         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3927 then
3928         echo "You used to use $cppstdin $cppminus so we'll use that again."
3929         case "$cpprun" in
3930         '') echo "But let's see if we can live without a wrapper..." ;;
3931         *)
3932                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3933                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3934                 then
3935                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3936                         ok='true'
3937                 else
3938                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3939                 fi
3940                 ;;
3941         esac
3942 else
3943         case "$cppstdin" in
3944         '') ;;
3945         *)
3946                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3947                 ;;
3948         esac
3949 fi
3950
3951 if $ok; then
3952         : nothing
3953 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3954         $cc -E <testcpp.c >testcpp.out 2>&1; \
3955         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3956         echo "Yup, it does."
3957         x_cpp="$cc -E"
3958         x_minus='';
3959 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3960         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3961         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3962         echo "Yup, it does."
3963         x_cpp="$cc -E"
3964         x_minus='-';
3965 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3966         $cc -P <testcpp.c >testcpp.out 2>&1; \
3967         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3968         echo "Yipee, that works!"
3969         x_cpp="$cc -P"
3970         x_minus='';
3971 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3972         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3973         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3974         echo "At long last!"
3975         x_cpp="$cc -P"
3976         x_minus='-';
3977 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3978         $cpp <testcpp.c >testcpp.out 2>&1; \
3979         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3980         echo "It works!"
3981         x_cpp="$cpp"
3982         x_minus='';
3983 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3984         $cpp - <testcpp.c >testcpp.out 2>&1; \
3985         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3986         echo "Hooray, it works!  I was beginning to wonder."
3987         x_cpp="$cpp"
3988         x_minus='-';
3989 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3990         $wrapper <testcpp.c >testcpp.out 2>&1; \
3991         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3992         x_cpp="$wrapper"
3993         x_minus=''
3994         echo "Eureka!"
3995 else
3996         dflt=''
3997         rp="No dice.  I can't find a C preprocessor.  Name one:"
3998         . ./myread
3999         x_cpp="$ans"
4000         x_minus=''
4001         $x_cpp <testcpp.c >testcpp.out 2>&1
4002         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4003                 echo "OK, that will do." >&4
4004         else
4005 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4006                 exit 1
4007         fi
4008 fi
4009
4010 case "$ok" in
4011 false)
4012         cppstdin="$x_cpp"
4013         cppminus="$x_minus"
4014         cpprun="$x_cpp"
4015         cpplast="$x_minus"
4016         set X $x_cpp
4017         shift
4018         case "$1" in
4019         "$cpp")
4020                 echo "Perhaps can we force $cc -E using a wrapper..."
4021                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4022                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4023                 then
4024                         echo "Yup, we can."
4025                         cppstdin="$wrapper"
4026                         cppminus='';
4027                 else
4028                         echo "Nope, we'll have to live without it..."
4029                 fi
4030                 ;;
4031         esac
4032         case "$cpprun" in
4033         "$wrapper")
4034                 cpprun=''
4035                 cpplast=''
4036                 ;;
4037         esac
4038         ;;
4039 esac
4040
4041 case "$cppstdin" in
4042 "$wrapper"|'cppstdin') ;;
4043 *) $rm -f $wrapper;;
4044 esac
4045 $rm -f testcpp.c testcpp.out
4046
4047 : Set private lib path
4048 case "$plibpth" in
4049 '') if ./mips; then
4050                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4051         fi;;
4052 esac
4053 case "$libpth" in
4054 ' ') dlist='';;
4055 '') dlist="$loclibpth $plibpth $glibpth";;
4056 *) dlist="$libpth";;
4057 esac
4058
4059 : Now check and see which directories actually exist, avoiding duplicates
4060 libpth=''
4061 for xxx in $dlist
4062 do
4063     if $test -d $xxx; then
4064                 case " $libpth " in
4065                 *" $xxx "*) ;;
4066                 *) libpth="$libpth $xxx";;
4067                 esac
4068     fi
4069 done
4070 $cat <<'EOM'
4071
4072 Some systems have incompatible or broken versions of libraries.  Among
4073 the directories listed in the question below, please remove any you
4074 know not to be holding relevant libraries, and add any that are needed.
4075 Say "none" for none.
4076
4077 EOM
4078 case "$libpth" in
4079 '') dflt='none';;
4080 *)
4081         set X $libpth
4082         shift
4083         dflt=${1+"$@"}
4084         ;;
4085 esac
4086 rp="Directories to use for library searches?"
4087 . ./myread
4088 case "$ans" in
4089 none) libpth=' ';;
4090 *) libpth="$ans";;
4091 esac
4092
4093 : compute shared library extension
4094 case "$so" in
4095 '')
4096         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4097                 dflt='sl'
4098         else
4099                 dflt='so'
4100         fi
4101         ;;
4102 *) dflt="$so";;
4103 esac
4104 $cat <<EOM
4105
4106 On some systems, shared libraries may be available.  Answer 'none' if
4107 you want to suppress searching of shared libraries for the remaining
4108 of this configuration.
4109
4110 EOM
4111 rp='What is the file extension used for shared libraries?'
4112 . ./myread
4113 so="$ans"
4114
4115 : Define several unixisms.
4116 : Hints files or command line option can be used to override them.
4117 : The convoluted testing is in case hints files set either the old
4118 : or the new name.
4119 case "$_exe" in
4120 '')     case "$exe_ext" in
4121     '') ;;
4122         *)      _exe="$exe_ext" ;;
4123         esac
4124         ;;
4125 esac
4126 case "$_a" in
4127 '')     case "$lib_ext" in
4128     '') _a='.a';;
4129         *)      _a="$lib_ext" ;;
4130         esac
4131         ;;
4132 esac
4133 case "$_o" in
4134 '') case "$obj_ext" in
4135         '')     _o='.o';;
4136         *)      _o="$obj_ext";;
4137         esac
4138         ;;
4139 esac
4140 case "$p_" in
4141 '') case "$path_sep" in
4142         '')     p_=':';;
4143         *)      p_="$path_sep";;
4144         esac
4145         ;;
4146 esac
4147 exe_ext=$_exe
4148 lib_ext=$_a
4149 obj_ext=$_o
4150 path_sep=$p_
4151
4152 : Which makefile gets called first.  This is used by make depend.
4153 case "$firstmakefile" in
4154 '') firstmakefile='makefile';;
4155 esac
4156
4157 cat <<EOM
4158
4159 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4160 Configure must be run with -Dusesocks.
4161
4162 Normally you do not need this and you should answer no.
4163
4164 EOM
4165 case "$usesocks" in
4166 $define|true|[yY]*)     dflt='y';;
4167 *) dflt='n';;
4168 esac
4169 rp='Build Perl for SOCKS?'
4170 . ./myread
4171 case "$ans" in
4172 y|Y)    val="$define" ;;     
4173 *)      val="$undef" ;;
4174 esac
4175 set usesocks
4176 eval $setvar
4177
4178 : Looking for optional libraries
4179 echo " "
4180 echo "Checking for optional libraries..." >&4
4181 case "$libs" in
4182 ' '|'') dflt='';;
4183 *) dflt="$libs";;
4184 esac
4185 case "$libswanted" in
4186 '') libswanted='c_s';;
4187 esac
4188 case "$usesocks" in
4189 $define)
4190         libswanted="$libswanted socks5 socks5_sh"
4191         ;;
4192 esac
4193 for thislib in $libswanted; do
4194         
4195         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4196                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4197                 echo "Found -l$thislib (shared)."
4198                 case " $dflt " in
4199                 *"-l$thislib "*);;
4200                 *) dflt="$dflt -l$thislib";;
4201                 esac
4202         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4203                 echo "Found -l$thislib (shared)."
4204                 case " $dflt " in
4205                 *"-l$thislib "*);;
4206                 *) dflt="$dflt -l$thislib";;
4207                 esac
4208         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4209                 echo "Found -l$thislib."
4210                 case " $dflt " in
4211                 *"-l$thislib "*);;
4212                 *) dflt="$dflt -l$thislib";;
4213                 esac
4214         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4215                 echo "Found -l$thislib."
4216                 case " $dflt " in
4217                 *"-l$thislib "*);;
4218                 *) dflt="$dflt -l$thislib";;
4219                 esac
4220         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4221                 echo "Found -l${thislib}_s."
4222                 case " $dflt " in
4223                 *"-l$thislib "*);;
4224                 *) dflt="$dflt -l${thislib}_s";;
4225                 esac
4226         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4227                 echo "Found -l$thislib."
4228                 case " $dflt " in
4229                 *"-l$thislib "*);;
4230                 *) dflt="$dflt -l$thislib";;
4231                 esac
4232         else
4233                 echo "No -l$thislib."
4234         fi
4235 done
4236 set X $dflt
4237 shift
4238 dflt="$*"
4239 case "$libs" in
4240 '') dflt="$dflt";;
4241 *) dflt="$libs";;
4242 esac
4243 case "$dflt" in
4244 ' '|'') dflt='none';;
4245 esac
4246
4247 $cat <<EOM
4248
4249 In order to compile $package on your machine, a number of libraries
4250 are usually needed.  Include any other special libraries here as well.
4251 Say "none" for none.  The default list is almost always right.
4252 EOM
4253
4254 echo " "
4255 rp="What libraries to use?"
4256 . ./myread
4257 case "$ans" in
4258 none) libs=' ';;
4259 *) libs="$ans";;
4260 esac
4261
4262 : determine optimization, if desired, or use for debug flag also
4263 case "$optimize" in
4264 ' '|$undef) dflt='none';;
4265 '') dflt='-O';;
4266 *) dflt="$optimize";;
4267 esac
4268 $cat <<EOH
4269
4270 By default, $package compiles with the -O flag to use the optimizer.
4271 Alternately, you might want to use the symbolic debugger, which uses
4272 the -g flag (on traditional Unix systems).  Either flag can be
4273 specified here.  To use neither flag, specify the word "none".
4274
4275 EOH
4276 rp="What optimizer/debugger flag should be used?"
4277 . ./myread
4278 optimize="$ans"
4279 case "$optimize" in
4280 'none') optimize=" ";;
4281 esac
4282
4283 dflt=''
4284 : We will not override a previous value, but we might want to
4285 : augment a hint file
4286 case "$hint" in
4287 default|recommended)
4288         case "$gccversion" in
4289         1*) dflt='-fpcc-struct-return' ;;
4290         esac
4291         case "$optimize" in
4292         *-g*) dflt="$dflt -DDEBUGGING";;
4293         esac
4294         case "$gccversion" in
4295         2*) if test -d /etc/conf/kconfig.d &&
4296                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4297                 then
4298                         dflt="$dflt -posix"
4299                 fi
4300                 ;;
4301         esac
4302         case "$gccversion" in
4303         1*) ;;
4304         2.[0-8]*) ;;
4305         ?*)     echo " "
4306                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4307                 echo 'int main(void) { return 0; }' > gcctest.c
4308                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4309                         echo "Yes, it does." 2>&1
4310                         case "$ccflags" in
4311                         *strict-aliasing*) 
4312                                 echo "Leaving current flags $ccflags alone." 2>&1
4313                                 ;;
4314                         *) dflt="$dflt -fno-strict-aliasing" ;;
4315                         esac
4316                 else
4317                         echo "Nope, it doesn't, but that's ok." 2>&1
4318                 fi
4319                 ;;
4320         esac
4321         ;;
4322 esac
4323
4324 case "$mips_type" in
4325 *BSD*|'') inclwanted="$locincpth $usrinc";;
4326 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4327 esac
4328 for thisincl in $inclwanted; do
4329         if $test -d $thisincl; then
4330                 if $test x$thisincl != x$usrinc; then
4331                         case "$dflt" in
4332                         *$thisincl*);;
4333                         *) dflt="$dflt -I$thisincl";;
4334                         esac
4335                 fi
4336         fi
4337 done
4338
4339 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4340         xxx=true;
4341 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4342         xxx=true;
4343 else
4344         xxx=false;
4345 fi;
4346 if $xxx; then
4347         case "$dflt" in
4348         *$2*);;
4349         *) dflt="$dflt -D$2";;
4350         esac;
4351 fi'
4352
4353 set signal.h LANGUAGE_C; eval $inctest
4354
4355 case "$usesocks" in
4356 $define)
4357         ccflags="$ccflags -DSOCKS"
4358         ;;
4359 esac
4360
4361 case "$hint" in
4362 default|recommended) dflt="$ccflags $dflt" ;;
4363 *) dflt="$ccflags";;
4364 esac
4365
4366 case "$dflt" in
4367 ''|' ') dflt=none;;
4368 esac
4369 $cat <<EOH
4370
4371 Your C compiler may want other flags.  For this question you should include
4372 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4373 but you should NOT include libraries or ld flags like -lwhatever.  If you
4374 want $package to honor its debug switch, you should include -DDEBUGGING here.
4375 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4376
4377 To use no flags, specify the word "none".
4378
4379 EOH
4380 set X $dflt
4381 shift
4382 dflt=${1+"$@"}
4383 rp="Any additional cc flags?"
4384 . ./myread
4385 case "$ans" in
4386 none) ccflags='';;
4387 *) ccflags="$ans";;
4388 esac
4389
4390 : the following weeds options from ccflags that are of no interest to cpp
4391 cppflags="$ccflags"
4392 case "$gccversion" in
4393 1*) cppflags="$cppflags -D__GNUC__"
4394 esac
4395 case "$mips_type" in
4396 '');;
4397 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4398 esac
4399 case "$cppflags" in
4400 '');;
4401 *)
4402         echo " "
4403         echo "Let me guess what the preprocessor flags are..." >&4
4404         set X $cppflags
4405         shift
4406         cppflags=''
4407         $cat >cpp.c <<'EOM'
4408 #define BLURFL foo
4409
4410 BLURFL xx LFRULB
4411 EOM
4412         previous=''
4413         for flag in $*
4414         do
4415                 case "$flag" in
4416                 -*) ftry="$flag";;
4417                 *) ftry="$previous $flag";;
4418                 esac
4419                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4420                         >cpp1.out 2>/dev/null && \
4421                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4422                         >cpp2.out 2>/dev/null && \
4423                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4424                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4425                 then
4426                         cppflags="$cppflags $ftry"
4427                         previous=''
4428                 else
4429                         previous="$flag"
4430                 fi
4431         done
4432         set X $cppflags
4433         shift
4434         cppflags=${1+"$@"}
4435         case "$cppflags" in
4436         *-*)  echo "They appear to be: $cppflags";;
4437         esac
4438         $rm -f cpp.c cpp?.out
4439         ;;
4440 esac
4441
4442 : flags used in final linking phase
4443 case "$ldflags" in
4444 '') if ./venix; then
4445                 dflt='-i -z'
4446         else
4447                 dflt=''
4448         fi
4449         case "$ccflags" in
4450         *-posix*) dflt="$dflt -posix" ;;
4451         esac
4452         ;;
4453 *) dflt="$ldflags";;
4454 esac
4455
4456 : Try to guess additional flags to pick up local libraries.
4457 for thislibdir in $libpth; do
4458         case " $loclibpth " in
4459         *" $thislibdir "*)
4460                 case "$dflt " in 
4461                 *"-L$thislibdir "*) ;;
4462                 *)  dflt="$dflt -L$thislibdir" ;;
4463                 esac
4464                 ;;
4465         esac
4466 done
4467
4468 case "$dflt" in
4469 '') dflt='none' ;;
4470 esac
4471
4472 $cat <<EOH
4473
4474 Your C linker may need flags.  For this question you should
4475 include -L/whatever and any other flags used by the C linker, but you
4476 should NOT include libraries like -lwhatever.
4477
4478 Make sure you include the appropriate -L/path flags if your C linker
4479 does not normally search all of the directories you specified above,
4480 namely
4481         $libpth
4482 To use no flags, specify the word "none".
4483
4484 EOH
4485
4486 rp="Any additional ld flags (NOT including libraries)?"
4487 . ./myread
4488 case "$ans" in
4489 none) ldflags='';;
4490 *) ldflags="$ans";;
4491 esac
4492 rmlist="$rmlist pdp11"
4493
4494 : coherency check
4495 echo " "
4496 echo "Checking your choice of C compiler and flags for coherency..." >&4
4497 $cat > try.c <<'EOF'
4498 #include <stdio.h>
4499 int main() { printf("Ok\n"); exit(0); }
4500 EOF
4501 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4502 shift
4503 $cat >try.msg <<'EOM'
4504 I've tried to compile and run the following simple program:
4505
4506 EOM
4507 $cat try.c >> try.msg
4508
4509 $cat >> try.msg <<EOM
4510
4511 I used the command:
4512
4513         $*
4514         ./try
4515
4516 and I got the following output:
4517
4518 EOM
4519 dflt=y
4520 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4521         if sh -c './try' >>try.msg 2>&1; then
4522                 xxx=`./try`
4523                 case "$xxx" in
4524                 "Ok") dflt=n ;;
4525                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4526                         case " $libs " in
4527                         *" -lsfio "*)
4528                                 cat >> try.msg <<'EOQS'
4529 If $libs contains -lsfio, and sfio is mis-configured, then it
4530 sometimes (apparently) runs and exits with a 0 status, but with no
4531 output!  It may have to do with sfio's use of _exit vs. exit.
4532
4533 EOQS
4534                                 rp="You have a big problem.  Shall I abort Configure"
4535                                 dflt=y
4536                                 ;;
4537                         esac
4538                         ;;
4539                 esac
4540         else
4541                 echo "The program compiled OK, but exited with status $?." >>try.msg
4542                 rp="You have a problem.  Shall I abort Configure"
4543                 dflt=y
4544         fi
4545 else
4546         echo "I can't compile the test program." >>try.msg
4547         rp="You have a BIG problem.  Shall I abort Configure"
4548         dflt=y
4549 fi
4550 case "$dflt" in
4551 y)
4552         $cat try.msg >&4
4553         case "$knowitall" in
4554         '')
4555                 echo "(The supplied flags or libraries might be incorrect.)"
4556                 ;;
4557         *) dflt=n;;
4558         esac
4559         echo " "
4560         . ./myread
4561         case "$ans" in
4562         n*|N*) ;;
4563         *)      echo "Ok.  Stopping Configure." >&4
4564                 exit 1
4565                 ;;
4566         esac
4567         ;;
4568 n) echo "OK, that should do.";;
4569 esac
4570 $rm -f try try.* core
4571
4572 : determine filename position in cpp output
4573 echo " "
4574 echo "Computing filename position in cpp output for #include directives..." >&4
4575 echo '#include <stdio.h>' > foo.c
4576 $cat >fieldn <<EOF
4577 $startsh
4578 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4579 $grep '^[       ]*#.*stdio\.h' | \
4580 while read cline; do
4581         pos=1
4582         set \$cline
4583         while $test \$# -gt 0; do
4584                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4585                         echo "\$pos"
4586                         exit 0
4587                 fi
4588                 shift
4589                 pos=\`expr \$pos + 1\`
4590         done
4591 done
4592 EOF
4593 chmod +x fieldn
4594 fieldn=`./fieldn`
4595 $rm -f foo.c fieldn
4596 case $fieldn in
4597 '') pos='???';;
4598 1) pos=first;;
4599 2) pos=second;;
4600 3) pos=third;;
4601 *) pos="${fieldn}th";;
4602 esac
4603 echo "Your cpp writes the filename in the $pos field of the line."
4604
4605 : locate header file
4606 $cat >findhdr <<EOF
4607 $startsh
4608 wanted=\$1
4609 name=''
4610 for usrincdir in $usrinc
4611 do
4612         if test -f \$usrincdir/\$wanted; then
4613                 echo "\$usrincdir/\$wanted"
4614                 exit 0
4615         fi
4616 done
4617 awkprg='{ print \$$fieldn }'
4618 echo "#include <\$wanted>" > foo\$\$.c
4619 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4620 $grep "^[       ]*#.*\$wanted" | \
4621 while read cline; do
4622         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4623         case "\$name" in
4624         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4625         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4626         *) exit 2;;
4627         esac;
4628 done;
4629 #
4630 # status = 0: grep returned 0 lines, case statement not executed
4631 # status = 1: headerfile found
4632 # status = 2: while loop executed, no headerfile found
4633 #
4634 status=\$?
4635 $rm -f foo\$\$.c;
4636 if test \$status -eq 1; then
4637         exit 0;
4638 fi
4639 exit 1
4640 EOF
4641 chmod +x findhdr
4642
4643 : define an alternate in-header-list? function
4644 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4645 cont=true; xxf="echo \"<\$1> found.\" >&4";
4646 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4647 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4648 esac;
4649 case $# in 4) instead=instead;; *) instead="at last";; esac;
4650 while $test "$cont"; do
4651         xxx=`./findhdr $1`
4652         var=$2; eval "was=\$$2";
4653         if $test "$xxx" && $test -r "$xxx";
4654         then eval $xxf;
4655         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4656                 cont="";
4657         else eval $xxnf;
4658         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4659         set $yyy; shift; shift; yyy=$@;
4660         case $# in 0) cont="";;
4661         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4662                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4663         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4664                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4665         esac;
4666 done;
4667 while $test "$yyy";
4668 do set $yyy; var=$2; eval "was=\$$2";
4669         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4670         set $yyy; shift; shift; yyy=$@;
4671 done'
4672
4673 : see if this is a malloc.h system
4674 set malloc.h i_malloc
4675 eval $inhdr
4676
4677 : see if stdlib is available
4678 set stdlib.h i_stdlib
4679 eval $inhdr
4680
4681 : determine which malloc to compile in
4682 echo " "
4683 case "$usemymalloc" in
4684 ''|[yY]*|true|$define)  dflt='y' ;;
4685 *)      dflt='n' ;;
4686 esac
4687 rp="Do you wish to attempt to use the malloc that comes with $package?"
4688 . ./myread
4689 usemymalloc="$ans"
4690 case "$ans" in
4691 y*|true)
4692         usemymalloc='y'
4693         mallocsrc='malloc.c'
4694         mallocobj="malloc$_o"
4695         d_mymalloc="$define"
4696         case "$libs" in
4697         *-lmalloc*)
4698                 : Remove malloc from list of libraries to use
4699                 echo "Removing unneeded -lmalloc from library list" >&4
4700                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4701                 shift
4702                 libs="$*"
4703                 echo "libs = $libs" >&4
4704                 ;;
4705         esac
4706         ;;
4707 *)
4708         usemymalloc='n'
4709         mallocsrc=''
4710         mallocobj=''
4711         d_mymalloc="$undef"
4712         ;;
4713 esac
4714
4715 : compute the return types of malloc and free
4716 echo " "
4717 $cat >malloc.c <<END
4718 #$i_malloc I_MALLOC
4719 #$i_stdlib I_STDLIB
4720 #include <stdio.h>
4721 #include <sys/types.h>
4722 #ifdef I_MALLOC
4723 #include <malloc.h>
4724 #endif
4725 #ifdef I_STDLIB
4726 #include <stdlib.h>
4727 #endif
4728 #ifdef TRY_MALLOC
4729 void *malloc();
4730 #endif
4731 #ifdef TRY_FREE
4732 void free();
4733 #endif
4734 END
4735 case "$malloctype" in
4736 '')
4737         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4738                 malloctype='void *'
4739         else
4740                 malloctype='char *'
4741         fi
4742         ;;
4743 esac
4744 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4745
4746 case "$freetype" in
4747 '')
4748         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4749                 freetype='void'
4750         else
4751                 freetype='int'
4752         fi
4753         ;;
4754 esac
4755 echo "Your system uses $freetype free(), it would seem." >&4
4756 $rm -f malloc.[co]
4757 $cat <<EOM
4758
4759 The installation process will also create a directory for
4760 vendor-supplied add-ons.  Vendors who supply perl with their system
4761 may find it convenient to place all vendor-supplied files in this
4762 directory rather than in the main distribution directory.  This will
4763 ease upgrades between binary-compatible maintenance versions of perl.
4764
4765 Of course you may also use these directories in whatever way you see
4766 fit.  For example, you might use them to access modules shared over a
4767 company-wide network.
4768
4769 The default answer should be fine for most people.
4770 This causes further questions about vendor add-ons to be skipped
4771 and no vendor-specific directories will be configured for perl.
4772
4773 EOM
4774 rp='Do you want to configure vendor-specific add-on directories?'
4775 case "$usevendorprefix" in
4776 define|true|[yY]*) dflt=y ;;
4777 *) dflt=n ;;
4778 esac
4779 . ./myread
4780 case "$ans" in
4781 [yY]*)  fn=d~+
4782         rp='Installation prefix to use for vendor-supplied add-ons?'
4783         case "$vendorprefix" in
4784         '') dflt='' ;;
4785         *)  dflt=$vendorprefix ;;
4786         esac
4787         . ./getfile
4788         oldvendorprefix=''
4789         case "$vendorprefix" in
4790         '') ;;
4791         *)      case "$ans" in
4792                 "$prefix") ;;
4793                 *) oldvendorprefix="$prefix";;
4794                 esac
4795                 ;;
4796         esac
4797         usevendorprefix="$define"
4798         vendorprefix="$ans"
4799         vendorprefixexp="$ansexp"
4800         ;;
4801 *)      usevendorprefix="$undef"
4802         vendorprefix=''
4803         vendorprefixexp=''
4804         ;;
4805 esac
4806
4807 case "$vendorprefix" in
4808 '')     d_vendorlib="$undef"
4809         vendorlib=''
4810         vendorlibexp=''
4811         ;;
4812 *)      d_vendorlib="$define"
4813         : determine where vendor-supplied modules go.
4814         : Usual default is /usr/local/lib/perl5/vendor_perl
4815         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4816         case "$installstyle" in
4817         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4818         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4819         esac
4820         fn=d~+
4821         rp='Pathname for the vendor-supplied library files?'
4822         . ./getfile
4823         vendorlib="$ans"
4824         vendorlibexp="$ansexp"
4825         : Change installation prefix, if necessary.
4826         if $test X"$prefix" != X"$installprefix"; then
4827                 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
4828         else
4829                 installvendorlib="$vendorlibexp"
4830         fi
4831         ;;
4832 esac
4833
4834 : Cruising for prototypes
4835 echo " "
4836 echo "Checking out function prototypes..." >&4
4837 $cat >prototype.c <<'EOCP'
4838 int main(int argc, char *argv[]) {
4839         exit(0);}
4840 EOCP
4841 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4842         echo "Your C compiler appears to support function prototypes."
4843         val="$define"
4844 else
4845         echo "Your C compiler doesn't seem to understand function prototypes."
4846         val="$undef"
4847 fi
4848 set prototype
4849 eval $setvar
4850 $rm -f prototype*
4851
4852 case "$prototype" in
4853 "$define") ;;
4854 *)      ansi2knr='ansi2knr'
4855         echo " "
4856         cat <<EOM >&4
4857
4858 $me:  FATAL ERROR:
4859 This version of $package can only be compiled by a compiler that 
4860 understands function prototypes.  Unfortunately, your C compiler 
4861         $cc $ccflags
4862 doesn't seem to understand them.  Sorry about that.
4863
4864 If GNU cc is available for your system, perhaps you could try that instead.  
4865
4866 Eventually, we hope to support building Perl with pre-ANSI compilers.
4867 If you would like to help in that effort, please contact <perlbug@perl.org>.
4868
4869 Aborting Configure now.
4870 EOM
4871         exit 2
4872         ;;
4873 esac
4874
4875 : determine where public executables go
4876 echo " "
4877 set dflt bin bin
4878 eval $prefixit
4879 fn=d~
4880 rp='Pathname where the public executables will reside?'
4881 . ./getfile
4882 if $test "X$ansexp" != "X$binexp"; then
4883         installbin=''
4884 fi
4885 bin="$ans"
4886 binexp="$ansexp"
4887 : Change installation prefix, if necessary.
4888 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4889 if $test X"$prefix" != X"$installprefix"; then
4890         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
4891 else
4892         installbin="$binexp"
4893 fi
4894
4895 : determine whether to install perl also as /usr/bin/perl
4896
4897 echo " "
4898 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4899         $cat <<EOM
4900 Many scripts expect to perl to be installed as /usr/bin/perl.
4901 I can install the perl you are about to compile also as /usr/bin/perl
4902 (in addition to $installbin/perl).
4903 EOM
4904         case "$installusrbinperl" in
4905         "$undef"|[nN]*) dflt='n';;
4906         *)              dflt='y';;
4907         esac
4908         rp="Do you want to install perl as /usr/bin/perl?"
4909         . ./myread
4910         case "$ans" in
4911         [yY]*)  val="$define";;
4912         *)      val="$undef" ;;
4913         esac
4914 else
4915         val="$undef"
4916 fi
4917 set installusrbinperl
4918 eval $setvar
4919
4920 : define a shorthand compile call
4921 compile='
4922 mc_file=$1;
4923 shift;
4924 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4925 : define a shorthand compile call for compilations that should be ok.
4926 compile_ok='
4927 mc_file=$1;
4928 shift;
4929 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4930
4931 echo " "
4932 echo "Checking for GNU C Library..." >&4
4933 cat >gnulibc.c <<EOM
4934 #include <stdio.h>
4935 int main()
4936 {
4937 #ifdef __GLIBC__
4938     exit(0);
4939 #else
4940     exit(1);
4941 #endif
4942 }
4943 EOM
4944 set gnulibc
4945 if eval $compile_ok && ./gnulibc; then
4946         val="$define"
4947         echo "You are using the GNU C Library"
4948 else
4949         val="$undef"
4950         echo "You are not using the GNU C Library"
4951 fi
4952 $rm -f gnulibc*
4953 set d_gnulibc
4954 eval $setvar
4955
4956 : see if nm is to be used to determine whether a symbol is defined or not
4957 case "$usenm" in
4958 '')
4959         dflt=''
4960         case "$d_gnulibc" in
4961         "$define")
4962                 echo " "
4963                 echo "nm probably won't work on the GNU C Library." >&4
4964                 dflt=n
4965                 ;;
4966         esac
4967         case "$dflt" in
4968         '') 
4969                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4970                         echo " "
4971                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4972                         echo "'nm' won't be sufficient on this sytem." >&4
4973                         dflt=n
4974                 fi
4975                 ;;
4976         esac
4977         case "$dflt" in
4978         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4979                 if $test $dflt -gt 20; then
4980                         dflt=y
4981                 else
4982                         dflt=n
4983                 fi
4984                 ;;
4985         esac
4986         ;;
4987 *)
4988         case "$usenm" in
4989         true|$define) dflt=y;;
4990         *) dflt=n;;
4991         esac
4992         ;;
4993 esac
4994 $cat <<EOM
4995
4996 I can use $nm to extract the symbols from your C libraries. This
4997 is a time consuming task which may generate huge output on the disk (up
4998 to 3 megabytes) but that should make the symbols extraction faster. The
4999 alternative is to skip the 'nm' extraction part and to compile a small
5000 test program instead to determine whether each symbol is present. If
5001 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5002 this may be the best solution.
5003
5004 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5005
5006 EOM
5007 rp="Shall I use $nm to extract C symbols from the libraries?"
5008 . ./myread
5009 case "$ans" in
5010 [Nn]*) usenm=false;;
5011 *) usenm=true;;
5012 esac
5013
5014 runnm=$usenm
5015 case "$reuseval" in
5016 true) runnm=false;;
5017 esac
5018
5019 : nm options which may be necessary
5020 case "$nm_opt" in
5021 '') if $test -f /mach_boot; then
5022                 nm_opt=''       # Mach
5023         elif $test -d /usr/ccs/lib; then
5024                 nm_opt='-p'     # Solaris (and SunOS?)
5025         elif $test -f /dgux; then
5026                 nm_opt='-p'     # DG-UX
5027         elif $test -f /lib64/rld; then
5028                 nm_opt='-p'     # 64-bit Irix
5029         else
5030                 nm_opt=''
5031         fi;;
5032 esac
5033
5034 : nm options which may be necessary for shared libraries but illegal
5035 : for archive libraries.  Thank you, Linux.
5036 case "$nm_so_opt" in
5037 '')     case "$myuname" in
5038         *linux*)
5039                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5040                         nm_so_opt='--dynamic'
5041                 fi
5042                 ;;
5043         esac
5044         ;;
5045 esac
5046
5047 case "$runnm" in
5048 true)
5049 : get list of predefined functions in a handy place
5050 echo " "
5051 case "$libc" in
5052 '') libc=unknown
5053         case "$libs" in
5054         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5055         esac
5056         ;;
5057 esac
5058 libnames='';
5059 case "$libs" in
5060 '') ;;
5061 *)  for thislib in $libs; do
5062         case "$thislib" in
5063         -lc|-lc_s)
5064                 : Handle C library specially below.
5065                 ;;
5066         -l*)
5067                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5068                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5069                         :
5070                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5071                         :
5072                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5073                         :
5074                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5075                         :
5076                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5077                         :
5078                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5079                         :
5080                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5081                         :
5082                 else
5083                         try=''
5084                 fi
5085                 libnames="$libnames $try"
5086                 ;;
5087         *) libnames="$libnames $thislib" ;;
5088         esac
5089         done
5090         ;;
5091 esac
5092 xxx=normal
5093 case "$libc" in
5094 unknown)
5095         set /lib/libc.$so
5096         for xxx in $libpth; do
5097                 $test -r $1 || set $xxx/libc.$so
5098                 : The messy sed command sorts on library version numbers.
5099                 $test -r $1 || \
5100                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5101                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5102                                 h
5103                                 s/[0-9][0-9]*/0000&/g
5104                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5105                                 G
5106                                 s/\n/ /' | \
5107                          sort | $sed -e 's/^.* //'`
5108                 eval set \$$#
5109         done
5110         $test -r $1 || set /usr/ccs/lib/libc.$so
5111         $test -r $1 || set /lib/libsys_s$_a
5112         ;;
5113 *)
5114         set blurfl
5115         ;;
5116 esac
5117 if $test -r "$1"; then
5118         echo "Your (shared) C library seems to be in $1."
5119         libc="$1"
5120 elif $test -r /lib/libc && $test -r /lib/clib; then
5121         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5122         xxx=apollo
5123         libc='/lib/clib /lib/libc'
5124         if $test -r /lib/syslib; then
5125                 echo "(Your math library is in /lib/syslib.)"
5126                 libc="$libc /lib/syslib"
5127         fi
5128 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5129         echo "Your C library seems to be in $libc, as you said before."
5130 elif $test -r $incpath/usr/lib/libc$_a; then
5131         libc=$incpath/usr/lib/libc$_a;
5132         echo "Your C library seems to be in $libc.  That's fine."
5133 elif $test -r /lib/libc$_a; then
5134         libc=/lib/libc$_a;
5135         echo "Your C library seems to be in $libc.  You're normal."
5136 else
5137         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5138                 :
5139         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5140                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5141         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5142                 :
5143         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5144                 :
5145         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5146                 :
5147         else
5148                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5149         fi
5150         if $test -r "$tans"; then
5151                 echo "Your C library seems to be in $tans, of all places."
5152                 libc=$tans
5153         else
5154                 libc='blurfl'
5155         fi
5156 fi
5157 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5158         dflt="$libc"
5159         cat <<EOM
5160
5161 If the guess above is wrong (which it might be if you're using a strange
5162 compiler, or your machine supports multiple models), you can override it here.
5163
5164 EOM
5165 else
5166         dflt=''
5167         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5168         cat >&4 <<EOM
5169 I can't seem to find your C library.  I've looked in the following places:
5170
5171 EOM
5172         $sed 's/^/      /' libpath
5173         cat <<EOM
5174
5175 None of these seems to contain your C library. I need to get its name...
5176
5177 EOM
5178 fi
5179 fn=f
5180 rp='Where is your C library?'
5181 . ./getfile
5182 libc="$ans"
5183
5184 echo " "
5185 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5186 set X `cat libnames`
5187 shift
5188 xxx=files
5189 case $# in 1) xxx=file; esac
5190 echo "Extracting names from the following $xxx for later perusal:" >&4
5191 echo " "
5192 $sed 's/^/      /' libnames >&4
5193 echo " "
5194 $echo $n "This may take a while...$c" >&4
5195
5196 for file in $*; do
5197         case $file in
5198         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5199         *) $nm $nm_opt $file 2>/dev/null;;
5200         esac
5201 done >libc.tmp
5202
5203 $echo $n ".$c"
5204 $grep fprintf libc.tmp > libc.ptf
5205 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5206 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5207 xxx='[ADTSIW]'
5208 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5209         eval $xscan;\
5210         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5211                 eval $xrun
5212 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5213         eval $xscan;\
5214         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5215                 eval $xrun
5216 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5217         eval $xscan;\
5218         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5219                 eval $xrun
5220 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5221         eval $xscan;\
5222         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5223                 eval $xrun
5224 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5225         eval $xscan;\
5226         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5227                 eval $xrun
5228 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5229         eval $xscan;\
5230         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5231                 eval $xrun
5232 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5233                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5234         eval $xscan;\
5235         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5236                 eval $xrun
5237 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5238         eval $xscan;\
5239         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5240                 eval $xrun
5241 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5242         eval $xscan;\
5243         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5244                 eval $xrun
5245 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5246         eval $xscan;\
5247         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5248                 eval $xrun
5249 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5250         eval $xscan;\
5251         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5252                 eval $xrun
5253 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5254         eval $xscan;\
5255         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5256                 eval $xrun
5257 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5258         eval $xscan;\
5259         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5260                 eval $xrun
5261 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5262         eval $xscan;\
5263         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5264                 eval $xrun
5265 else
5266         $nm -p $* 2>/dev/null >libc.tmp
5267         $grep fprintf libc.tmp > libc.ptf
5268         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5269                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5270         then
5271                 nm_opt='-p'
5272                 eval $xrun
5273         else
5274                 echo " "
5275                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5276                 com=''
5277                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5278                         for thisname in $libnames $libc; do
5279                                 $ar t $thisname >>libc.tmp
5280                         done
5281                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5282                         echo "Ok." >&4
5283                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5284                         # Repeat libc to extract forwarders to DLL entries too
5285                         for thisname in $libnames $libc; do
5286                                 $ar tv $thisname >>libc.tmp
5287                                 # Revision 50 of EMX has bug in $ar.
5288                                 # it will not extract forwarders to DLL entries
5289                                 # Use emximp which will extract exactly them.
5290                                 emximp -o tmp.imp $thisname \
5291                                     2>/dev/null && \
5292                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5293                                     < tmp.imp >>libc.tmp
5294                                 $rm tmp.imp
5295                         done
5296                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5297                         echo "Ok." >&4
5298                 else
5299                         echo "$ar didn't seem to work right." >&4
5300                         echo "Maybe this is a Cray...trying bld instead..." >&4
5301                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5302                         then
5303                                 for thisname in $libnames; do
5304                                         bld t $libnames | \
5305                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5306                                         $ar t $thisname >>libc.tmp
5307                                 done
5308                                 echo "Ok." >&4
5309                         else
5310                                 echo "That didn't work either.  Giving up." >&4
5311                                 exit 1
5312                         fi
5313                 fi
5314         fi
5315 fi
5316 nm_extract="$com"
5317 if $test -f /lib/syscalls.exp; then
5318         echo " "
5319         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5320         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5321 fi
5322 ;;
5323 esac
5324 $rm -f libnames libpath
5325
5326 : see if dld is available
5327 set dld.h i_dld
5328 eval $inhdr
5329
5330 : is a C symbol defined?
5331 csym='tlook=$1;
5332 case "$3" in
5333 -v) tf=libc.tmp; tc=""; tdc="";;
5334 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5335 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5336 esac;
5337 tx=yes;
5338 case "$reuseval-$4" in
5339 true-) ;;
5340 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5341 esac;
5342 case "$tx" in
5343 yes)
5344         case "$runnm" in
5345         true)
5346                 if $contains $tlook $tf >/dev/null 2>&1;
5347                 then tval=true;
5348                 else tval=false;
5349                 fi;;
5350         *)
5351                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5352                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5353                 then tval=true;
5354                 else tval=false;
5355                 fi;
5356                 $rm -f t t.c;;
5357         esac;;
5358 *)
5359         case "$tval" in
5360         $define) tval=true;;
5361         *) tval=false;;
5362         esac;;
5363 esac;
5364 eval "$2=$tval"'
5365
5366 : define an is-in-libc? function
5367 inlibc='echo " "; td=$define; tu=$undef;
5368 sym=$1; var=$2; eval "was=\$$2";
5369 tx=yes;
5370 case "$reuseval$was" in
5371 true) ;;
5372 true*) tx=no;;
5373 esac;
5374 case "$tx" in
5375 yes)
5376         set $sym tres -f;
5377         eval $csym;
5378         case "$tres" in
5379         true)
5380                 echo "$sym() found." >&4;
5381                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5382         *)
5383                 echo "$sym() NOT found." >&4;
5384                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5385         esac;;
5386 *)
5387         case "$was" in
5388         $define) echo "$sym() found." >&4;;
5389         *) echo "$sym() NOT found." >&4;;
5390         esac;;
5391 esac'
5392
5393 : see if dlopen exists
5394 xxx_runnm="$runnm"
5395 runnm=false
5396 set dlopen d_dlopen
5397 eval $inlibc
5398 runnm="$xxx_runnm"
5399
5400 : determine which dynamic loading, if any, to compile in
5401 echo " "
5402 dldir="ext/DynaLoader"
5403 case "$usedl" in
5404 $define|y|true)
5405         dflt='y'
5406         usedl="$define"
5407         ;;
5408 $undef|n|false)
5409         dflt='n'
5410         usedl="$undef"
5411         ;;
5412 *) 
5413         dflt='n'
5414         case "$d_dlopen" in
5415             $define) dflt='y' ;;
5416         esac
5417         case "$i_dld" in
5418             $define) dflt='y' ;;
5419         esac
5420         : Does a dl_xxx.xs file exist for this operating system
5421         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5422         ;;
5423 esac
5424 rp="Do you wish to use dynamic loading?"
5425 . ./myread
5426 usedl="$ans"
5427 case "$ans" in
5428 y*) usedl="$define"
5429         case "$dlsrc" in
5430         '')
5431                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5432                         dflt="$dldir/dl_${osname}.xs"
5433                 elif $test "$d_dlopen" = "$define" ; then
5434                         dflt="$dldir/dl_dlopen.xs"
5435                 elif $test "$i_dld" = "$define" ; then
5436                         dflt="$dldir/dl_dld.xs"
5437                 else
5438                         dflt=''
5439                 fi
5440                 ;;
5441         *)      dflt="$dldir/$dlsrc"
5442                 ;;
5443         esac
5444     echo "The following dynamic loading files are available:"
5445         : Can not go over to $dldir because getfile has path hard-coded in.
5446         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5447         rp="Source file to use for dynamic loading"
5448         fn="fne"
5449         gfpth="$src"
5450         . ./getfile
5451         usedl="$define"
5452         : emulate basename
5453         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5454
5455         $cat << EOM
5456
5457 Some systems may require passing special flags to $cc -c to
5458 compile modules that will be used to create a shared library.
5459 To use no flags, say "none".
5460
5461 EOM
5462     case "$cccdlflags" in
5463     '') case "$gccversion" in
5464                 '') case "$osname" in
5465                         hpux)   dflt='+z' ;;
5466                         next)   dflt='none' ;;
5467                         irix*)  dflt='-KPIC' ;;
5468                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5469                         sunos)  dflt='-pic' ;;
5470                         *)      dflt='none' ;;
5471                     esac
5472                         ;;
5473                 *)  case "$osname" in
5474                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5475                         *)      dflt='-fpic' ;;
5476                     esac ;;
5477             esac ;;
5478         ' ') dflt='none' ;;
5479     *)  dflt="$cccdlflags" ;;
5480     esac
5481     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5482     . ./myread
5483     case "$ans" in
5484     none) cccdlflags=' ' ;;
5485     *) cccdlflags="$ans" ;;
5486     esac
5487
5488     cat << EOM
5489
5490 Some systems use ld to create libraries that can be dynamically loaded,
5491 while other systems (such as those using ELF) use $cc.
5492
5493 EOM
5494         case "$ld" in
5495         '')     $cat >try.c <<'EOM'
5496 /* Test for whether ELF binaries are produced */
5497 #include <fcntl.h>
5498 #include <stdlib.h>
5499 int main() {
5500         char b[4];
5501         int i = open("a.out",O_RDONLY);
5502         if(i == -1) 
5503                 exit(1); /* fail */
5504         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5505                 exit(0); /* succeed (yes, it's ELF) */
5506         else
5507                 exit(1); /* fail */
5508 }
5509 EOM
5510                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5511                         cat <<EOM
5512 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5513 EOM
5514                         dflt="$cc"
5515                 else
5516                         echo "I'll use ld to build dynamic libraries."
5517                         dflt='ld'
5518                 fi
5519                 rm -f try.c a.out
5520                 ;;
5521         *)      dflt="$ld"
5522                 ;;
5523         esac
5524
5525     rp="What command should be used to create dynamic libraries?"
5526     . ./myread
5527         ld="$ans"
5528
5529     cat << EOM
5530
5531 Some systems may require passing special flags to $ld to create a
5532 library that can be dynamically loaded.  If your ld flags include
5533 -L/other/path options to locate libraries outside your loader's normal
5534 search path, you may need to specify those -L options here as well.  To
5535 use no flags, say "none".
5536
5537 EOM
5538     case "$lddlflags" in
5539     '') case "$osname" in
5540                         beos) dflt='-nostart' ;;
5541                         hpux)  dflt='-b' ;;
5542                         linux|irix*)    dflt='-shared' ;;
5543                         next)  dflt='none' ;;
5544                         solaris) dflt='-G' ;;
5545                         sunos) dflt='-assert nodefinitions' ;;
5546                         svr4*|esix*) dflt="-G $ldflags" ;;
5547                 *)     dflt='none' ;;
5548                         esac
5549                         ;;
5550     *) dflt="$lddlflags" ;;
5551     esac
5552
5553         : Try to guess additional flags to pick up local libraries.
5554         : Be careful not to append to a plain 'none'
5555         case "$dflt" in
5556         none) dflt='' ;;
5557         esac
5558         for thisflag in $ldflags; do
5559                 case "$thisflag" in
5560                 -L*)
5561                         case " $dflt " in
5562                         *" $thisflag "*) ;;
5563                         *) dflt="$dflt $thisflag" ;;
5564                         esac
5565                         ;;
5566                 esac
5567         done
5568
5569         case "$dflt" in
5570         ''|' ') dflt='none' ;;
5571         esac
5572
5573     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5574     . ./myread
5575     case "$ans" in
5576     none) lddlflags=' ' ;;
5577     *) lddlflags="$ans" ;;
5578     esac
5579
5580         cat <<EOM
5581
5582 Some systems may require passing special flags to $cc to indicate that
5583 the resulting executable will use dynamic linking.  To use no flags,
5584 say "none".
5585
5586 EOM
5587     case "$ccdlflags" in
5588     '') case "$osname" in
5589                 hpux)   dflt='-Wl,-E' ;;
5590                 linux)  dflt='-rdynamic' ;;
5591                 next)   dflt='none' ;;
5592                 sunos)  dflt='none' ;;
5593                 *)      dflt='none' ;;
5594             esac ;;
5595     ' ')  dflt='none' ;;
5596     *)  dflt="$ccdlflags" ;;
5597     esac
5598     rp="Any special flags to pass to $cc to use dynamic loading?"
5599     . ./myread
5600     case "$ans" in
5601     none) ccdlflags=' ' ;;
5602     *) ccdlflags="$ans" ;;
5603     esac
5604     ;;
5605 *)  usedl="$undef"
5606         ld='ld'
5607     dlsrc='dl_none.xs'
5608     lddlflags=''
5609     ccdlflags=''
5610     ;;
5611 esac
5612
5613 also=''
5614 case "$usedl" in
5615 $undef)
5616         # No dynamic loading being used, so don't bother even to prompt.
5617         useshrplib='false'
5618         ;;
5619 *)      case "$useshrplib" in
5620         '')     case "$osname" in
5621                 svr4*|dgux|dynixptx|esix|powerux|beos)
5622                         dflt=y
5623                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5624                         ;;
5625                 next*)
5626                         case "$osvers" in
5627                         4*)     dflt=y
5628                                 also='Building a shared libperl is needed for MAB support.'
5629                                 ;;
5630                         *)      dflt=n
5631                                 ;;
5632                         esac
5633                         ;;
5634                 *)      dflt=n
5635                         ;;
5636                 esac
5637                 ;;
5638         $define|true|[Yy]*)
5639                 dflt=y
5640                 ;;
5641         *)      dflt=n
5642                 ;;
5643         esac
5644         $cat << EOM
5645
5646 The perl executable is normally obtained by linking perlmain.c with
5647 libperl${_a}, any static extensions (usually just DynaLoader), and
5648 any other libraries needed on this system (such as -lm, etc.).  Since
5649 your system supports dynamic loading, it is probably possible to build
5650 a shared libperl.$so.  If you will have more than one executable linked
5651 to libperl.$so, this will significantly reduce the size of each
5652 executable, but it may have a noticeable affect on performance.  The
5653 default is probably sensible for your system.
5654 $also
5655
5656 EOM
5657         rp="Build a shared libperl.$so (y/n)"
5658         . ./myread
5659         case "$ans" in
5660         true|$define|[Yy]*)
5661                 useshrplib='true'  ;;
5662         *)      useshrplib='false' ;;
5663         esac
5664         ;;
5665 esac
5666
5667 case "$useshrplib" in
5668 true)
5669         case "$libperl" in
5670         '')
5671                 # Figure out a good name for libperl.so.  Since it gets stored in
5672                 # a version-specific architecture-dependent library, the version
5673                 # number isn't really that important, except for making cc/ld happy.
5674                 #
5675                 # A name such as libperl.so.3.1
5676                 majmin="libperl.$so.$patchlevel.$subversion"
5677                 # A name such as libperl.so.301
5678                 majonly=`echo $patchlevel $subversion |
5679                         $awk '{printf "%d%02d", $1, $2}'`
5680                 majonly=libperl.$so.$majonly
5681                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5682                 # rely on figuring it out from the naming of libc.
5683                 case "${osname}${osvers}" in
5684                 next4*)
5685                         dflt=libperl.5.$so
5686                         # XXX How handle the --version stuff for MAB?
5687                         ;;
5688                 linux*)  # ld won't link with a bare -lperl otherwise.
5689                         dflt=libperl.$so
5690                         ;;
5691                 *)      # Try to guess based on whether libc has major.minor.
5692                         case "$libc" in
5693                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5694                         *libc.$so.[0-9]*) dflt=$majonly ;;
5695                         *)      dflt=libperl.$so ;;
5696                         esac
5697                         ;;
5698                 esac
5699                 ;;
5700         *)      dflt=$libperl
5701                 ;;
5702         esac
5703         cat << EOM
5704
5705 I need to select a good name for the shared libperl.  If your system uses
5706 library names with major and minor numbers, then you might want something
5707 like $majmin.  Alternatively, if your system uses a single version
5708 number for shared libraries, then you might want to use $majonly.
5709 Or, your system might be quite happy with a simple libperl.$so.
5710
5711 Since the shared libperl will get installed into a version-specific
5712 architecture-dependent directory, the version number of the shared perl
5713 library probably isn't important, so the default should be o.k.
5714
5715 EOM
5716         rp='What name do you want to give to the shared libperl?'
5717         . ./myread
5718         libperl=$ans
5719         echo "Ok, I'll use $libperl"
5720         ;;
5721 *)
5722         libperl="libperl${_a}"
5723         ;;
5724 esac
5725
5726 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5727 case "$shrpdir" in
5728 '') ;;
5729 *)      $cat >&4 <<EOM
5730 WARNING:  Use of the shrpdir variable for the installation location of
5731 the shared $libperl is not supported.  It was never documented and
5732 will not work in this version.  Let me (perlbug@perl.com)
5733 know of any problems this may cause.
5734
5735 EOM
5736         case "$shrpdir" in
5737         "$archlibexp/CORE")
5738                 $cat >&4 <<EOM
5739 But your current setting of $shrpdir is
5740 the default anyway, so it's harmless.
5741 EOM
5742                 ;;
5743         *)
5744                 $cat >&4 <<EOM
5745 Further, your current attempted setting of $shrpdir
5746 conflicts with the value of $archlibexp/CORE
5747 that installperl will use.
5748 EOM
5749                 ;;
5750         esac
5751         ;;
5752 esac
5753
5754 # How will the perl executable find the installed shared $libperl?
5755 # Add $xxx to ccdlflags.
5756 # If we can't figure out a command-line option, use $shrpenv to
5757 # set env LD_RUN_PATH.  The main perl makefile uses this.
5758 shrpdir=$archlibexp/CORE
5759 xxx=''
5760 tmp_shrpenv=''
5761 if "$useshrplib"; then
5762     case "$osname" in 
5763         aix)
5764                 # We'll set it in Makefile.SH...
5765                 ;;
5766         solaris|netbsd)
5767                 xxx="-R $shrpdir"
5768                 ;;
5769         freebsd)
5770                 xxx="-Wl,-R$shrpdir"
5771                 ;;
5772         linux|irix*|dec_osf)
5773                 xxx="-Wl,-rpath,$shrpdir"
5774                 ;;
5775         next)
5776                 # next doesn't like the default...
5777                 ;;
5778         beos)
5779                 # beos doesn't like the default, either.
5780                 ;;
5781         hpux*)
5782                 # hpux doesn't like the default, either.
5783                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5784                 ;;
5785         *)
5786                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5787                 ;;
5788         esac
5789         case "$xxx" in
5790         '') ;;
5791         *)      
5792                 # Only add $xxx if it isn't already in ccdlflags.
5793                 case " $ccdlflags " in
5794                 *" $xxx "*)     ;;
5795                 *)      ccdlflags="$ccdlflags $xxx"
5796                         cat <<EOM >&4
5797
5798 Adding $xxx to the flags
5799 passed to $ld so that the perl executable will find the 
5800 installed shared $libperl.
5801
5802 EOM
5803                         ;;
5804                 esac
5805                 ;;
5806         esac
5807 fi
5808 # Fix ccdlflags in AIX for building external extensions.
5809 # (For building Perl itself bare -bE:perl.exp is needed,
5810 #  Makefile.SH takes care of this.)
5811 case "$osname" in
5812 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5813 esac
5814 # Respect a hint or command-line value.
5815 case "$shrpenv" in
5816 '') shrpenv="$tmp_shrpenv" ;;
5817 esac
5818 case "$ldlibpthname" in
5819 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5820 none)   ldlibpthname='' ;;
5821 esac
5822
5823 : determine where manual pages go
5824 set man1dir man1dir none
5825 eval $prefixit
5826 $cat <<EOM
5827
5828 $spackage has manual pages available in source form.
5829 EOM
5830 case "$nroff" in
5831 nroff)
5832         echo "However, you don't have nroff, so they're probably useless to you."
5833         case "$man1dir" in
5834         '') man1dir="none";;
5835         esac;;
5836 esac
5837 echo "If you don't want the manual sources installed, answer 'none'."
5838 case "$man1dir" in
5839 ' ') dflt=none
5840         ;;
5841 '')
5842         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5843         lookpath="$lookpath $prefixexp/man/p_man/man1"
5844         lookpath="$lookpath $prefixexp/man/u_man/man1"
5845         lookpath="$lookpath $prefixexp/man/man.1"
5846         case "$sysman" in
5847         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5848         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5849         esac
5850         set dflt
5851         eval $prefixup
5852         ;;
5853 *)  dflt="$man1dir"
5854         ;;
5855 esac
5856 echo " "
5857 fn=dn+~
5858 rp="Where do the main $spackage manual pages (source) go?"
5859 . ./getfile
5860 if $test "X$man1direxp" != "X$ansexp"; then
5861         installman1dir=''
5862 fi
5863 man1dir="$ans"
5864 man1direxp="$ansexp"
5865 case "$man1dir" in
5866 '')     man1dir=' '
5867         installman1dir='';;
5868 esac
5869
5870 : Change installation prefix, if necessary.
5871 if $test X"$prefix" != X"$installprefix"; then
5872         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
5873 else
5874         installman1dir="$man1direxp"
5875 fi
5876
5877 : What suffix to use on installed man pages
5878
5879 case "$man1dir" in
5880 ' ')
5881         man1ext='0'
5882         ;;
5883 *)
5884         rp="What suffix should be used for the main $spackage man pages?"
5885         case "$man1ext" in
5886         '')     case "$man1dir" in
5887                 *1)  dflt=1 ;;
5888                 *1p) dflt=1p ;;
5889                 *1pm) dflt=1pm ;;
5890                 *l) dflt=l;;
5891                 *n) dflt=n;;
5892                 *o) dflt=o;;
5893                 *p) dflt=p;;
5894                 *C) dflt=C;;
5895                 *L) dflt=L;;
5896                 *L1) dflt=L1;;
5897                 *) dflt=1;;
5898                 esac
5899                 ;;
5900         *)      dflt="$man1ext";;
5901         esac
5902         . ./myread
5903         man1ext="$ans"
5904         ;;
5905 esac
5906
5907 : see if we can have long filenames
5908 echo " "
5909 rmlist="$rmlist /tmp/cf$$"
5910 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5911 first=123456789abcdef
5912 second=/tmp/cf$$/$first
5913 $rm -f $first $second
5914 if (echo hi >$first) 2>/dev/null; then
5915         if $test -f 123456789abcde; then
5916                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5917                 val="$undef"
5918         else
5919                 if (echo hi >$second) 2>/dev/null; then
5920                         if $test -f /tmp/cf$$/123456789abcde; then
5921                                 $cat <<'EOM'
5922 That's peculiar... You can have filenames longer than 14 characters, but only
5923 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5924 I shall consider your system cannot support long filenames at all.
5925 EOM
5926                                 val="$undef"
5927                         else
5928                                 echo 'You can have filenames longer than 14 characters.' >&4
5929                                 val="$define"
5930                         fi
5931                 else
5932                         $cat <<'EOM'
5933 How confusing! Some of your filesystems are sane enough to allow filenames
5934 longer than 14 characters but some others like /tmp can't even think about them.
5935 So, for now on, I shall assume your kernel does not allow them at all.
5936 EOM
5937                         val="$undef"
5938                 fi
5939         fi
5940 else
5941         $cat <<'EOM'
5942 You can't have filenames longer than 14 chars.  You can't even think about them!
5943 EOM
5944         val="$undef"
5945 fi 
5946 set d_flexfnam
5947 eval $setvar
5948 $rm -rf /tmp/cf$$ 123456789abcde*
5949
5950 : determine where library module manual pages go
5951 set man3dir man3dir none
5952 eval $prefixit
5953 $cat <<EOM
5954
5955 $spackage has manual pages for many of the library modules.
5956 EOM
5957
5958 case "$nroff" in
5959 nroff)
5960         $cat <<'EOM'
5961 However, you don't have nroff, so they're probably useless to you.
5962 EOM
5963         case "$man3dir" in
5964         '') man3dir="none";;
5965         esac;;
5966 esac
5967
5968 case "$d_flexfnam" in
5969 undef)
5970         $cat <<'EOM'
5971 However, your system can't handle the long file names like File::Basename.3. 
5972 EOM
5973         case "$man3dir" in
5974         '') man3dir="none";;
5975         esac;;
5976 esac
5977
5978 echo "If you don't want the manual sources installed, answer 'none'."
5979 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5980 case "$man3dir" in
5981 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5982         if $test -d "$privlib/man/man3"; then
5983                 cat <<EOM >&4
5984
5985 WARNING:  Previous versions of perl installed man3 pages into
5986 $privlib/man/man3.  This version will suggest a 
5987 new default of $dflt.  
5988 EOM
5989                 tdflt=$dflt
5990                 dflt='n'
5991                 rp='Do you wish to preserve the old behavior?(y/n)'
5992                 . ./myread
5993                 case "$ans" in
5994                 y*) dflt="$privlib/man/man3" ;;
5995                 *)  dflt=$tdflt ;;
5996                 esac
5997     fi
5998         ;;
5999 ' ') dflt=none;;
6000 *)      dflt="$man3dir" ;;
6001 esac
6002 echo " "
6003 fn=dn+~
6004 rp="Where do the $package library man pages (source) go?"
6005 . ./getfile
6006 man3dir="$ans"
6007 man3direxp="$ansexp"
6008 case "$man1dir" in
6009 '')     man3dir=' '
6010         installman3dir='';;
6011 esac
6012
6013 : Change installation prefix, if necessary.
6014 if $test X"$prefix" != X"$installprefix"; then
6015         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6016 else
6017         installman3dir="$man3direxp"
6018 fi
6019
6020 : What suffix to use on installed man pages
6021 case "$man3dir" in
6022 ' ')
6023         man3ext='0'
6024         ;;
6025 *)
6026         rp="What suffix should be used for the $package library man pages?"
6027         case "$man3ext" in
6028         '')     case "$man3dir" in
6029                 *3)  dflt=3 ;;
6030                 *3p) dflt=3p ;;
6031                 *3pm) dflt=3pm ;;
6032                 *l) dflt=l;;
6033                 *n) dflt=n;;
6034                 *o) dflt=o;;
6035                 *p) dflt=p;;
6036                 *C) dflt=C;;
6037                 *L) dflt=L;;
6038                 *L3) dflt=L3;;
6039                 *) dflt=3;;
6040                 esac
6041                 ;;
6042         *)      dflt="$man3ext";;
6043         esac
6044         . ./myread
6045         man3ext="$ans"
6046         ;;
6047 esac
6048
6049 : see if we have to deal with yellow pages, now NIS.
6050 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6051         if $test -f /usr/etc/nibindd; then
6052                 echo " "
6053                 echo "I'm fairly confident you're on a NeXT."
6054                 echo " "
6055                 rp='Do you get the hosts file via NetInfo?'
6056                 dflt=y
6057                 case "$hostcat" in
6058                 nidump*) ;;
6059                 '') ;;
6060                 *) dflt=n;;
6061                 esac
6062                 . ./myread
6063                 case "$ans" in
6064                 y*) hostcat='nidump hosts .';;
6065                 *)      case "$hostcat" in
6066                         nidump*) hostcat='';;
6067                         esac
6068                         ;;
6069                 esac
6070         fi
6071         case "$hostcat" in
6072         nidump*) ;;
6073         *)
6074                 case "$hostcat" in
6075                 *ypcat*) dflt=y;;
6076                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6077                                 dflt=y
6078                         else
6079                                 dflt=n
6080                         fi;;
6081                 *) dflt=n;;
6082                 esac
6083                 echo " "
6084                 rp='Are you getting the hosts file via yellow pages?'
6085                 . ./myread
6086                 case "$ans" in
6087                 y*) hostcat='ypcat hosts';;
6088                 *) hostcat='cat /etc/hosts';;
6089                 esac
6090                 ;;
6091         esac
6092 fi
6093 case "$hostcat" in
6094 '') hostcat='cat /etc/hosts';;
6095 esac
6096 case "$groupcat" in
6097 '') groupcat='cat /etc/group';;
6098 esac
6099 case "$passcat" in
6100 '') passcat='cat /etc/passwd';;
6101 esac
6102
6103 : now get the host name
6104 echo " "
6105 echo "Figuring out host name..." >&4
6106 case "$myhostname" in
6107 '') cont=true
6108         echo 'Maybe "hostname" will work...'
6109         if tans=`sh -c hostname 2>&1` ; then
6110                 myhostname=$tans
6111                 phostname=hostname
6112                 cont=''
6113         fi
6114         ;;
6115 *) cont='';;
6116 esac
6117 if $test "$cont"; then
6118         if ./xenix; then
6119                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6120                 if tans=`cat /etc/systemid 2>&1` ; then
6121                         myhostname=$tans
6122                         phostname='cat /etc/systemid'
6123                         echo "Whadyaknow.  Xenix always was a bit strange..."
6124                         cont=''
6125                 fi
6126         elif $test -r /etc/systemid; then
6127                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6128         fi
6129 fi
6130 if $test "$cont"; then
6131         echo 'No, maybe "uuname -l" will work...'
6132         if tans=`sh -c 'uuname -l' 2>&1` ; then
6133                 myhostname=$tans
6134                 phostname='uuname -l'
6135         else
6136                 echo 'Strange.  Maybe "uname -n" will work...'
6137                 if tans=`sh -c 'uname -n' 2>&1` ; then
6138                         myhostname=$tans
6139                         phostname='uname -n'
6140                 else
6141                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6142                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6143                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6144                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6145                         else
6146                                 case "$myhostname" in
6147                                 '') echo "Does this machine have an identity crisis or something?"
6148                                         phostname='';;
6149                                 *)
6150                                         echo "Well, you said $myhostname before..."
6151                                         phostname='echo $myhostname';;
6152                                 esac
6153                         fi
6154                 fi
6155         fi
6156 fi
6157 : you do not want to know about this
6158 set $myhostname
6159 myhostname=$1
6160
6161 : verify guess
6162 if $test "$myhostname" ; then
6163         dflt=y
6164         rp='Your host name appears to be "'$myhostname'".'" Right?"
6165         . ./myread
6166         case "$ans" in
6167         y*) ;;
6168         *) myhostname='';;
6169         esac
6170 fi
6171
6172 : bad guess or no guess
6173 while $test "X$myhostname" = X ; do
6174         dflt=''
6175         rp="Please type the (one word) name of your host:"
6176         . ./myread
6177         myhostname="$ans"
6178 done
6179
6180 : translate upper to lower if necessary
6181 case "$myhostname" in
6182 *[A-Z]*)
6183         echo "(Normalizing case in your host name)"
6184         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6185         ;;
6186 esac
6187
6188 case "$myhostname" in
6189 *.*)
6190         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6191         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6192         echo "(Trimming domain name from host name--host name is now $myhostname)"
6193         ;;
6194 *) case "$mydomain" in
6195         '')
6196                 {
6197                         test "X$hostcat" = "Xypcat hosts" &&
6198                         ypmatch "$myhostname" hosts 2>/dev/null |\
6199                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6200                         $test -s hosts
6201                 } || {
6202                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6203                                         /[       ]$myhostname[  . ]/p" > hosts
6204                 }
6205                 tmp_re="[       . ]"
6206                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6207                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6208                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6209                         hosts | $sort | $uniq | \
6210                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6211                 case `$echo X$dflt` in
6212                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6213                         dflt=.
6214                         ;;
6215                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6216                         ;;
6217                 esac
6218                 case "$dflt" in
6219                 .)
6220                         tans=`./loc resolv.conf X /etc /usr/etc`
6221                         if $test -f "$tans"; then
6222                                 echo "(Attempting domain name extraction from $tans)"
6223                                 dflt=.`$sed -n -e 's/   / /g' \
6224                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6225                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6226                                 case "$dflt" in
6227                                 .) dflt=.`$sed -n -e 's/        / /g' \
6228                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6229                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6230                                         ;;
6231                                 esac
6232                         fi
6233                         ;;
6234                 esac
6235                 case "$dflt" in
6236                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6237                         dflt=.`sh -c domainname 2>/dev/null`
6238                         case "$dflt" in
6239                         '') dflt='.';;
6240                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6241                         esac
6242                         ;;
6243                 esac
6244                 case "$dflt" in
6245                 .) echo "(Lost all hope -- silly guess then)"
6246                         dflt='.uucp'
6247                         ;;
6248                 esac
6249                 $rm -f hosts
6250                 ;;
6251         *) dflt="$mydomain";;
6252         esac;;
6253 esac
6254 echo " "
6255 rp="What is your domain name?"
6256 . ./myread
6257 tans="$ans"
6258 case "$ans" in
6259 '') ;;
6260 .*) ;;
6261 *) tans=".$tans";;
6262 esac
6263 mydomain="$tans"
6264
6265 : translate upper to lower if necessary
6266 case "$mydomain" in
6267 *[A-Z]*)
6268         echo "(Normalizing case in your domain name)"
6269         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6270         ;;
6271 esac
6272
6273 : a little sanity check here
6274 case "$phostname" in
6275 '') ;;
6276 *)
6277         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6278         $myhostname$mydomain|$myhostname) ;;
6279         *)
6280                 case "$phostname" in
6281                 sed*)
6282                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6283                         ;;
6284                 *)
6285                         echo "(That doesn't agree with your $phostname command, by the way.)"
6286                         ;;
6287                 esac
6288         ;;
6289         esac
6290         ;;
6291 esac
6292
6293 $cat <<EOM
6294
6295 I need to get your e-mail address in Internet format if possible, i.e.
6296 something like user@host.domain. Please answer accurately since I have
6297 no easy means to double check it. The default value provided below
6298 is most probably close to the reality but may not be valid from outside
6299 your organization...
6300
6301 EOM
6302 cont=x
6303 while test "$cont"; do
6304         case "$cf_email" in
6305         '') dflt="$cf_by@$myhostname$mydomain";;
6306         *) dflt="$cf_email";;
6307         esac
6308         rp='What is your e-mail address?'
6309         . ./myread
6310         cf_email="$ans"
6311         case "$cf_email" in
6312         *@*.*) cont='' ;;
6313         *)
6314                 rp='Address does not look like an Internet one.  Use it anyway?'
6315                 case "$fastread" in
6316                 yes) dflt=y ;;
6317                 *) dflt=n ;;
6318                 esac
6319                 . ./myread
6320                 case "$ans" in
6321                 y*) cont='' ;;
6322                 *) echo " " ;;
6323                 esac
6324                 ;;
6325         esac
6326 done
6327
6328 $cat <<EOM
6329
6330 If you or somebody else will be maintaining perl at your site, please
6331 fill in the correct e-mail address here so that they may be contacted
6332 if necessary. Currently, the "perlbug" program included with perl
6333 will send mail to this address in addition to perlbug@perl.com. You may
6334 enter "none" for no administrator.
6335
6336 EOM
6337 case "$perladmin" in
6338 '') dflt="$cf_email";;
6339 *) dflt="$perladmin";;
6340 esac
6341 rp='Perl administrator e-mail address'
6342 . ./myread
6343 perladmin="$ans"
6344
6345 : figure out how to guarantee perl startup
6346 case "$startperl" in
6347 '')
6348         case "$sharpbang" in
6349         *!)
6350                 $cat <<EOH
6351
6352 I can use the #! construct to start perl on your system. This will
6353 make startup of perl scripts faster, but may cause problems if you
6354 want to share those scripts and perl is not in a standard place
6355 ($binexp/perl) on all your platforms. The alternative is to force
6356 a shell by starting the script with a single ':' character.
6357
6358 EOH
6359                 dflt="$binexp/perl"
6360                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6361                 . ./myread
6362                 case "$ans" in
6363                 none)   startperl=": # use perl";;
6364                 *)      startperl="#!$ans"
6365                         if $test 30 -lt `echo "$ans" | wc -c`; then
6366                                 $cat >&4 <<EOM
6367
6368 WARNING:  Some systems limit the #! command to 32 characters.
6369 If you experience difficulty running Perl scripts with #!, try
6370 installing Perl in a directory with a shorter pathname.
6371
6372 EOM
6373                         fi ;;
6374                 esac
6375                 ;;
6376         *) startperl=": # use perl"
6377                 ;;
6378         esac
6379         ;;
6380 esac
6381 echo "I'll use $startperl to start perl scripts."
6382
6383 : figure best path for perl in scripts
6384 case "$perlpath" in
6385 '')
6386         perlpath="$binexp/perl"
6387         case "$startperl" in
6388         *!*) ;;
6389         *)
6390                 $cat <<EOH
6391
6392 I will use the "eval 'exec'" idiom to start Perl on your system.
6393 I can use the full path of your Perl binary for this purpose, but
6394 doing so may cause problems if you want to share those scripts and
6395 Perl is not always in a standard place ($binexp/perl).
6396
6397 EOH
6398                 dflt="$binexp/perl"
6399                 rp="What path shall I use in \"eval 'exec'\"?"
6400                 . ./myread
6401                 perlpath="$ans"
6402                 ;;
6403         esac
6404         ;;
6405 esac
6406 case "$startperl" in
6407 *!*)    ;;
6408 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6409 esac
6410
6411 : determine where public executable scripts go
6412 set scriptdir scriptdir
6413 eval $prefixit
6414 case "$scriptdir" in
6415 '')
6416         dflt="$bin"
6417         : guess some guesses
6418         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6419         $test -d /usr/share/bin     && dflt=/usr/share/bin
6420         $test -d /usr/local/script  && dflt=/usr/local/script
6421         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6422         $test -d $prefixexp/script  && dflt=$prefixexp/script
6423         set dflt
6424         eval $prefixup
6425         ;;
6426 *)  dflt="$scriptdir"
6427         ;;
6428 esac
6429 $cat <<EOM
6430  
6431 Some installations have a separate directory just for executable scripts so
6432 that they can mount it across multiple architectures but keep the scripts in
6433 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6434 Or you might just lump your scripts in with all your other executables.
6435  
6436 EOM
6437 fn=d~
6438 rp='Where do you keep publicly executable scripts?'
6439 . ./getfile
6440 if $test "X$ansexp" != "X$scriptdirexp"; then
6441         installscript=''
6442 fi
6443 scriptdir="$ans"
6444 scriptdirexp="$ansexp"
6445 : Change installation prefix, if necessary.
6446 if $test X"$prefix" != X"$installprefix"; then
6447         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
6448 else
6449         installscript="$scriptdirexp"
6450 fi
6451
6452 $cat <<EOM
6453
6454 After $package is installed, you may wish to install various
6455 add-on modules and utilities.  Typically, these add-ons will
6456 be installed under $prefix with the rest
6457 of this package.  However, you may wish to install such add-ons
6458 elsewhere under a different prefix.
6459
6460 If you do not wish to put everything under a single prefix, that's
6461 ok.  You will be prompted for the individual locations; this siteprefix
6462 is only used to suggest the defaults.
6463
6464 The default should be fine for most people.
6465
6466 EOM
6467 fn=d~+
6468 rp='Installation prefix to use for add-on modules and utilities?'
6469 : XXX Here might be another good place for an installstyle setting.
6470 case "$siteprefix" in
6471 '') dflt=$prefix ;;
6472 *)  dflt=$siteprefix ;;
6473 esac
6474 . ./getfile
6475 oldsiteprefix=''
6476 case "$siteprefix" in
6477 '') ;;
6478 *)
6479         case "$ans" in
6480         "$prefix") ;;
6481         *) oldsiteprefix="$prefix";;
6482         esac
6483         ;;
6484 esac
6485 siteprefix="$ans"
6486 siteprefixexp="$ansexp"
6487
6488 : determine where site specific libraries go.
6489 : Usual default is /usr/local/lib/perl5/site_perl
6490 : The default "style" setting is made in installstyle.U
6491 : XXX No longer works with Prefixit stuff.
6492 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6493 case "$installstyle" in
6494 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6495 *)       dflt=$siteprefix/lib/site_$prog ;;
6496 esac
6497 $cat <<EOM
6498
6499 The installation process will create a directory for
6500 site-specific extensions and modules.  Most users find it convenient
6501 to place all site-specific files in this directory rather than in the
6502 main distribution directory.
6503
6504 EOM
6505 fn=d~+
6506 rp='Pathname for the site-specific library files?'
6507 . ./getfile
6508 sitelib="$ans"
6509 sitelibexp="$ansexp"
6510 : Change installation prefix, if necessary.
6511 if $test X"$prefix" != X"$installprefix"; then
6512         installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
6513 else
6514         installsitelib="$sitelibexp"
6515 fi
6516
6517 : determine where site specific architecture-dependent libraries go.
6518 : sitelib  default is /usr/local/lib/perl5/site_perl/
6519 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6520 : sitelib may have an optional trailing /share.
6521 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6522 tdflt="$tdflt/$apiversion/$archname"
6523 set sitearch sitearch none
6524 eval $prefixit
6525 case "$sitearch" in
6526 '')     dflt="$tdflt" ;;
6527 *)      dflt="$sitearch" ;;
6528 esac
6529 $cat <<EOM
6530
6531 The installation process will also create a directory for
6532 architecture-dependent site-specific extensions and modules.
6533
6534 EOM
6535 fn=nd~+
6536 rp='Pathname for the site-specific architecture-dependent library files?'
6537 . ./getfile
6538 sitearch="$ans"
6539 sitearchexp="$ansexp"
6540 : Change installation prefix, if necessary.
6541 if $test X"$prefix" != X"$installprefix"; then
6542         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6543 else
6544         installsitearch="$sitearchexp"
6545 fi
6546
6547 : determine where add-on public executables go
6548 case "$sitebin" in
6549 '')     dflt=$siteprefix/bin ;;
6550 *)      dflt=$sitebin ;;
6551 esac
6552 fn=d~
6553 rp='Pathname where the add-on public executables should be installed?'
6554 . ./getfile
6555 sitebin="$ans"
6556 sitebinexp="$ansexp"
6557 : Change installation prefix, if necessary.
6558 if $test X"$prefix" != X"$installprefix"; then
6559         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
6560 else
6561         installsitebin="$sitebinexp"
6562 fi
6563
6564 cat <<EOM
6565
6566 Perl can be built to take advantage of long doubles which
6567 (if available) may give more accuracy and range for floating point
6568 numbers.  To do so, Configure must be run with -Duselongdouble.
6569
6570 If this doesn't make any sense to you, just accept the default 'n'.
6571 EOM
6572 case "$uselongdouble" in
6573 $define|true|[yY]*)     dflt='y';;
6574 *) dflt='n';;
6575 esac
6576 rp='Try to use long doubles if available?'
6577 . ./myread
6578 case "$ans" in
6579 y|Y)    val="$define"   ;;
6580 *)      val="$undef"    ;;
6581 esac
6582 set uselongdouble
6583 eval $setvar
6584
6585 case "$uselongdouble" in
6586 "$define"|true|[yY]*)
6587 : Look for a hint-file generated 'call-back-unit'.  If the
6588 : user has specified that long doubles should be used,
6589 : we may need to set or change some other defaults.
6590         if $test -f uselongdouble.cbu; then
6591                 echo "Your platform has some specific hints for long doubles, using them..."
6592                 . ./uselongdouble.cbu
6593         else
6594                 $cat <<EOM
6595 (Your platform doesn't have any specific hints for long doubles.)
6596 EOM
6597         fi
6598         ;;
6599 esac
6600
6601 cat <<EOM
6602
6603 Previous version of $package used the standard IO mechanisms as defined
6604 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6605 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6606 the default.  This abstraction layer can use AT&T's sfio (if you already
6607 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6608 problems with some extension modules.  Using PerlIO with stdio is safe,
6609 but it is slower than plain stdio and therefore is not the default.
6610
6611 If this doesn't make any sense to you, just accept the default 'n'.
6612 EOM
6613 case "$useperlio" in
6614 $define|true|[yY]*)     dflt='y';;
6615 *) dflt='n';;
6616 esac
6617 rp='Use the experimental PerlIO abstraction layer?'
6618 . ./myread
6619 case "$ans" in
6620 y|Y) 
6621         val="$define"
6622         ;;     
6623 *)      
6624         echo "Ok, doing things the stdio way"
6625         val="$undef"
6626         ;;
6627 esac
6628 set useperlio
6629 eval $setvar 
6630
6631 case "$vendorprefix" in
6632 '')     d_vendorbin="$undef"
6633         vendorbin=''
6634         vendorbinexp=''
6635         ;;
6636 *)      d_vendorbin="$define"
6637         : determine where vendor-supplied executables go.
6638         dflt=$vendorprefix/bin
6639         fn=d~+
6640         rp='Pathname for the vendor-supplied executables directory?'
6641         . ./getfile
6642         vendorbin="$ans"
6643         vendorbinexp="$ansexp"
6644         : Change installation prefix, if necessary.
6645         if $test X"$prefix" != X"$installprefix"; then
6646                 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
6647         else
6648                 installvendorbin="$vendorbinexp"
6649         fi
6650         ;;
6651 esac
6652
6653 : Check how to convert floats to strings.
6654 if test "X$d_Gconvert" = X; then
6655         echo " "
6656         echo "Checking for an efficient way to convert floats to strings."
6657         $cat >try.c <<'EOP'
6658 #ifdef TRY_gconvert
6659 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6660 char *myname = "gconvert";
6661 #endif
6662 #ifdef TRY_gcvt
6663 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6664 char *myname = "gcvt";
6665 #endif
6666 #ifdef TRY_sprintf
6667 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6668 char *myname = "sprintf";
6669 #endif
6670
6671 #include <stdio.h>
6672
6673 int
6674 checkit(expect, got)
6675 char *expect;
6676 char *got;
6677 {
6678     if (strcmp(expect, got)) {
6679                 printf("%s oddity:  Expected %s, got %s\n",
6680                         myname, expect, got);
6681                 exit(1);
6682         }
6683 }
6684
6685 int main()
6686
6687         char buf[64]; 
6688         buf[63] = '\0';
6689
6690         /* This must be 1st test on (which?) platform */
6691         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6692         Gconvert(0.1, 8, 0, buf);
6693         checkit("0.1", buf);
6694
6695         Gconvert(1.0, 8, 0, buf); 
6696         checkit("1", buf);
6697
6698         Gconvert(0.0, 8, 0, buf); 
6699         checkit("0", buf);
6700
6701         Gconvert(-1.0, 8, 0, buf); 
6702         checkit("-1", buf);
6703
6704         /* Some Linux gcvt's give 1.e+5 here. */
6705         Gconvert(100000.0, 8, 0, buf); 
6706         checkit("100000", buf);
6707         
6708         /* Some Linux gcvt's give -1.e+5 here. */
6709         Gconvert(-100000.0, 8, 0, buf); 
6710         checkit("-100000", buf);
6711
6712         exit(0);
6713 }
6714 EOP
6715         case "$d_Gconvert" in
6716         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6717         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6718         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6719         *) xxx_list='gconvert gcvt sprintf' ;;
6720         esac
6721
6722         for xxx_convert in $xxx_list; do
6723                 echo "Trying $xxx_convert"
6724                 $rm -f try try$_o
6725                 set try -DTRY_$xxx_convert
6726                 if eval $compile; then
6727                         echo "$xxx_convert" found. >&4
6728                         if ./try; then
6729                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6730                                 break;
6731                         else
6732                                 echo "...But $xxx_convert didn't work as I expected."
6733                         fi
6734                 else
6735                         echo "$xxx_convert NOT found." >&4
6736                 fi
6737         done
6738                 
6739         case "$xxx_convert" in
6740         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6741         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6742         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6743         esac
6744 fi
6745
6746 : see if inttypes.h is available
6747 : we want a real compile instead of Inhdr because some systems
6748 : have an inttypes.h which includes non-existent headers
6749 echo " "
6750 $cat >try.c <<EOCP
6751 #include <inttypes.h>
6752 int main() {
6753         static int32_t foo32 = 0x12345678;
6754 }
6755 EOCP
6756 set try
6757 if eval $compile; then
6758         echo "<inttypes.h> found." >&4
6759         val="$define"
6760 else
6761         echo "<inttypes.h> NOT found." >&4
6762         val="$undef"
6763 fi
6764 $rm -f try.c try
6765 set i_inttypes
6766 eval $setvar
6767
6768 : check for int64_t
6769 case "$use64bits" in
6770 "$define" )
6771         echo " "
6772         $echo $n "Checking to see if your system supports int64_t...$c" >&4
6773         $cat >try.c <<EOCP
6774 #include <sys/types.h>
6775 #$i_inttypes I_INTTYPES
6776 #ifdef I_INTTYPES
6777 #include <inttypes.h>
6778 #endif
6779 int64_t foo() { int64_t x; x = 7; return x; }
6780 EOCP
6781         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6782                 val="$define"
6783                 echo " Yup, it does." >&4
6784         else
6785                 val="$undef"
6786                 echo " Nope, it doesn't." >&4
6787         fi
6788         $rm -f try.*
6789         ;;
6790 *)      val="$undef"
6791         ;;
6792 esac
6793 set d_int64t
6794 eval $setvar
6795
6796
6797 : check for lengths of integral types
6798 echo " "
6799 case "$intsize" in
6800 '')
6801         echo "Checking to see how big your integers are..." >&4
6802         $cat >intsize.c <<'EOCP'
6803 #include <stdio.h>
6804 int main()
6805 {
6806         printf("intsize=%d;\n", sizeof(int));
6807         printf("longsize=%d;\n", sizeof(long));
6808         printf("shortsize=%d;\n", sizeof(short));
6809         exit(0);
6810 }
6811 EOCP
6812         set intsize
6813         if eval $compile_ok && ./intsize > /dev/null; then
6814                 eval `./intsize`
6815                 echo "Your integers are $intsize bytes long."
6816                 echo "Your long integers are $longsize bytes long."
6817                 echo "Your short integers are $shortsize bytes long."
6818         else
6819                 $cat >&4 <<EOM
6820 !
6821 Help! I can't compile and run the intsize test program: please enlighten me!
6822 (This is probably a misconfiguration in your system or libraries, and
6823 you really ought to fix it.  Still, I'll try anyway.)
6824 !
6825 EOM
6826                 dflt=4
6827                 rp="What is the size of an integer (in bytes)?"
6828                 . ./myread
6829                 intsize="$ans"
6830                 dflt=$intsize
6831                 rp="What is the size of a long integer (in bytes)?"
6832                 . ./myread
6833                 longsize="$ans"
6834                 dflt=2
6835                 rp="What is the size of a short integer (in bytes)?"
6836                 . ./myread
6837                 shortsize="$ans"
6838         fi
6839         ;;
6840 esac
6841 $rm -f intsize intsize.*
6842
6843 : check for long long
6844 echo " "
6845 $echo $n "Checking to see if your system supports long long...$c" >&4
6846 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
6847 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6848         val="$define"
6849         echo " Yup, it does." >&4
6850 else
6851         val="$undef"
6852         echo " Nope, it doesn't." >&4
6853 fi
6854 $rm try.*
6855 set d_longlong
6856 eval $setvar
6857
6858 : check for length of long long
6859 case "${d_longlong}${longlongsize}" in
6860 $define)
6861         echo " "
6862         $echo $n "Checking to see how big your long longs are...$c" >&4
6863         $cat >try.c <<'EOCP'
6864 #include <stdio.h>
6865 int main()
6866 {
6867         printf("%d\n", sizeof(long long));
6868 }
6869 EOCP
6870         set try
6871         if eval $compile_ok; then
6872                 longlongsize=`./try`
6873                 $echo " $longlongsize bytes." >&4
6874         else
6875                 dflt='8'
6876                 echo " "
6877                 echo "(I can't seem to compile the test program.  Guessing...)"
6878                 rp="What is the size of a long long (in bytes)?"
6879                 . ./myread
6880                 longlongsize="$ans"
6881         fi
6882         if $test "X$longsize" = "X$longlongsize"; then
6883                 echo "(That isn't any different from an ordinary long.)"
6884         fi      
6885         ;;
6886 esac
6887 $rm -f try.c try
6888
6889 echo " "
6890
6891 if $test X"$intsize" = X8 -o X"$longsize" = X8 -o X"$d_int64t" = X"$define" -o X"$d_longlong" = X"$define"; then
6892
6893 echo "Checking how to print 64-bit integers..." >&4
6894
6895 if $test X"$sPRId64" = X -a X"$intsize" = X8; then
6896         quad=int
6897         $cat >try.c <<'EOCP'
6898 #include <sys/types.h>
6899 #include <stdio.h>
6900 int main() {
6901   int q = 12345678901;
6902   printf("%ld\n", q);
6903 }
6904 EOCP
6905         set try
6906         if eval $compile; then
6907                 yyy=`./try$exe_ext`
6908                 case "$yyy" in
6909                 12345678901)
6910                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
6911                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
6912                         echo "We will use %d."
6913                         ;;
6914                 esac
6915         fi
6916 fi
6917
6918 if $test X"$sPRId64" = X -a X"$longsize" = X8; then
6919         quad=long
6920         $cat >try.c <<'EOCP'
6921 #include <sys/types.h>
6922 #include <stdio.h>
6923 int main() {
6924   long q = 12345678901;
6925   printf("%ld\n", q);
6926 }
6927 EOCP
6928         set try
6929         if eval $compile; then
6930                 yyy=`./try$exe_ext`
6931                 case "$yyy" in
6932                 12345678901)
6933                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
6934                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
6935                         echo "We will use %ld."
6936                         ;;
6937                 esac
6938         fi
6939 fi
6940
6941 if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$d_int64t" = X"$define"; then
6942         quad=int64_t
6943         $cat >try.c <<'EOCP'
6944 #include <sys/types.h>
6945 #include <inttypes.h>
6946 #include <stdio.h>
6947 int main() {
6948   int64_t q = 12345678901;
6949   printf("%" PRId64 "\n", q);
6950 }
6951 EOCP
6952         set try
6953         if eval $compile; then
6954                 yyy=`./try$exe_ext`
6955                 case "$yyy" in
6956                 12345678901)
6957                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
6958                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
6959                         echo "We will use the C9X style."
6960                         ;;
6961                 esac
6962         fi
6963 fi
6964
6965 if $test X"$sPRId64" = X -a X"$d_longlong" = X"$define" -a X"$longlongsize" = X8; then
6966         quad="long long"
6967         $cat >try.c <<'EOCP'
6968 #include <sys/types.h>
6969 #include <stdio.h>
6970 int main() {
6971   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
6972   printf("%lld\n", q);
6973 }
6974 EOCP
6975         set try
6976         if eval $compile; then
6977                 yyy=`./try$exe_ext`
6978                 case "$yyy" in
6979                 12345678901)
6980                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
6981                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
6982                         echo "We will use the %lld style."
6983                         ;;
6984                 esac
6985         fi
6986 fi
6987
6988 if $test X"$sPRId64" = X -a X"$quad" != X; then
6989         $cat >try.c <<EOCP
6990 #include <sys/types.h>
6991 #include <stdio.h>
6992 int main() {
6993   $quad q = 12345678901;
6994   printf("%Ld\n", q);
6995 }
6996 EOCP
6997         set try
6998         if eval $compile; then
6999                 yyy=`./try$exe_ext`
7000                 case "$yyy" in
7001                 12345678901)
7002                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
7003                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
7004                         echo "We will use %lld."
7005                         ;;
7006                 esac
7007         fi
7008 fi
7009
7010 if $test X"$sPRId64" = X -a X"$quad" != X; then
7011         $cat >try.c <<EOCP
7012 #include <sys/types.h>
7013 #include <stdio.h>
7014 int main() {
7015   $quad q = 12345678901;
7016   printf("%qd\n", q);
7017 }
7018 EOCP
7019         set try
7020         if eval $compile; then
7021                 yyy=`./try$exe_ext`
7022                 case "$yyy" in
7023                 12345678901)
7024                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
7025                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
7026                         echo "We will use %qd."
7027                         ;;
7028                 esac
7029         fi
7030 fi
7031
7032 if $test X"$sPRId64" = X; then
7033         echo "Cannot figure out how to print 64-bit integers." >&4
7034 fi
7035
7036 $rm -f try try.*
7037
7038 fi # intsize -o longsize -o d_int64t -o d_longlong
7039
7040 case "$sPRId64" in
7041 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
7042         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
7043         ;;
7044 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
7045         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
7046         ;;
7047 esac
7048
7049 : check for length of double
7050 echo " "
7051 case "$doublesize" in
7052 '')
7053         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7054         $cat >try.c <<'EOCP'
7055 #include <stdio.h>
7056 int main()
7057 {
7058         printf("%d\n", sizeof(double));
7059 }
7060 EOCP
7061         set try
7062         if eval $compile_ok; then
7063                 doublesize=`./try`
7064                 $echo " $doublesize bytes." >&4
7065         else
7066                 dflt='8'
7067                 echo "(I can't seem to compile the test program.  Guessing...)"
7068                 rp="What is the size of a double precision number (in bytes)?"
7069                 . ./myread
7070                 doublesize="$ans"
7071         fi
7072         ;;
7073 esac
7074 $rm -f try.c try
7075
7076 : check for long doubles
7077 echo " "
7078 $echo $n "Checking to see if your system supports long double...$c" >&4
7079 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
7080 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7081         val="$define"
7082         echo " Yup, it does." >&4
7083 else
7084         val="$undef"
7085         echo " Nope, it doesn't." >&4
7086 fi
7087 $rm try.*
7088 set d_longdbl
7089 eval $setvar
7090
7091 : check for length of long double
7092 case "${d_longdbl}${longdblsize}" in
7093 $define)
7094         echo " "
7095         $echo $n "Checking to see how big your long doubles are...$c" >&4
7096         $cat >try.c <<'EOCP'
7097 #include <stdio.h>
7098 int main()
7099 {
7100         printf("%d\n", sizeof(long double));
7101 }
7102 EOCP
7103         set try
7104         if eval $compile; then
7105                 longdblsize=`./try`
7106                 $echo " $longdblsize bytes." >&4
7107         else
7108                 dflt='8'
7109                 echo " "
7110                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7111                 rp="What is the size of a long double (in bytes)?"
7112                 . ./myread
7113                 longdblsize="$ans"
7114         fi
7115         if $test "X$doublesize" = "X$longdblsize"; then
7116                 echo "(That isn't any different from an ordinary double.)"
7117         fi      
7118         ;;
7119 esac
7120 $rm -f try.c try
7121
7122 echo " "
7123
7124 if $test X"$d_longdbl" = X"$define"; then
7125
7126 echo "Checking how to print long doubles..." >&4
7127
7128 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7129         $cat >try.c <<'EOCP'
7130 #include <sys/types.h>
7131 #include <stdio.h>
7132 int main() {
7133   double d = 123.456;
7134   printf("%.3f\n", d);
7135 }
7136 EOCP
7137         set try
7138         if eval $compile; then
7139                 yyy=`./try$exe_ext`
7140                 case "$yyy" in
7141                 123.456)
7142                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7143                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7144                         echo "We will use %f."
7145                         ;;
7146                 esac
7147         fi
7148 fi
7149
7150 if $test X"$sPRIfldbl" = X; then
7151         $cat >try.c <<'EOCP'
7152 #include <sys/types.h>
7153 #include <stdio.h>
7154 int main() {
7155   long double d = 123.456;
7156   printf("%.3llf\n", d);
7157 }
7158 EOCP
7159         set try
7160         if eval $compile; then
7161                 yyy=`./try$exe_ext`
7162                 case "$yyy" in
7163                 123.456)
7164                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7165                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7166                         echo "We will use %llf."
7167                         ;;
7168                 esac
7169         fi
7170 fi
7171
7172 if $test X"$sPRIfldbl" = X; then
7173         $cat >try.c <<'EOCP'
7174 #include <sys/types.h>
7175 #include <stdio.h>
7176 int main() {
7177   long double d = 123.456;
7178   printf("%.3Lf\n", d);
7179 }
7180 EOCP
7181         set try
7182         if eval $compile; then
7183                 yyy=`./try$exe_ext`
7184                 case "$yyy" in
7185                 123.456)
7186                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7187                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7188                         echo "We will use %Lf."
7189                         ;;
7190                 esac
7191         fi
7192 fi
7193
7194 if $test X"$sPRIfldbl" = X; then
7195         $cat >try.c <<'EOCP'
7196 #include <sys/types.h>
7197 #include <stdio.h>
7198 int main() {
7199   long double d = 123.456;
7200   printf("%.3lf\n", d);
7201 }
7202 EOCP
7203         set try
7204         if eval $compile; then
7205                 yyy=`./try$exe_ext`
7206                 case "$yyy" in
7207                 123.456)
7208                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7209                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7210                         echo "We will use %lf."
7211                         ;;
7212                 esac
7213         fi
7214 fi
7215
7216 if $test X"$sPRIfldbl" = X; then
7217         echo "Cannot figure out how to print long doubles." >&4
7218 fi
7219
7220 $rm -f try try.*
7221
7222 fi # d_longdbl
7223
7224 case "$sPRIfldbl" in
7225 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7226         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7227         ;;
7228 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7229         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7230         ;;
7231 esac
7232
7233 : Initialize h_fcntl
7234 h_fcntl=false
7235
7236 : Initialize h_sysfile
7237 h_sysfile=false
7238
7239 : access call always available on UNIX
7240 set access d_access
7241 eval $inlibc
7242
7243 : locate the flags for 'access()'
7244 case "$d_access" in
7245 "$define")
7246         echo " "
7247         $cat >access.c <<'EOCP'
7248 #include <sys/types.h>
7249 #ifdef I_FCNTL
7250 #include <fcntl.h>
7251 #endif
7252 #ifdef I_SYS_FILE
7253 #include <sys/file.h>
7254 #endif
7255 #ifdef I_UNISTD
7256 #include <unistd.h>
7257 #endif
7258 int main() {
7259         exit(R_OK);
7260 }
7261 EOCP
7262         : check sys/file.h first, no particular reason here
7263         if $test `./findhdr sys/file.h` && \
7264                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7265                 h_sysfile=true;
7266                 echo "<sys/file.h> defines the *_OK access constants." >&4
7267         elif $test `./findhdr fcntl.h` && \
7268                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7269                 h_fcntl=true;
7270                 echo "<fcntl.h> defines the *_OK access constants." >&4
7271         elif $test `./findhdr unistd.h` && \
7272                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7273                 echo "<unistd.h> defines the *_OK access constants." >&4
7274         else
7275                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7276         fi
7277         ;;
7278 esac
7279 $rm -f access*
7280
7281 : see if accessx exists
7282 set accessx d_accessx
7283 eval $inlibc
7284
7285 : see if alarm exists
7286 set alarm d_alarm
7287 eval $inlibc
7288
7289 : see if atolf exists
7290 set atolf d_atolf
7291 eval $inlibc
7292
7293 : see if atoll exists
7294 set atoll d_atoll
7295 eval $inlibc
7296
7297 : Look for GNU-cc style attribute checking
7298 echo " "
7299 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7300 $cat >attrib.c <<'EOCP'
7301 #include <stdio.h>
7302 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7303 EOCP
7304 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7305         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7306                 echo "Your C compiler doesn't fully support __attribute__."
7307                 val="$undef"
7308         else
7309                 echo "Your C compiler supports __attribute__."
7310                 val="$define"
7311         fi
7312 else
7313         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7314         val="$undef"
7315 fi
7316 set d_attribut
7317 eval $setvar
7318 $rm -f attrib*
7319
7320 : see if bcmp exists
7321 set bcmp d_bcmp
7322 eval $inlibc
7323
7324 : see if bcopy exists
7325 set bcopy d_bcopy
7326 eval $inlibc
7327
7328 : see if this is a unistd.h system
7329 set unistd.h i_unistd
7330 eval $inhdr
7331
7332 : see if getpgrp exists
7333 set getpgrp d_getpgrp
7334 eval $inlibc
7335
7336 case "$d_getpgrp" in
7337 "$define")
7338         echo " "
7339         echo "Checking to see which flavor of getpgrp is in use..."
7340         $cat >set.c <<EOP
7341 #$i_unistd I_UNISTD
7342 #include <sys/types.h>
7343 #ifdef I_UNISTD
7344 #  include <unistd.h>
7345 #endif
7346 int main()
7347 {
7348         if (getuid() == 0) {
7349                 printf("(I see you are running Configure as super-user...)\n");
7350                 setuid(1);
7351         }
7352 #ifdef TRY_BSD_PGRP
7353         if (getpgrp(1) == 0)
7354                 exit(0);
7355 #else
7356         if (getpgrp() > 0)
7357                 exit(0);
7358 #endif
7359         exit(1);
7360 }
7361 EOP
7362         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7363                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7364                 val="$define"
7365         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7366                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7367                 val="$undef"
7368         else
7369                 echo "I can't seem to compile and run the test program."
7370                 if ./usg; then
7371                         xxx="a USG one, i.e. you use getpgrp()."
7372                 else
7373                         # SVR4 systems can appear rather BSD-ish.
7374                         case "$i_unistd" in
7375                         $undef)
7376                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7377                                 val="$define"
7378                                 ;;
7379                         $define)
7380                                 xxx="probably a USG one, i.e. you use getpgrp()."
7381                                 val="$undef"
7382                                 ;;
7383                         esac
7384                 fi
7385                 echo "Assuming your getpgrp is $xxx" >&4
7386         fi
7387         ;;
7388 *) val="$undef";;
7389 esac
7390 set d_bsdgetpgrp
7391 eval $setvar
7392 $rm -f set set.c
7393
7394 : see if setpgrp exists
7395 set setpgrp d_setpgrp
7396 eval $inlibc
7397
7398 case "$d_setpgrp" in
7399 "$define")
7400         echo " "
7401         echo "Checking to see which flavor of setpgrp is in use..."
7402         $cat >set.c <<EOP
7403 #$i_unistd I_UNISTD
7404 #include <sys/types.h>
7405 #ifdef I_UNISTD
7406 #  include <unistd.h>
7407 #endif
7408 int main()
7409 {
7410         if (getuid() == 0) {
7411                 printf("(I see you are running Configure as super-user...)\n");
7412                 setuid(1);
7413         }
7414 #ifdef TRY_BSD_PGRP
7415         if (-1 == setpgrp(1, 1))
7416                 exit(0);
7417 #else
7418         if (setpgrp() != -1)
7419                 exit(0);
7420 #endif
7421         exit(1);
7422 }
7423 EOP
7424         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7425                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7426                 val="$define"
7427         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7428                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7429                 val="$undef"
7430         else
7431                 echo "(I can't seem to compile and run the test program.)"
7432                 if ./usg; then
7433                         xxx="a USG one, i.e. you use setpgrp()."
7434                 else
7435                         # SVR4 systems can appear rather BSD-ish.
7436                         case "$i_unistd" in
7437                         $undef)
7438                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7439                                 val="$define"
7440                                 ;;
7441                         $define)
7442                                 xxx="probably a USG one, i.e. you use setpgrp()."
7443                                 val="$undef"
7444                                 ;;
7445                         esac
7446                 fi
7447                 echo "Assuming your setpgrp is $xxx" >&4
7448         fi
7449         ;;
7450 *) val="$undef";;
7451 esac
7452 set d_bsdsetpgrp
7453 eval $setvar
7454 $rm -f set set.c
7455 : see if bzero exists
7456 set bzero d_bzero
7457 eval $inlibc
7458
7459 : see if signal is declared as pointer to function returning int or void
7460 echo " "
7461 xxx=`./findhdr signal.h`
7462 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7463 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7464         echo "You have int (*signal())() instead of void." >&4
7465         val="$undef"
7466 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7467         echo "You have void (*signal())()." >&4
7468         val="$define"
7469 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7470         echo "You have int (*signal())() instead of void." >&4
7471         val="$undef"
7472 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7473         echo "You have void (*signal())()." >&4
7474         val="$define"
7475 else
7476         case "$d_voidsig" in
7477         '')
7478         echo "I can't determine whether signal handler returns void or int..." >&4
7479                 dflt=void
7480                 rp="What type does your signal handler return?"
7481                 . ./myread
7482                 case "$ans" in
7483                 v*) val="$define";;
7484                 *) val="$undef";;
7485                 esac;;
7486         "$define")
7487                 echo "As you already told me, signal handler returns void." >&4
7488                 val="$define"
7489                 ;;
7490         *)      echo "As you already told me, signal handler returns int." >&4
7491                 val="$undef"
7492                 ;;
7493         esac
7494 fi
7495 set d_voidsig
7496 eval $setvar
7497 case "$d_voidsig" in
7498 "$define") signal_t="void";;
7499 *) signal_t="int";;
7500 esac
7501 $rm -f $$.tmp
7502
7503 : check for ability to cast large floats to 32-bit ints.
7504 echo " "
7505 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7506 if $test "$intsize" -ge 4; then
7507         xxx=int
7508 else
7509         xxx=long
7510 fi
7511 $cat >try.c <<EOCP
7512 #include <stdio.h>
7513 #include <sys/types.h>
7514 #include <signal.h>
7515 $signal_t blech(s) int s; { exit(3); }
7516 int main()
7517 {
7518         $xxx i32;
7519         double f, g;
7520         int result = 0;
7521         char str[16];
7522         signal(SIGFPE, blech);
7523
7524         /* Don't let compiler optimize the test away.  Store the number 
7525            in a writable string for gcc to pass to sscanf under HP/UX.
7526         */
7527         sprintf(str, "2147483647");
7528         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7529         g = 10 * f;
7530         i32  = ($xxx) g;
7531
7532         /* x86 processors will probably give 0x8000 0000, which is a
7533        sign change.  We don't want that.  We want to mimic SPARC
7534            behavior here, which is to preserve the sign and give
7535            back 0x7fff ffff.
7536         */
7537         if (i32 != ($xxx) f)
7538                 result |= 1;
7539         exit(result);
7540 }
7541 EOCP
7542 set try
7543 if eval $compile_ok; then
7544         ./try
7545         yyy=$?
7546 else
7547         echo "(I can't seem to compile the test program--assuming it can't)"
7548         yyy=1
7549 fi
7550 case "$yyy" in
7551 0)      val="$define"
7552         echo "Yup, it can."
7553         ;;
7554 *)      val="$undef"
7555         echo "Nope, it can't."
7556         ;;
7557 esac
7558 set d_casti32
7559 eval $setvar
7560 $rm -f try try.*
7561
7562 : check for ability to cast negative floats to unsigned
7563 echo " "
7564 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7565 $cat >try.c <<EOCP
7566 #include <stdio.h>
7567 #include <sys/types.h>
7568 #include <signal.h>
7569 $signal_t blech(s) int s; { exit(7); }
7570 $signal_t blech_in_list(s) int s; { exit(4); }
7571 unsigned long dummy_long(p) unsigned long p; { return p; }
7572 unsigned int dummy_int(p) unsigned int p; { return p; }
7573 unsigned short dummy_short(p) unsigned short p; { return p; }
7574 int main()
7575 {
7576         double f;
7577         unsigned long along;
7578         unsigned int aint;
7579         unsigned short ashort;
7580         int result = 0;
7581         char str[16];
7582         
7583         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7584            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7585            optimized the whole file away
7586         */
7587         /* Store the number in a writable string for gcc to pass to 
7588            sscanf under HP/UX.
7589         */
7590         sprintf(str, "-123");
7591         sscanf(str, "%lf", &f);  /* f = -123.; */
7592
7593         signal(SIGFPE, blech);
7594         along = (unsigned long)f;
7595         aint = (unsigned int)f;
7596         ashort = (unsigned short)f;
7597         if (along != (unsigned long)-123)
7598                 result |= 1;
7599         if (aint != (unsigned int)-123)
7600                 result |= 1;
7601         if (ashort != (unsigned short)-123)
7602                 result |= 1;
7603         sprintf(str, "1073741824.");
7604         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7605         f = f + f;
7606         along = 0;
7607         along = (unsigned long)f;
7608         if (along != 0x80000000)
7609                 result |= 2;
7610         f -= 1.;
7611         along = 0;
7612         along = (unsigned long)f;
7613         if (along != 0x7fffffff)
7614                 result |= 1;
7615         f += 2.;
7616         along = 0;
7617         along = (unsigned long)f;
7618         if (along != 0x80000001)
7619                 result |= 2;
7620         if (result)
7621                 exit(result);
7622         signal(SIGFPE, blech_in_list);
7623         sprintf(str, "123.");
7624         sscanf(str, "%lf", &f);  /* f = 123.; */
7625         along = dummy_long((unsigned long)f);
7626         aint = dummy_int((unsigned int)f);
7627         ashort = dummy_short((unsigned short)f);
7628         if (along != (unsigned long)123)
7629                 result |= 4;
7630         if (aint != (unsigned int)123)
7631                 result |= 4;
7632         if (ashort != (unsigned short)123)
7633                 result |= 4;
7634         exit(result);
7635
7636 }
7637 EOCP
7638 set try
7639 if eval $compile_ok; then
7640         ./try
7641         castflags=$?
7642 else
7643         echo "(I can't seem to compile the test program--assuming it can't)"
7644         castflags=7
7645 fi
7646 case "$castflags" in
7647 0)      val="$define"
7648         echo "Yup, it can."
7649         ;;
7650 *)      val="$undef"
7651         echo "Nope, it can't."
7652         ;;
7653 esac
7654 set d_castneg
7655 eval $setvar
7656 $rm -f try.*
7657
7658 : see if vprintf exists
7659 echo " "
7660 if set vprintf val -f d_vprintf; eval $csym; $val; then
7661         echo 'vprintf() found.' >&4
7662         val="$define"
7663         $cat >vprintf.c <<'EOF'
7664 #include <varargs.h>
7665
7666 int main() { xxx("foo"); }
7667
7668 xxx(va_alist)
7669 va_dcl
7670 {
7671         va_list args;
7672         char buf[10];
7673
7674         va_start(args);
7675         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7676 }
7677 EOF
7678         set vprintf
7679         if eval $compile && ./vprintf; then
7680                 echo "Your vsprintf() returns (int)." >&4
7681                 val2="$undef"
7682         else
7683                 echo "Your vsprintf() returns (char*)." >&4
7684                 val2="$define"
7685         fi
7686 else
7687         echo 'vprintf() NOT found.' >&4
7688                 val="$undef"
7689                 val2="$undef"
7690 fi
7691 set d_vprintf
7692 eval $setvar
7693 val=$val2
7694 set d_charvspr
7695 eval $setvar
7696
7697 : see if chown exists
7698 set chown d_chown
7699 eval $inlibc
7700
7701 : see if chroot exists
7702 set chroot d_chroot
7703 eval $inlibc
7704
7705 : see if chsize exists
7706 set chsize d_chsize
7707 eval $inlibc
7708
7709 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7710 while $test $# -ge 2; do
7711         case "$1" in
7712         $define) echo "#include <$2>";;
7713         esac ;
7714     shift 2;
7715 done > try.c;
7716 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7717 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7718         val="$define";
7719 else
7720         val="$undef";
7721 fi;
7722 set $varname;
7723 eval $setvar;
7724 $rm -f try.c try.o'
7725
7726 : see if this is a sys/uio.h system
7727 set sys/uio.h i_sysuio
7728 eval $inhdr
7729
7730 echo "Checking to see if your system supports struct iovec..." >&4
7731 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7732 eval $hasfield
7733 case "$d_iovec_s" in
7734 "$define")      echo "Yup, it does." >&4
7735                 ;;
7736 *)              echo "Nope, it doesn't." >&4
7737                 ;;
7738 esac
7739
7740 socketlib=''
7741 sockethdr=''
7742 : see whether socket exists
7743 echo " "
7744 $echo $n "Hmm... $c" >&4
7745 if set socket val -f d_socket; eval $csym; $val; then
7746         echo "Looks like you have Berkeley networking support." >&4
7747         d_socket="$define"
7748         if set setsockopt val -f; eval $csym; $val; then
7749                 d_oldsock="$undef"
7750         else
7751                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7752                 d_oldsock="$define"
7753         fi
7754 else
7755         if $contains socklib libc.list >/dev/null 2>&1; then
7756                 echo "Looks like you have Berkeley networking support." >&4
7757                 d_socket="$define"
7758                 : we will have to assume that it supports the 4.2 BSD interface
7759                 d_oldsock="$undef"
7760         else
7761                 echo "You don't have Berkeley networking in libc$_a..." >&4
7762                 if test "X$d_socket" = "X$define"; then
7763                    echo "...but you seem to believe that you have sockets." >&4
7764                 else
7765                         for net in net socket
7766                         do
7767                                 if test -f /usr/lib/lib$net$_a; then
7768                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7769                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7770                                         if $contains socket libc.list >/dev/null 2>&1; then
7771                                                 d_socket="$define"
7772                                                 socketlib="-l$net"
7773                                                 case "$net" in
7774                                                 net)
7775                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7776                                                         sockethdr="-I/usr/netinclude"
7777                                                         ;;
7778                                                 esac
7779                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7780                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7781                                                         d_oldsock="$undef"
7782                                                 else
7783                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7784                                                         d_oldsock="$define"
7785                                                 fi
7786                                                 break
7787                                         fi
7788                                 fi
7789                         done
7790                         if test "X$d_socket" != "X$define"; then
7791                            echo "or anywhere else I see." >&4
7792                            d_socket="$undef"
7793                            d_oldsock="$undef"
7794                         fi
7795                 fi
7796         fi
7797 fi
7798
7799 : see if socketpair exists
7800 set socketpair d_sockpair
7801 eval $inlibc
7802
7803
7804 echo " "
7805 echo "Checking the availability of certain socket constants..." >& 4
7806 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7807         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7808         $cat >try.c <<EOF
7809 #include <sys/types.h>
7810 #include <sys/socket.h>
7811 int main() {
7812     int i = $ENUM;
7813 }
7814 EOF
7815         val="$undef"
7816         set try; if eval $compile; then
7817                 val="$define"
7818         fi
7819         set d_${enum}; eval $setvar
7820         $rm -f try.c try
7821 done
7822
7823 set sendmsg d_sendmsg
7824 eval $inlibc
7825
7826 set recvmsg d_recvmsg
7827 eval $inlibc
7828
7829 echo " "
7830 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7831 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7832 eval $hasfield
7833 case "$d_msghdr_s" in
7834 "$define")      echo "Yup, it does." >&4
7835                 ;;
7836 *)              echo "Nope, it doesn't." >&4
7837                 ;;
7838 esac
7839
7840 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7841 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7842 eval $hasfield
7843 case "$d_cmsghdr_s" in
7844 "$define")      echo "Yup, it does." >&4
7845                 ;;
7846 *)              echo "Nope, it doesn't." >&4
7847                 ;;
7848 esac
7849
7850 : check for const keyword
7851 echo " "
7852 echo 'Checking to see if your C compiler knows about "const"...' >&4
7853 $cat >const.c <<'EOCP'
7854 typedef struct spug { int drokk; } spug;
7855 int main()
7856 {
7857         const char *foo;
7858         const spug y;
7859 }
7860 EOCP
7861 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7862         val="$define"
7863         echo "Yup, it does."
7864 else
7865         val="$undef"
7866         echo "Nope, it doesn't."
7867 fi
7868 set d_const
7869 eval $setvar
7870
7871 : see if crypt exists
7872 echo " "
7873 if set crypt val -f d_crypt; eval $csym; $val; then
7874         echo 'crypt() found.' >&4
7875         val="$define"
7876         cryptlib=''
7877 else
7878         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7879         if $test -z "$cryptlib"; then
7880                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7881         else
7882                 cryptlib=-lcrypt
7883         fi
7884         if $test -z "$cryptlib"; then
7885                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7886         else
7887                 cryptlib=-lcrypt
7888         fi
7889         if $test -z "$cryptlib"; then
7890                 cryptlib=`./loc libcrypt$_a "" $libpth`
7891         else
7892                 cryptlib=-lcrypt
7893         fi
7894         if $test -z "$cryptlib"; then
7895                 echo 'crypt() NOT found.' >&4
7896                 val="$undef"
7897         else
7898                 val="$define"
7899         fi
7900 fi
7901 set d_crypt
7902 eval $setvar
7903
7904 : get csh whereabouts
7905 case "$csh" in
7906 'csh') val="$undef" ;;
7907 *) val="$define" ;;
7908 esac
7909 set d_csh
7910 eval $setvar
7911 : Respect a hint or command line value for full_csh.
7912 case "$full_csh" in
7913 '') full_csh=$csh ;;
7914 esac
7915
7916 : see if cuserid exists
7917 set cuserid d_cuserid
7918 eval $inlibc
7919
7920 : see if this is a limits.h system
7921 set limits.h i_limits
7922 eval $inhdr
7923
7924 : see if this is a float.h system
7925 set float.h i_float
7926 eval $inhdr
7927
7928 : See if number of significant digits in a double precision number is known
7929 echo " "
7930 $cat >dbl_dig.c <<EOM
7931 #$i_limits I_LIMITS
7932 #$i_float I_FLOAT
7933 #ifdef I_LIMITS
7934 #include <limits.h>
7935 #endif
7936 #ifdef I_FLOAT
7937 #include <float.h>
7938 #endif
7939 #ifdef DBL_DIG
7940 printf("Contains DBL_DIG");
7941 #endif
7942 EOM
7943 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7944 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7945         echo "DBL_DIG found." >&4
7946         val="$define"
7947 else
7948         echo "DBL_DIG NOT found." >&4
7949         val="$undef"
7950 fi
7951 $rm -f dbl_dig.?
7952 set d_dbl_dig
7953 eval $setvar
7954
7955 : see if difftime exists
7956 set difftime d_difftime
7957 eval $inlibc
7958
7959 : see if this is a dirent system
7960 echo " "
7961 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7962         val="$define"
7963         echo "<dirent.h> found." >&4
7964 else
7965         val="$undef"
7966         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7967                 echo "<sys/dir.h> found." >&4
7968                 echo " "
7969         else
7970                 xinc=`./findhdr sys/ndir.h`
7971         fi
7972         echo "<dirent.h> NOT found." >&4
7973 fi
7974 set i_dirent
7975 eval $setvar
7976
7977 : Look for type of directory structure.
7978 echo " "
7979 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7980
7981 case "$direntrytype" in
7982 ''|' ')
7983         case "$i_dirent" in
7984         $define) guess1='struct dirent' ;;
7985         *) guess1='struct direct'  ;;
7986         esac
7987         ;;
7988 *)      guess1="$direntrytype"
7989         ;;
7990 esac
7991
7992 case "$guess1" in
7993 'struct dirent') guess2='struct direct' ;;
7994 *) guess2='struct dirent' ;;
7995 esac
7996                 
7997 if $contains "$guess1" try.c >/dev/null 2>&1; then
7998         direntrytype="$guess1"
7999         echo "Your directory entries are $direntrytype." >&4
8000 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8001         direntrytype="$guess2"
8002         echo "Your directory entries seem to be $direntrytype." >&4
8003 else
8004         echo "I don't recognize your system's directory entries." >&4
8005         rp="What type is used for directory entries on this system?"
8006         dflt="$guess1"
8007         . ./myread
8008         direntrytype="$ans"
8009 fi
8010 $rm -f try.c
8011
8012
8013 : see if the directory entry stores field length
8014 echo " "
8015 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8016 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8017         echo "Good, your directory entry keeps length information in d_namlen." >&4
8018         val="$define"
8019 else
8020         echo "Your directory entry does not know about the d_namlen field." >&4
8021         val="$undef"
8022 fi
8023 set d_dirnamlen
8024 eval $setvar
8025 $rm -f try.c
8026
8027 : see if dlerror exists
8028 xxx_runnm="$runnm"
8029 runnm=false
8030 set dlerror d_dlerror
8031 eval $inlibc
8032 runnm="$xxx_runnm"
8033
8034 : see if dlfcn is available
8035 set dlfcn.h i_dlfcn
8036 eval $inhdr
8037
8038 case "$usedl" in
8039 $define|y|true)
8040         $cat << EOM
8041
8042 On a few systems, the dynamically loaded modules that perl generates and uses
8043 will need a different extension than shared libs. The default will probably
8044 be appropriate.
8045
8046 EOM
8047         case "$dlext" in
8048         '')     dflt="$so" ;;
8049         *)      dflt="$dlext" ;;
8050         esac
8051         rp='What is the extension of dynamically loaded modules'
8052         . ./myread
8053         dlext="$ans"
8054         ;;
8055 *)
8056         dlext="none"
8057         ;;
8058 esac
8059
8060 : Check if dlsym need a leading underscore
8061 echo " "
8062 val="$undef"
8063
8064 case "$dlsrc" in
8065 dl_dlopen.xs)
8066         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8067         $cat >dyna.c <<'EOM'
8068 fred () { }
8069 EOM
8070
8071 $cat >fred.c<<EOM
8072
8073 #include <stdio.h>
8074 #$i_dlfcn I_DLFCN
8075 #ifdef I_DLFCN
8076 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8077 #else
8078 #include <sys/types.h>
8079 #include <nlist.h>
8080 #include <link.h>
8081 #endif
8082
8083 extern int fred() ;
8084
8085 int main()
8086 {
8087     void * handle ;
8088     void * symbol ;
8089 #ifndef RTLD_LAZY
8090     int mode = 1 ;
8091 #else
8092     int mode = RTLD_LAZY ;
8093 #endif
8094     handle = dlopen("./dyna.$dlext", mode) ;
8095     if (handle == NULL) {
8096         printf ("1\n") ;
8097         fflush (stdout) ;
8098         exit(0);
8099     }
8100     symbol = dlsym(handle, "fred") ;
8101     if (symbol == NULL) {
8102         /* try putting a leading underscore */
8103         symbol = dlsym(handle, "_fred") ;
8104         if (symbol == NULL) {
8105             printf ("2\n") ;
8106             fflush (stdout) ;
8107             exit(0);
8108         }
8109         printf ("3\n") ;
8110     }
8111     else
8112         printf ("4\n") ;
8113     fflush (stdout) ;
8114     exit(0);
8115 }
8116 EOM
8117         : Call the object file tmp-dyna.o in case dlext=o.
8118         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8119                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8120                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8121                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8122                 xxx=`./fred`
8123                 case $xxx in
8124                 1)      echo "Test program failed using dlopen." >&4
8125                         echo "Perhaps you should not use dynamic loading." >&4;;
8126                 2)      echo "Test program failed using dlsym." >&4
8127                         echo "Perhaps you should not use dynamic loading." >&4;;
8128                 3)      echo "dlsym needs a leading underscore" >&4
8129                         val="$define" ;;
8130                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8131                 esac
8132         else
8133                 echo "I can't compile and run the test program." >&4
8134                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8135         fi
8136         ;;
8137 esac
8138                 
8139 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8140
8141 set d_dlsymun
8142 eval $setvar
8143
8144 hasproto='varname=$1; func=$2; shift; shift;
8145 while $test $# -ge 2; do
8146         case "$1" in
8147         $define) echo "#include <$2>";;
8148         esac ;
8149     shift 2;
8150 done > try.c;
8151 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8152 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8153         echo "$func() prototype found.";
8154         val="$define";
8155 else
8156         echo "$func() prototype NOT found.";
8157         val="$undef";
8158 fi;
8159 set $varname;
8160 eval $setvar;
8161 $rm -f try.c tryout.c'
8162
8163 : see if prototype for drand48 is available
8164 echo " "
8165 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8166 eval $hasproto
8167
8168 : see if dup2 exists
8169 set dup2 d_dup2
8170 eval $inlibc
8171
8172 : see if eaccess exists
8173 set eaccess d_eaccess
8174 eval $inlibc
8175
8176 : see if endgrent exists
8177 set endgrent d_endgrent
8178 eval $inlibc
8179
8180 : see if endhostent exists
8181 set endhostent d_endhent
8182 eval $inlibc
8183
8184 : see if endnetent exists
8185 set endnetent d_endnent
8186 eval $inlibc
8187
8188 : see if endprotoent exists
8189 set endprotoent d_endpent
8190 eval $inlibc
8191
8192 : see if endpwent exists
8193 set endpwent d_endpwent
8194 eval $inlibc
8195
8196 : see if endservent exists
8197 set endservent d_endsent
8198 eval $inlibc
8199
8200 : see if endspent exists
8201 set endspent d_endspent
8202 eval $inlibc
8203
8204 : Locate the flags for 'open()'
8205 echo " "
8206 $cat >open3.c <<'EOCP'
8207 #include <sys/types.h>
8208 #ifdef I_FCNTL
8209 #include <fcntl.h>
8210 #endif
8211 #ifdef I_SYS_FILE
8212 #include <sys/file.h>
8213 #endif
8214 int main() {
8215         if(O_RDONLY);
8216 #ifdef O_TRUNC
8217         exit(0);
8218 #else
8219         exit(1);
8220 #endif
8221 }
8222 EOCP
8223 : check sys/file.h first to get FREAD on Sun
8224 if $test `./findhdr sys/file.h` && \
8225                 set open3 -DI_SYS_FILE && eval $compile; then
8226         h_sysfile=true;
8227         echo "<sys/file.h> defines the O_* constants..." >&4
8228         if ./open3; then
8229                 echo "and you have the 3 argument form of open()." >&4
8230                 val="$define"
8231         else
8232                 echo "but not the 3 argument form of open().  Oh, well." >&4
8233                 val="$undef"
8234         fi
8235 elif $test `./findhdr fcntl.h` && \
8236                 set open3 -DI_FCNTL && eval $compile; then
8237         h_fcntl=true;
8238         echo "<fcntl.h> defines the O_* constants..." >&4
8239         if ./open3; then
8240                 echo "and you have the 3 argument form of open()." >&4
8241                 val="$define"
8242         else
8243                 echo "but not the 3 argument form of open().  Oh, well." >&4
8244                 val="$undef"
8245         fi
8246 else
8247         val="$undef"
8248         echo "I can't find the O_* constant definitions!  You got problems." >&4
8249 fi
8250 set d_open3
8251 eval $setvar
8252 $rm -f open3*
8253
8254 : check for non-blocking I/O stuff
8255 case "$h_sysfile" in
8256 true) echo "#include <sys/file.h>" > head.c;;
8257 *)
8258         case "$h_fcntl" in
8259         true) echo "#include <fcntl.h>" > head.c;;
8260         *) echo "#include <sys/fcntl.h>" > head.c;;
8261         esac
8262         ;;
8263 esac
8264 echo " "
8265 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8266 case "$o_nonblock" in
8267 '')
8268         $cat head.c > try.c
8269         $cat >>try.c <<'EOCP'
8270 int main() {
8271 #ifdef O_NONBLOCK
8272         printf("O_NONBLOCK\n");
8273         exit(0);
8274 #endif
8275 #ifdef O_NDELAY
8276         printf("O_NDELAY\n");
8277         exit(0);
8278 #endif
8279 #ifdef FNDELAY
8280         printf("FNDELAY\n");
8281         exit(0);
8282 #endif
8283         exit(0);
8284 }
8285 EOCP
8286         set try
8287         if eval $compile_ok; then
8288                 o_nonblock=`./try`
8289                 case "$o_nonblock" in
8290                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8291                 *) echo "Seems like we can use $o_nonblock.";;
8292                 esac
8293         else
8294                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8295         fi
8296         ;;
8297 *) echo "Using $hint value $o_nonblock.";;
8298 esac
8299 $rm -f try try.* .out core
8300
8301 echo " "
8302 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8303 case "$eagain" in
8304 '')
8305         $cat head.c > try.c
8306         $cat >>try.c <<EOCP
8307 #include <errno.h>
8308 #include <sys/types.h>
8309 #include <signal.h>
8310 #define MY_O_NONBLOCK $o_nonblock
8311 #ifndef errno  /* XXX need better Configure test */
8312 extern int errno;
8313 #endif
8314 $signal_t blech(x) int x; { exit(3); }
8315 EOCP
8316         $cat >> try.c <<'EOCP'
8317 int main()
8318 {
8319         int pd[2];
8320         int pu[2];
8321         char buf[1];
8322         char string[100];
8323
8324         pipe(pd);       /* Down: child -> parent */
8325         pipe(pu);       /* Up: parent -> child */
8326         if (0 != fork()) {
8327                 int ret;
8328                 close(pd[1]);   /* Parent reads from pd[0] */
8329                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8330                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8331                         exit(1);
8332                 signal(SIGALRM, blech);
8333                 alarm(5);
8334                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8335                         exit(2);
8336                 sprintf(string, "%d\n", ret);
8337                 write(2, string, strlen(string));
8338                 alarm(0);
8339 #ifdef EAGAIN
8340                 if (errno == EAGAIN) {
8341                         printf("EAGAIN\n");
8342                         goto ok;
8343                 }
8344 #endif
8345 #ifdef EWOULDBLOCK
8346                 if (errno == EWOULDBLOCK)
8347                         printf("EWOULDBLOCK\n");
8348 #endif
8349         ok:
8350                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8351                 sleep(2);                               /* Give it time to close our pipe */
8352                 alarm(5);
8353                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8354                 alarm(0);
8355                 sprintf(string, "%d\n", ret);
8356                 write(3, string, strlen(string));
8357                 exit(0);
8358         }
8359
8360         close(pd[0]);                   /* We write to pd[1] */
8361         close(pu[1]);                   /* We read from pu[0] */
8362         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8363         close(pd[1]);                   /* Pipe pd is now fully closed! */
8364         exit(0);                                /* Bye bye, thank you for playing! */
8365 }
8366 EOCP
8367         set try
8368         if eval $compile_ok; then
8369                 echo "$startsh" >mtry
8370                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8371                 chmod +x mtry
8372                 ./mtry >/dev/null 2>&1
8373                 case $? in
8374                 0) eagain=`$cat try.out`;;
8375                 1) echo "Could not perform non-blocking setting!";;
8376                 2) echo "I did a successful read() for something that was not there!";;
8377                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8378                 *) echo "Something terribly wrong happened during testing.";;
8379                 esac
8380                 rd_nodata=`$cat try.ret`
8381                 echo "A read() system call with no data present returns $rd_nodata."
8382                 case "$rd_nodata" in
8383                 0|-1) ;;
8384                 *)
8385                         echo "(That's peculiar, fixing that to be -1.)"
8386                         rd_nodata=-1
8387                         ;;
8388                 esac
8389                 case "$eagain" in
8390                 '')
8391                         echo "Forcing errno EAGAIN on read() with no data available."
8392                         eagain=EAGAIN
8393                         ;;
8394                 *)
8395                         echo "Your read() sets errno to $eagain when no data is available."
8396                         ;;
8397                 esac
8398                 status=`$cat try.err`
8399                 case "$status" in
8400                 0) echo "And it correctly returns 0 to signal EOF.";;
8401                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8402                 *) echo "However, your read() returns '$status' on EOF??";;
8403                 esac
8404                 val="$define"
8405                 if test "$status" = "$rd_nodata"; then
8406                         echo "WARNING: you can't distinguish between EOF and no data!"
8407                         val="$undef"
8408                 fi
8409         else
8410                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8411                 eagain=EAGAIN
8412         fi
8413         set d_eofnblk
8414         eval $setvar
8415         ;;
8416 *)
8417         echo "Using $hint value $eagain."
8418         echo "Your read() returns $rd_nodata when no data is present."
8419         case "$d_eofnblk" in
8420         "$define") echo "And you can see EOF because read() returns 0.";;
8421         "$undef") echo "But you can't see EOF status from read() returned value.";;
8422         *)
8423                 echo "(Assuming you can't see EOF status from read anyway.)"
8424                 d_eofnblk=$undef
8425                 ;;
8426         esac
8427         ;;
8428 esac
8429 $rm -f try try.* .out core head.c mtry
8430
8431 : see if fchmod exists
8432 set fchmod d_fchmod
8433 eval $inlibc
8434
8435 : see if fchown exists
8436 set fchown d_fchown
8437 eval $inlibc
8438
8439 : see if this is an fcntl system
8440 set fcntl d_fcntl
8441 eval $inlibc
8442
8443 : see if sys/select.h has to be included
8444 set sys/select.h i_sysselct
8445 eval $inhdr
8446
8447 : see if we should include time.h, sys/time.h, or both
8448 echo " "
8449 if test "X$timeincl" = X; then
8450         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8451         $echo $n "I'm now running the test program...$c"
8452         $cat >try.c <<'EOCP'
8453 #include <sys/types.h>
8454 #ifdef I_TIME
8455 #include <time.h>
8456 #endif
8457 #ifdef I_SYSTIME
8458 #ifdef SYSTIMEKERNEL
8459 #define KERNEL
8460 #endif
8461 #include <sys/time.h>
8462 #endif
8463 #ifdef I_SYSSELECT
8464 #include <sys/select.h>
8465 #endif
8466 int main()
8467 {
8468         struct tm foo;
8469 #ifdef S_TIMEVAL
8470         struct timeval bar;
8471 #endif
8472 #ifdef S_TIMEZONE
8473         struct timezone tzp;
8474 #endif
8475         if (foo.tm_sec == foo.tm_sec)
8476                 exit(0);
8477 #ifdef S_TIMEVAL
8478         if (bar.tv_sec == bar.tv_sec)
8479                 exit(0);
8480 #endif
8481         exit(1);
8482 }
8483 EOCP
8484         flags=''
8485         for s_timezone in '-DS_TIMEZONE' ''; do
8486         sysselect=''
8487         for s_timeval in '-DS_TIMEVAL' ''; do
8488         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8489         for i_time in '' '-DI_TIME'; do
8490         for i_systime in '-DI_SYSTIME' ''; do
8491                 case "$flags" in
8492                 '') $echo $n ".$c"
8493                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8494                         if eval $compile; then
8495                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8496                                 shift
8497                                 flags="$*"
8498                                 echo " "
8499                                 $echo $n "Succeeded with $flags$c"
8500                         fi
8501                         ;;
8502                 esac
8503         done
8504         done
8505         done
8506         done
8507         done
8508         timeincl=''
8509         echo " "
8510         case "$flags" in
8511         *SYSTIMEKERNEL*) i_systimek="$define"
8512                 timeincl=`./findhdr sys/time.h`
8513                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8514         *) i_systimek="$undef";;
8515         esac
8516         case "$flags" in
8517         *I_TIME*) i_time="$define"
8518                 timeincl=`./findhdr time.h`" $timeincl"
8519                 echo "We'll include <time.h>." >&4;;
8520         *) i_time="$undef";;
8521         esac
8522         case "$flags" in
8523         *I_SYSTIME*) i_systime="$define"
8524                 timeincl=`./findhdr sys/time.h`" $timeincl"
8525                 echo "We'll include <sys/time.h>." >&4;;
8526         *) i_systime="$undef";;
8527         esac
8528         $rm -f try.c try
8529 fi
8530
8531 : check for fd_set items
8532 $cat <<EOM
8533
8534 Checking to see how well your C compiler handles fd_set and friends ...
8535 EOM
8536 $cat >fd_set.c <<EOCP
8537 #$i_systime I_SYS_TIME
8538 #$i_sysselct I_SYS_SELECT
8539 #$d_socket HAS_SOCKET
8540 #include <sys/types.h>
8541 #ifdef HAS_SOCKET
8542 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8543 #endif
8544 #ifdef I_SYS_TIME
8545 #include <sys/time.h>
8546 #endif
8547 #ifdef I_SYS_SELECT
8548 #include <sys/select.h>
8549 #endif
8550 int main() {
8551         fd_set fds;
8552
8553 #ifdef TRYBITS
8554         if(fds.fds_bits);
8555 #endif
8556
8557 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8558         exit(0);
8559 #else
8560         exit(1);
8561 #endif
8562 }
8563 EOCP
8564 set fd_set -DTRYBITS
8565 if eval $compile; then
8566         d_fds_bits="$define"
8567         d_fd_set="$define"
8568         echo "Well, your system knows about the normal fd_set typedef..." >&4
8569         if ./fd_set; then
8570                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8571                 d_fd_macros="$define"
8572         else
8573                 $cat >&4 <<'EOM'
8574 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8575 EOM
8576                 d_fd_macros="$undef"
8577         fi
8578 else
8579         $cat <<'EOM'
8580 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8581 EOM
8582         set fd_set
8583         if eval $compile; then
8584                 d_fds_bits="$undef"
8585                 d_fd_set="$define"
8586                 echo "Well, your system has some sort of fd_set available..." >&4
8587                 if ./fd_set; then
8588                         echo "and you have the normal fd_set macros." >&4
8589                         d_fd_macros="$define"
8590                 else
8591                         $cat <<'EOM'
8592 but not the normal fd_set macros!  Gross!  More work for me...
8593 EOM
8594                         d_fd_macros="$undef"
8595                 fi
8596         else
8597         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8598                 d_fd_set="$undef"
8599                 d_fds_bits="$undef"
8600                 d_fd_macros="$undef"
8601         fi
8602 fi
8603 $rm -f fd_set*
8604
8605 : see if fgetpos exists
8606 set fgetpos d_fgetpos
8607 eval $inlibc
8608
8609 : see if flock exists
8610 set flock d_flock
8611 eval $inlibc
8612
8613 : see if fork exists
8614 set fork d_fork
8615 eval $inlibc
8616
8617 : see if pathconf exists
8618 set pathconf d_pathconf
8619 eval $inlibc
8620
8621 : see if fpathconf exists
8622 set fpathconf d_fpathconf
8623 eval $inlibc
8624
8625
8626 : see if llseek exists
8627 set llseek d_llseek
8628 eval $inlibc
8629
8630 : check for off64_t
8631 echo " "
8632 $echo $n "Checking to see if your system supports off64_t...$c" >&4
8633 $cat >try.c <<EOCP
8634 #include <sys/types.h>
8635 #include <unistd.h>
8636 off64_t foo() { off64_t x; x = 7; return x; }'
8637 EOCP
8638 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8639         val="$define"
8640         echo " Yup, it does." >&4
8641 else
8642         val="$undef"
8643         echo " Nope, it doesn't." >&4
8644 fi
8645 $rm -f try.*
8646 set d_off64_t
8647 eval $setvar
8648
8649 : check for fpos64_t
8650 echo " "
8651 $echo $n "Checking to see if your system supports fpos64_t...$c" >&4
8652 $cat >try.c <<EOCP
8653 #include <sys/stdio.h>
8654 fpos64_t foo() { fpos64_t x; x = 7; return x; }'
8655 EOCP
8656 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8657         val="$define"
8658         echo " Yup, it does." >&4
8659 else
8660         val="$undef"
8661         echo " Nope, it doesn't." >&4
8662 fi
8663 $rm -f try.*
8664 set d_fpos64_t
8665 eval $setvar
8666
8667 : see if fseeko exists
8668 set fseeko d_fseeko
8669 eval $inlibc
8670
8671 : see if fsetpos exists
8672 set fsetpos d_fsetpos
8673 eval $inlibc
8674
8675 : see if this is a sys/param system
8676 set sys/param.h i_sysparam
8677 eval $inhdr
8678
8679 : see if this is a sys/mount.h system
8680 set sys/mount.h i_sysmount
8681 eval $inhdr
8682
8683
8684 : see if statfs exists
8685 set statfs d_statfs
8686 eval $inlibc
8687
8688 : see if fstatfs exists
8689 set fstatfs d_fstatfs
8690 eval $inlibc
8691
8692 : see if statfs knows about mount flags
8693 case "$d_statfs" in
8694 define) set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8695         eval $hasfield
8696         ;;
8697 *)      val="$undef"
8698         set d_statfsflags
8699         eval $setvar
8700         ;;
8701 esac
8702
8703
8704 : see if statvfs exists
8705 set statvfs d_statvfs
8706 eval $inlibc
8707
8708 : see if fstatvfs exists
8709 set fstatvfs d_fstatvfs
8710 eval $inlibc
8711
8712
8713 : see if ftello exists
8714 set ftello d_ftello
8715 eval $inlibc
8716
8717 : see if getgrent exists
8718 set getgrent d_getgrent
8719 eval $inlibc
8720
8721 : see if gethostbyaddr exists
8722 set gethostbyaddr d_gethbyaddr
8723 eval $inlibc
8724
8725 : see if gethostbyname exists
8726 set gethostbyname d_gethbyname
8727 eval $inlibc
8728
8729 : see if gethostent exists
8730 set gethostent d_gethent
8731 eval $inlibc
8732
8733 : see how we will look up host name
8734 echo " "
8735 call=''
8736 if set gethostname val -f d_gethname; eval $csym; $val; then
8737         echo 'gethostname() found.' >&4
8738         d_gethname="$define"
8739         call=gethostname
8740 fi
8741 if set uname val -f d_uname; eval $csym; $val; then
8742         if ./xenix; then
8743                 $cat <<'EOM'
8744 uname() was found, but you're running xenix, and older versions of xenix
8745 have a broken uname(). If you don't really know whether your xenix is old
8746 enough to have a broken system call, use the default answer.
8747
8748 EOM
8749                 dflt=y
8750                 case "$d_uname" in
8751                 "$define") dflt=n;;
8752                 esac
8753                 rp='Is your uname() broken?'
8754                 . ./myread
8755                 case "$ans" in
8756                 n*) d_uname="$define"; call=uname;;
8757                 esac
8758         else
8759                 echo 'uname() found.' >&4
8760                 d_uname="$define"
8761                 case "$call" in
8762                 '') call=uname ;;
8763                 esac
8764         fi
8765 fi
8766 case "$d_gethname" in
8767 '') d_gethname="$undef";;
8768 esac
8769 case "$d_uname" in
8770 '') d_uname="$undef";;
8771 esac
8772 case "$d_uname$d_gethname" in
8773 *define*)
8774         dflt=n
8775         cat <<EOM
8776  
8777 Every now and then someone has a $call() that lies about the hostname
8778 but can't be fixed for political or economic reasons.  If you wish, I can
8779 pretend $call() isn't there and maybe compute hostname at run-time
8780 thanks to the '$phostname' command.
8781
8782 EOM
8783         rp="Shall I ignore $call() from now on?"
8784         . ./myread
8785         case "$ans" in
8786         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8787         esac;;
8788 esac
8789 case "$phostname" in
8790 '') aphostname='';;
8791 *) case "$aphostname" in
8792         /*) ;;
8793         *) set X $phostname
8794                 shift
8795                 file=$1
8796                 shift
8797                 file=`./loc $file $file $pth`
8798                 aphostname=`echo $file $*`
8799                 ;;
8800         esac
8801         ;;
8802 esac
8803 case "$d_uname$d_gethname" in
8804 *define*) ;;
8805 *)
8806         case "$phostname" in
8807         '')
8808                 echo "There will be no way for $package to get your hostname." >&4;;
8809         *)
8810         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8811                 ;;
8812         esac;;
8813 esac
8814 case "$d_phostname" in
8815 '') d_phostname="$undef";;
8816 esac
8817
8818 : see if this is a netdb.h system
8819 set netdb.h i_netdb
8820 eval $inhdr
8821
8822 : see if prototypes for various gethostxxx netdb.h functions are available
8823 echo " "
8824 set d_gethostprotos gethostent $i_netdb netdb.h
8825 eval $hasproto
8826
8827 : see if getlogin exists
8828 set getlogin d_getlogin
8829 eval $inlibc
8830
8831 : see if getmntent exists
8832 set getmntent d_getmntent
8833 eval $inlibc
8834
8835 : see if getnetbyaddr exists
8836 set getnetbyaddr d_getnbyaddr
8837 eval $inlibc
8838
8839 : see if getnetbyname exists
8840 set getnetbyname d_getnbyname
8841 eval $inlibc
8842
8843 : see if getnetent exists
8844 set getnetent d_getnent
8845 eval $inlibc
8846
8847 : see if prototypes for various getnetxxx netdb.h functions are available
8848 echo " "
8849 set d_getnetprotos getnetent $i_netdb netdb.h
8850 eval $hasproto
8851
8852
8853 : see if getprotobyname exists
8854 set getprotobyname d_getpbyname
8855 eval $inlibc
8856
8857 : see if getprotobynumber exists
8858 set getprotobynumber d_getpbynumber
8859 eval $inlibc
8860
8861 : see if getprotoent exists
8862 set getprotoent d_getpent
8863 eval $inlibc
8864
8865 : see if getpgid exists
8866 set getpgid d_getpgid
8867 eval $inlibc
8868
8869 : see if getpgrp2 exists
8870 set getpgrp2 d_getpgrp2
8871 eval $inlibc
8872
8873 : see if getppid exists
8874 set getppid d_getppid
8875 eval $inlibc
8876
8877 : see if getpriority exists
8878 set getpriority d_getprior
8879 eval $inlibc
8880
8881 : see if prototypes for various getprotoxxx netdb.h functions are available
8882 echo " "
8883 set d_getprotoprotos getprotoent $i_netdb netdb.h
8884 eval $hasproto
8885
8886 : see if getpwent exists
8887 set getpwent d_getpwent
8888 eval $inlibc
8889
8890
8891 : see if getservbyname exists
8892 set getservbyname d_getsbyname
8893 eval $inlibc
8894
8895 : see if getservbyport exists
8896 set getservbyport d_getsbyport
8897 eval $inlibc
8898
8899 : see if getservent exists
8900 set getservent d_getsent
8901 eval $inlibc
8902
8903 : see if prototypes for various getservxxx netdb.h functions are available
8904 echo " "
8905 set d_getservprotos getservent $i_netdb netdb.h
8906 eval $hasproto
8907
8908 : see if getspent exists
8909 set getspent d_getspent
8910 eval $inlibc
8911
8912 : see if getspnam exists
8913 set getspnam d_getspnam
8914 eval $inlibc
8915
8916 : see if gettimeofday or ftime exists
8917 set gettimeofday d_gettimeod
8918 eval $inlibc
8919 case "$d_gettimeod" in
8920 "$undef")
8921         set ftime d_ftime 
8922         eval $inlibc
8923         ;;
8924 *)
8925         val="$undef"; set d_ftime; eval $setvar
8926         ;;
8927 esac
8928 case "$d_gettimeod$d_ftime" in
8929 "$undef$undef")
8930         echo " "
8931         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8932         ;;
8933 esac
8934
8935 : see if this is an grp system
8936 set grp.h i_grp
8937 eval $inhdr
8938
8939 case "$i_grp" in
8940 $define)
8941         xxx=`./findhdr grp.h`
8942         $cppstdin $cppflags $cppminus < $xxx >$$.h
8943
8944         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8945                 val="$define"
8946         else
8947                 val="$undef"
8948         fi
8949         set d_grpasswd
8950         eval $setvar
8951
8952         $rm -f $$.h
8953         ;;
8954 *)
8955         val="$undef";
8956         set d_grpasswd; eval $setvar
8957         ;;
8958 esac
8959
8960 : see if hasmntopt exists
8961 set hasmntopt d_hasmntopt
8962 eval $inlibc
8963
8964 : see if this is a netinet/in.h or sys/in.h system
8965 set netinet/in.h i_niin sys/in.h i_sysin
8966 eval $inhdr
8967
8968 : see if arpa/inet.h has to be included
8969 set arpa/inet.h i_arpainet
8970 eval $inhdr
8971
8972 : see if htonl --and friends-- exists
8973 val=''
8974 set htonl val
8975 eval $inlibc
8976
8977 : Maybe they are macros.
8978 case "$val" in
8979 $undef)
8980         $cat >htonl.c <<EOM
8981 #include <stdio.h>
8982 #include <sys/types.h>
8983 #$i_niin I_NETINET_IN
8984 #$i_sysin I_SYS_IN
8985 #$i_arpainet I_ARPA_INET
8986 #ifdef I_NETINET_IN
8987 #include <netinet/in.h>
8988 #endif
8989 #ifdef I_SYS_IN
8990 #include <sys/in.h>
8991 #endif
8992 #ifdef I_ARPA_INET
8993 #include <arpa/inet.h>
8994 #endif
8995 #ifdef htonl
8996 printf("Defined as a macro.");
8997 #endif
8998 EOM
8999         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9000         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9001                 val="$define"
9002                 echo "But it seems to be defined as a macro." >&4
9003         fi
9004         $rm -f htonl.?
9005         ;;
9006 esac
9007 set d_htonl
9008 eval $setvar
9009
9010 : see which of string.h or strings.h is needed
9011 echo " "
9012 strings=`./findhdr string.h`
9013 if $test "$strings" && $test -r "$strings"; then
9014         echo "Using <string.h> instead of <strings.h>." >&4
9015         val="$define"
9016 else
9017         val="$undef"
9018         strings=`./findhdr strings.h`
9019         if $test "$strings" && $test -r "$strings"; then
9020                 echo "Using <strings.h> instead of <string.h>." >&4
9021         else
9022                 echo "No string header found -- You'll surely have problems." >&4
9023         fi
9024 fi
9025 set i_string
9026 eval $setvar
9027 case "$i_string" in
9028 "$undef") strings=`./findhdr strings.h`;;
9029 *)        strings=`./findhdr string.h`;;
9030 esac
9031
9032 : index or strchr
9033 echo " "
9034 if set index val -f; eval $csym; $val; then
9035         if set strchr val -f d_strchr; eval $csym; $val; then
9036                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9037                         val="$define"
9038                         vali="$undef"
9039                         echo "strchr() found." >&4
9040                 else
9041                         val="$undef"
9042                         vali="$define"
9043                         echo "index() found." >&4
9044                 fi
9045         else
9046                 val="$undef"
9047                 vali="$define"
9048                 echo "index() found." >&4
9049         fi
9050 else
9051         if set strchr val -f d_strchr; eval $csym; $val; then
9052                 val="$define"
9053                 vali="$undef"
9054                 echo "strchr() found." >&4
9055         else
9056                 echo "No index() or strchr() found!" >&4
9057                 val="$undef"
9058                 vali="$undef"
9059         fi
9060 fi
9061 set d_strchr; eval $setvar
9062 val="$vali"
9063 set d_index; eval $setvar
9064
9065 : check whether inet_aton exists
9066 set inet_aton d_inetaton
9067 eval $inlibc
9068
9069 : Look for isascii
9070 echo " "
9071 $cat >isascii.c <<'EOCP'
9072 #include <stdio.h>
9073 #include <ctype.h>
9074 int main() {
9075         int c = 'A';
9076         if (isascii(c))
9077                 exit(0);
9078         else
9079                 exit(1);
9080 }
9081 EOCP
9082 set isascii
9083 if eval $compile; then
9084         echo "isascii() found." >&4
9085         val="$define"
9086 else
9087         echo "isascii() NOT found." >&4
9088         val="$undef"
9089 fi
9090 set d_isascii
9091 eval $setvar
9092 $rm -f isascii*
9093
9094 : see if killpg exists
9095 set killpg d_killpg
9096 eval $inlibc
9097
9098 : see if lchown exists
9099 echo " "
9100 $cat > try.c <<'EOCP'
9101 /* System header to define __stub macros and hopefully few prototypes,
9102     which can conflict with char lchown(); below.  */
9103 #include <assert.h>
9104 /* Override any gcc2 internal prototype to avoid an error.  */
9105 /* We use char because int might match the return type of a gcc2
9106    builtin and then its argument prototype would still apply.  */
9107 char lchown();
9108 int main() {
9109     /*  The GNU C library defines this for functions which it implements
9110         to always fail with ENOSYS.  Some functions are actually named
9111         something starting with __ and the normal name is an alias.  */
9112 #if defined (__stub_lchown) || defined (__stub___lchown)
9113 choke me
9114 #else
9115 lchown();
9116 #endif
9117 ; return 0; }
9118 EOCP
9119 set try
9120 if eval $compile; then
9121     $echo "lchown() found." >&4
9122     val="$define"
9123 else
9124     $echo "lchown() NOT found." >&4
9125     val="$undef"
9126 fi
9127 set d_lchown
9128 eval $setvar
9129
9130 : See if number of significant digits in a double precision number is known
9131 echo " "
9132 $cat >ldbl_dig.c <<EOM
9133 #$i_limits I_LIMITS
9134 #$i_float I_FLOAT
9135 #ifdef I_LIMITS
9136 #include <limits.h>
9137 #endif
9138 #ifdef I_FLOAT
9139 #include <float.h>
9140 #endif
9141 #ifdef LDBL_DIG
9142 printf("Contains LDBL_DIG");
9143 #endif
9144 EOM
9145 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9146 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9147         echo "LDBL_DIG found." >&4
9148         val="$define"
9149 else
9150         echo "LDBL_DIG NOT found." >&4
9151         val="$undef"
9152 fi
9153 $rm -f ldbl_dig.?
9154 set d_ldbl_dig
9155 eval $setvar
9156
9157 : see if link exists
9158 set link d_link
9159 eval $inlibc
9160
9161 : see if localeconv exists
9162 set localeconv d_locconv
9163 eval $inlibc
9164
9165 : see if lockf exists
9166 set lockf d_lockf
9167 eval $inlibc
9168
9169 : see if lstat exists
9170 set lstat d_lstat
9171 eval $inlibc
9172
9173 : see if madvise exists
9174 set madvise d_madvise
9175 eval $inlibc
9176
9177 : see if mblen exists
9178 set mblen d_mblen
9179 eval $inlibc
9180
9181 : see if mbstowcs exists
9182 set mbstowcs d_mbstowcs
9183 eval $inlibc
9184
9185 : see if mbtowc exists
9186 set mbtowc d_mbtowc
9187 eval $inlibc
9188
9189 : see if memchr exists
9190 set memchr d_memchr
9191 eval $inlibc
9192
9193 : see if memcmp exists
9194 set memcmp d_memcmp
9195 eval $inlibc
9196
9197 : see if memcpy exists
9198 set memcpy d_memcpy
9199 eval $inlibc
9200
9201 : see if memmove exists
9202 set memmove d_memmove
9203 eval $inlibc
9204
9205 : see if memset exists
9206 set memset d_memset
9207 eval $inlibc
9208
9209 : see if mkdir exists
9210 set mkdir d_mkdir
9211 eval $inlibc
9212
9213 : see if mkfifo exists
9214 set mkfifo d_mkfifo
9215 eval $inlibc
9216
9217 : see if mktime exists
9218 set mktime d_mktime
9219 eval $inlibc
9220
9221 : see if this is a sys/mman.h system
9222 set sys/mman.h i_sysmman
9223 eval $inhdr
9224
9225 : see if mmap exists
9226 set mmap d_mmap
9227 eval $inlibc
9228 : see what shmat returns
9229 : default to something harmless
9230 mmaptype='void *'
9231 case "$i_sysmman$d_mmap" in
9232 "$define$define")
9233         $cat >mmap.c <<'END'
9234 #include <sys/mman.h>
9235 void *mmap();
9236 END
9237         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9238                 mmaptype='void *'
9239         else
9240                 mmaptype='caddr_t'
9241         fi
9242         echo "and it returns ($mmaptype)." >&4
9243         ;;
9244 esac
9245
9246
9247
9248 : see if mprotect exists
9249 set mprotect d_mprotect
9250 eval $inlibc
9251
9252 : see if msgctl exists
9253 set msgctl d_msgctl
9254 eval $inlibc
9255
9256 : see if msgget exists
9257 set msgget d_msgget
9258 eval $inlibc
9259
9260 : see if msgsnd exists
9261 set msgsnd d_msgsnd
9262 eval $inlibc
9263
9264 : see if msgrcv exists
9265 set msgrcv d_msgrcv
9266 eval $inlibc
9267
9268 : see how much of the 'msg*(2)' library is present.
9269 h_msg=true
9270 echo " "
9271 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9272 *"$undef"*) h_msg=false;;
9273 esac
9274 case "$osname" in
9275 freebsd)
9276     case "`ipcs 2>&1`" in
9277     "SVID messages"*"not configured"*)
9278         echo "Your $osname does not have the msg*(2) configured." >&4
9279         h_msg=false
9280         val="$undef"
9281         set msgctl d_msgctl
9282         eval $setvar
9283         set msgget d_msgget
9284         eval $setvar
9285         set msgsnd d_msgsnd
9286         eval $setvar
9287         set msgrcv d_msgrcv
9288         eval $setvar
9289         ;;
9290     esac
9291     ;;
9292 esac
9293 : we could also check for sys/ipc.h ...
9294 if $h_msg && $test `./findhdr sys/msg.h`; then
9295         echo "You have the full msg*(2) library." >&4
9296         val="$define"
9297 else
9298         echo "You don't have the full msg*(2) library." >&4
9299         val="$undef"
9300 fi
9301 set d_msg
9302 eval $setvar
9303
9304 : see if msync exists
9305 set msync d_msync
9306 eval $inlibc
9307
9308 : see if munmap exists
9309 set munmap d_munmap
9310 eval $inlibc
9311
9312 : see if nice exists
9313 set nice d_nice
9314 eval $inlibc
9315
9316 : see if POSIX threads are available
9317 set pthread.h i_pthread
9318 eval $inhdr
9319
9320
9321
9322
9323 : how to create joinable pthreads
9324 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9325         echo " "
9326         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9327         $cat >try.c <<'EOCP'
9328 #include <pthread.h>
9329 int main() {
9330     int detachstate = JOINABLE;
9331 }
9332 EOCP
9333         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9334         if eval $compile; then
9335                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9336                 val="$undef" # Yes, undef.
9337                 set d_old_pthread_create_joinable
9338                 eval $setvar
9339                 val=""
9340                 set old_pthread_create_joinable
9341                 eval $setvar
9342         else
9343                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9344                 if eval $compile; then
9345                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9346                         val="$define"
9347                         set d_old_pthread_create_joinable
9348                         eval $setvar
9349                         val=PTHREAD_CREATE_UNDETACHED
9350                         set old_pthread_create_joinable
9351                         eval $setvar
9352                 else            
9353                         set try -DJOINABLE=__UNDETACHED
9354                         if eval $compile; then
9355                                 echo "You seem to use __UNDETACHED." >&4
9356                                 val="$define"
9357                                 set d_old_pthread_create_joinable
9358                                 eval $setvar
9359                                 val=__UNDETACHED
9360                                 set old_pthread_create_joinable
9361                                 eval $setvar
9362                         else
9363                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9364                                 val="$define"
9365                                 set d_old_pthread_create_joinable
9366                                 eval $setvar
9367                                 val=0
9368                                 set old_pthread_create_joinable
9369                                 eval $setvar
9370                         fi
9371                 fi
9372         fi
9373         $rm -f try try.*
9374 else
9375     d_old_pthread_create_joinable="$undef"
9376     old_pthread_create_joinable=""
9377 fi
9378
9379 : see if pause exists
9380 set pause d_pause
9381 eval $inlibc
9382
9383 : see if pipe exists
9384 set pipe d_pipe
9385 eval $inlibc
9386
9387 : see if poll exists
9388 set poll d_poll
9389 eval $inlibc
9390
9391
9392 : see whether the various POSIXish _yields exist
9393 $cat >try.c <<EOP
9394 #include <pthread.h>
9395 #include <stdio.h>
9396 int main() {
9397 #ifdef SCHED_YIELD
9398         sched_yield();
9399 #else
9400 #ifdef PTHREAD_YIELD
9401         pthread_yield();
9402 #else
9403 #ifdef PTHREAD_YIELD_NULL
9404         pthread_yield(NULL);
9405 #endif
9406 #endif
9407 #endif
9408 }
9409 EOP
9410 : see if sched_yield exists
9411 set try -DSCHED_YIELD
9412 if eval $compile; then
9413     val="$define"
9414     sched_yield='sched_yield()'
9415 else
9416     val="$undef"
9417 fi
9418 case "$usethreads" in
9419 $define)
9420         case "$val" in
9421         $define) echo 'sched_yield() found.' >&4        ;;
9422         *)       echo 'sched_yield() NOT found.' >&4    ;;
9423         esac
9424 esac
9425 set d_sched_yield
9426 eval $setvar
9427
9428 : see if pthread_yield exists
9429 set try -DPTHREAD_YIELD
9430 if eval $compile; then
9431     val="$define"
9432     case "$sched_yield" in
9433     '') sched_yield='pthread_yield()' ;;
9434     esac
9435 else
9436     set try -DPTHREAD_YIELD_NULL
9437     if eval $compile; then
9438         val="$define"
9439         case "$sched_yield" in
9440         '') sched_yield='pthread_yield(NULL)' ;;
9441         esac
9442     else
9443         val="$undef"
9444     fi
9445 fi
9446 case "$usethreads" in
9447 $define)
9448         case "$val" in
9449         $define) echo 'pthread_yield() found.' >&4      ;;
9450         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9451         esac
9452         ;;
9453 esac
9454 set d_pthread_yield
9455 eval $setvar
9456
9457 case "$sched_yield" in
9458 '') sched_yield=undef ;;
9459 esac
9460
9461 $rm -f try try.*
9462
9463 : see if this is a pwd.h system
9464 set pwd.h i_pwd
9465 eval $inhdr
9466
9467 case "$i_pwd" in
9468 $define)
9469         xxx=`./findhdr pwd.h`
9470         $cppstdin $cppflags $cppminus < $xxx >$$.h
9471
9472         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9473                 val="$define"
9474         else
9475                 val="$undef"
9476         fi
9477         set d_pwquota
9478         eval $setvar
9479
9480         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9481                 val="$define"
9482         else
9483                 val="$undef"
9484         fi
9485         set d_pwage
9486         eval $setvar
9487
9488         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9489                 val="$define"
9490         else
9491                 val="$undef"
9492         fi
9493         set d_pwchange
9494         eval $setvar
9495
9496         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9497                 val="$define"
9498         else
9499                 val="$undef"
9500         fi
9501         set d_pwclass
9502         eval $setvar
9503
9504         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9505                 val="$define"
9506         else
9507                 val="$undef"
9508         fi
9509         set d_pwexpire
9510         eval $setvar
9511
9512         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9513                 val="$define"
9514         else
9515                 val="$undef"
9516         fi
9517         set d_pwcomment
9518         eval $setvar
9519
9520         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9521                 val="$define"
9522         else
9523                 val="$undef"
9524         fi
9525         set d_pwgecos
9526         eval $setvar
9527
9528         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9529                 val="$define"
9530         else
9531                 val="$undef"
9532         fi
9533         set d_pwpasswd
9534         eval $setvar
9535
9536         $rm -f $$.h
9537         ;;
9538 *)
9539         val="$undef"; 
9540         set d_pwquota; eval $setvar
9541         set d_pwage; eval $setvar
9542         set d_pwchange; eval $setvar
9543         set d_pwclass; eval $setvar
9544         set d_pwexpire; eval $setvar
9545         set d_pwcomment; eval $setvar
9546         set d_pwgecos; eval $setvar
9547         set d_pwpasswd; eval $setvar
9548         ;;
9549 esac
9550
9551 : see if readdir and friends exist
9552 set readdir d_readdir
9553 eval $inlibc
9554 set seekdir d_seekdir
9555 eval $inlibc
9556 set telldir d_telldir
9557 eval $inlibc
9558 set rewinddir d_rewinddir
9559 eval $inlibc
9560
9561 : see if readlink exists
9562 set readlink d_readlink
9563 eval $inlibc
9564
9565 : see if readv exists
9566 set readv d_readv
9567 eval $inlibc
9568
9569 : see if rename exists
9570 set rename d_rename
9571 eval $inlibc
9572
9573 : see if rmdir exists
9574 set rmdir d_rmdir
9575 eval $inlibc
9576
9577 : see if memory.h is available.
9578 val=''
9579 set memory.h val
9580 eval $inhdr
9581
9582 : See if it conflicts with string.h
9583 case "$val" in
9584 $define)
9585         case "$strings" in
9586         '') ;;
9587         *)
9588                 $cppstdin $cppflags $cppminus < $strings > mem.h
9589                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9590                         echo " "
9591                         echo "We won't be including <memory.h>."
9592                         val="$undef"
9593                 fi
9594                 $rm -f mem.h
9595                 ;;
9596         esac
9597 esac
9598 set i_memory
9599 eval $setvar
9600
9601 : can bcopy handle overlapping blocks?
9602 val="$undef"
9603 case "$d_bcopy" in
9604 "$define")
9605         echo " "
9606         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9607         $cat >try.c <<EOCP
9608 #$i_memory I_MEMORY
9609 #$i_stdlib I_STDLIB
9610 #$i_string I_STRING
9611 #$i_unistd I_UNISTD
9612 EOCP
9613         $cat >>try.c <<'EOCP'
9614 #include <stdio.h>
9615 #ifdef I_MEMORY
9616 #  include <memory.h>
9617 #endif
9618 #ifdef I_STDLIB
9619 #  include <stdlib.h>
9620 #endif
9621 #ifdef I_STRING
9622 #  include <string.h>
9623 #else
9624 #  include <strings.h>
9625 #endif
9626 #ifdef I_UNISTD
9627 #  include <unistd.h>  /* Needed for NetBSD */
9628 #endif
9629 int main()
9630 {
9631 char buf[128], abc[128];
9632 char *b;
9633 int len;
9634 int off;
9635 int align;
9636
9637 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9638
9639 for (align = 7; align >= 0; align--) {
9640         for (len = 36; len; len--) {
9641                 b = buf+align;
9642                 bcopy(abc, b, len);
9643                 for (off = 1; off <= len; off++) {
9644                         bcopy(b, b+off, len);
9645                         bcopy(b+off, b, len);
9646                         if (bcmp(b, abc, len))
9647                                 exit(1);
9648                 }
9649         }
9650 }
9651 exit(0);
9652 }
9653 EOCP
9654         set try
9655         if eval $compile_ok; then
9656                 if ./try 2>/dev/null; then
9657                         echo "Yes, it can."
9658                         val="$define"
9659                 else
9660                         echo "It can't, sorry."
9661                         case "$d_memmove" in
9662                         "$define") echo "But that's Ok since you have memmove()." ;;
9663                         esac
9664                 fi
9665         else
9666                 echo "(I can't compile the test program, so we'll assume not...)"
9667                 case "$d_memmove" in
9668                 "$define") echo "But that's Ok since you have memmove()." ;;
9669                 esac
9670         fi
9671         ;;
9672 esac
9673 $rm -f try.* try core
9674 set d_safebcpy
9675 eval $setvar
9676
9677 : can memcpy handle overlapping blocks?
9678 val="$undef"
9679 case "$d_memcpy" in
9680 "$define")
9681         echo " "
9682         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9683         $cat >try.c <<EOCP
9684 #$i_memory I_MEMORY
9685 #$i_stdlib I_STDLIB
9686 #$i_string I_STRING
9687 #$i_unistd I_UNISTD
9688 EOCP
9689         $cat >>try.c <<'EOCP'
9690 #include <stdio.h>
9691 #ifdef I_MEMORY
9692 #  include <memory.h>
9693 #endif
9694 #ifdef I_STDLIB
9695 #  include <stdlib.h>
9696 #endif
9697 #ifdef I_STRING
9698 #  include <string.h>
9699 #else
9700 #  include <strings.h>
9701 #endif
9702 #ifdef I_UNISTD
9703 #  include <unistd.h>  /* Needed for NetBSD */
9704 #endif
9705 int main()
9706 {
9707 char buf[128], abc[128];
9708 char *b;
9709 int len;
9710 int off;
9711 int align;
9712
9713 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9714    try to store the string in read-only memory. */
9715 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9716
9717 for (align = 7; align >= 0; align--) {
9718         for (len = 36; len; len--) {
9719                 b = buf+align;
9720                 memcpy(b, abc, len);
9721                 for (off = 1; off <= len; off++) {
9722                         memcpy(b+off, b, len);
9723                         memcpy(b, b+off, len);
9724                         if (memcmp(b, abc, len))
9725                                 exit(1);
9726                 }
9727         }
9728 }
9729 exit(0);
9730 }
9731 EOCP
9732         set try
9733         if eval $compile_ok; then
9734                 if ./try 2>/dev/null; then
9735                         echo "Yes, it can."
9736                         val="$define"
9737                 else
9738                         echo "It can't, sorry."
9739                         case "$d_memmove" in
9740                         "$define") echo "But that's Ok since you have memmove()." ;;
9741                         esac
9742                 fi
9743         else
9744                 echo "(I can't compile the test program, so we'll assume not...)"
9745                 case "$d_memmove" in
9746                 "$define") echo "But that's Ok since you have memmove()." ;;
9747                 esac
9748         fi
9749         ;;
9750 esac
9751 $rm -f try.* try core
9752 set d_safemcpy
9753 eval $setvar
9754
9755 : can memcmp be trusted to compare relative magnitude?
9756 val="$undef"
9757 case "$d_memcmp" in
9758 "$define")
9759         echo " "
9760         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9761         $cat >try.c <<EOCP
9762 #$i_memory I_MEMORY
9763 #$i_stdlib I_STDLIB
9764 #$i_string I_STRING
9765 #$i_unistd I_UNISTD
9766 EOCP
9767         $cat >>try.c <<'EOCP'
9768 #include <stdio.h>
9769 #ifdef I_MEMORY
9770 #  include <memory.h>
9771 #endif
9772 #ifdef I_STDLIB
9773 #  include <stdlib.h>
9774 #endif
9775 #ifdef I_STRING
9776 #  include <string.h>
9777 #else
9778 #  include <strings.h>
9779 #endif
9780 #ifdef I_UNISTD
9781 #  include <unistd.h>  /* Needed for NetBSD */
9782 #endif
9783 int main()
9784 {
9785 char a = -1;
9786 char b = 0;
9787 if ((a < b) && memcmp(&a, &b, 1) < 0)
9788         exit(1);
9789 exit(0);
9790 }
9791 EOCP
9792         set try
9793         if eval $compile_ok; then
9794                 if ./try 2>/dev/null; then
9795                         echo "Yes, it can."
9796                         val="$define"
9797                 else
9798                         echo "No, it can't (it uses signed chars)."
9799                 fi
9800         else
9801                 echo "(I can't compile the test program, so we'll assume not...)"
9802         fi
9803         ;;
9804 esac
9805 $rm -f try.* try core
9806 set d_sanemcmp
9807 eval $setvar
9808
9809 : see if select exists
9810 set select d_select
9811 eval $inlibc
9812
9813 : see if semctl exists
9814 set semctl d_semctl
9815 eval $inlibc
9816
9817 : see if semget exists
9818 set semget d_semget
9819 eval $inlibc
9820
9821 : see if semop exists
9822 set semop d_semop
9823 eval $inlibc
9824
9825 : see how much of the 'sem*(2)' library is present.
9826 h_sem=true
9827 echo " "
9828 case "$d_semctl$d_semget$d_semop" in
9829 *"$undef"*) h_sem=false;;
9830 esac
9831 case "$osname" in
9832 freebsd)
9833     case "`ipcs 2>&1`" in
9834     "SVID messages"*"not configured"*)
9835         echo "Your $osname does not have the sem*(2) configured." >&4
9836         h_sem=false
9837         val="$undef"
9838         set semctl d_semctl
9839         eval $setvar
9840         set semget d_semget
9841         eval $setvar
9842         set semop d_semop
9843         eval $setvar
9844         ;;
9845     esac
9846     ;;
9847 esac
9848 : we could also check for sys/ipc.h ...
9849 if $h_sem && $test `./findhdr sys/sem.h`; then
9850         echo "You have the full sem*(2) library." >&4
9851         val="$define"
9852 else
9853         echo "You don't have the full sem*(2) library." >&4
9854         val="$undef"
9855 fi
9856 set d_sem
9857 eval $setvar
9858
9859 : see whether sys/sem.h defines union semun
9860 echo " "
9861 $cat > try.c <<'END'
9862 #include <sys/types.h>
9863 #include <sys/ipc.h>
9864 #include <sys/sem.h>
9865 int main () { union semun semun; semun.buf = 0; }
9866 END
9867 set try
9868 if eval $compile; then
9869     echo "You have union semun in <sys/sem.h>." >&4
9870     val="$define"
9871 else
9872     echo "You do not have union semun in <sys/sem.h>." >&4
9873     val="$undef"
9874 fi
9875 $rm -f try try.c try.h
9876 set d_union_semun
9877 eval $setvar
9878
9879 : see how to do semctl IPC_STAT
9880 case "$d_sem" in
9881 $define)
9882     : see whether semctl IPC_STAT can use union semun
9883     echo " "
9884     $cat > try.h <<END
9885 #ifndef S_IRUSR
9886 #   ifdef S_IREAD
9887 #       define S_IRUSR S_IREAD
9888 #       define S_IWUSR S_IWRITE
9889 #       define S_IXUSR S_IEXEC
9890 #   else
9891 #       define S_IRUSR 0400
9892 #       define S_IWUSR 0200
9893 #       define S_IXUSR 0100
9894 #   endif
9895 #   define S_IRGRP (S_IRUSR>>3)
9896 #   define S_IWGRP (S_IWUSR>>3)
9897 #   define S_IXGRP (S_IXUSR>>3)
9898 #   define S_IROTH (S_IRUSR>>6)
9899 #   define S_IWOTH (S_IWUSR>>6)
9900 #   define S_IXOTH (S_IXUSR>>6)
9901 #endif
9902 #ifndef S_IRWXU
9903 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9904 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9905 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9906 #endif
9907 END
9908
9909     $cat > try.c <<END
9910 #include <sys/types.h>
9911 #include <sys/ipc.h>
9912 #include <sys/sem.h>
9913 #include <sys/stat.h>
9914 #include <stdio.h>
9915 #include <errno.h>
9916 #include "try.h"
9917 #ifndef errno
9918 extern int errno;
9919 #endif
9920 #$d_union_semun HAS_UNION_SEMUN
9921 int main() {
9922     union semun
9923 #ifndef HAS_UNION_SEMUN
9924     {
9925         int val;
9926         struct semid_ds *buf;
9927         unsigned short *array;
9928     }
9929 #endif
9930     arg;
9931     int sem, st;
9932
9933 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9934     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9935     if (sem > -1) {
9936         struct semid_ds argbuf;
9937         arg.buf = &argbuf;
9938 #       ifdef IPC_STAT
9939         st = semctl(sem, 0, IPC_STAT, arg);
9940         if (st == 0)
9941             printf("semun\n");
9942         else
9943 #       endif /* IPC_STAT */
9944             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9945 #       ifdef IPC_RMID
9946         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9947 #       endif /* IPC_RMID */
9948             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9949     } else
9950 #endif /* IPC_PRIVATE && ... */
9951         printf("semget failed: errno = %d\n", errno);
9952   return 0;
9953 }
9954 END
9955     val="$undef"
9956     set try
9957     if eval $compile; then
9958         xxx=`./try`
9959         case "$xxx" in
9960         semun) val="$define" ;;
9961         esac
9962     fi
9963     $rm -f try try.c
9964     set d_semctl_semun
9965     eval $setvar
9966     case "$d_semctl_semun" in
9967     $define)
9968         echo "You can use union semun for semctl IPC_STAT." >&4
9969         also='also'
9970         ;;
9971     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9972         also=''
9973         ;;
9974     esac
9975
9976     : see whether semctl IPC_STAT can use struct semid_ds pointer
9977     $cat > try.c <<'END'
9978 #include <sys/types.h>
9979 #include <sys/ipc.h>
9980 #include <sys/sem.h>
9981 #include <sys/stat.h>
9982 #include "try.h"
9983 #include <stdio.h>
9984 #include <errno.h>
9985 #ifndef errno
9986 extern int errno;
9987 #endif
9988 int main() {
9989     struct semid_ds arg;
9990     int sem, st;
9991
9992 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9993     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9994     if (sem > -1) {
9995 #       ifdef IPC_STAT
9996         st = semctl(sem, 0, IPC_STAT, &arg);
9997         if (st == 0)
9998             printf("semid_ds\n");
9999         else
10000 #       endif /* IPC_STAT */
10001             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10002 #       ifdef IPC_RMID
10003         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10004 #       endif /* IPC_RMID */
10005             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10006     } else
10007 #endif /* IPC_PRIVATE && ... */
10008         printf("semget failed: errno = %d\n", errno);
10009
10010     return 0;
10011 }
10012 END
10013     val="$undef"
10014     set try
10015     if eval $compile; then
10016         xxx=`./try`
10017         case "$xxx" in
10018         semid_ds) val="$define" ;;
10019         esac
10020     fi
10021     $rm -f try try.c
10022     set d_semctl_semid_ds
10023     eval $setvar
10024     case "$d_semctl_semid_ds" in
10025     $define)
10026         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10027         ;;
10028     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10029         ;;
10030     esac
10031     $rm -f try.h
10032     ;;
10033 *)  val="$undef"
10034
10035     # We do not have the full sem*(2) library, so assume we can not
10036     # use either.
10037
10038     set d_semctl_semun
10039     eval $setvar
10040
10041     set d_semctl_semid_ds
10042     eval $setvar
10043     ;;
10044 esac
10045
10046 : see if setegid exists
10047 set setegid d_setegid
10048 eval $inlibc
10049
10050 : see if seteuid exists
10051 set seteuid d_seteuid
10052 eval $inlibc
10053
10054 : see if setgrent exists
10055 set setgrent d_setgrent
10056 eval $inlibc
10057
10058 : see if sethostent exists
10059 set sethostent d_sethent
10060 eval $inlibc
10061
10062 : see if setlinebuf exists
10063 set setlinebuf d_setlinebuf
10064 eval $inlibc
10065
10066 : see if setlocale exists
10067 set setlocale d_setlocale
10068 eval $inlibc
10069
10070 : see if setnetent exists
10071 set setnetent d_setnent
10072 eval $inlibc
10073
10074 : see if setprotoent exists
10075 set setprotoent d_setpent
10076 eval $inlibc
10077
10078 : see if setpgid exists
10079 set setpgid d_setpgid
10080 eval $inlibc
10081
10082 : see if setpgrp2 exists
10083 set setpgrp2 d_setpgrp2
10084 eval $inlibc
10085
10086 : see if setpriority exists
10087 set setpriority d_setprior
10088 eval $inlibc
10089
10090 : see if setpwent exists
10091 set setpwent d_setpwent
10092 eval $inlibc
10093
10094 : see if setregid exists
10095 set setregid d_setregid
10096 eval $inlibc
10097 set setresgid d_setresgid
10098 eval $inlibc
10099
10100 : see if setreuid exists
10101 set setreuid d_setreuid
10102 eval $inlibc
10103 set setresuid d_setresuid
10104 eval $inlibc
10105
10106 : see if setrgid exists
10107 set setrgid d_setrgid
10108 eval $inlibc
10109
10110 : see if setruid exists
10111 set setruid d_setruid
10112 eval $inlibc
10113
10114 : see if setservent exists
10115 set setservent d_setsent
10116 eval $inlibc
10117
10118 : see if setsid exists
10119 set setsid d_setsid
10120 eval $inlibc
10121
10122 : see if setspent exists
10123 set setspent d_setspent
10124 eval $inlibc
10125
10126 : see if setvbuf exists
10127 set setvbuf d_setvbuf
10128 eval $inlibc
10129
10130 : see if sfio.h is available
10131 set sfio.h i_sfio
10132 eval $inhdr
10133
10134
10135 : see if sfio library is available
10136 case "$i_sfio" in
10137 $define)
10138         val=''
10139         set sfreserve val
10140         eval $inlibc
10141         ;;
10142 *)
10143         val="$undef"
10144         ;;
10145 esac
10146 : Ok, but do we want to use it.
10147 case "$val" in
10148 $define)
10149         case "$usesfio" in
10150         true|$define|[yY]*) dflt='y';;
10151         *) dflt='n';;
10152         esac
10153         echo "$package can use the sfio library, but it is experimental."
10154         rp="You seem to have sfio available, do you want to try using it?"
10155         . ./myread
10156         case "$ans" in
10157         y|Y) ;;
10158         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10159                 val="$undef"
10160                 : Remove sfio from list of libraries to use
10161                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10162                 shift
10163                 libs="$*"
10164                 echo "libs = $libs" >&4
10165                 ;;
10166         esac
10167         ;;
10168 *)      case "$usesfio" in
10169         true|$define|[yY]*)
10170                 echo "Sorry, cannot find sfio on this machine" >&4
10171                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10172                 ;;
10173         esac
10174         ;;
10175 esac
10176 set d_sfio
10177 eval $setvar
10178 case "$d_sfio" in
10179 $define) usesfio='true';;
10180 *) usesfio='false';;
10181 esac
10182
10183 : see if shmctl exists
10184 set shmctl d_shmctl
10185 eval $inlibc
10186
10187 : see if shmget exists
10188 set shmget d_shmget
10189 eval $inlibc
10190
10191 : see if shmat exists
10192 set shmat d_shmat
10193 eval $inlibc
10194 : see what shmat returns
10195 case "$d_shmat" in
10196 "$define")
10197         $cat >shmat.c <<'END'
10198 #include <sys/shm.h>
10199 void *shmat();
10200 END
10201         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10202                 shmattype='void *'
10203         else
10204                 shmattype='char *'
10205         fi
10206         echo "and it returns ($shmattype)." >&4
10207         : see if a prototype for shmat is available
10208         xxx=`./findhdr sys/shm.h`
10209         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10210         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10211                 val="$define"
10212         else
10213                 val="$undef"
10214         fi
10215         $rm -f shmat.[co]
10216         ;;
10217 *)
10218         val="$undef"
10219         ;;
10220 esac
10221 set d_shmatprototype
10222 eval $setvar
10223
10224 : see if shmdt exists
10225 set shmdt d_shmdt
10226 eval $inlibc
10227
10228 : see how much of the 'shm*(2)' library is present.
10229 h_shm=true
10230 echo " "
10231 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10232 *"$undef"*) h_shm=false;;
10233 esac
10234 case "$osname" in
10235 freebsd)
10236     case "`ipcs 2>&1`" in
10237     "SVID shared memory"*"not configured"*)
10238         echo "Your $osname does not have the shm*(2) configured." >&4
10239         h_shm=false
10240         val="$undef"
10241         set shmctl d_shmctl
10242         evat $setvar
10243         set shmget d_shmget
10244         evat $setvar
10245         set shmat d_shmat
10246         evat $setvar
10247         set shmdt d_shmdt
10248         evat $setvar
10249         ;;
10250     esac
10251     ;;
10252 esac
10253 : we could also check for sys/ipc.h ...
10254 if $h_shm && $test `./findhdr sys/shm.h`; then
10255         echo "You have the full shm*(2) library." >&4
10256         val="$define"
10257 else
10258         echo "You don't have the full shm*(2) library." >&4
10259         val="$undef"
10260 fi
10261 set d_shm
10262 eval $setvar
10263
10264 echo " "
10265 : see if we have sigaction
10266 if set sigaction val -f d_sigaction; eval $csym; $val; then
10267         echo 'sigaction() found.' >&4
10268         $cat > try.c <<'EOP'
10269 #include <stdio.h>
10270 #include <sys/types.h>
10271 #include <signal.h>
10272 int main()
10273 {
10274     struct sigaction act, oact;
10275     act.sa_flags = 0;
10276     oact.sa_handler = 0;
10277 }
10278 EOP
10279         set try
10280         if eval $compile_ok; then
10281                 val="$define"
10282         else
10283                 echo "But you don't seem to have a useable struct sigaction." >&4
10284                 val="$undef"
10285         fi
10286 else
10287         echo 'sigaction NOT found.' >&4
10288         val="$undef"
10289 fi
10290 set d_sigaction; eval $setvar
10291 $rm -f try try$_o try.c
10292
10293 : see if sigsetjmp exists
10294 echo " "
10295 case "$d_sigsetjmp" in
10296 '')
10297         $cat >try.c <<'EOP'
10298 #include <setjmp.h>
10299 sigjmp_buf env;
10300 int set = 1;
10301 int main()
10302 {
10303         if (sigsetjmp(env,1))
10304                 exit(set);
10305         set = 0;
10306         siglongjmp(env, 1);
10307         exit(1);
10308 }
10309 EOP
10310         set try
10311         if eval $compile; then
10312                 if ./try >/dev/null 2>&1; then
10313                         echo "POSIX sigsetjmp found." >&4
10314                         val="$define"
10315                 else
10316                         $cat >&4 <<EOM
10317 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10318 I'll ignore them.
10319 EOM
10320                         val="$undef"
10321                 fi
10322         else
10323                 echo "sigsetjmp not found." >&4
10324                 val="$undef"
10325         fi
10326         ;;
10327 *) val="$d_sigsetjmp"
10328         case "$d_sigsetjmp" in
10329         $define) echo "POSIX sigsetjmp found." >&4;;
10330         $undef) echo "sigsetjmp not found." >&4;;
10331         esac
10332         ;;
10333 esac
10334 set d_sigsetjmp
10335 eval $setvar
10336 $rm -f try.c try
10337
10338 : see if sqrtl exists
10339 set sqrtl d_sqrtl
10340 eval $inlibc
10341
10342 : see if sys/stat.h is available
10343 set sys/stat.h i_sysstat
10344 eval $inhdr
10345
10346 : see if stat knows about block sizes
10347 echo " "
10348 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10349 eval $hasfield
10350
10351 : see if _ptr and _cnt from stdio act std
10352 echo " "
10353 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10354         echo "(Looks like you have stdio.h from Linux.)"
10355         case "$stdio_ptr" in
10356         '') stdio_ptr='((fp)->_IO_read_ptr)'
10357                 ptr_lval=$define
10358                 ;;
10359         *)      ptr_lval=$d_stdio_ptr_lval;;
10360         esac
10361         case "$stdio_cnt" in
10362         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10363                 cnt_lval=$undef
10364                 ;;
10365         *)      cnt_lval=$d_stdio_cnt_lval;;
10366         esac
10367         case "$stdio_base" in
10368         '') stdio_base='((fp)->_IO_read_base)';;
10369         esac
10370         case "$stdio_bufsiz" in
10371         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10372         esac
10373 else
10374         case "$stdio_ptr" in
10375         '') stdio_ptr='((fp)->_ptr)'
10376                 ptr_lval=$define
10377                 ;;
10378         *)      ptr_lval=$d_stdio_ptr_lval;;
10379         esac
10380         case "$stdio_cnt" in
10381         '') stdio_cnt='((fp)->_cnt)'
10382                 cnt_lval=$define
10383                 ;;
10384         *)      cnt_lval=$d_stdio_cnt_lval;;
10385         esac
10386         case "$stdio_base" in
10387         '') stdio_base='((fp)->_base)';;
10388         esac
10389         case "$stdio_bufsiz" in
10390         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10391         esac
10392 fi
10393 : test whether _ptr and _cnt really work
10394 echo "Checking how std your stdio is..." >&4
10395 $cat >try.c <<EOP
10396 #include <stdio.h>
10397 #define FILE_ptr(fp)    $stdio_ptr
10398 #define FILE_cnt(fp)    $stdio_cnt
10399 int main() {
10400         FILE *fp = fopen("try.c", "r");
10401         char c = getc(fp);
10402         if (
10403                 18 <= FILE_cnt(fp) &&
10404                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10405         )
10406                 exit(0);
10407         exit(1);
10408 }
10409 EOP
10410 val="$undef"
10411 set try
10412 if eval $compile; then
10413         if ./try; then
10414                 echo "Your stdio acts pretty std."
10415                 val="$define"
10416         else
10417                 echo "Your stdio isn't very std."
10418         fi
10419 else
10420         echo "Your stdio doesn't appear very std."
10421 fi
10422 $rm -f try.c try
10423 set d_stdstdio
10424 eval $setvar
10425
10426 : Can _ptr be used as an lvalue?
10427 case "$d_stdstdio$ptr_lval" in
10428 $define$define) val=$define ;;
10429 *) val=$undef ;;
10430 esac
10431 set d_stdio_ptr_lval
10432 eval $setvar
10433
10434 : Can _cnt be used as an lvalue?
10435 case "$d_stdstdio$cnt_lval" in
10436 $define$define) val=$define ;;
10437 *) val=$undef ;;
10438 esac
10439 set d_stdio_cnt_lval
10440 eval $setvar
10441
10442 : see if _base is also standard
10443 val="$undef"
10444 case "$d_stdstdio" in
10445 $define)
10446         $cat >try.c <<EOP
10447 #include <stdio.h>
10448 #define FILE_base(fp)   $stdio_base
10449 #define FILE_bufsiz(fp) $stdio_bufsiz
10450 int main() {
10451         FILE *fp = fopen("try.c", "r");
10452         char c = getc(fp);
10453         if (
10454                 19 <= FILE_bufsiz(fp) &&
10455                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10456         )
10457                 exit(0);
10458         exit(1);
10459 }
10460 EOP
10461         set try
10462         if eval $compile; then
10463                 if ./try; then
10464                         echo "And its _base field acts std."
10465                         val="$define"
10466                 else
10467                         echo "But its _base field isn't std."
10468                 fi
10469         else
10470                 echo "However, it seems to be lacking the _base field."
10471         fi
10472         $rm -f try.c try
10473         ;;
10474 esac
10475 set d_stdiobase
10476 eval $setvar
10477
10478 $cat >&4 <<EOM
10479 Checking how to access stdio streams by file descriptor number...
10480 EOM
10481 case "$stdio_stream_array" in
10482 '')     $cat >try.c <<EOCP
10483 #include <stdio.h>
10484 int main() {
10485   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10486     printf("yes\n");
10487 }
10488 EOCP
10489         for s in _iob __iob __sF
10490         do
10491                 set try -DSTDIO_STREAM_ARRAY=$s
10492                 if eval $compile; then
10493                         case "`./try$exe_ext`" in
10494                         yes)    stdio_stream_array=$s; break ;;
10495                         esac
10496                 fi
10497         done
10498         $rm -f try.* try$exe_ext
10499 esac
10500 case "$stdio_stream_array" in
10501 '')     $cat >&4 <<EOM
10502 I can't figure out how to access stdio streams by file descriptor number.
10503 EOM
10504         d_stdio_stream_array="$undef"
10505         ;;
10506 *)      $cat >&4 <<EOM
10507 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10508 EOM
10509         d_stdio_stream_array="$define"
10510         ;;
10511 esac
10512
10513 : see if strcoll exists
10514 set strcoll d_strcoll
10515 eval $inlibc
10516
10517 : check for structure copying
10518 echo " "
10519 echo "Checking to see if your C compiler can copy structs..." >&4
10520 $cat >try.c <<'EOCP'
10521 int main()
10522 {
10523         struct blurfl {
10524                 int dyick;
10525         } foo, bar;
10526
10527         foo = bar;
10528 }
10529 EOCP
10530 if $cc -c try.c >/dev/null 2>&1 ; then
10531         val="$define"
10532         echo "Yup, it can."
10533 else
10534         val="$undef"
10535         echo "Nope, it can't."
10536 fi
10537 set d_strctcpy
10538 eval $setvar
10539 $rm -f try.*
10540
10541 : see if strerror and/or sys_errlist[] exist
10542 echo " "
10543 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10544     if set strerror val -f d_strerror; eval $csym; $val; then
10545                 echo 'strerror() found.' >&4
10546                 d_strerror="$define"
10547                 d_strerrm='strerror(e)'
10548                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10549                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10550                         d_syserrlst="$define"
10551                 else
10552                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10553                         d_syserrlst="$undef"
10554                 fi
10555     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10556                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10557                 echo 'strerror() found in string header.' >&4
10558                 d_strerror="$define"
10559                 d_strerrm='strerror(e)'
10560                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10561                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10562                                 d_syserrlst="$define"
10563                 else
10564                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10565                         d_syserrlst="$undef"
10566                 fi
10567     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10568                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10569                 d_strerror="$undef"
10570                 d_syserrlst="$define"
10571                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10572     else
10573                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10574                 d_strerror="$undef"
10575                 d_syserrlst="$undef"
10576                 d_strerrm='"unknown"'
10577     fi
10578 fi
10579
10580 : see if strtod exists
10581 set strtod d_strtod
10582 eval $inlibc
10583
10584 : see if strtol exists
10585 set strtol d_strtol
10586 eval $inlibc
10587
10588 : see if strtoul exists
10589 set strtoul d_strtoul
10590 eval $inlibc
10591
10592 : see if strtoull exists
10593 set strtoull d_strtoull
10594 eval $inlibc
10595
10596 : see if strxfrm exists
10597 set strxfrm d_strxfrm
10598 eval $inlibc
10599
10600 : see if symlink exists
10601 set symlink d_symlink
10602 eval $inlibc
10603
10604 : see if syscall exists
10605 set syscall d_syscall
10606 eval $inlibc
10607
10608 : see if sysconf exists
10609 set sysconf d_sysconf
10610 eval $inlibc
10611
10612 : see if system exists
10613 set system d_system
10614 eval $inlibc
10615
10616 : see if tcgetpgrp exists
10617 set tcgetpgrp d_tcgetpgrp
10618 eval $inlibc
10619
10620 : see if tcsetpgrp exists
10621 set tcsetpgrp d_tcsetpgrp
10622 eval $inlibc
10623
10624 : see if sys/types.h has to be included
10625 set sys/types.h i_systypes
10626 eval $inhdr
10627
10628 : see if prototype for telldir is available
10629 echo " "
10630 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10631 eval $hasproto
10632
10633 : define an is-a-typedef? function
10634 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10635 case "$inclist" in
10636 "") inclist="sys/types.h";;
10637 esac;
10638 eval "varval=\$$var";
10639 case "$varval" in
10640 "")
10641         $rm -f temp.c;
10642         for inc in $inclist; do
10643                 echo "#include <$inc>" >>temp.c;
10644         done;
10645         echo "#ifdef $type" >> temp.c;
10646         echo "printf(\"We have $type\");" >> temp.c;
10647         echo "#endif" >> temp.c;
10648         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10649         if $contains $type temp.E >/dev/null 2>&1; then
10650                 eval "$var=\$type";
10651         else
10652                 eval "$var=\$def";
10653         fi;
10654         $rm -f temp.?;;
10655 *) eval "$var=\$varval";;
10656 esac'
10657
10658 : define an is-a-typedef? function that prompts if the type is not available.
10659 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10660 case "$inclist" in
10661 "") inclist="sys/types.h";;
10662 esac;
10663 eval "varval=\$$var";
10664 case "$varval" in
10665 "")
10666         $rm -f temp.c;
10667         for inc in $inclist; do
10668                 echo "#include <$inc>" >>temp.c;
10669         done;
10670         echo "#ifdef $type" >> temp.c;
10671         echo "printf(\"We have $type\");" >> temp.c;
10672         echo "#endif" >> temp.c;
10673         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10674         echo " " ;
10675         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10676         if $contains $type temp.E >/dev/null 2>&1; then
10677                 echo "$type found." >&4;
10678                 eval "$var=\$type";
10679         else
10680                 echo "$type NOT found." >&4;
10681                 dflt="$def";
10682                 . ./myread ;
10683                 eval "$var=\$ans";
10684         fi;
10685         $rm -f temp.?;;
10686 *) eval "$var=\$varval";;
10687 esac'
10688
10689 : see if this is a sys/times.h system
10690 set sys/times.h i_systimes
10691 eval $inhdr
10692
10693 : see if times exists
10694 echo " "
10695 if set times val -f d_times; eval $csym; $val; then
10696         echo 'times() found.' >&4
10697         d_times="$define"
10698         inc=''
10699         case "$i_systimes" in
10700         "$define") inc='sys/times.h';;
10701         esac
10702         rp="What is the type returned by times() on this system?"
10703         set clock_t clocktype long stdio.h sys/types.h $inc
10704         eval $typedef_ask
10705 else
10706         echo 'times() NOT found, hope that will do.' >&4
10707         d_times="$undef"
10708         clocktype='int'
10709 fi
10710
10711 : see if truncate exists
10712 set truncate d_truncate
10713 eval $inlibc
10714
10715 : see if tzname[] exists
10716 echo " "
10717 if set tzname val -a d_tzname; eval $csym; $val; then
10718         val="$define"
10719         echo 'tzname[] found.' >&4
10720 else
10721         val="$undef"
10722         echo 'tzname[] NOT found.' >&4
10723 fi
10724 set d_tzname
10725 eval $setvar
10726
10727 : see if umask exists
10728 set umask d_umask
10729 eval $inlibc
10730
10731 : backward compatibility for d_hvfork
10732 if test X$d_hvfork != X; then
10733         d_vfork="$d_hvfork"
10734         d_hvfork=''
10735 fi
10736 : see if there is a vfork
10737 val=''
10738 set vfork val
10739 eval $inlibc
10740
10741 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10742 : perl on Solaris 2.x, and probably elsewhere.
10743 case "$val" in
10744 $define)
10745         echo " "
10746         case "$usevfork" in
10747         false) dflt='n';;
10748         *) dflt='y';;
10749         esac
10750         cat <<'EOM'
10751  
10752 Perl can only use a vfork() that doesn't suffer from strict
10753 restrictions on calling functions or modifying global data in
10754 the child.  For example, glibc-2.1 contains such a vfork()
10755 that is unsuitable.  If your system provides a proper fork()
10756 call, chances are that you do NOT want perl to use vfork().
10757
10758 EOM
10759         rp="Do you still want to use vfork()?"
10760         . ./myread
10761         case "$ans" in
10762         y|Y) ;;
10763         *)
10764                 echo "Ok, we won't use vfork()."
10765                 val="$undef"
10766                 ;;
10767         esac
10768         ;;
10769 esac
10770 set d_vfork
10771 eval $setvar
10772 case "$d_vfork" in
10773 $define) usevfork='true';;
10774 *) usevfork='false';;
10775 esac
10776
10777 : see if this is an sysdir system
10778 set sys/dir.h i_sysdir
10779 eval $inhdr
10780
10781 : see if this is an sysndir system
10782 set sys/ndir.h i_sysndir
10783 eval $inhdr
10784
10785 : see if closedir exists
10786 set closedir d_closedir
10787 eval $inlibc
10788
10789 case "$d_closedir" in
10790 "$define")
10791         echo " "
10792         echo "Checking whether closedir() returns a status..." >&4
10793         cat > closedir.c <<EOM
10794 #$i_dirent I_DIRENT             /**/
10795 #$i_sysdir I_SYS_DIR            /**/
10796 #$i_sysndir I_SYS_NDIR          /**/
10797 #$i_systypes I_SYS_TYPES        /**/
10798
10799 #if defined(I_SYS_TYPES)
10800 #include <sys/types.h>
10801 #endif
10802 #if defined(I_DIRENT)
10803 #include <dirent.h>
10804 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10805 #include <sys/dir.h>
10806 #endif
10807 #else
10808 #ifdef I_SYS_NDIR
10809 #include <sys/ndir.h>
10810 #else
10811 #ifdef I_SYS_DIR
10812 #ifdef hp9000s500
10813 #include <ndir.h>       /* may be wrong in the future */
10814 #else
10815 #include <sys/dir.h>
10816 #endif
10817 #endif
10818 #endif
10819 #endif 
10820 int main() { return closedir(opendir(".")); }
10821 EOM
10822         set closedir
10823         if eval $compile_ok; then
10824                 if ./closedir > /dev/null 2>&1 ; then
10825                         echo "Yes, it does."
10826                         val="$undef"
10827                 else
10828                         echo "No, it doesn't."
10829                         val="$define"
10830                 fi
10831         else
10832                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10833                 val="$define"
10834         fi
10835         ;;
10836 *)
10837         val="$undef";
10838         ;;
10839 esac
10840 set d_void_closedir
10841 eval $setvar
10842 $rm -f closedir*
10843 : check for volatile keyword
10844 echo " "
10845 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10846 $cat >try.c <<'EOCP'
10847 int main()
10848 {
10849         typedef struct _goo_struct goo_struct;
10850         goo_struct * volatile goo = ((goo_struct *)0);
10851         struct _goo_struct {
10852                 long long_int;
10853                 int reg_int;
10854                 char char_var;
10855         };
10856         typedef unsigned short foo_t;
10857         char *volatile foo;
10858         volatile int bar;
10859         volatile foo_t blech;
10860         foo = foo;
10861 }
10862 EOCP
10863 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10864         val="$define"
10865         echo "Yup, it does."
10866 else
10867         val="$undef"
10868         echo "Nope, it doesn't."
10869 fi
10870 set d_volatile
10871 eval $setvar
10872 $rm -f try.*
10873
10874 : see if there is a wait4
10875 set wait4 d_wait4
10876 eval $inlibc
10877
10878 : see if waitpid exists
10879 set waitpid d_waitpid
10880 eval $inlibc
10881
10882 : see if wcstombs exists
10883 set wcstombs d_wcstombs
10884 eval $inlibc
10885
10886 : see if wctomb exists
10887 set wctomb d_wctomb
10888 eval $inlibc
10889
10890 : see if writev exists
10891 set writev d_writev
10892 eval $inlibc
10893
10894 : preserve RCS keywords in files with variable substitution, grrr
10895 Date='$Date'
10896 Id='$Id'
10897 Log='$Log'
10898 RCSfile='$RCSfile'
10899 Revision='$Revision'
10900
10901 case "$crosscompile" in
10902 ''|[nN]*) crosscompile="$undef" ;;
10903 esac
10904
10905 case "$osname" in
10906 next|rhapsody) multiarch="$define" ;;
10907 esac
10908 case "$multiarch" in
10909 ''|[nN]*) multiarch="$undef" ;;
10910 esac
10911
10912 : check for alignment requirements
10913 echo " "
10914 case "$crosscompile$multiarch" in
10915 *$define*)
10916         $cat <<EOM
10917 You seem to be either cross-compiling or doing a multiarchitecture build,
10918 skipping the memory alignment check.
10919
10920 EOM
10921         case "$alignbytes" in
10922         '') alignbytes=8 ;;
10923         esac
10924         ;;
10925 *)
10926         case "$alignbytes" in
10927         '') echo "Checking alignment constraints..." >&4
10928                 $cat >try.c <<'EOCP'
10929 struct foobar {
10930         char foo;
10931         double bar;
10932 } try_algn;
10933 int main()
10934 {
10935         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10936 }
10937 EOCP
10938                 set try
10939                 if eval $compile_ok; then
10940                         dflt=`./try`
10941                 else
10942                         dflt='8'
10943                         echo "(I can't seem to compile the test program...)"
10944                 fi
10945                 ;;
10946         *) dflt="$alignbytes"
10947                 ;;
10948         esac
10949         rp="Doubles must be aligned on a how-many-byte boundary?"
10950         . ./myread
10951         alignbytes="$ans"
10952         $rm -f try.c try
10953         ;;
10954 esac
10955
10956
10957 : check for ordering of bytes in a long
10958 echo " "
10959 case "$crosscompile$multiarch" in
10960 *$define*)
10961         $cat <<EOM
10962 You seem to be either cross-compiling or doing a multiarchitecture build,
10963 skipping the byteorder check.
10964
10965 EOM
10966         byteorder='0xffff'
10967         ;;
10968 *)
10969         case "$byteorder" in
10970         '')
10971                 $cat <<'EOM'
10972 In the following, larger digits indicate more significance.  A big-endian
10973 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10974 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10975 machines may have weird orders like 3412.  A Cray will report 87654321,
10976 an Alpha will report 12345678. If the test program works the default is
10977 probably right.
10978 I'm now running the test program...
10979 EOM
10980                 $cat >try.c <<'EOCP'
10981 #include <stdio.h>
10982 int main()
10983 {
10984         int i;
10985         union {
10986                 unsigned long l;
10987                 char c[sizeof(long)];
10988         } u;
10989
10990         if (sizeof(long) > 4)
10991                 u.l = (0x08070605L << 32) | 0x04030201L;
10992         else
10993                 u.l = 0x04030201L;
10994         for (i = 0; i < sizeof(long); i++)
10995                 printf("%c", u.c[i]+'0');
10996         printf("\n");
10997         exit(0);
10998 }
10999 EOCP
11000                 xxx_prompt=y
11001                 set try
11002                 if eval $compile && ./try > /dev/null; then
11003                         dflt=`./try`
11004                         case "$dflt" in
11005                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11006                                 echo "(The test program ran ok.)"
11007                                 echo "byteorder=$dflt"
11008                                 xxx_prompt=n
11009                         ;;
11010                         ????|????????) echo "(The test program ran ok.)" ;;
11011                         *) echo "(The test program didn't run right for some reason.)" ;;
11012                         esac
11013                 else
11014                         dflt='4321'
11015                         cat <<'EOM'
11016 (I can't seem to compile the test program.  Guessing big-endian...)
11017 EOM
11018                 fi
11019                 case "$xxx_prompt" in
11020                 y)
11021                         rp="What is the order of bytes in a long?"
11022                         . ./myread
11023                         byteorder="$ans"
11024                         ;;
11025                 *)      byteorder=$dflt
11026                         ;;
11027                 esac
11028                 ;;
11029         esac
11030         $rm -f try.c try
11031         ;;
11032 esac
11033
11034
11035 : how do we catenate cpp tokens here?
11036 echo " "
11037 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11038 $cat >cpp_stuff.c <<'EOCP'
11039 #define RCAT(a,b)a/**/b
11040 #define ACAT(a,b)a ## b
11041 RCAT(Rei,ser)
11042 ACAT(Cir,cus)
11043 EOCP
11044 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11045 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11046         echo "Oh!  Smells like ANSI's been here." >&4
11047         echo "We can catify or stringify, separately or together!"
11048         cpp_stuff=42
11049 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11050         echo "Ah, yes!  The good old days!" >&4
11051         echo "However, in the good old days we don't know how to stringify and"
11052         echo "catify at the same time."
11053         cpp_stuff=1
11054 else
11055         $cat >&4 <<EOM
11056 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11057 to have to edit the values of CAT[2-5] in config.h...
11058 EOM
11059         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11060 fi
11061 $rm -f cpp_stuff.*
11062
11063 : see if this is a db.h system
11064 set db.h i_db
11065 eval $inhdr
11066
11067 case "$i_db" in
11068 $define)
11069         : Check db version.
11070         echo " "
11071         echo "Checking Berkeley DB version ..." >&4
11072         $cat >try.c <<EOCP
11073 #$d_const HASCONST
11074 #ifndef HASCONST
11075 #define const
11076 #endif
11077 #include <sys/types.h>
11078 #include <stdio.h>
11079 #include <db.h>
11080 int main()
11081 {
11082 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11083     int Major, Minor, Patch ;
11084     unsigned long Version ;
11085     (void)db_version(&Major, &Minor, &Patch) ;
11086     printf("You have Berkeley DB Version 2 or greater\n");
11087
11088     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11089                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11090     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11091                 Major, Minor, Patch) ;
11092
11093     /* check that db.h & libdb are compatible */
11094     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11095         printf("db.h and libdb are incompatible\n") ;
11096         exit(3);        
11097     }
11098
11099     printf("db.h and libdb are compatible\n") ;
11100
11101     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11102                 + DB_VERSION_PATCH ;
11103
11104     /* needs to be >= 2.3.4 */
11105     if (Version < 2003004) {
11106     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11107         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11108         exit(2);        
11109     }
11110
11111     exit(0);
11112 #else
11113 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11114     printf("You have Berkeley DB Version 1\n");
11115     exit(0);    /* DB version < 2: the coast is clear. */
11116 #else
11117     exit(1);    /* <db.h> not Berkeley DB? */
11118 #endif
11119 #endif
11120 }
11121 EOCP
11122         set try
11123         if eval $compile && ./try; then
11124                 echo 'Looks OK.' >&4
11125         else
11126                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11127                 i_db=$undef
11128                 case " $libs " in
11129                 *"-ldb "*)
11130                         : Remove db from list of libraries to use
11131                         echo "Removing unusable -ldb from library list" >&4
11132                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11133                         shift
11134                         libs="$*"
11135                         echo "libs = $libs" >&4
11136                         ;;
11137                 esac
11138         fi
11139         $rm -f try.*
11140         ;;
11141 esac
11142
11143 case "$i_db" in
11144 define)
11145         : Check the return type needed for hash 
11146         echo " "
11147         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11148         $cat >try.c <<EOCP
11149 #$d_const HASCONST
11150 #ifndef HASCONST
11151 #define const
11152 #endif
11153 #include <sys/types.h>
11154 #include <db.h>
11155
11156 #ifndef DB_VERSION_MAJOR
11157 u_int32_t hash_cb (ptr, size)
11158 const void *ptr;
11159 size_t size;
11160 {
11161 }
11162 HASHINFO info;
11163 int main()
11164 {
11165         info.hash = hash_cb;
11166 }
11167 #endif
11168 EOCP
11169         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11170                 if $contains warning try.out >>/dev/null 2>&1 ; then
11171                         db_hashtype='int'
11172                 else
11173                         db_hashtype='u_int32_t'
11174                 fi
11175         else
11176                 : XXX Maybe we should just give up here.
11177                 db_hashtype=u_int32_t
11178                 $cat try.out >&4
11179                 echo "Help:  I can't seem to compile the db test program." >&4
11180                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11181         fi
11182         $rm -f try.*
11183         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11184         ;;
11185 *)      db_hashtype=u_int32_t
11186         ;;
11187 esac
11188 case "$i_db" in
11189 define)
11190         : Check the return type needed for prefix 
11191         echo " "
11192         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11193         cat >try.c <<EOCP
11194 #$d_const HASCONST
11195 #ifndef HASCONST
11196 #define const
11197 #endif
11198 #include <sys/types.h>
11199 #include <db.h>
11200
11201 #ifndef DB_VERSION_MAJOR
11202 size_t prefix_cb (key1, key2)
11203 const DBT *key1;
11204 const DBT *key2;
11205 {
11206 }
11207 BTREEINFO info;
11208 int main()
11209 {
11210         info.prefix = prefix_cb;
11211 }
11212 #endif
11213 EOCP
11214         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11215                 if $contains warning try.out >>/dev/null 2>&1 ; then
11216                         db_prefixtype='int'
11217                 else
11218                         db_prefixtype='size_t'
11219                 fi
11220         else
11221                 db_prefixtype='size_t'
11222                 : XXX Maybe we should just give up here.
11223                 $cat try.out >&4
11224                 echo "Help:  I can't seem to compile the db test program." >&4
11225                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11226         fi
11227         $rm -f try.*
11228         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11229         ;;
11230 *)      db_prefixtype='size_t'
11231         ;;
11232 esac
11233
11234 : check for void type
11235 echo " "
11236 echo "Checking to see how well your C compiler groks the void type..." >&4
11237 case "$voidflags" in
11238 '')
11239         $cat >try.c <<'EOCP'
11240 #if TRY & 1
11241 void sub() {
11242 #else
11243 sub() {
11244 #endif
11245         extern void moo();      /* function returning void */
11246         void (*goo)();          /* ptr to func returning void */
11247 #if TRY & 8
11248         void *hue;              /* generic ptr */
11249 #endif
11250 #if TRY & 2
11251         void (*foo[10])();
11252 #endif
11253
11254 #if TRY & 4
11255         if(goo == moo) {
11256                 exit(0);
11257         }
11258 #endif
11259         exit(0);
11260 }
11261 int main() { sub(); }
11262 EOCP
11263         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11264                 voidflags=$defvoidused
11265         echo "Good.  It appears to support void to the level $package wants.">&4
11266                 if $contains warning .out >/dev/null 2>&1; then
11267                         echo "However, you might get some warnings that look like this:"
11268                         $cat .out
11269                 fi
11270         else
11271 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11272                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11273                         echo "It supports 1..."
11274                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11275                                 echo "It also supports 2..."
11276                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11277                                         voidflags=7
11278                                         echo "And it supports 4 but not 8 definitely."
11279                                 else
11280                                         echo "It doesn't support 4..."
11281                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11282                                                 voidflags=11
11283                                                 echo "But it supports 8."
11284                                         else
11285                                                 voidflags=3
11286                                                 echo "Neither does it support 8."
11287                                         fi
11288                                 fi
11289                         else
11290                                 echo "It does not support 2..."
11291                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11292                                         voidflags=13
11293                                         echo "But it supports 4 and 8."
11294                                 else
11295                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11296                                                 voidflags=5
11297                                                 echo "And it supports 4 but has not heard about 8."
11298                                         else
11299                                                 echo "However it supports 8 but not 4."
11300                                         fi
11301                                 fi
11302                         fi
11303                 else
11304                         echo "There is no support at all for void."
11305                         voidflags=0
11306                 fi
11307         fi
11308 esac
11309 case "$voidflags" in
11310 "$defvoidused") ;;
11311 *)      $cat >&4 <<'EOM'
11312   Support flag bits are:
11313     1: basic void declarations.
11314     2: arrays of pointers to functions returning void.
11315     4: operations between pointers to and addresses of void functions.
11316     8: generic void pointers.
11317 EOM
11318         dflt="$voidflags";
11319         rp="Your void support flags add up to what?"
11320         . ./myread
11321         voidflags="$ans"
11322         ;;
11323 esac
11324 $rm -f try.* .out
11325
11326
11327 : How can we generate normalized random numbers ?
11328 echo " "
11329 echo "Looking for a random number function..." >&4
11330 case "$randfunc" in
11331 '')
11332         if set drand48 val -f; eval $csym; $val; then
11333                 dflt="drand48"
11334                 echo "Good, found drand48()." >&4
11335         elif set random val -f; eval $csym; $val; then
11336                 dflt="random"
11337                 echo "OK, found random()." >&4
11338         else
11339                 dflt="rand"
11340                 echo "Yick, looks like I have to use rand()." >&4
11341         fi
11342         echo " "
11343         ;;
11344 *)
11345         dflt="$randfunc"
11346         ;;
11347 esac
11348 cont=true
11349
11350 case "$ccflags" in
11351 *-Dmy_rand=*|*-Dmy_srand=*)
11352         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11353         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11354         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11355         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11356         ;;
11357 esac
11358
11359 while $test "$cont"; do
11360         rp="Use which function to generate random numbers?"
11361         . ./myread
11362         if $test "$ans" = "$dflt"; then
11363                 : null
11364         else
11365                 randbits=''
11366         fi
11367         randfunc="$ans"
11368         if set $ans val -f; eval $csym; $val; then
11369                 cont=''
11370         else
11371                 dflt=y
11372                 rp="I cannot find function $ans. Use that name anyway?"
11373                 . ./myread
11374                 dflt=rand
11375                 case "$ans" in
11376                         [yY]*) cont='';;
11377                 esac
11378         fi
11379         case "$cont" in
11380         '')
11381                 case "$randfunc" in
11382                 drand48)
11383                         drand01="drand48()"
11384                         seedfunc="srand48"
11385                         randbits=48
11386                         randseedtype=long
11387                         ;;
11388                 rand|random)
11389                         case "$randbits" in
11390                         '')
11391 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11392                                 $cat >try.c <<EOCP
11393 #$i_unistd I_UNISTD
11394 #$i_stdlib I_STDLIB
11395 #include <stdio.h>
11396 #ifdef I_UNISTD
11397 #  include <unistd.h>
11398 #endif
11399 #ifdef I_STDLIB
11400 #  include <stdlib.h>
11401 #endif
11402 int main()
11403 {
11404         register int i;
11405         register unsigned long tmp;
11406         register unsigned long max = 0L;
11407
11408         for (i = 1000; i; i--) {
11409                 tmp = (unsigned long) $randfunc();
11410                 if (tmp > max) max = tmp;
11411         }
11412         for (i = 0; max; i++)
11413                 max /= 2;
11414         printf("%d\n",i);
11415 }
11416 EOCP
11417                                 set try
11418                                 if eval $compile_ok; then
11419                                         dflt=`try`
11420                                 else
11421                                         dflt='?'
11422                                         echo "(I can't seem to compile the test program...)"
11423                                 fi
11424                                 ;;
11425                         *)
11426                                 dflt="$randbits"
11427                                 ;;
11428                         esac
11429                         rp="How many bits does your $randfunc() function produce?"
11430                         . ./myread
11431                         randbits="$ans"
11432                         $rm -f try.c try
11433                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11434                         seedfunc="s$randfunc"
11435                         randseedtype=unsigned
11436                         ;;
11437                 *)
11438                         dflt="31"
11439                         rp="How many bits does your $randfunc() function produce?"
11440                         . ./myread
11441                         randbits="$ans"
11442                         seedfunc="s$randfunc"
11443                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11444                         if set $seedfunc val -f; eval $csym; $val; then
11445                                 echo "(Using $seedfunc() to seed random generator)"
11446                         else
11447                                 echo "(Warning: no $seedfunc() to seed random generator)"
11448                                 seedfunc=rand
11449                         fi
11450                         randseedtype=unsigned
11451                         ;;
11452                 esac
11453                 ;;
11454         esac
11455 done
11456
11457 echo " "
11458 echo "Determining whether or not we are on an EBCDIC system..." >&4
11459 $cat >tebcdic.c <<'EOM'
11460 int main()
11461 {
11462   if ('M'==0xd4) return 0;
11463   return 1;
11464 }
11465 EOM
11466
11467 val=$undef
11468 set tebcdic
11469 if eval $compile_ok; then
11470         if ./tebcdic; then
11471                 echo "You have EBCDIC." >&4
11472                 val="$define"
11473         else
11474                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
11475         fi
11476 else
11477         echo "I'm unable to compile the test program." >&4
11478         echo "I'll assume ASCII or some ISO Latin." >&4
11479 fi
11480 $rm -f tebcdic.c tebcdic
11481 set ebcdic
11482 eval $setvar
11483
11484 echo " "
11485 $cat >&4 <<EOM
11486 Checking how to flush all pending stdio output...
11487 EOM
11488 # I only know how to find the first 32 possibly open files on SunOS.
11489 # See also hints/sunos_4_1.sh and util.c  --AD
11490 case "$osname" in
11491 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11492 esac
11493 $cat >>try.c <<EOCP
11494 #include <stdio.h>
11495 #$i_unistd I_UNISTD
11496 #ifdef I_UNISTD
11497 # include <unistd.h>
11498 #endif
11499 #$d_sysconf HAS_SYSCONF
11500 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11501 #ifdef HAS_STDIO_STREAM_ARRAY
11502 # define STDIO_STREAM_ARRAY $stdio_stream_array
11503 #endif
11504 int main() {
11505   FILE* p = fopen("try.out", "w");
11506 #ifdef TRY_FPUTC
11507   fputc('x', p);
11508 #else
11509 # ifdef TRY_FPRINTF
11510   fprintf(p, "x");
11511 # endif
11512 #endif
11513 #ifdef TRY_FFLUSH_NULL
11514   fflush(NULL);
11515 #endif
11516 #ifdef TRY_FFLUSH_ALL
11517   {
11518     long open_max = -1;
11519 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11520     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11521 # else
11522 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11523     open_max = sysconf(_SC_OPEN_MAX);
11524 #  else
11525 #   ifdef FOPEN_MAX
11526     open_max = FOPEN_MAX;
11527 #   else
11528 #    ifdef OPEN_MAX
11529     open_max = OPEN_MAX;
11530 #    else
11531 #     ifdef _NFILE
11532     open_max = _NFILE;
11533 #     endif
11534 #    endif
11535 #   endif
11536 #  endif
11537 # endif 
11538 # ifdef HAS_STDIO_STREAM_ARRAY
11539     if (open_max > 0) {
11540       long i;
11541       for (i = 0; i < open_max; i++)
11542             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11543                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11544                 STDIO_STREAM_ARRAY[i]._flag)
11545                 fflush(&STDIO_STREAM_ARRAY[i]);
11546     }   
11547   }
11548 # endif
11549 #endif
11550   _exit(42);
11551 }
11552 EOCP
11553 : first we have to find out how _not_ to flush
11554 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11555     output=''
11556     set try -DTRY_FPUTC
11557     if eval $compile; then
11558             $rm -f try.out
11559             ./try$exe_ext 2>/dev/null
11560             if $test ! -s try.out -a "X$?" = X42; then
11561                 output=-DTRY_FPUTC
11562             fi
11563     fi
11564     case "$output" in
11565     '')
11566             set try -DTRY_FPRINTF
11567             $rm -f try.out
11568             if eval $compile; then
11569                     $rm -f try.out
11570                     ./try$exe_ext 2>/dev/null
11571                     if $test ! -s try.out -a "X$?" = X42; then
11572                         output=-DTRY_FPRINTF
11573                     fi
11574             fi
11575         ;;
11576     esac
11577 fi
11578 : check for fflush NULL behaviour
11579 case "$fflushNULL" in
11580 '')     set try -DTRY_FFLUSH_NULL $output
11581         if eval $compile; then
11582                 $rm -f try.out
11583                 ./try$exe_ext 2>/dev/null
11584                 code="$?"
11585                 if $test -s try.out -a "X$code" = X42; then
11586                         fflushNULL="`$cat try.out`"
11587                 else
11588                         if $test "X$code" != X42; then
11589                                 $cat >&4 <<EOM
11590 (If this test failed, don't worry, we'll try another method shortly.)
11591 EOM
11592                         fi
11593                 fi
11594         fi
11595         $rm -f core try.core core.try.*
11596         case "$fflushNULL" in
11597         x)      $cat >&4 <<EOM
11598 Your fflush(NULL) works okay.
11599 EOM
11600                 fflushNULL="$define"
11601                 ;;
11602         '')     $cat >&4 <<EOM
11603 Your fflush(NULL) isn't working (contrary to ANSI C).
11604 EOM
11605                 fflushNULL="$undef"
11606                 ;;
11607         *)      $cat >&4 <<EOM
11608 Cannot figure out whether your fflush(NULL) works or not.
11609 I'm assuming it doesn't (contrary to ANSI C).
11610 EOM
11611                 fflushNULL="$undef"
11612                 ;;
11613         esac
11614         ;;
11615 $define|true|[yY]*)
11616         fflushNULL="$define"
11617         ;;
11618 *)
11619         fflushNULL="$undef"
11620         ;;
11621 esac
11622 : check explicit looping only if NULL did not work
11623 case "$fflushNULL" in
11624 "$undef")
11625         : check for fflush all behaviour
11626         case "$fflushall" in
11627         '')     set try -DTRY_FFLUSH_ALL $output
11628                 if eval $compile; then
11629                         $cat >&4 <<EOM
11630 (Now testing the other method--but note that also this may fail.)
11631 EOM
11632                         $rm -f try.out
11633                         ./try$exe_ext 2>/dev/null
11634                         if $test -s try.out -a "X$?" = X42; then
11635                                 fflushall="`$cat try.out`"
11636                         fi
11637                 fi
11638                 $rm -f core try.core core.try.*
11639                 case "$fflushall" in
11640                 x)      $cat >&4 <<EOM
11641 Whew. Flushing explicitly all the stdio streams works.
11642 EOM
11643                         fflushall="$define"
11644                         ;;
11645                 '')     $cat >&4 <<EOM
11646 Sigh. Flushing explicitly all the stdio streams doesn't work.
11647 EOM
11648                         fflushall="$undef"
11649                         ;;
11650                 *)      $cat >&4 <<EOM
11651 Cannot figure out whether flushing stdio streams explicitly works or not.
11652 I'm assuming it doesn't.
11653 EOM
11654                         fflushall="$undef"
11655                         ;;
11656                 esac
11657                 ;;
11658         "$define"|true|[yY]*)
11659                 fflushall="$define"
11660                 ;;
11661         *)
11662                 fflushall="$undef"
11663                 ;;
11664         esac
11665         ;;
11666 *)      fflushall="$undef"      
11667         ;;
11668 esac
11669 case "$fflushNULL$fflushall" in
11670 undefundef)
11671         $cat <<EOM
11672 I cannot figure out how to flush pending stdio output.
11673 EOM
11674         ;;
11675 esac
11676 $rm -f try.* try$exe_ext
11677
11678 : see what type file positions are declared as in the library
11679 rp="What is the type for file position used by fsetpos()?"
11680 set fpos_t fpostype long stdio.h sys/types.h
11681 eval $typedef_ask
11682
11683 : Store the full pathname to the ar program for use in the C program
11684 : Respect a hint or command line value for full_ar.
11685 case "$full_ar" in
11686 '') full_ar=$ar ;;
11687 esac
11688
11689 : Store the full pathname to the sed program for use in the C program
11690 full_sed=$sed
11691
11692 : see what type gids are declared as in the kernel
11693 echo " "
11694 echo "Looking for the type for group ids returned by getgid()."
11695 set gid_t gidtype xxx stdio.h sys/types.h
11696 eval $typedef
11697 case "$gidtype" in
11698 xxx)
11699         xxx=`./findhdr sys/user.h`
11700         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11701         case $1 in
11702         unsigned) dflt="$1 $2" ;;
11703         *) dflt="$1" ;;
11704         esac
11705         ;;
11706 *) dflt="$gidtype";;
11707 esac
11708 case "$gidtype" in
11709 gid_t) echo "gid_t found." ;;
11710 *)      rp="What is the type for group ids returned by getgid()?"
11711         . ./myread
11712         gidtype="$ans"
11713         ;;
11714 esac
11715
11716 : see if getgroups exists
11717 set getgroups d_getgrps
11718 eval $inlibc
11719
11720 : see if setgroups exists
11721 set setgroups d_setgrps
11722 eval $inlibc
11723
11724
11725 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11726 echo " "
11727 case "$d_getgrps$d_setgrps" in
11728 *define*)
11729         case "$groupstype" in
11730         '') dflt="$gidtype" ;;
11731         *)  dflt="$groupstype" ;;
11732         esac
11733         $cat <<EOM
11734 What type of pointer is the second argument to getgroups() and setgroups()?
11735 Usually this is the same as group ids, $gidtype, but not always.
11736
11737 EOM
11738         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11739         . ./myread
11740         groupstype="$ans"
11741         ;;
11742 *)  groupstype="$gidtype";;
11743 esac
11744
11745 : see what type lseek is declared as in the kernel
11746 rp="What is the type used for lseek's offset on this system?"
11747 set off_t lseektype long stdio.h sys/types.h
11748 eval $typedef_ask
11749
11750 echo " "
11751 $echo $n "Checking to see how big your file offsets are...$c" >&4
11752 $cat >try.c <<EOCP
11753 #include <sys/types.h>
11754 #include <stdio.h>
11755 int main()
11756 {
11757         printf("%d\n", sizeof($lseektype));
11758 }
11759 EOCP
11760 set try
11761 if eval $compile_ok; then
11762         lseeksize=`./try`
11763         $echo " $lseeksize bytes." >&4
11764 else
11765         dflt='4'
11766         echo " "
11767         echo "(I can't seem to compile the test program.  Guessing...)"
11768         rp="What is the size of your file offsets (in bytes)?"
11769         . ./myread
11770         lseeksize="$ans"
11771 fi
11772 $rm -f try.c try
11773
11774 echo " "
11775 echo "Checking if your $make program sets \$(MAKE)..." >&4
11776 case "$make_set_make" in
11777 '')
11778         $sed 's/^X //' > testmake.mak << 'EOF'
11779 Xall:
11780 X       @echo 'maketemp="$(MAKE)"'
11781 EOF
11782         case "`$make -f testmake.mak 2>/dev/null`" in
11783         *maketemp=*) make_set_make='#' ;;
11784         *)      make_set_make="MAKE=$make" ;;
11785         esac
11786         $rm -f testmake.mak
11787         ;;
11788 esac
11789 case "$make_set_make" in
11790 '#') echo "Yup, it does.";;
11791 *) echo "Nope, it doesn't.";;
11792 esac
11793
11794 : see what type is used for mode_t
11795 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11796 set mode_t modetype int stdio.h sys/types.h
11797 eval $typedef_ask
11798
11799 : define a fucntion to check prototypes
11800 $cat > protochk <<EOSH
11801 $startsh
11802 cc="$cc"
11803 optimize="$optimize"
11804 ccflags="$ccflags"
11805 prototype="$prototype"
11806 define="$define"
11807 rm=$rm
11808 EOSH
11809
11810 $cat >> protochk <<'EOSH'
11811
11812 $rm -f try.c
11813 foo="$1"
11814 shift
11815 while test $# -ge 2; do
11816         case "$1" in
11817                 $define) echo "#include <$2>" >> try.c ;;
11818                 literal) echo "$2" >> try.c ;;
11819         esac
11820     shift 2
11821 done
11822 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11823 cat >> try.c <<'EOCP'
11824 #ifdef CAN_PROTOTYPE
11825 #define _(args) args
11826 #else
11827 #define _(args) ()
11828 #endif
11829 EOCP
11830 echo "$foo" >> try.c
11831 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11832 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11833 status=$?
11834 $rm -f try.[co]
11835 exit $status
11836 EOSH
11837 chmod +x protochk
11838 $eunicefix protochk
11839
11840 : see what type is used for size_t
11841 rp="What is the type used for the length parameter for string functions?"
11842 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11843 eval $typedef_ask
11844
11845 : check for type of arguments to gethostbyaddr. 
11846 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11847         case "$d_gethbyaddr" in
11848         $define)
11849                 $cat <<EOM
11850
11851 Checking to see what type of arguments are accepted by gethostbyaddr().
11852 EOM
11853                 hdrs="$define sys/types.h
11854                         $d_socket sys/socket.h 
11855                         $i_niin netinet/in.h 
11856                         $i_netdb netdb.h
11857                         $i_unistd unistd.h"
11858                 : The first arg can 'char *' or 'void *'
11859                 : The second arg is some of integral type
11860                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11861                         for yyy in size_t long int; do
11862                                 case "$netdb_host_type" in
11863                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11864                                         if ./protochk "$try" $hdrs; then
11865                                                 echo "Your system accepts $xxx for the first arg."
11866                                                 echo "...and $yyy for the second arg."
11867                                                 netdb_host_type="$xxx"
11868                                                 netdb_hlen_type="$yyy"
11869                                         fi
11870                                         ;;
11871                                 esac
11872                         done
11873                 done
11874                 : In case none of those worked, prompt the user.
11875                 case "$netdb_host_type" in
11876                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11877                         dflt='char *'
11878                         . ./myread
11879                         netdb_host_type=$ans
11880                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11881                         dflt="$sizetype"
11882                         . ./myread
11883                         netdb_hlen_type=$ans
11884                         ;;
11885                 esac
11886                 ;;
11887         *)      : no gethostbyaddr, so pick harmless defaults
11888                 netdb_host_type='char *'
11889                 netdb_hlen_type="$sizetype"
11890                 ;;
11891         esac
11892         # Remove the "const" if needed. -- but then we'll have a 
11893         # prototype clash!
11894         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11895 fi
11896
11897 : check for type of argument to gethostbyname. 
11898 if test "X$netdb_name_type" = X ; then
11899         case "$d_gethbyname" in
11900         $define)
11901                 $cat <<EOM
11902
11903 Checking to see what type of argument is accepted by gethostbyname().
11904 EOM
11905                 hdrs="$define sys/types.h
11906                         $d_socket sys/socket.h 
11907                         $i_niin netinet/in.h 
11908                         $i_netdb netdb.h
11909                         $i_unistd unistd.h"
11910                 for xxx in "const char *" "char *"; do
11911                         case "$netdb_name_type" in
11912                         '')     try="extern struct hostent *gethostbyname($xxx);"
11913                                 if ./protochk "$try" $hdrs; then
11914                                         echo "Your system accepts $xxx."
11915                                         netdb_name_type="$xxx"
11916                                 fi
11917                                 ;;
11918                         esac
11919                 done
11920                 : In case none of those worked, prompt the user.
11921                 case "$netdb_name_type" in
11922                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11923                         dflt='char *'
11924                         . ./myread
11925                         netdb_name_type=$ans
11926                         ;;
11927                 esac
11928                 ;;
11929         *)      : no gethostbyname, so pick harmless default
11930                 netdb_name_type='char *'
11931                 ;;
11932         esac
11933 fi
11934
11935 : check for type of 1st argument to getnetbyaddr. 
11936 if test "X$netdb_net_type" = X ; then
11937         case "$d_getnbyaddr" in
11938         $define)
11939                 $cat <<EOM
11940
11941 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11942 EOM
11943                 hdrs="$define sys/types.h
11944                         $d_socket sys/socket.h 
11945                         $i_niin netinet/in.h 
11946                         $i_netdb netdb.h
11947                         $i_unistd unistd.h"
11948                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11949                         case "$netdb_net_type" in
11950                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11951                                 if ./protochk "$try" $hdrs; then
11952                                         echo "Your system accepts $xxx."
11953                                         netdb_net_type="$xxx"
11954                                 fi
11955                                 ;;
11956                         esac
11957                 done
11958                 : In case none of those worked, prompt the user.
11959                 case "$netdb_net_type" in
11960                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11961                         dflt='long'
11962                         . ./myread
11963                         netdb_net_type=$ans
11964                         ;;
11965                 esac
11966                 ;;
11967         *)      : no getnetbyaddr, so pick harmless default
11968                 netdb_net_type='long'
11969                 ;;
11970         esac
11971 fi
11972 : locate the preferred pager for this system
11973 case "$pager" in
11974 '')
11975         dflt=''
11976         case "$pg" in
11977         /*) dflt=$pg;;
11978         esac
11979         case "$more" in
11980         /*) dflt=$more;;
11981         esac
11982         case "$less" in
11983         /*) dflt=$less;;
11984         esac
11985         case "$dflt" in
11986         '') dflt=/usr/ucb/more;;
11987         esac
11988         ;;
11989 *) dflt="$pager";;
11990 esac
11991 echo " "
11992 fn=f/
11993 rp='What pager is used on your system?'
11994 . ./getfile
11995 pager="$ans"
11996
11997 : see what type pids are declared as in the kernel
11998 rp="What is the type of process ids on this system?"
11999 set pid_t pidtype int stdio.h sys/types.h
12000 eval $typedef_ask
12001
12002 : Find earliest binary compatible site_perl subdirectory perl can use.
12003 case "$bincompat5005" in
12004 "$define") xs_apiversion='5.005' ;;
12005 *) xs_apiversion=$apiversion ;;   # The current site_perl version.
12006 esac
12007 : Find earliest pure perl site_perl subdirectory perl can use.
12008 : The versioned directories started at 5.005.
12009 pm_apiversion='5.005'
12010
12011 : check for length of pointer
12012 echo " "
12013 case "$ptrsize" in
12014 '')
12015         $echo $n "Checking to see how big your pointers are...$c" >&4
12016         if test "$voidflags" -gt 7; then
12017                 echo '#define VOID_PTR char *' > try.c
12018         else
12019                 echo '#define VOID_PTR void *' > try.c
12020         fi
12021         $cat >>try.c <<'EOCP'
12022 #include <stdio.h>
12023 int main()
12024 {
12025         printf("%d\n", sizeof(VOID_PTR));
12026         exit(0);
12027 }
12028 EOCP
12029         set try
12030         if eval $compile_ok; then
12031                 ptrsize=`./try`
12032                 $echo " $ptrsize bytes." >&4
12033         else
12034                 dflt='4'
12035                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12036                 rp="What is the size of a pointer (in bytes)?"
12037                 . ./myread
12038                 ptrsize="$ans"
12039         fi
12040         ;;
12041 esac
12042 $rm -f try.c try
12043
12044 : see if ar generates random libraries by itself
12045 echo " "
12046 echo "Checking how to generate random libraries on your machine..." >&4
12047 echo 'int bar1() { return bar2(); }' > bar1.c
12048 echo 'int bar2() { return 2; }' > bar2.c
12049 $cat > foo.c <<'EOP'
12050 int main() { printf("%d\n", bar1()); exit(0); }
12051 EOP
12052 $cc $ccflags -c bar1.c >/dev/null 2>&1
12053 $cc $ccflags -c bar2.c >/dev/null 2>&1
12054 $cc $ccflags -c foo.c >/dev/null 2>&1
12055 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12056 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12057         ./foobar >/dev/null 2>&1; then
12058         echo "$ar appears to generate random libraries itself."
12059         orderlib=false
12060         ranlib=":"
12061 elif $ar ts bar$_a >/dev/null 2>&1 &&
12062         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12063         ./foobar >/dev/null 2>&1; then
12064                 echo "a table of contents needs to be added with '$ar ts'."
12065                 orderlib=false
12066                 ranlib="$ar ts"
12067 else
12068         case "$ranlib" in
12069         :) ranlib='';;
12070         '')
12071                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12072                 $test -f $ranlib || ranlib=''
12073                 ;;
12074         esac
12075         if $test -n "$ranlib"; then
12076                 echo "your system has '$ranlib'; we'll use that."
12077                 orderlib=false
12078         else
12079                 echo "your system doesn't seem to support random libraries"
12080                 echo "so we'll use lorder and tsort to order the libraries."
12081                 orderlib=true
12082                 ranlib=":"
12083         fi
12084 fi
12085 $rm -f foo* bar* 
12086
12087 : check for type of arguments to select. 
12088 case "$selecttype" in
12089 '') case "$d_select" in
12090         $define)
12091                 $cat <<EOM
12092 Checking to see what type of arguments are accepted by select().
12093 EOM
12094                 hdrs="$define sys/types.h
12095                         $i_systime sys/time.h 
12096                         $i_sysselct sys/select.h
12097                         $d_socket sys/socket.h"
12098                 : The first arg can be int, unsigned, or size_t
12099                 : The last arg may or may not be 'const'
12100                 val=''
12101                 : void pointer has been seen but using that
12102                 : breaks the selectminbits test
12103                 for xxx in 'fd_set *' 'int *'; do
12104                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12105                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12106                                         case "$val" in
12107                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12108                                                 if ./protochk "$try" $hdrs; then
12109                                                         echo "Your system accepts $xxx."
12110                                                         val="$xxx"
12111                                                 fi
12112                                                 ;;
12113                                         esac
12114                                 done
12115                         done
12116                 done
12117                 case "$val" in
12118                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12119                         case "$d_fd_set" in
12120                                 $define) dflt="fd_set *" ;;
12121                                 *)              dflt="int *" ;;
12122                         esac
12123                         . ./myread
12124                         val=$ans
12125                         ;;
12126                 esac
12127                 selecttype="$val"
12128                 ;;
12129         *)      : no select, so pick a harmless default
12130                 selecttype='int *'
12131                 ;;
12132         esac
12133         ;;
12134 esac
12135
12136 : check for the select 'width'
12137 case "$selectminbits" in
12138 '') case "$d_select" in
12139         $define)
12140                 $cat <<EOM
12141
12142 Checking to see on how many bits at a time your select() operates...
12143 EOM
12144                 $cat >try.c <<EOCP
12145 #include <sys/types.h>
12146 #$i_time I_TIME
12147 #$i_systime I_SYS_TIME
12148 #$i_systimek I_SYS_TIME_KERNEL
12149 #ifdef I_TIME
12150 #   include <time.h>
12151 #endif
12152 #ifdef I_SYS_TIME
12153 #   ifdef I_SYS_TIME_KERNEL
12154 #       define KERNEL
12155 #   endif
12156 #   include <sys/time.h>
12157 #   ifdef I_SYS_TIME_KERNEL
12158 #       undef KERNEL
12159 #   endif
12160 #endif
12161 #$i_sysselct I_SYS_SELECT
12162 #ifdef I_SYS_SELECT
12163 #include <sys/select.h>
12164 #endif
12165 #$d_socket HAS_SOCKET
12166 #ifdef HAS_SOCKET
12167 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12168 #endif
12169 #include <stdio.h>
12170 $selecttype b;
12171 #define S sizeof(*(b))
12172 #define MINBITS 64
12173 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12174 #define NBITS  (NBYTES * 8)
12175 int main() {
12176     char s[NBYTES];
12177     struct timeval t;
12178     int i;
12179     FILE* fp;
12180     int fd;
12181
12182     fclose(stdin);
12183     fp = fopen("try.c", "r");
12184     if (fp == 0)
12185       exit(1);
12186     fd = fileno(fp);
12187     if (fd < 0)
12188       exit(2);
12189     b = ($selecttype)s;
12190     for (i = 0; i < NBITS; i++)
12191         FD_SET(i, b);
12192     t.tv_sec  = 0;
12193     t.tv_usec = 0;
12194     select(fd + 1, b, 0, 0, &t);
12195     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
12196     printf("%d\n", i + 1);
12197     return 0;
12198 }
12199 EOCP
12200                 set try
12201                 if eval $compile_ok; then
12202                         selectminbits=`./try`
12203                         case "$selectminbits" in
12204                         '')     cat >&4 <<EOM
12205 Cannot figure out on how many bits at a time your select() operates.
12206 I'll play safe and guess it is 32 bits.
12207 EOM
12208                                 selectminbits=32
12209                                 bits="32 bits"
12210                                 ;;
12211                         1)      bits="1 bit" ;;
12212                         *)      bits="$selectminbits bits" ;;
12213                         esac
12214                         echo "Your select() operates on $bits at a time." >&4
12215                 else
12216                         rp='What is the minimum number of bits your select() operates on?'
12217                         case "$byteorder" in
12218                         1234|12345678)  dflt=32 ;;
12219                         *)              dflt=1  ;;
12220                         esac
12221                         . ./myread
12222                         val=$ans
12223                         selectminbits="$val"
12224                 fi
12225                 $rm -f try.* try
12226                 ;;
12227         *)      : no select, so pick a harmless default
12228                 selectminbits='32'
12229                 ;;
12230         esac
12231         ;;
12232 esac
12233
12234 : Trace out the files included by signal.h, then look for SIGxxx names.
12235 : Remove SIGARRAYSIZE used by HPUX.
12236 : Remove SIGSTKSIZE used by Linux.
12237 : Remove SIGSTKSZ used by Posix.
12238 : Remove SIGTYP void lines used by OS2.
12239 xxx=`echo '#include <signal.h>' |
12240         $cppstdin $cppminus $cppflags 2>/dev/null |
12241         $grep '^[       ]*#.*include' | 
12242         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
12243 : Check this list of files to be sure we have parsed the cpp output ok.
12244 : This will also avoid potentially non-existent files, such 
12245 : as ../foo/bar.h
12246 xxxfiles=''
12247 for xx in $xxx /dev/null ; do
12248         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
12249 done
12250 : If we have found no files, at least try signal.h
12251 case "$xxxfiles" in
12252 '')     xxxfiles=`./findhdr signal.h` ;;
12253 esac
12254 xxx=`awk '
12255 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
12256         print substr($2, 4, 20)
12257 }
12258 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
12259         print substr($3, 4, 20)
12260 }' $xxxfiles`
12261 : Append some common names just in case the awk scan failed.
12262 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
12263 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
12264 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
12265 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
12266 : generate a few handy files for later
12267 $cat > signal.c <<'EOCP'
12268 #include <sys/types.h>
12269 #include <signal.h>
12270 #include <stdio.h>
12271 int main() {
12272
12273 /* Strange style to avoid deeply-nested #if/#else/#endif */
12274 #ifndef NSIG
12275 #  ifdef _NSIG
12276 #    define NSIG (_NSIG)
12277 #  endif
12278 #endif
12279
12280 #ifndef NSIG
12281 #  ifdef SIGMAX
12282 #    define NSIG (SIGMAX+1)
12283 #  endif
12284 #endif
12285
12286 #ifndef NSIG
12287 #  ifdef SIG_MAX
12288 #    define NSIG (SIG_MAX+1)
12289 #  endif
12290 #endif
12291
12292 #ifndef NSIG
12293 #  ifdef MAXSIG
12294 #    define NSIG (MAXSIG+1)
12295 #  endif
12296 #endif
12297
12298 #ifndef NSIG
12299 #  ifdef MAX_SIG
12300 #    define NSIG (MAX_SIG+1)
12301 #  endif
12302 #endif
12303
12304 #ifndef NSIG
12305 #  ifdef SIGARRAYSIZE
12306 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
12307 #  endif
12308 #endif
12309
12310 #ifndef NSIG
12311 #  ifdef _sys_nsig
12312 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
12313 #  endif
12314 #endif
12315
12316 /* Default to some arbitrary number that's big enough to get most
12317    of the common signals.
12318 */
12319 #ifndef NSIG
12320 #    define NSIG 50
12321 #endif
12322
12323 printf("NSIG %d\n", NSIG);
12324
12325 #ifndef JUST_NSIG
12326
12327 EOCP
12328
12329 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
12330 {
12331         printf "#ifdef SIG"; printf $1; printf "\n"
12332         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
12333         printf $1; printf ");\n"
12334         printf "#endif\n"
12335 }
12336 END {
12337         printf "#endif /* JUST_NSIG */\n";
12338         printf "}\n";
12339 }
12340 ' >>signal.c
12341 $cat >signal.awk <<'EOP'
12342 BEGIN { ndups = 0 }
12343 $1 ~ /^NSIG$/ { nsig = $2 }
12344 ($1 !~ /^NSIG$/) && (NF == 2) {
12345     if ($2 > maxsig) { maxsig = $2 }
12346     if (sig_name[$2]) {
12347         dup_name[ndups] = $1
12348         dup_num[ndups] = $2
12349         ndups++ 
12350     }
12351     else {
12352         sig_name[$2] = $1
12353         sig_num[$2] = $2
12354     }
12355 }
12356 END { 
12357     if (nsig == 0) {
12358         nsig = maxsig + 1
12359     }
12360     printf("NSIG %d\n", nsig);
12361     for (n = 1; n < nsig; n++) {
12362         if (sig_name[n]) {
12363             printf("%s %d\n", sig_name[n], sig_num[n])
12364         }
12365         else {
12366             printf("NUM%d %d\n", n, n) 
12367         }
12368     }
12369     for (n = 0; n < ndups; n++) {
12370         printf("%s %d\n", dup_name[n], dup_num[n])
12371     }
12372 }
12373 EOP
12374 $cat >signal_cmd <<EOS
12375 $startsh
12376 if $test -s signal.lst; then
12377     echo "Using your existing signal.lst file"
12378         exit 0
12379 fi
12380 xxx="$xxx"
12381 EOS
12382 $cat >>signal_cmd <<'EOS'
12383
12384 set signal
12385 if eval $compile_ok; then
12386         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12387 else
12388         echo "(I can't seem be able to compile the whole test program)" >&4
12389         echo "(I'll try it in little pieces.)" >&4
12390         set signal -DJUST_NSIG
12391         if eval $compile_ok; then
12392                 ./signal$_exe > signal.nsg
12393                 $cat signal.nsg
12394         else
12395                 echo "I can't seem to figure out how many signals you have." >&4
12396                 echo "Guessing 50." >&4
12397                 echo 'NSIG 50' > signal.nsg
12398         fi
12399         : Now look at all the signal names, one at a time.
12400         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12401                 $cat > signal.c <<EOCP
12402 #include <sys/types.h>
12403 #include <signal.h>
12404 #include <stdio.h>
12405 int main() {
12406 printf("$xx %d\n", SIG${xx});
12407 return 0;
12408 }
12409 EOCP
12410                 set signal
12411                 if eval $compile; then
12412                         echo "SIG${xx} found."
12413                         ./signal$_exe  >> signal.ls1
12414                 else
12415                         echo "SIG${xx} NOT found."
12416                 fi
12417         done
12418         if $test -s signal.ls1; then
12419                 $cat signal.nsg signal.ls1 |
12420                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12421         fi
12422
12423 fi
12424 if $test -s signal.lst; then
12425         :
12426 else
12427         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12428         echo 'kill -l' >signal
12429         set X `csh -f <signal`
12430         $rm -f signal
12431         shift
12432         case $# in
12433         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12434         esac
12435         echo $@ | $tr ' ' $trnl | \
12436             $awk '{ printf "%s %d\n", $1, ++s; }
12437                   END { printf "NSIG %d\n", ++s }' >signal.lst
12438 fi
12439 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12440 EOS
12441 chmod a+x signal_cmd
12442 $eunicefix signal_cmd
12443
12444 : generate list of signal names
12445 echo " "
12446 case "$sig_name_init" in
12447 '') doinit=yes ;;
12448 *)  case "$sig_num_init" in
12449     ''|*,*) doinit=yes ;;
12450     esac ;;
12451 esac
12452 case "$doinit" in
12453 yes)
12454         echo "Generating a list of signal names and numbers..." >&4
12455         . ./signal_cmd
12456         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12457         sig_name=`$awk 'BEGIN { printf "ZERO " }
12458                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12459         sig_num=`$awk  'BEGIN { printf "0 " }
12460                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12461         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12462                              !/^NSIG/   { printf "\"%s\", ", $1 }
12463                              END        { printf "0\n" }' signal.lst`
12464         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12465                              !/^NSIG/   { printf "%d, ", $2}
12466                              END        { printf "0\n"}' signal.lst`
12467         ;;
12468 esac
12469 echo "The following $sig_count signals are available:"
12470 echo " "
12471 echo $sig_name | $awk \
12472 'BEGIN { linelen = 0 }
12473 {
12474         for (i = 1; i <= NF; i++) {
12475                 name = "SIG" $i " "
12476                 linelen = linelen + length(name)
12477                 if (linelen > 70) {
12478                         printf "\n"
12479                         linelen = length(name)
12480                 }
12481                 printf "%s", name
12482         }
12483         printf "\n"
12484 }'
12485 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12486
12487 : see what type is used for signed size_t
12488 set ssize_t ssizetype int stdio.h sys/types.h
12489 eval $typedef
12490 dflt="$ssizetype"
12491 $cat > ssize.c <<EOM
12492 #include <stdio.h>
12493 #include <sys/types.h>
12494 #define Size_t $sizetype
12495 #define SSize_t $dflt
12496 int main()
12497 {
12498         if (sizeof(Size_t) == sizeof(SSize_t))
12499                 printf("$dflt\n");
12500         else if (sizeof(Size_t) == sizeof(int))
12501                 printf("int\n");
12502         else 
12503                 printf("long\n");
12504         exit(0);
12505 }
12506 EOM
12507 echo " "
12508 set ssize
12509 if eval $compile_ok && ./ssize > /dev/null; then
12510         ssizetype=`./ssize`
12511         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12512 else
12513         $cat >&4 <<EOM
12514 Help! I can't compile and run the ssize_t test program: please enlighten me!
12515 (This is probably a misconfiguration in your system or libraries, and
12516 you really ought to fix it.  Still, I'll try anyway.)
12517
12518 I need a type that is the same size as $sizetype, but is guaranteed to
12519 be signed.  Common values are ssize_t, int and long.
12520
12521 EOM
12522         rp="What signed type is the same size as $sizetype?"
12523         . ./myread
12524         ssizetype="$ans"
12525 fi
12526 $rm -f ssize ssize.*
12527
12528 : see what type of char stdio uses.
12529 echo " "
12530 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12531         echo "Your stdio uses unsigned chars." >&4
12532         stdchar="unsigned char"
12533 else
12534         echo "Your stdio uses signed chars." >&4
12535         stdchar="char"
12536 fi
12537
12538 : see if time exists
12539 echo " "
12540 if test "X$d_time" = X -o X"$timetype" = X; then
12541     if set time val -f d_time; eval $csym; $val; then
12542                 echo 'time() found.' >&4
12543                 val="$define"
12544                 rp="What is the type returned by time() on this system?"
12545                 set time_t timetype long stdio.h sys/types.h
12546                 eval $typedef_ask
12547     else
12548                 echo 'time() not found, hope that will do.' >&4
12549                 val="$undef"
12550                 timetype='int';
12551     fi
12552     set d_time
12553     eval $setvar
12554 fi
12555
12556 : see what type uids are declared as in the kernel
12557 echo " "
12558 echo "Looking for the type for user ids returned by getuid()."
12559 set uid_t uidtype xxx stdio.h sys/types.h
12560 eval $typedef
12561 case "$uidtype" in
12562 xxx)
12563         xxx=`./findhdr sys/user.h`
12564         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12565         case $1 in
12566         unsigned) dflt="$1 $2" ;;
12567         *) dflt="$1" ;;
12568         esac
12569         ;;
12570 *) dflt="$uidtype";;
12571 esac
12572 case "$uidtype" in
12573 uid_t)  echo "uid_t found." ;;
12574 *)      rp="What is the type for user ids returned by getuid()?"
12575         . ./myread
12576         uidtype="$ans"
12577         ;;
12578 esac
12579
12580 echo " "
12581 case "$uidtype" in
12582 *_t) zzz="$uidtype"     ;;
12583 *)   zzz="uid"          ;;
12584 esac
12585 echo "Checking the sign of $zzz..." >&4
12586 cat > try.c <<EOCP
12587 #include <sys/types.h>
12588 #include <stdio.h>
12589 int main() {
12590         $uidtype foo = -1;
12591         if (foo < 0)
12592                 printf("-1\n");
12593         else
12594                 printf("1\n");
12595 }
12596 EOCP
12597 set try
12598 if eval $compile; then
12599         yyy=`./try`
12600         case "$yyy" in
12601         '')     uidsign=1
12602                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12603                 ;;
12604         *)      uidsign=$yyy
12605                 case "$uidsign" in
12606                  1) echo "Your $zzz is unsigned." ;;
12607                 -1) echo "Your $zzz is signed."   ;;
12608                 esac
12609                 ;;
12610         esac
12611 else
12612         uidsign=1
12613         echo "(I can't compile the test program--guessing unsigned.)" >&4
12614 fi
12615
12616
12617 : see if dbm.h is available
12618 : see if dbmclose exists
12619 set dbmclose d_dbmclose
12620 eval $inlibc
12621
12622 case "$d_dbmclose" in
12623 $define)
12624         set dbm.h i_dbm
12625         eval $inhdr
12626         case "$i_dbm" in
12627         $define)
12628                 val="$undef"
12629                 set i_rpcsvcdbm
12630                 eval $setvar
12631                 ;;
12632         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12633                 eval $inhdr
12634                 ;;
12635         esac
12636         ;;
12637 *)      echo "We won't be including <dbm.h>"
12638         val="$undef"
12639         set i_dbm
12640         eval $setvar
12641         val="$undef"
12642         set i_rpcsvcdbm
12643         eval $setvar
12644         ;;
12645 esac
12646
12647 : see if this is a sys/file.h system
12648 val=''
12649 set sys/file.h val
12650 eval $inhdr
12651
12652 : do we need to include sys/file.h ?
12653 case "$val" in
12654 "$define")
12655         echo " "
12656         if $h_sysfile; then
12657                 val="$define"
12658                 echo "We'll be including <sys/file.h>." >&4
12659         else
12660                 val="$undef"
12661                 echo "We won't be including <sys/file.h>." >&4
12662         fi
12663         ;;
12664 *)
12665         h_sysfile=false
12666         ;;
12667 esac
12668 set i_sysfile
12669 eval $setvar
12670
12671 : see if fcntl.h is there
12672 val=''
12673 set fcntl.h val
12674 eval $inhdr
12675
12676 : see if we can include fcntl.h
12677 case "$val" in
12678 "$define")
12679         echo " "
12680         if $h_fcntl; then
12681                 val="$define"
12682                 echo "We'll be including <fcntl.h>." >&4
12683         else
12684                 val="$undef"
12685                 if $h_sysfile; then
12686         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12687                 else
12688                         echo "We won't be including <fcntl.h>." >&4
12689                 fi
12690         fi
12691         ;;
12692 *)
12693         h_fcntl=false
12694         val="$undef"
12695         ;;
12696 esac
12697 set i_fcntl
12698 eval $setvar
12699
12700 : see if locale.h is available
12701 set locale.h i_locale
12702 eval $inhdr
12703
12704 : see if mach cthreads are available
12705 if test "X$usethreads" = "X$define"; then
12706         set mach/cthreads.h i_machcthr
12707         eval $inhdr
12708 else
12709         i_machcthr="$undef"
12710 fi
12711
12712
12713
12714 : see if this is a math.h system
12715 set math.h i_math
12716 eval $inhdr
12717
12718 : see if this is a mntent.h system
12719 set mntent.h i_mntent
12720 eval $inhdr
12721
12722 : see if ndbm.h is available
12723 set ndbm.h t_ndbm
12724 eval $inhdr
12725 case "$t_ndbm" in
12726 $define)
12727         : see if dbm_open exists
12728         set dbm_open d_dbm_open
12729         eval $inlibc
12730         case "$d_dbm_open" in
12731         $undef)
12732                 t_ndbm="$undef"
12733                 echo "We won't be including <ndbm.h>"
12734                 ;;
12735         esac
12736         ;;
12737 esac
12738 val="$t_ndbm"
12739 set i_ndbm
12740 eval $setvar
12741
12742 : see if net/errno.h is available
12743 val=''
12744 set net/errno.h val
12745 eval $inhdr
12746
12747 : Unfortunately, it causes problems on some systems.  Arrgh.
12748 case "$val" in
12749 $define)
12750         cat > try.c <<'EOM'
12751 #include <stdio.h>
12752 #include <errno.h>
12753 #include <net/errno.h>
12754 int func()
12755 {
12756         return ENOTSOCK;
12757 }
12758 EOM
12759         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12760                 echo "We'll be including <net/errno.h>." >&4
12761         else
12762                 echo "We won't be including <net/errno.h>." >&4
12763                 val="$undef"
12764         fi
12765         $rm -f try.* try
12766         ;;
12767 esac
12768 set i_neterrno
12769 eval $setvar
12770
12771 : see if netinet/tcp.h is available
12772 set netinet/tcp.h i_netinettcp
12773 eval $inhdr
12774
12775 : see if this is a poll.h system
12776 set poll.h i_poll
12777 eval $inhdr
12778
12779 : get C preprocessor symbols handy
12780 echo " "
12781 $echo $n "Hmm... $c"
12782 echo $al | $tr ' ' $trnl >Cppsym.know
12783 $cat <<EOSS >Cppsym
12784 $startsh
12785 case "\$1" in
12786 -l) list=true
12787         shift
12788         ;;
12789 esac
12790 unknown=''
12791 case "\$list\$#" in
12792 1|2)
12793         for sym do
12794                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12795                         exit 0
12796                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12797                         :
12798                 else
12799                         unknown="\$unknown \$sym"
12800                 fi
12801         done
12802         set X \$unknown
12803         shift
12804         ;;
12805 esac
12806 case \$# in
12807 0) exit 1;;
12808 esac
12809 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12810 #ifdef \1\\
12811 exit 0; _ _ _ _\1\\      \1\\
12812 #endif\\
12813 /' >Cppsym\$\$
12814 echo "exit 1; _ _ _" >>Cppsym\$\$
12815 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12816 case "\$list" in
12817 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12818 *)
12819         sh Cppsym2\$\$
12820         status=\$?
12821         ;;
12822 esac
12823 $rm -f Cppsym\$\$ Cppsym2\$\$
12824 exit \$status
12825 EOSS
12826 chmod +x Cppsym
12827 $eunicefix Cppsym
12828 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12829
12830 : now check the C compiler for additional symbols
12831 postprocess_cc_v=''
12832 case "$osname" in
12833 aix) postprocess_cc_v="|$tr , ' '" ;;
12834 esac
12835 $cat >ccsym <<EOS
12836 $startsh
12837 $cat >tmp.c <<EOF
12838 extern int foo;
12839 EOF
12840 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12841 do
12842         case "\$i" in
12843         -D*) echo "\$i" | $sed 's/^-D//';;
12844         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12845         esac
12846 done
12847 $rm -f try.c
12848 EOS
12849 postprocess_cc_v=''
12850 chmod +x ccsym
12851 $eunicefix ccsym
12852 ./ccsym > ccsym1.raw
12853 if $test -s ccsym1.raw; then
12854        $sort ccsym1.raw | $uniq >ccsym.raw
12855 else
12856        mv ccsym1.raw ccsym.raw
12857 fi
12858
12859 $awk '/\=/ { print $0; next }
12860         { print $0"=1" }' ccsym.raw >ccsym.list
12861 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12862 $comm -13 ccsym.true ccsym.list >ccsym.own
12863 $comm -12 ccsym.true ccsym.list >ccsym.com
12864 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12865 also=''
12866 if $test -z ccsym.raw; then
12867         echo "Your C compiler doesn't seem to define any symbols!" >&4
12868         echo " "
12869         echo "However, your C preprocessor defines the following symbols:"
12870         $cat Cppsym.true
12871         ccsymbols=''
12872         cppsymbols=`$cat Cppsym.true`
12873         cppsymbols=`echo $cppsymbols`
12874         cppccsymbols="$cppsymbols"
12875 else
12876         if $test -s ccsym.com; then
12877                 echo "Your C compiler and pre-processor define these symbols:"
12878                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12879                 also='also '
12880                 symbols='ones'
12881                 cppccsymbols=`$cat ccsym.com`
12882                 cppccsymbols=`echo $cppccsymbols`
12883                 $test "$silent" || sleep 1
12884         fi
12885         if $test -s ccsym.cpp; then
12886                 $test "$also" && echo " "
12887                 echo "Your C pre-processor ${also}defines the following symbols:"
12888                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12889                 also='further '
12890                 cppsymbols=`$cat ccsym.cpp`
12891                 cppsymbols=`echo $cppsymbols`
12892                 $test "$silent" || sleep 1
12893         fi
12894         if $test -s ccsym.own; then
12895                 $test "$also" && echo " "
12896                 echo "Your C compiler ${also}defines the following cpp symbols:"
12897                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12898                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12899                 ccsymbols=`$cat ccsym.own`
12900                 ccsymbols=`echo $ccsymbols`
12901                 $test "$silent" || sleep 1
12902         fi
12903 fi
12904 $rm -f ccsym*
12905
12906 : see if this is a termio system
12907 val="$undef"
12908 val2="$undef"
12909 val3="$undef"
12910 if $test `./findhdr termios.h`; then
12911         set tcsetattr i_termios
12912         eval $inlibc
12913         val3="$i_termios"
12914 fi
12915 echo " "
12916 case "$val3" in
12917 "$define") echo "You have POSIX termios.h... good!" >&4;;
12918 *) if ./Cppsym pyr; then
12919                 case "`/bin/universe`" in
12920                 ucb) if $test `./findhdr sgtty.h`; then
12921                                 val2="$define"
12922                                 echo "<sgtty.h> found." >&4
12923                         else
12924                                 echo "System is pyramid with BSD universe."
12925                                 echo "<sgtty.h> not found--you could have problems." >&4
12926                         fi;;
12927                 *) if $test `./findhdr termio.h`; then
12928                                 val="$define"
12929                                 echo "<termio.h> found." >&4
12930                         else
12931                                 echo "System is pyramid with USG universe."
12932                                 echo "<termio.h> not found--you could have problems." >&4
12933                         fi;;
12934                 esac
12935         elif ./usg; then
12936                 if $test `./findhdr termio.h`; then
12937                         echo "<termio.h> found." >&4
12938                         val="$define"
12939                 elif $test `./findhdr sgtty.h`; then
12940                         echo "<sgtty.h> found." >&4
12941                         val2="$define"
12942                 else
12943 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12944                 fi
12945         else
12946                 if $test `./findhdr sgtty.h`; then
12947                         echo "<sgtty.h> found." >&4
12948                         val2="$define"
12949                 elif $test `./findhdr termio.h`; then
12950                         echo "<termio.h> found." >&4
12951                         val="$define"
12952                 else
12953 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12954                 fi
12955         fi;;
12956 esac
12957 set i_termio; eval $setvar
12958 val=$val2; set i_sgtty; eval $setvar
12959 val=$val3; set i_termios; eval $setvar
12960
12961 : see if this is a shadow.h system
12962 set shadow.h i_shadow
12963 eval $inhdr
12964
12965 : see if this is a socks.h system
12966 set socks.h i_socks
12967 eval $inhdr
12968
12969 : see if stdarg is available
12970 echo " "
12971 if $test `./findhdr stdarg.h`; then
12972         echo "<stdarg.h> found." >&4
12973         valstd="$define"
12974 else
12975         echo "<stdarg.h> NOT found." >&4
12976         valstd="$undef"
12977 fi
12978
12979 : see if varags is available
12980 echo " "
12981 if $test `./findhdr varargs.h`; then
12982         echo "<varargs.h> found." >&4
12983 else
12984         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12985 fi
12986
12987 : set up the varargs testing programs
12988 $cat > varargs.c <<EOP
12989 #ifdef I_STDARG
12990 #include <stdarg.h>
12991 #endif
12992 #ifdef I_VARARGS
12993 #include <varargs.h>
12994 #endif
12995
12996 #ifdef I_STDARG
12997 int f(char *p, ...)
12998 #else
12999 int f(va_alist)
13000 va_dcl
13001 #endif
13002 {
13003         va_list ap;
13004 #ifndef I_STDARG
13005         char *p;
13006 #endif
13007 #ifdef I_STDARG
13008         va_start(ap,p);
13009 #else
13010         va_start(ap);
13011         p = va_arg(ap, char *);
13012 #endif
13013         va_end(ap);
13014 }
13015 EOP
13016 $cat > varargs <<EOP
13017 $startsh
13018 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13019         echo "true"
13020 else
13021         echo "false"
13022 fi
13023 $rm -f varargs$_o
13024 EOP
13025 chmod +x varargs
13026
13027 : now check which varargs header should be included
13028 echo " "
13029 i_varhdr=''
13030 case "$valstd" in
13031 "$define")
13032         if `./varargs I_STDARG`; then
13033                 val='stdarg.h'
13034         elif `./varargs I_VARARGS`; then
13035                 val='varargs.h'
13036         fi
13037         ;;
13038 *)
13039         if `./varargs I_VARARGS`; then
13040                 val='varargs.h'
13041         fi
13042         ;;
13043 esac
13044 case "$val" in
13045 '')
13046 echo "I could not find the definition for va_dcl... You have problems..." >&4
13047         val="$undef"; set i_stdarg; eval $setvar
13048         val="$undef"; set i_varargs; eval $setvar
13049         ;;
13050 *) 
13051         set i_varhdr
13052         eval $setvar
13053         case "$i_varhdr" in
13054         stdarg.h)
13055                 val="$define"; set i_stdarg; eval $setvar
13056                 val="$undef"; set i_varargs; eval $setvar
13057                 ;;
13058         varargs.h)
13059                 val="$undef"; set i_stdarg; eval $setvar
13060                 val="$define"; set i_varargs; eval $setvar
13061                 ;;
13062         esac
13063         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13064 esac
13065 $rm -f varargs*
13066
13067 : see if stddef is available
13068 set stddef.h i_stddef
13069 eval $inhdr
13070
13071 : see if sys/access.h is available
13072 set sys/access.h i_sysaccess
13073 eval $inhdr
13074
13075 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
13076 set sys/filio.h i_sysfilio
13077 eval $inhdr
13078 echo " "
13079 if $test `./findhdr sys/ioctl.h`; then
13080         val="$define"
13081         echo '<sys/ioctl.h> found.' >&4
13082 else
13083         val="$undef"
13084         if $test $i_sysfilio = "$define"; then
13085             echo '<sys/ioctl.h> NOT found.' >&4
13086         else
13087                 $test $i_sgtty = "$define" && xxx="sgtty.h"
13088                 $test $i_termio = "$define" && xxx="termio.h"
13089                 $test $i_termios = "$define" && xxx="termios.h"
13090 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
13091         fi
13092 fi
13093 set i_sysioctl
13094 eval $setvar
13095
13096 : see if sys/resource.h has to be included
13097 set sys/resource.h i_sysresrc
13098 eval $inhdr
13099
13100 : see if sys/security.h is available
13101 set sys/security.h i_syssecrt
13102 eval $inhdr
13103
13104 : see if this is a sys/statvfs.h system
13105 set sys/statvfs.h i_sysstatvfs
13106 eval $inhdr
13107
13108 : see if this is a sys/un.h system
13109 set sys/un.h i_sysun
13110 eval $inhdr
13111
13112 : see if this is a syswait system
13113 set sys/wait.h i_syswait
13114 eval $inhdr
13115
13116 : see if this is an utime system
13117 set utime.h i_utime
13118 eval $inhdr
13119
13120 : see if this is a values.h system
13121 set values.h i_values
13122 eval $inhdr
13123
13124 : see if this is a vfork system
13125 case "$d_vfork" in
13126 "$define")
13127         set vfork.h i_vfork
13128         eval $inhdr
13129         ;;
13130 *)
13131         i_vfork="$undef"
13132         ;;
13133 esac
13134
13135 : see if gdbm.h is available
13136 set gdbm.h t_gdbm
13137 eval $inhdr
13138 case "$t_gdbm" in
13139 $define)
13140         : see if gdbm_open exists
13141         set gdbm_open d_gdbm_open
13142         eval $inlibc
13143         case "$d_gdbm_open" in
13144         $undef)
13145                 t_gdbm="$undef"
13146                 echo "We won't be including <gdbm.h>"
13147                 ;;
13148         esac
13149         ;;
13150 esac
13151 val="$t_gdbm"
13152 set i_gdbm
13153 eval $setvar
13154
13155 echo " "
13156 echo "Looking for extensions..." >&4
13157 : If we are using the old config.sh, known_extensions may contain
13158 : old or inaccurate or duplicate values.
13159 known_extensions=''
13160 nonxs_extensions=''
13161 : We do not use find because it might not be available.
13162 : We do not just use MANIFEST because the user may have dropped
13163 : some additional extensions into the source tree and expect them
13164 : to be built.
13165
13166 : Function to recursively find available extensions, ignoring DynaLoader
13167 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
13168 find_extensions='
13169     for xxx in *; do
13170        case "$xxx" in
13171            DynaLoader|dynaload) ;;
13172            *)
13173            if $test -f $xxx/$xxx.xs; then
13174                known_extensions="$known_extensions $1$xxx";
13175            elif $test -f $xxx/Makefile.PL; then
13176                nonxs_extensions="$nonxs_extensions $1$xxx";
13177            else
13178                if $test -d $xxx -a $# -lt 10; then
13179                    set $1$xxx/ $*;
13180                    cd $xxx;
13181                    eval $find_extensions;
13182                    cd ..;
13183                    shift;
13184                fi;
13185            fi
13186            ;;
13187        esac;
13188     done'
13189 tdir=`pwd`
13190 cd $rsrc/ext
13191 set X
13192 shift
13193 eval $find_extensions
13194 set X $nonxs_extensions
13195 shift
13196 nonxs_extensions="$*"
13197 set X $known_extensions
13198 shift
13199 known_extensions="$*"
13200 cd $tdir
13201
13202 : Now see which are supported on this system.
13203 avail_ext=''
13204 for xxx in $known_extensions ; do
13205         case "$xxx" in
13206         DB_File|db_file)
13207                 case "$i_db" in
13208                 $define) avail_ext="$avail_ext $xxx" ;;
13209                 esac
13210                 ;;
13211         GDBM_File|gdbm_fil)
13212                 case "$i_gdbm" in 
13213                 $define) avail_ext="$avail_ext $xxx" ;;
13214                 esac
13215                 ;;
13216         NDBM_File|ndbm_fil)
13217                 case "$i_ndbm" in
13218                 $define) avail_ext="$avail_ext $xxx" ;;
13219                 esac
13220                 ;;
13221         ODBM_File|odbm_fil) 
13222                 case "${i_dbm}${i_rpcsvcdbm}" in
13223                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13224                 esac
13225                 ;;
13226         POSIX|posix)
13227                 case "$useposix" in
13228                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13229                 esac
13230                 ;;
13231         Opcode|opcode)
13232                 case "$useopcode" in
13233                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13234                 esac
13235                 ;;
13236         Socket|socket)
13237                 case "$d_socket" in 
13238                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13239                 esac
13240                 ;;
13241         Thread|thread)
13242                 case "$usethreads" in 
13243                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13244                 esac
13245                 ;;
13246         IPC/SysV|ipc/sysv)
13247                 : XXX Do we need a useipcsysv variable here
13248                 case "${d_msg}${d_sem}${d_shm}" in 
13249                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13250                 esac
13251                 ;;
13252         *)      avail_ext="$avail_ext $xxx"
13253                 ;;
13254         esac
13255 done
13256
13257 set X $avail_ext
13258 shift
13259 avail_ext="$*"
13260
13261 : Now see which nonxs extensions are supported on this system.
13262 : For now assume all are.
13263 nonxs_ext=''
13264 for xxx in $nonxs_extensions ; do
13265         case "$xxx" in
13266         *)      nonxs_ext="$nonxs_ext $xxx"
13267                 ;;
13268         esac
13269 done
13270
13271 set X $nonxs_ext
13272 shift
13273 nonxs_ext="$*"
13274
13275 case $usedl in
13276 $define)
13277         $cat <<EOM
13278 A number of extensions are supplied with $package.  You may choose to
13279 compile these extensions for dynamic loading (the default), compile
13280 them into the $package executable (static loading), or not include
13281 them at all.  Answer "none" to include no extensions.
13282 Note that DynaLoader is always built and need not be mentioned here.
13283
13284 EOM
13285         case "$dynamic_ext" in
13286         '') dflt="$avail_ext" ;;
13287         *)      dflt="$dynamic_ext"
13288                 # Perhaps we are reusing an old out-of-date config.sh.
13289                 case "$hint" in
13290                 previous)
13291                         if test X"$dynamic_ext" != X"$avail_ext"; then
13292                                 $cat <<EOM
13293 NOTICE:  Your previous config.sh list may be incorrect. 
13294 The extensions now available to you are 
13295         ${avail_ext}
13296 but the default list from your previous config.sh is
13297         ${dynamic_ext} 
13298
13299 EOM
13300                         fi
13301                         ;;
13302                 esac
13303                 ;;
13304         esac
13305         case "$dflt" in
13306         '')     dflt=none;;
13307         esac
13308         rp="What extensions do you wish to load dynamically?"
13309         . ./myread
13310         case "$ans" in
13311         none) dynamic_ext=' ' ;;
13312         *) dynamic_ext="$ans" ;;
13313         esac
13314
13315         case "$static_ext" in
13316         '')
13317                 : Exclude those already listed in dynamic linking
13318                 dflt=''
13319                 for xxx in $avail_ext; do
13320                         case " $dynamic_ext " in
13321                         *" $xxx "*) ;;
13322                         *) dflt="$dflt $xxx" ;;
13323                         esac
13324                 done
13325                 set X $dflt
13326                 shift
13327                 dflt="$*"
13328                 ;;
13329         *)  dflt="$static_ext" 
13330                 ;;
13331         esac
13332
13333         case "$dflt" in
13334         '')     dflt=none;;
13335         esac
13336         rp="What extensions do you wish to load statically?"
13337         . ./myread
13338         case "$ans" in
13339         none) static_ext=' ' ;;
13340         *) static_ext="$ans" ;;
13341         esac
13342         ;;
13343 *)
13344         $cat <<EOM
13345 A number of extensions are supplied with $package.  Answer "none" 
13346 to include no extensions. 
13347 Note that DynaLoader is always built and need not be mentioned here.
13348
13349 EOM
13350         case "$static_ext" in
13351         '') dflt="$avail_ext" ;;
13352         *)      dflt="$static_ext"
13353                 # Perhaps we are reusing an old out-of-date config.sh.
13354                 case "$hint" in
13355                 previous)
13356                         if test X"$static_ext" != X"$avail_ext"; then
13357                                 $cat <<EOM
13358 NOTICE:  Your previous config.sh list may be incorrect. 
13359 The extensions now available to you are 
13360         ${avail_ext}
13361 but the default list from your previous config.sh is
13362         ${static_ext} 
13363
13364 EOM
13365                         fi
13366                         ;;
13367                 esac
13368                 ;;
13369         esac
13370         : Exclude those that are not xs extensions
13371         case "$dflt" in
13372         '')     dflt=none;;
13373         esac
13374         rp="What extensions do you wish to include?"
13375         . ./myread
13376         case "$ans" in
13377         none) static_ext=' ' ;;
13378         *) static_ext="$ans" ;;
13379         esac
13380         ;;
13381 esac
13382
13383 set X $dynamic_ext $static_ext $nonxs_ext
13384 shift
13385 extensions="$*"
13386
13387 : Remove build directory name from cppstdin so it can be used from
13388 : either the present location or the final installed location.
13389 echo " "
13390 : Get out of the UU directory to get correct path name.
13391 cd ..
13392 case "$cppstdin" in
13393 `pwd`/cppstdin)
13394         echo "Stripping down cppstdin path name"
13395         cppstdin=cppstdin
13396         ;;
13397 esac
13398 cd UU
13399
13400 : end of configuration questions
13401 echo " "
13402 echo "End of configuration questions."
13403 echo " "
13404
13405 : back to where it started
13406 if test -d ../UU; then
13407         cd ..
13408 fi
13409
13410 : configuration may be patched via a 'config.over' file
13411 if $test -f config.over; then
13412         echo " "
13413         dflt=y
13414         rp='I see a config.over file.  Do you wish to load it?'
13415         . UU/myread
13416         case "$ans" in
13417         n*) echo "OK, I'll ignore it.";;
13418         *)      . ./config.over
13419                 echo "Configuration override changes have been loaded."
13420                 ;;
13421         esac
13422 fi
13423
13424 : in case they want portability, strip down executable paths
13425 case "$d_portable" in
13426 "$define")
13427         echo " "
13428         echo "Stripping down executable paths..." >&4
13429         for file in $loclist $trylist; do
13430                 eval temp=\$$file
13431                 eval $file=`basename $temp`
13432         done
13433         ;;
13434 esac
13435
13436 : create config.sh file
13437 echo " "
13438 echo "Creating config.sh..." >&4
13439 $spitshell <<EOT >config.sh
13440 $startsh
13441 #
13442 # This file was produced by running the Configure script. It holds all the
13443 # definitions figured out by Configure. Should you modify one of these values,
13444 # do not forget to propagate your changes by running "Configure -der". You may
13445 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13446 #
13447
13448 # Package name      : $package
13449 # Source directory  : $src
13450 # Configuration time: $cf_time
13451 # Configured by     : $cf_by
13452 # Target system     : $myuname
13453
13454 Author='$Author'
13455 Date='$Date'
13456 Header='$Header'
13457 Id='$Id'
13458 Locker='$Locker'
13459 Log='$Log'
13460 Mcc='$Mcc'
13461 RCSfile='$RCSfile'
13462 Revision='$Revision'
13463 Source='$Source'
13464 State='$State'
13465 _a='$_a'
13466 _exe='$_exe'
13467 _o='$_o'
13468 afs='$afs'
13469 alignbytes='$alignbytes'
13470 ansi2knr='$ansi2knr'
13471 aphostname='$aphostname'
13472 apiversion='$apiversion'
13473 ar='$ar'
13474 archlib='$archlib'
13475 archlibexp='$archlibexp'
13476 archname64='$archname64'
13477 archname='$archname'
13478 archobjs='$archobjs'
13479 awk='$awk'
13480 baserev='$baserev'
13481 bash='$bash'
13482 bin='$bin'
13483 bincompat5005='$bincompat5005'
13484 binexp='$binexp'
13485 bison='$bison'
13486 byacc='$byacc'
13487 byteorder='$byteorder'
13488 c='$c'
13489 castflags='$castflags'
13490 cat='$cat'
13491 cc='$cc'
13492 cccdlflags='$cccdlflags'
13493 ccdlflags='$ccdlflags'
13494 ccflags='$ccflags'
13495 ccsymbols='$ccsymbols'
13496 cf_by='$cf_by'
13497 cf_email='$cf_email'
13498 cf_time='$cf_time'
13499 chgrp='$chgrp'
13500 chmod='$chmod'
13501 chown='$chown'
13502 clocktype='$clocktype'
13503 comm='$comm'
13504 compress='$compress'
13505 contains='$contains'
13506 cp='$cp'
13507 cpio='$cpio'
13508 cpp='$cpp'
13509 cpp_stuff='$cpp_stuff'
13510 cppccsymbols='$cppccsymbols'
13511 cppflags='$cppflags'
13512 cpplast='$cpplast'
13513 cppminus='$cppminus'
13514 cpprun='$cpprun'
13515 cppstdin='$cppstdin'
13516 cppsymbols='$cppsymbols'
13517 crosscompile='$crosscompile'
13518 cryptlib='$cryptlib'
13519 csh='$csh'
13520 d_Gconvert='$d_Gconvert'
13521 d_PRIEldbl='$d_PRIEldbl'
13522 d_PRIFldbl='$d_PRIFldbl'
13523 d_PRIGldbl='$d_PRIGldbl'
13524 d_PRIX64='$d_PRIX64'
13525 d_PRId64='$d_PRId64'
13526 d_PRIeldbl='$d_PRIeldbl'
13527 d_PRIfldbl='$d_PRIfldbl'
13528 d_PRIgldbl='$d_PRIgldbl'
13529 d_PRIi64='$d_PRIi64'
13530 d_PRIo64='$d_PRIo64'
13531 d_PRIu64='$d_PRIu64'
13532 d_PRIx64='$d_PRIx64'
13533 d_access='$d_access'
13534 d_accessx='$d_accessx'
13535 d_alarm='$d_alarm'
13536 d_archlib='$d_archlib'
13537 d_atolf='$d_atolf'
13538 d_atoll='$d_atoll'
13539 d_attribut='$d_attribut'
13540 d_bcmp='$d_bcmp'
13541 d_bcopy='$d_bcopy'
13542 d_bincompat5005='$d_bincompat5005'
13543 d_bsd='$d_bsd'
13544 d_bsdgetpgrp='$d_bsdgetpgrp'
13545 d_bsdsetpgrp='$d_bsdsetpgrp'
13546 d_bzero='$d_bzero'
13547 d_casti32='$d_casti32'
13548 d_castneg='$d_castneg'
13549 d_charvspr='$d_charvspr'
13550 d_chown='$d_chown'
13551 d_chroot='$d_chroot'
13552 d_chsize='$d_chsize'
13553 d_closedir='$d_closedir'
13554 d_cmsghdr_s='$d_cmsghdr_s'
13555 d_const='$d_const'
13556 d_crypt='$d_crypt'
13557 d_csh='$d_csh'
13558 d_cuserid='$d_cuserid'
13559 d_dbl_dig='$d_dbl_dig'
13560 d_difftime='$d_difftime'
13561 d_dirnamlen='$d_dirnamlen'
13562 d_dlerror='$d_dlerror'
13563 d_dlopen='$d_dlopen'
13564 d_dlsymun='$d_dlsymun'
13565 d_dosuid='$d_dosuid'
13566 d_drand48proto='$d_drand48proto'
13567 d_dup2='$d_dup2'
13568 d_eaccess='$d_eaccess'
13569 d_endgrent='$d_endgrent'
13570 d_endhent='$d_endhent'
13571 d_endnent='$d_endnent'
13572 d_endpent='$d_endpent'
13573 d_endpwent='$d_endpwent'
13574 d_endsent='$d_endsent'
13575 d_endspent='$d_endspent'
13576 d_eofnblk='$d_eofnblk'
13577 d_eunice='$d_eunice'
13578 d_fchmod='$d_fchmod'
13579 d_fchown='$d_fchown'
13580 d_fcntl='$d_fcntl'
13581 d_fd_macros='$d_fd_macros'
13582 d_fd_set='$d_fd_set'
13583 d_fds_bits='$d_fds_bits'
13584 d_fgetpos='$d_fgetpos'
13585 d_flexfnam='$d_flexfnam'
13586 d_flock='$d_flock'
13587 d_fork='$d_fork'
13588 d_fpathconf='$d_fpathconf'
13589 d_fpos64_t='$d_fpos64_t'
13590 d_fseeko='$d_fseeko'
13591 d_fsetpos='$d_fsetpos'
13592 d_fstatfs='$d_fstatfs'
13593 d_fstatvfs='$d_fstatvfs'
13594 d_ftello='$d_ftello'
13595 d_ftime='$d_ftime'
13596 d_getgrent='$d_getgrent'
13597 d_getgrps='$d_getgrps'
13598 d_gethbyaddr='$d_gethbyaddr'
13599 d_gethbyname='$d_gethbyname'
13600 d_gethent='$d_gethent'
13601 d_gethname='$d_gethname'
13602 d_gethostprotos='$d_gethostprotos'
13603 d_getlogin='$d_getlogin'
13604 d_getmntent='$d_getmntent'
13605 d_getnbyaddr='$d_getnbyaddr'
13606 d_getnbyname='$d_getnbyname'
13607 d_getnent='$d_getnent'
13608 d_getnetprotos='$d_getnetprotos'
13609 d_getpbyname='$d_getpbyname'
13610 d_getpbynumber='$d_getpbynumber'
13611 d_getpent='$d_getpent'
13612 d_getpgid='$d_getpgid'
13613 d_getpgrp2='$d_getpgrp2'
13614 d_getpgrp='$d_getpgrp'
13615 d_getppid='$d_getppid'
13616 d_getprior='$d_getprior'
13617 d_getprotoprotos='$d_getprotoprotos'
13618 d_getpwent='$d_getpwent'
13619 d_getsbyname='$d_getsbyname'
13620 d_getsbyport='$d_getsbyport'
13621 d_getsent='$d_getsent'
13622 d_getservprotos='$d_getservprotos'
13623 d_getspent='$d_getspent'
13624 d_getspnam='$d_getspnam'
13625 d_gettimeod='$d_gettimeod'
13626 d_gnulibc='$d_gnulibc'
13627 d_grpasswd='$d_grpasswd'
13628 d_hasmntopt='$d_hasmntopt'
13629 d_htonl='$d_htonl'
13630 d_index='$d_index'
13631 d_inetaton='$d_inetaton'
13632 d_int64t='$d_int64t'
13633 d_iovec_s='$d_iovec_s'
13634 d_isascii='$d_isascii'
13635 d_killpg='$d_killpg'
13636 d_lchown='$d_lchown'
13637 d_ldbl_dig='$d_ldbl_dig'
13638 d_link='$d_link'
13639 d_llseek='$d_llseek'
13640 d_locconv='$d_locconv'
13641 d_lockf='$d_lockf'
13642 d_longdbl='$d_longdbl'
13643 d_longlong='$d_longlong'
13644 d_lstat='$d_lstat'
13645 d_madvise='$d_madvise'
13646 d_mblen='$d_mblen'
13647 d_mbstowcs='$d_mbstowcs'
13648 d_mbtowc='$d_mbtowc'
13649 d_memchr='$d_memchr'
13650 d_memcmp='$d_memcmp'
13651 d_memcpy='$d_memcpy'
13652 d_memmove='$d_memmove'
13653 d_memset='$d_memset'
13654 d_mkdir='$d_mkdir'
13655 d_mkfifo='$d_mkfifo'
13656 d_mktime='$d_mktime'
13657 d_mmap='$d_mmap'
13658 d_mprotect='$d_mprotect'
13659 d_msg='$d_msg'
13660 d_msg_ctrunc='$d_msg_ctrunc'
13661 d_msg_dontroute='$d_msg_dontroute'
13662 d_msg_oob='$d_msg_oob'
13663 d_msg_peek='$d_msg_peek'
13664 d_msg_proxy='$d_msg_proxy'
13665 d_msgctl='$d_msgctl'
13666 d_msgget='$d_msgget'
13667 d_msghdr_s='$d_msghdr_s'
13668 d_msgrcv='$d_msgrcv'
13669 d_msgsnd='$d_msgsnd'
13670 d_msync='$d_msync'
13671 d_munmap='$d_munmap'
13672 d_mymalloc='$d_mymalloc'
13673 d_nice='$d_nice'
13674 d_off64_t='$d_off64_t'
13675 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13676 d_oldpthreads='$d_oldpthreads'
13677 d_oldsock='$d_oldsock'
13678 d_open3='$d_open3'
13679 d_pathconf='$d_pathconf'
13680 d_pause='$d_pause'
13681 d_phostname='$d_phostname'
13682 d_pipe='$d_pipe'
13683 d_poll='$d_poll'
13684 d_portable='$d_portable'
13685 d_pthread_yield='$d_pthread_yield'
13686 d_pwage='$d_pwage'
13687 d_pwchange='$d_pwchange'
13688 d_pwclass='$d_pwclass'
13689 d_pwcomment='$d_pwcomment'
13690 d_pwexpire='$d_pwexpire'
13691 d_pwgecos='$d_pwgecos'
13692 d_pwpasswd='$d_pwpasswd'
13693 d_pwquota='$d_pwquota'
13694 d_readdir='$d_readdir'
13695 d_readlink='$d_readlink'
13696 d_readv='$d_readv'
13697 d_recvmsg='$d_recvmsg'
13698 d_rename='$d_rename'
13699 d_rewinddir='$d_rewinddir'
13700 d_rmdir='$d_rmdir'
13701 d_safebcpy='$d_safebcpy'
13702 d_safemcpy='$d_safemcpy'
13703 d_sanemcmp='$d_sanemcmp'
13704 d_sched_yield='$d_sched_yield'
13705 d_scm_rights='$d_scm_rights'
13706 d_seekdir='$d_seekdir'
13707 d_select='$d_select'
13708 d_sem='$d_sem'
13709 d_semctl='$d_semctl'
13710 d_semctl_semid_ds='$d_semctl_semid_ds'
13711 d_semctl_semun='$d_semctl_semun'
13712 d_semget='$d_semget'
13713 d_semop='$d_semop'
13714 d_sendmsg='$d_sendmsg'
13715 d_setegid='$d_setegid'
13716 d_seteuid='$d_seteuid'
13717 d_setgrent='$d_setgrent'
13718 d_setgrps='$d_setgrps'
13719 d_sethent='$d_sethent'
13720 d_setlinebuf='$d_setlinebuf'
13721 d_setlocale='$d_setlocale'
13722 d_setnent='$d_setnent'
13723 d_setpent='$d_setpent'
13724 d_setpgid='$d_setpgid'
13725 d_setpgrp2='$d_setpgrp2'
13726 d_setpgrp='$d_setpgrp'
13727 d_setprior='$d_setprior'
13728 d_setpwent='$d_setpwent'
13729 d_setregid='$d_setregid'
13730 d_setresgid='$d_setresgid'
13731 d_setresuid='$d_setresuid'
13732 d_setreuid='$d_setreuid'
13733 d_setrgid='$d_setrgid'
13734 d_setruid='$d_setruid'
13735 d_setsent='$d_setsent'
13736 d_setsid='$d_setsid'
13737 d_setspent='$d_setspent'
13738 d_setvbuf='$d_setvbuf'
13739 d_sfio='$d_sfio'
13740 d_shm='$d_shm'
13741 d_shmat='$d_shmat'
13742 d_shmatprototype='$d_shmatprototype'
13743 d_shmctl='$d_shmctl'
13744 d_shmdt='$d_shmdt'
13745 d_shmget='$d_shmget'
13746 d_sigaction='$d_sigaction'
13747 d_sigsetjmp='$d_sigsetjmp'
13748 d_socket='$d_socket'
13749 d_sockpair='$d_sockpair'
13750 d_sqrtl='$d_sqrtl'
13751 d_statblks='$d_statblks'
13752 d_statfs='$d_statfs'
13753 d_statfsflags='$d_statfsflags'
13754 d_statvfs='$d_statvfs'
13755 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13756 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13757 d_stdio_stream_array='$d_stdio_stream_array'
13758 d_stdiobase='$d_stdiobase'
13759 d_stdstdio='$d_stdstdio'
13760 d_strchr='$d_strchr'
13761 d_strcoll='$d_strcoll'
13762 d_strctcpy='$d_strctcpy'
13763 d_strerrm='$d_strerrm'
13764 d_strerror='$d_strerror'
13765 d_strtod='$d_strtod'
13766 d_strtol='$d_strtol'
13767 d_strtoul='$d_strtoul'
13768 d_strtoull='$d_strtoull'
13769 d_strxfrm='$d_strxfrm'
13770 d_suidsafe='$d_suidsafe'
13771 d_symlink='$d_symlink'
13772 d_syscall='$d_syscall'
13773 d_sysconf='$d_sysconf'
13774 d_sysernlst='$d_sysernlst'
13775 d_syserrlst='$d_syserrlst'
13776 d_system='$d_system'
13777 d_tcgetpgrp='$d_tcgetpgrp'
13778 d_tcsetpgrp='$d_tcsetpgrp'
13779 d_telldir='$d_telldir'
13780 d_telldirproto='$d_telldirproto'
13781 d_time='$d_time'
13782 d_times='$d_times'
13783 d_truncate='$d_truncate'
13784 d_tzname='$d_tzname'
13785 d_umask='$d_umask'
13786 d_uname='$d_uname'
13787 d_union_semun='$d_union_semun'
13788 d_vendorbin='$d_vendorbin'
13789 d_vendorlib='$d_vendorlib'
13790 d_vfork='$d_vfork'
13791 d_void_closedir='$d_void_closedir'
13792 d_voidsig='$d_voidsig'
13793 d_voidtty='$d_voidtty'
13794 d_volatile='$d_volatile'
13795 d_vprintf='$d_vprintf'
13796 d_wait4='$d_wait4'
13797 d_waitpid='$d_waitpid'
13798 d_wcstombs='$d_wcstombs'
13799 d_wctomb='$d_wctomb'
13800 d_writev='$d_writev'
13801 d_xenix='$d_xenix'
13802 date='$date'
13803 db_hashtype='$db_hashtype'
13804 db_prefixtype='$db_prefixtype'
13805 defvoidused='$defvoidused'
13806 direntrytype='$direntrytype'
13807 dlext='$dlext'
13808 dlsrc='$dlsrc'
13809 doublesize='$doublesize'
13810 drand01='$drand01'
13811 dynamic_ext='$dynamic_ext'
13812 eagain='$eagain'
13813 ebcdic='$ebcdic'
13814 echo='$echo'
13815 egrep='$egrep'
13816 emacs='$emacs'
13817 eunicefix='$eunicefix'
13818 exe_ext='$exe_ext'
13819 expr='$expr'
13820 extensions='$extensions'
13821 fflushNULL='$fflushNULL'
13822 fflushall='$fflushall'
13823 find='$find'
13824 firstmakefile='$firstmakefile'
13825 flex='$flex'
13826 fpostype='$fpostype'
13827 freetype='$freetype'
13828 full_ar='$full_ar'
13829 full_csh='$full_csh'
13830 full_sed='$full_sed'
13831 gccversion='$gccversion'
13832 gidtype='$gidtype'
13833 glibpth='$glibpth'
13834 grep='$grep'
13835 groupcat='$groupcat'
13836 groupstype='$groupstype'
13837 gzip='$gzip'
13838 h_fcntl='$h_fcntl'
13839 h_sysfile='$h_sysfile'
13840 hint='$hint'
13841 hostcat='$hostcat'
13842 huge='$huge'
13843 i_arpainet='$i_arpainet'
13844 i_bsdioctl='$i_bsdioctl'
13845 i_db='$i_db'
13846 i_dbm='$i_dbm'
13847 i_dirent='$i_dirent'
13848 i_dld='$i_dld'
13849 i_dlfcn='$i_dlfcn'
13850 i_fcntl='$i_fcntl'
13851 i_float='$i_float'
13852 i_gdbm='$i_gdbm'
13853 i_grp='$i_grp'
13854 i_inttypes='$i_inttypes'
13855 i_limits='$i_limits'
13856 i_locale='$i_locale'
13857 i_machcthr='$i_machcthr'
13858 i_malloc='$i_malloc'
13859 i_math='$i_math'
13860 i_memory='$i_memory'
13861 i_mntent='$i_mntent'
13862 i_ndbm='$i_ndbm'
13863 i_netdb='$i_netdb'
13864 i_neterrno='$i_neterrno'
13865 i_netinettcp='$i_netinettcp'
13866 i_niin='$i_niin'
13867 i_poll='$i_poll'
13868 i_pthread='$i_pthread'
13869 i_pwd='$i_pwd'
13870 i_rpcsvcdbm='$i_rpcsvcdbm'
13871 i_sfio='$i_sfio'
13872 i_sgtty='$i_sgtty'
13873 i_shadow='$i_shadow'
13874 i_socks='$i_socks'
13875 i_stdarg='$i_stdarg'
13876 i_stddef='$i_stddef'
13877 i_stdlib='$i_stdlib'
13878 i_string='$i_string'
13879 i_sysaccess='$i_sysaccess'
13880 i_sysdir='$i_sysdir'
13881 i_sysfile='$i_sysfile'
13882 i_sysfilio='$i_sysfilio'
13883 i_sysin='$i_sysin'
13884 i_sysioctl='$i_sysioctl'
13885 i_sysmman='$i_sysmman'
13886 i_sysmount='$i_sysmount'
13887 i_sysndir='$i_sysndir'
13888 i_sysparam='$i_sysparam'
13889 i_sysresrc='$i_sysresrc'
13890 i_syssecrt='$i_syssecrt'
13891 i_sysselct='$i_sysselct'
13892 i_syssockio='$i_syssockio'
13893 i_sysstat='$i_sysstat'
13894 i_sysstatvfs='$i_sysstatvfs'
13895 i_systime='$i_systime'
13896 i_systimek='$i_systimek'
13897 i_systimes='$i_systimes'
13898 i_systypes='$i_systypes'
13899 i_sysuio='$i_sysuio'
13900 i_sysun='$i_sysun'
13901 i_syswait='$i_syswait'
13902 i_termio='$i_termio'
13903 i_termios='$i_termios'
13904 i_time='$i_time'
13905 i_unistd='$i_unistd'
13906 i_utime='$i_utime'
13907 i_values='$i_values'
13908 i_varargs='$i_varargs'
13909 i_varhdr='$i_varhdr'
13910 i_vfork='$i_vfork'
13911 ignore_versioned_solibs='$ignore_versioned_solibs'
13912 incpath='$incpath'
13913 inews='$inews'
13914 installarchlib='$installarchlib'
13915 installbin='$installbin'
13916 installman1dir='$installman1dir'
13917 installman3dir='$installman3dir'
13918 installprefix='$installprefix'
13919 installprefixexp='$installprefixexp'
13920 installprivlib='$installprivlib'
13921 installscript='$installscript'
13922 installsitearch='$installsitearch'
13923 installsitebin='$installsitebin'
13924 installsitelib='$installsitelib'
13925 installstyle='$installstyle'
13926 installusrbinperl='$installusrbinperl'
13927 installvendorbin='$installvendorbin'
13928 installvendorlib='$installvendorlib'
13929 intsize='$intsize'
13930 known_extensions='$known_extensions'
13931 ksh='$ksh'
13932 large='$large'
13933 ld='$ld'
13934 lddlflags='$lddlflags'
13935 ldflags='$ldflags'
13936 ldlibpthname='$ldlibpthname'
13937 less='$less'
13938 lib_ext='$lib_ext'
13939 libc='$libc'
13940 libperl='$libperl'
13941 libpth='$libpth'
13942 libs='$libs'
13943 libswanted='$libswanted'
13944 line='$line'
13945 lint='$lint'
13946 lkflags='$lkflags'
13947 ln='$ln'
13948 lns='$lns'
13949 locincpth='$locincpth'
13950 loclibpth='$loclibpth'
13951 longdblsize='$longdblsize'
13952 longlongsize='$longlongsize'
13953 longsize='$longsize'
13954 lp='$lp'
13955 lpr='$lpr'
13956 ls='$ls'
13957 lseeksize='$lseeksize'
13958 lseektype='$lseektype'
13959 mail='$mail'
13960 mailx='$mailx'
13961 make='$make'
13962 make_set_make='$make_set_make'
13963 mallocobj='$mallocobj'
13964 mallocsrc='$mallocsrc'
13965 malloctype='$malloctype'
13966 man1dir='$man1dir'
13967 man1direxp='$man1direxp'
13968 man1ext='$man1ext'
13969 man3dir='$man3dir'
13970 man3direxp='$man3direxp'
13971 man3ext='$man3ext'
13972 medium='$medium'
13973 mips='$mips'
13974 mips_type='$mips_type'
13975 mkdir='$mkdir'
13976 mmaptype='$mmaptype'
13977 models='$models'
13978 modetype='$modetype'
13979 more='$more'
13980 multiarch='$multiarch'
13981 mv='$mv'
13982 myarchname='$myarchname'
13983 mydomain='$mydomain'
13984 myhostname='$myhostname'
13985 myuname='$myuname'
13986 n='$n'
13987 netdb_hlen_type='$netdb_hlen_type'
13988 netdb_host_type='$netdb_host_type'
13989 netdb_name_type='$netdb_name_type'
13990 netdb_net_type='$netdb_net_type'
13991 nm='$nm'
13992 nm_opt='$nm_opt'
13993 nm_so_opt='$nm_so_opt'
13994 nonxs_ext='$nonxs_ext'
13995 nroff='$nroff'
13996 o_nonblock='$o_nonblock'
13997 obj_ext='$obj_ext'
13998 old_pthread_create_joinable='$old_pthread_create_joinable'
13999 optimize='$optimize'
14000 orderlib='$orderlib'
14001 osname='$osname'
14002 osvers='$osvers'
14003 package='$package'
14004 pager='$pager'
14005 passcat='$passcat'
14006 patchlevel='$patchlevel'
14007 path_sep='$path_sep'
14008 perl='$perl'
14009 perladmin='$perladmin'
14010 perlpath='$perlpath'
14011 pg='$pg'
14012 phostname='$phostname'
14013 pidtype='$pidtype'
14014 plibpth='$plibpth'
14015 pm_apiversion='$pm_apiversion'
14016 pmake='$pmake'
14017 pr='$pr'
14018 prefix='$prefix'
14019 prefixexp='$prefixexp'
14020 privlib='$privlib'
14021 privlibexp='$privlibexp'
14022 prototype='$prototype'
14023 ptrsize='$ptrsize'
14024 randbits='$randbits'
14025 randfunc='$randfunc'
14026 randseedtype='$randseedtype'
14027 ranlib='$ranlib'
14028 rd_nodata='$rd_nodata'
14029 rm='$rm'
14030 rmail='$rmail'
14031 runnm='$runnm'
14032 sPRIEldbl='$sPRIEldbl'
14033 sPRIFldbl='$sPRIFldbl'
14034 sPRIGldbl='$sPRIGldbl'
14035 sPRIX64='$sPRIX64'
14036 sPRId64='$sPRId64'
14037 sPRIeldbl='$sPRIeldbl'
14038 sPRIfldbl='$sPRIfldbl'
14039 sPRIgldbl='$sPRIgldbl'
14040 sPRIi64='$sPRIi64'
14041 sPRIo64='$sPRIo64'
14042 sPRIu64='$sPRIu64'
14043 sPRIx64='$sPRIx64'
14044 sched_yield='$sched_yield'
14045 scriptdir='$scriptdir'
14046 scriptdirexp='$scriptdirexp'
14047 sed='$sed'
14048 seedfunc='$seedfunc'
14049 selectminbits='$selectminbits'
14050 selecttype='$selecttype'
14051 sendmail='$sendmail'
14052 sh='$sh'
14053 shar='$shar'
14054 sharpbang='$sharpbang'
14055 shmattype='$shmattype'
14056 shortsize='$shortsize'
14057 shrpenv='$shrpenv'
14058 shsharp='$shsharp'
14059 sig_count='$sig_count'
14060 sig_name='$sig_name'
14061 sig_name_init='$sig_name_init'
14062 sig_num='$sig_num'
14063 sig_num_init='$sig_num_init'
14064 signal_t='$signal_t'
14065 sitearch='$sitearch'
14066 sitearchexp='$sitearchexp'
14067 sitebin='$sitebin'
14068 sitebinexp='$sitebinexp'
14069 sitelib='$sitelib'
14070 sitelibexp='$sitelibexp'
14071 siteprefix='$siteprefix'
14072 siteprefixexp='$siteprefixexp'
14073 sizetype='$sizetype'
14074 sleep='$sleep'
14075 smail='$smail'
14076 small='$small'
14077 so='$so'
14078 sockethdr='$sockethdr'
14079 socketlib='$socketlib'
14080 sort='$sort'
14081 spackage='$spackage'
14082 spitshell='$spitshell'
14083 split='$split'
14084 src='$src'
14085 ssizetype='$ssizetype'
14086 startperl='$startperl'
14087 startsh='$startsh'
14088 static_ext='$static_ext'
14089 stdchar='$stdchar'
14090 stdio_base='$stdio_base'
14091 stdio_bufsiz='$stdio_bufsiz'
14092 stdio_cnt='$stdio_cnt'
14093 stdio_filbuf='$stdio_filbuf'
14094 stdio_ptr='$stdio_ptr'
14095 stdio_stream_array='$stdio_stream_array'
14096 strings='$strings'
14097 submit='$submit'
14098 subversion='$subversion'
14099 sysman='$sysman'
14100 tail='$tail'
14101 tar='$tar'
14102 tbl='$tbl'
14103 tee='$tee'
14104 test='$test'
14105 timeincl='$timeincl'
14106 timetype='$timetype'
14107 touch='$touch'
14108 tr='$tr'
14109 trnl='$trnl'
14110 troff='$troff'
14111 uidsign='$uidsign'
14112 uidtype='$uidtype'
14113 uname='$uname'
14114 uniq='$uniq'
14115 use64bits='$use64bits'
14116 usedl='$usedl'
14117 uselargefiles='$uselargefiles'
14118 uselongdouble='$uselongdouble'
14119 usemorebits='$usemorebits'
14120 usemultiplicity='$usemultiplicity'
14121 usemymalloc='$usemymalloc'
14122 usenm='$usenm'
14123 useopcode='$useopcode'
14124 useperlio='$useperlio'
14125 useposix='$useposix'
14126 usesfio='$usesfio'
14127 useshrplib='$useshrplib'
14128 usesocks='$usesocks'
14129 usethreads='$usethreads'
14130 usevendorprefix='$usevendorprefix'
14131 usevfork='$usevfork'
14132 usrinc='$usrinc'
14133 uuname='$uuname'
14134 vendorbin='$vendorbin'
14135 vendorbinexp='$vendorbinexp'
14136 vendorlib='$vendorlib'
14137 vendorlibexp='$vendorlibexp'
14138 vendorprefix='$vendorprefix'
14139 vendorprefixexp='$vendorprefixexp'
14140 version='$version'
14141 vi='$vi'
14142 voidflags='$voidflags'
14143 xlibpth='$xlibpth'
14144 xs_apiversion='$xs_apiversion'
14145 zcat='$zcat'
14146 zip='$zip'
14147 EOT
14148
14149 : Add in command line options if available
14150 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
14151
14152 : add special variables
14153 $test -f $src/patchlevel.h && \
14154 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
14155 echo "CONFIGDOTSH=true" >>config.sh
14156
14157 : propagate old symbols
14158 if $test -f UU/config.sh; then
14159         <UU/config.sh sort | uniq >UU/oldconfig.sh
14160         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
14161         sort | uniq -u >UU/oldsyms
14162         set X `cat UU/oldsyms`
14163         shift
14164         case $# in
14165         0) ;;
14166         *)
14167                 cat <<EOM
14168 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
14169 EOM
14170                 echo "# Variables propagated from previous config.sh file." >>config.sh
14171                 for sym in `cat UU/oldsyms`; do
14172                         echo "    Propagating $hint variable "'$'"$sym..."
14173                         eval 'tmp="$'"${sym}"'"'
14174                         echo "$tmp" | \
14175                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
14176                 done
14177                 ;;
14178         esac
14179 fi
14180
14181 : Finish up by extracting the .SH files
14182 case "$alldone" in
14183 exit)
14184         $rm -rf UU
14185         echo "Done."
14186         exit 0
14187         ;;
14188 cont)
14189         ;;
14190 '')
14191         dflt=''
14192         nostick=true
14193         $cat <<EOM
14194
14195 If you'd like to make any changes to the config.sh file before I begin
14196 to configure things, do it as a shell escape now (e.g. !vi config.sh).
14197
14198 EOM
14199         rp="Press return or use a shell escape to edit config.sh:"
14200         . UU/myread
14201         nostick=''
14202         case "$ans" in
14203         '') ;;
14204         *) : in case they cannot read
14205                 sh 1>&4 -c "$ans";;
14206         esac
14207         ;;
14208 esac
14209
14210 : if this fails, just run all the .SH files by hand
14211 . ./config.sh
14212
14213 echo " "
14214 exec 1>&4
14215 . ./UU/extract
14216
14217 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
14218         dflt=y
14219         case "$silent" in
14220         true) ;;
14221         *)
14222                 $cat <<EOM
14223
14224 Now you need to generate make dependencies by running "$make depend".
14225 You might prefer to run it in background: "$make depend > makedepend.out &"
14226 It can take a while, so you might not want to run it right now.
14227
14228 EOM
14229                 ;;
14230         esac
14231         rp="Run $make depend now?"
14232         . UU/myread
14233         case "$ans" in
14234         y*)
14235                 $make depend && echo "Now you must run a $make."
14236                 ;;
14237         *)
14238                 echo "You must run '$make depend' then '$make'."
14239                 ;;
14240         esac
14241 elif test -f [Mm]akefile; then
14242         echo " "
14243         echo "Now you must run a $make."
14244 else
14245         echo "Done."
14246 fi
14247
14248 if $test -f Policy.sh; then
14249     $cat <<EOM
14250
14251 If you compile $package on a different machine or from a different object
14252 directory, copy the Policy.sh file from this object directory to the
14253 new one before you run Configure -- this will help you with most of
14254 the policy defaults.
14255
14256 EOM
14257 fi
14258 if $test -f config.msg; then
14259     echo "Hmm.  I also noted the following information while running:"
14260     echo " "
14261     $cat config.msg >&4
14262     $rm -f config.msg
14263 fi
14264 $rm -f kit*isdone ark*isdone
14265 $rm -rf UU
14266
14267 : End of Configure
14268