Miscellaneus AIX fixes + SOCKS support.
[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 Mon Jul  5 02:09:55 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 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_socks=''
632 i_stddef=''
633 i_stdlib=''
634 i_string=''
635 strings=''
636 i_sysaccess=''
637 i_sysdir=''
638 i_sysfile=''
639 d_voidtty=''
640 i_bsdioctl=''
641 i_sysfilio=''
642 i_sysioctl=''
643 i_syssockio=''
644 i_sysmman=''
645 i_sysmount=''
646 i_sysndir=''
647 i_sysparam=''
648 i_sysresrc=''
649 i_syssecrt=''
650 i_sysselct=''
651 i_sysstat=''
652 i_sysstatvfs=''
653 i_systimes=''
654 i_systypes=''
655 d_iovec_s=''
656 i_sysuio=''
657 i_sysun=''
658 i_syswait=''
659 i_sgtty=''
660 i_termio=''
661 i_termios=''
662 i_systime=''
663 i_systimek=''
664 i_time=''
665 timeincl=''
666 i_unistd=''
667 i_utime=''
668 i_values=''
669 i_stdarg=''
670 i_varargs=''
671 i_varhdr=''
672 i_vfork=''
673 installusrbinperl=''
674 intsize=''
675 longsize=''
676 shortsize=''
677 d_dirent64_s=''
678 d_flock64_s=''
679 d_fstat64=''
680 d_ftruncate64=''
681 d_ino64_t=''
682 d_llseek=''
683 d_lockf64=''
684 d_lseek64=''
685 d_lstat64=''
686 d_off64_t=''
687 d_offset_t=''
688 d_open64=''
689 d_opendir64=''
690 d_readdir64=''
691 d_seekdir64=''
692 d_stat64=''
693 d_telldir64=''
694 d_truncate64=''
695 libc=''
696 libperl=''
697 shrpenv=''
698 useshrplib=''
699 glibpth=''
700 libpth=''
701 loclibpth=''
702 plibpth=''
703 xlibpth=''
704 ignore_versioned_solibs=''
705 libs=''
706 lns=''
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 drand01=''
768 randbits=''
769 randfunc=''
770 randseedtype=''
771 seedfunc=''
772 installscript=''
773 scriptdir=''
774 scriptdirexp=''
775 selectminbits=''
776 selecttype=''
777 sh=''
778 sig_count=''
779 sig_name=''
780 sig_name_init=''
781 sig_num=''
782 sig_num_init=''
783 installsitearch=''
784 sitearch=''
785 sitearchexp=''
786 installsitelib=''
787 sitelib=''
788 sitelibexp=''
789 sizetype=''
790 so=''
791 sharpbang=''
792 shsharp=''
793 spitshell=''
794 src=''
795 ssizetype=''
796 startperl=''
797 startsh=''
798 stdchar=''
799 d_fgetpos64=''
800 d_fopen64=''
801 d_freopen64=''
802 d_fseek64=''
803 d_fseeko64=''
804 d_fsetpos64=''
805 d_ftell64=''
806 d_ftello64=''
807 d_tmpfile64=''
808 d_stdio_stream_array=''
809 stdio_stream_array=''
810 sysman=''
811 trnl=''
812 uidtype=''
813 archname64=''
814 use64bits=''
815 usemultiplicity=''
816 nm_opt=''
817 nm_so_opt=''
818 runnm=''
819 usenm=''
820 useperlio=''
821 d_oldpthreads=''
822 usethreads=''
823 incpath=''
824 mips=''
825 mips_type=''
826 usrinc=''
827 defvoidused=''
828 voidflags=''
829 CONFIG=''
830
831 define='define'
832 undef='undef'
833 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
834 rmlist=''
835
836 : We must find out about Eunice early
837 eunicefix=':'
838 if test -f /etc/unixtovms; then
839         eunicefix=/etc/unixtovms
840 fi
841 if test -f /etc/unixtovms.exe; then
842         eunicefix=/etc/unixtovms.exe
843 fi
844
845 i_whoami=''
846 : Possible local include directories to search.
847 : Set locincpth to "" in a hint file to defeat local include searches.
848 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
849 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
850 :
851 : no include file wanted by default
852 inclwanted=''
853
854 : list of known cpp symbols, sorted alphabetically
855 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
856 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
857 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
858 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
859 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
860 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
861 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
862 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
863 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
864 al="$al VMS Xenix286"
865 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
866 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
867 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
868 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
869 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
870 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
871 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
872 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
873 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
874 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
875 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
876 al="$al __SVR4_2__ __UMAXV__"
877 al="$al ____386BSD____ __alpha __alpha__ __amiga"
878 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
879 al="$al __host_mips__"
880 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
881 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
882 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
883 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
884 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
885 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
886 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
887 al="$al __mc88100 __mc88100__ __mips __mips__"
888 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
889 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
890 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
891 al="$al _host_mips _mips _unix"
892 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
893 al="$al apollo ardent att386 att3b"
894 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
895 al="$al cadmus clipper concurrent convex cray ctix"
896 al="$al dmert encore gcos gcx gimpel gould"
897 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
898 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
899 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
900 al="$al i186 i286 i386 i486 i8086"
901 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
902 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
903 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
904 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
905 al="$al mc88000 mc88100 merlin mert mips mvs n16"
906 al="$al ncl_el ncl_mr"
907 al="$al news1500 news1700 news1800 news1900 news3700"
908 al="$al news700 news800 news900 ns16000 ns32000"
909 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
910 al="$al parisc pc532 pdp11 plexus posix pyr"
911 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
912 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
913 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
914 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
915 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
916 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
917 al="$al xenix z8000"
918
919 : Trailing extension.  Override this in a hint file, if needed.
920 _exe=''
921 : Extra object files, if any, needed on this platform.
922 archobjs=''
923 groupstype=''
924 : change the next line if compiling for Xenix/286 on Xenix/386
925 xlibpth='/usr/lib/386 /lib/386'
926
927 : Possible local library directories to search.
928 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
929 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
930
931 : general looking path for locating libraries
932 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
933 glibpth="$glibpth /lib /usr/lib $xlibpth"
934 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
935 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
936
937 : Private path used by Configure to find libraries.  Its value
938 : is prepended to libpth. This variable takes care of special
939 : machines, like the mips.  Usually, it should be empty.
940 plibpth=''
941
942 : default library list
943 libswanted=''
944 : some systems want to use only the non-versioned libso:s
945 ignore_versioned_solibs=''
946 : full support for void wanted by default
947 defvoidused=15
948
949 : set useposix=false in your hint file to disable the POSIX extension.
950 useposix=true
951 : set useopcode=false in your hint file to disable the Opcode extension.
952 useopcode=true
953 : set usemultiplicity on the Configure command line to enable multiplicity.
954 : set usethreads on the Configure command line to enable threads.
955 : List of libraries we want.
956 : If anyone needs -lnet, put it in a hint file.
957 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
958 libswanted="$libswanted dld ld sun m rt c cposix posix"
959 libswanted="$libswanted ndir dir crypt sec"
960 libswanted="$libswanted ucb bsd BSD PW x"
961 : We probably want to search /usr/shlib before most other libraries.
962 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
963 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
964 glibpth="/usr/shlib $glibpth"
965 : Do not use vfork unless overridden by a hint file.
966 usevfork=false
967
968 : Find the basic shell for Bourne shell scripts
969 case "$sh" in
970 '')
971         case "$SYSTYPE" in
972         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
973         *) xxx='/bin/sh';;
974         esac
975         if test -f "$xxx"; then
976                 sh="$xxx"
977         else
978                 : Build up a list and do a single loop so we can 'break' out.
979                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
980                 for xxx in sh bash ksh pdksh ash; do
981                         for p in $pth; do
982                                 try="$try ${p}/${xxx}"
983                         done
984                 done
985                 for xxx in $try; do
986                         if test -f "$xxx"; then
987                                 sh="$xxx";
988                                 break
989                         elif test -f "$xxx.exe"; then
990                                 sh="$xxx";
991                                 break
992                         fi
993                 done
994         fi
995         ;;
996 esac
997
998 case "$sh" in
999 '')     cat <<EOM >&2
1000 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1001
1002 Usually it's in /bin/sh.  How did you even get this far?
1003 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1004 we'll try to straighten this all out.
1005 EOM
1006         exit 1
1007         ;;
1008 esac
1009
1010 : see if sh knows # comments
1011 if `$sh -c '#' >/dev/null 2>&1`; then
1012         shsharp=true
1013         spitshell=cat
1014         xcat=/bin/cat
1015         test -f $xcat || xcat=/usr/bin/cat
1016         echo "#!$xcat" >try
1017         $eunicefix try
1018         chmod +x try
1019         ./try > today
1020         if test -s today; then
1021                 sharpbang='#!'
1022         else
1023                 echo "#! $xcat" > try
1024                 $eunicefix try
1025                 chmod +x try
1026                 ./try > today
1027                 if test -s today; then
1028                         sharpbang='#! '
1029                 else
1030                         sharpbang=': use '
1031                 fi
1032         fi
1033 else
1034         echo " "
1035         echo "Your $sh doesn't grok # comments--I will strip them later on."
1036         shsharp=false
1037         cd ..
1038         echo "exec grep -v '^[  ]*#'" >spitshell
1039         chmod +x spitshell
1040         $eunicefix spitshell
1041         spitshell=`pwd`/spitshell
1042         cd UU
1043         echo "I presume that if # doesn't work, #! won't work either!"
1044         sharpbang=': use '
1045 fi
1046 rm -f try today
1047
1048 : figure out how to guarantee sh startup
1049 case "$startsh" in
1050 '') startsh=${sharpbang}${sh} ;;
1051 *)
1052 esac
1053 cat >try <<EOSS
1054 $startsh
1055 set abc
1056 test "$?abc" != 1
1057 EOSS
1058
1059 chmod +x try
1060 $eunicefix try
1061 if ./try; then
1062         : echo "Yup, it does."
1063 else
1064         echo "Hmm... '$startsh' does not guarantee sh startup..."
1065         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1066 fi
1067 rm -f try
1068
1069
1070 : Save command line options in file UU/cmdline.opt for later use in
1071 : generating config.sh.
1072 cat > cmdline.opt <<EOSH
1073 # Configure command line arguments.
1074 config_arg0='$0'
1075 config_args='$*'
1076 config_argc=$#
1077 EOSH
1078 argn=1
1079 for arg in "$@"; do
1080         cat >>cmdline.opt <<EOSH
1081 config_arg$argn='$arg'
1082 EOSH
1083         argn=`expr $argn + 1`
1084 done
1085
1086 : produce awk script to parse command line options
1087 cat >options.awk <<'EOF'
1088 BEGIN {
1089         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1090
1091         len = length(optstr);
1092         for (i = 1; i <= len; i++) {
1093                 c = substr(optstr, i, 1);
1094                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1095                 if (a == ":") {
1096                         arg[c] = 1;
1097                         i++;
1098                 }
1099                 opt[c] = 1;
1100         }
1101 }
1102 {
1103         expect = 0;
1104         str = $0;
1105         if (substr(str, 1, 1) != "-") {
1106                 printf("'%s'\n", str);
1107                 next;
1108         }
1109         len = length($0);
1110         for (i = 2; i <= len; i++) {
1111                 c = substr(str, i, 1);
1112                 if (!opt[c]) {
1113                         printf("-%s\n", substr(str, i));
1114                         next;
1115                 }
1116                 printf("-%s\n", c);
1117                 if (arg[c]) {
1118                         if (i < len)
1119                                 printf("'%s'\n", substr(str, i + 1));
1120                         else
1121                                 expect = 1;
1122                         next;
1123                 }
1124         }
1125 }
1126 END {
1127         if (expect)
1128                 print "?";
1129 }
1130 EOF
1131
1132 : process the command line options
1133 set X `for arg in "$@"; do echo "X$arg"; done |
1134         sed -e s/X// | awk -f options.awk`
1135 eval "set $*"
1136 shift
1137 rm -f options.awk
1138
1139 : set up default values
1140 fastread=''
1141 reuseval=false
1142 config_sh=''
1143 alldone=''
1144 error=''
1145 silent=''
1146 extractsh=''
1147 override=''
1148 knowitall=''
1149 rm -f optdef.sh
1150 cat >optdef.sh <<EOS
1151 $startsh
1152 EOS
1153
1154
1155 : option parsing
1156 while test $# -gt 0; do
1157         case "$1" in
1158         -d) shift; fastread=yes;;
1159         -e) shift; alldone=cont;;
1160         -f)
1161                 shift
1162                 cd ..
1163                 if test -r "$1"; then
1164                         config_sh="$1"
1165                 else
1166                         echo "$me: cannot read config file $1." >&2
1167                         error=true
1168                 fi
1169                 cd UU
1170                 shift;;
1171         -h) shift; error=true;;
1172         -r) shift; reuseval=true;;
1173         -s) shift; silent=true; realsilent=true;;
1174         -E) shift; alldone=exit;;
1175         -K) shift; knowitall=true;;
1176         -O) shift; override=true;;
1177         -S) shift; silent=true; extractsh=true;;
1178         -D)
1179                 shift
1180                 case "$1" in
1181                 *=)
1182                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1183                         echo "$me: ignoring -D $1" >&2
1184                         ;;
1185                 *=*) echo "$1" | \
1186                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1187                 *) echo "$1='define'" >> optdef.sh;;
1188                 esac
1189                 shift
1190                 ;;
1191         -U)
1192                 shift
1193                 case "$1" in
1194                 *=) echo "$1" >> optdef.sh;;
1195                 *=*)
1196                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1197                         echo "$me: ignoring -U $1" >&2
1198                         ;;
1199                 *) echo "$1='undef'" >> optdef.sh;;
1200                 esac
1201                 shift
1202                 ;;
1203         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1204                 exit 0;;
1205         --) break;;
1206         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1207         *) break;;
1208         esac
1209 done
1210
1211 case "$error" in
1212 true)
1213         cat >&2 <<EOM
1214 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1215                  [-U symbol] [-U symbol=]
1216   -d : use defaults for all answers.
1217   -e : go on without questioning past the production of config.sh.
1218   -f : specify an alternate default configuration file.
1219   -h : print this help message and exit (with an error status).
1220   -r : reuse C symbols value if possible (skips costly nm extraction).
1221   -s : silent mode, only echoes questions and essential information.
1222   -D : define symbol to have some value:
1223          -D symbol         symbol gets the value 'define'
1224          -D symbol=value   symbol gets the value 'value'
1225   -E : stop at the end of questions, after having produced config.sh.
1226   -K : do not use unless you know what you are doing.
1227   -O : let -D and -U override definitions from loaded configuration file.
1228   -S : perform variable substitutions on all .SH files (can mix with -f)
1229   -U : undefine symbol:
1230          -U symbol    symbol gets the value 'undef'
1231          -U symbol=   symbol gets completely empty
1232   -V : print version number and exit (with a zero status).
1233 EOM
1234         exit 1
1235         ;;
1236 esac
1237
1238 : Sanity checks
1239 case "$fastread$alldone" in
1240 yescont|yesexit) ;;
1241 *)
1242         if test ! -t 0; then
1243                 echo "Say 'sh Configure', not 'sh <Configure'"
1244                 exit 1
1245         fi
1246         ;;
1247 esac
1248
1249 exec 4>&1
1250 case "$silent" in
1251 true) exec 1>/dev/null;;
1252 esac
1253
1254 : run the defines and the undefines, if any, but leave the file out there...
1255 touch optdef.sh
1256 . ./optdef.sh
1257
1258 : set package name
1259 package=perl5
1260 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1261 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1262 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1263 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1264 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1265 esac
1266
1267 : Some greps do not return status, grrr.
1268 echo "grimblepritz" >grimble
1269 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1270         contains=contains
1271 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1272         contains=grep
1273 else
1274         contains=contains
1275 fi
1276 rm -f grimble
1277 : the following should work in any shell
1278 case "$contains" in
1279 contains*)
1280         echo " "
1281         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1282         cat >contains <<'EOSS'
1283 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1284 EOSS
1285 chmod +x contains
1286 esac
1287
1288 : Find the path to the source tree
1289 case "$src" in
1290 '') case "$0" in
1291     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1292     *)   src='.';;
1293     esac;;
1294 esac
1295 case "$src" in
1296 '')     src=/
1297         rsrc=/
1298         ;;
1299 /*) rsrc="$src";;
1300 *) rsrc="../$src";;
1301 esac
1302 if test -f $rsrc/Configure && \
1303         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1304 then
1305    : found it, so we are ok.
1306 else
1307         rsrc=''
1308         for src in . .. ../.. ../../.. ../../../..; do
1309                 if test -f ../$src/Configure && \
1310                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1311                 then
1312                         rsrc=../$src
1313                         break
1314                 fi
1315         done
1316 fi
1317 case "$rsrc" in
1318 '')
1319         cat <<EOM >&4
1320
1321 Sorry, I can't seem to locate the source dir for $package.  Please start
1322 Configure with an explicit path -- i.e. /some/path/Configure.
1323
1324 EOM
1325         exit 1
1326         ;;
1327 ../.)   rsrc='..';;
1328 *)
1329         echo " "
1330         echo "Sources for $package found in \"$src\"." >&4
1331         ;;
1332 esac
1333
1334 : script used to extract .SH files with variable substitutions
1335 cat >extract <<'EOS'
1336 CONFIGDOTSH=true
1337 echo "Doing variable substitutions on .SH files..."
1338 if test -f $src/MANIFEST; then
1339         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1340 else
1341         echo "(Looking for .SH files under the source directory.)"
1342         set x `(cd $src; find . -name "*.SH" -print)`
1343 fi
1344 shift
1345 case $# in
1346 0) set x `(cd $src; echo *.SH)`; shift;;
1347 esac
1348 if test ! -f $src/$1; then
1349         shift
1350 fi
1351 mkdir_p='
1352 name=$1;
1353 create="";
1354 while test $name; do
1355         if test ! -d "$name"; then
1356                 create="$name $create";
1357                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1358                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1359         else
1360                 name="";
1361         fi;
1362 done;
1363 for file in $create; do
1364         mkdir $file;
1365 done
1366 '
1367 for file in $*; do
1368         case "$src" in
1369         ".")
1370                 case "$file" in
1371                 */*)
1372                         dir=`expr X$file : 'X\(.*\)/'`
1373                         file=`expr X$file : 'X.*/\(.*\)'`
1374                         (cd $dir && . ./$file)
1375                         ;;
1376                 *)
1377                         . ./$file
1378                         ;;
1379                 esac
1380                 ;;
1381         *)
1382                 case "$file" in
1383                 */*)
1384                         dir=`expr X$file : 'X\(.*\)/'`
1385                         file=`expr X$file : 'X.*/\(.*\)'`
1386                         (set x $dir; shift; eval $mkdir_p)
1387                         sh <$src/$dir/$file
1388                         ;;
1389                 *)
1390                         sh <$src/$file
1391                         ;;
1392                 esac
1393                 ;;
1394         esac
1395 done
1396 if test -f $src/config_h.SH; then
1397         if test ! -f config.h; then
1398         : oops, they left it out of MANIFEST, probably, so do it anyway.
1399         . $src/config_h.SH
1400         fi
1401 fi
1402 EOS
1403
1404 : extract files and exit if asked to do so
1405 case "$extractsh" in
1406 true)
1407         case "$realsilent" in
1408         true) ;;
1409         *) exec 1>&4;;
1410         esac
1411         case "$config_sh" in
1412         '') config_sh='config.sh';;
1413         esac
1414         echo " "
1415         echo "Fetching answers from $config_sh..."
1416         cd ..
1417         . $config_sh
1418         test "$override" && . ./optdef.sh
1419         echo " "
1420         . UU/extract
1421         rm -rf UU
1422         echo "Done."
1423         exit 0
1424         ;;
1425 esac
1426
1427 : Eunice requires " " instead of "", can you believe it
1428 echo " "
1429 : Here we go...
1430 echo "Beginning of configuration questions for $package."
1431
1432 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1433
1434 : first determine how to suppress newline on echo command
1435 echo " "
1436 echo "Checking echo to see how to suppress newlines..."
1437 (echo "hi there\c" ; echo " ") >.echotmp
1438 if $contains c .echotmp >/dev/null 2>&1 ; then
1439         echo "...using -n."
1440         n='-n'
1441         c=''
1442 else
1443         cat <<'EOM'
1444 ...using \c
1445 EOM
1446         n=''
1447         c='\c'
1448 fi
1449 echo $n "The star should be here-->$c"
1450 echo '*'
1451 rm -f .echotmp
1452
1453 : Now test for existence of everything in MANIFEST
1454 echo " "
1455 if test -f $rsrc/MANIFEST; then
1456         echo "First let's make sure your kit is complete.  Checking..." >&4
1457         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1458         rm -f missing
1459         tmppwd=`pwd`
1460         for filelist in x??; do
1461                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1462         done
1463         if test -s missing; then
1464                 cat missing >&4
1465                 cat >&4 <<'EOM'
1466
1467 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1468
1469 You have the option of continuing the configuration process, despite the
1470 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1471 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1472 and contact the author (perlbug@perl.com).
1473
1474 EOM
1475                 echo $n "Continue? [n] $c" >&4
1476                 read ans
1477                 case "$ans" in
1478                 y*)
1479                         echo "Continuing..." >&4
1480                         rm -f missing
1481                         ;;
1482                 *)
1483                         echo "ABORTING..." >&4
1484                         kill $$
1485                         ;;
1486                 esac
1487         else
1488                 echo "Looks good..."
1489         fi
1490 else
1491         echo "There is no MANIFEST file.  I hope your kit is complete !"
1492 fi
1493 rm -f missing x??
1494
1495 echo " "
1496 : Find the appropriate value for a newline for tr
1497 if test -n "$DJGPP"; then
1498        trnl='\012'
1499 fi
1500 if test X"$trnl" = X; then
1501         case "`echo foo|tr '\n' x 2>/dev/null`" in
1502         foox) trnl='\n' ;;
1503         esac
1504 fi
1505 if test X"$trnl" = X; then
1506         case "`echo foo|tr '\012' x 2>/dev/null`" in
1507         foox) trnl='\012' ;;
1508         esac
1509 fi
1510 if test X"$trnl" = X; then
1511         cat <<EOM >&2
1512
1513 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1514
1515 EOM
1516         exit 1
1517 fi
1518
1519 : compute the number of columns on the terminal for proper question formatting
1520 case "$COLUMNS" in
1521 '') COLUMNS='80';;
1522 esac
1523
1524 : set up the echo used in my read
1525 myecho="case \"\$xxxm\" in
1526 '') echo $n \"\$rp $c\" >&4;;
1527 *) case \"\$rp\" in
1528         '') echo $n \"[\$xxxm] $c\";;
1529         *)
1530                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1531                         echo \"\$rp\" >&4
1532                         echo $n \"[\$xxxm] $c\" >&4
1533                 else
1534                         echo $n \"\$rp [\$xxxm] $c\" >&4
1535                 fi
1536                 ;;
1537         esac;;
1538 esac"
1539
1540 : now set up to do reads with possible shell escape and default assignment
1541 cat <<EOSC >myread
1542 $startsh
1543 xxxm=\$dflt
1544 $myecho
1545 ans='!'
1546 case "\$fastread" in
1547 yes) case "\$dflt" in
1548         '') ;;
1549         *) ans='';
1550                 case "\$silent-\$rp" in
1551                 true-) ;;
1552                 *) echo " " >&4;;
1553                 esac;;
1554         esac;;
1555 *) case "\$silent" in
1556         true) case "\$rp" in
1557                 '') ans='';;
1558                 esac;;
1559         esac;;
1560 esac
1561 while expr "X\$ans" : "X!" >/dev/null; do
1562         read answ
1563         set x \$xxxm
1564         shift
1565         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1566         case  "\$answ" in
1567         "!")
1568                 sh 1>&4
1569                 echo " "
1570                 $myecho
1571                 ;;
1572         !*)
1573                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1574                 shift
1575                 sh 1>&4 -c "\$*"
1576                 echo " "
1577                 $myecho
1578                 ;;
1579         "\$ans")
1580                 case "\$ans" in
1581                 \\&*)
1582                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1583                         shift
1584                         case "\$1" in
1585                         -d)
1586                                 fastread=yes
1587                                 echo "(OK, I'll run with -d after this question.)" >&4
1588                                 ;;
1589                         -*)
1590                                 echo "*** Sorry, \$1 not supported yet." >&4
1591                                 ;;
1592                         esac
1593                         $myecho
1594                         ans=!
1595                         ;;
1596                 esac;;
1597         *)
1598                 case "\$aok" in
1599                 y)
1600                         echo "*** Substitution done -- please confirm."
1601                         xxxm="\$ans"
1602                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1603                         xxxm="\$ans"
1604                         ans=!
1605                         ;;
1606                 *)
1607                         echo "*** Error -- try again."
1608                         ans=!
1609                         ;;
1610                 esac
1611                 $myecho
1612                 ;;
1613         esac
1614         case "\$ans\$xxxm\$nostick" in
1615         '')
1616                 ans=!
1617                 $myecho
1618                 ;;
1619         esac
1620 done
1621 case "\$ans" in
1622 '') ans="\$xxxm";;
1623 esac
1624 EOSC
1625
1626 : create .config dir to save info across Configure sessions
1627 test -d ../.config || mkdir ../.config
1628 cat >../.config/README <<EOF
1629 This directory created by Configure to save information that should
1630 persist across sessions for $package.
1631
1632 You may safely delete it if you wish.
1633 EOF
1634
1635 : general instructions
1636 needman=true
1637 firsttime=true
1638 user=`(logname) 2>/dev/null`
1639 case "$user" in
1640 '') user=`whoami 2>&1`;;
1641 esac
1642 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1643         firsttime=false
1644         echo " "
1645         rp='Would you like to see the instructions?'
1646         dflt=n
1647         . ./myread
1648         case "$ans" in
1649         [yY]*) ;;
1650         *) needman=false;;
1651         esac
1652 fi
1653 if $needman; then
1654         cat <<EOH
1655
1656 This installation shell script will examine your system and ask you questions
1657 to determine how the perl5 package should be installed. If you get
1658 stuck on a question, you may use a ! shell escape to start a subshell or
1659 execute a command.  Many of the questions will have default answers in square
1660 brackets; typing carriage return will give you the default.
1661
1662 On some of the questions which ask for file or directory names you are allowed
1663 to use the ~name construct to specify the login directory belonging to "name",
1664 even if you don't have a shell which knows about that.  Questions where this is
1665 allowed will be marked "(~name ok)".
1666
1667 EOH
1668         rp=''
1669         dflt='Type carriage return to continue'
1670         . ./myread
1671         cat <<'EOH'
1672
1673 The prompter used in this script allows you to use shell variables and
1674 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1675 in the default answer, as if the default line was a set of arguments given to a
1676 script shell.  This means you may also use $* to repeat the whole default line,
1677 so you do not have to re-type everything to add something to the default.
1678
1679 Everytime there is a substitution, you will have to confirm.  If there is an
1680 error (e.g. an unmatched backtick), the default answer will remain unchanged
1681 and you will be prompted again.
1682
1683 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1684 the questions and use the computed defaults (or the previous answers if there
1685 was already a config.sh file). Type 'Configure -h' for a list of options.
1686 You may also start interactively and then answer '& -d' at any prompt to turn
1687 on the non-interactive behaviour for the remainder of the execution.
1688
1689 EOH
1690         . ./myread
1691         cat <<EOH
1692
1693 Much effort has been expended to ensure that this shell script will run on any
1694 Unix system.  If despite that it blows up on yours, your best bet is to edit
1695 Configure and run it again.  If you can't run Configure for some reason,
1696 you'll have to generate a config.sh file by hand.  Whatever problems you
1697 have, let me (perlbug@perl.com) know how I blew it.
1698
1699 This installation script affects things in two ways:
1700
1701 1) it may do direct variable substitutions on some of the files included
1702    in this kit.
1703 2) it builds a config.h file for inclusion in C programs.  You may edit
1704    any of these files as the need arises after running this script.
1705
1706 If you make a mistake on a question, there is no easy way to back up to it
1707 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1708 files.  Configure will offer to let you do this before it runs the SH files.
1709
1710 EOH
1711         dflt='Type carriage return to continue'
1712         . ./myread
1713         case "$firsttime" in
1714         true) echo $user >>../.config/instruct;;
1715         esac
1716 fi
1717
1718 : find out where common programs are
1719 echo " "
1720 echo "Locating common programs..." >&4
1721 cat <<EOSC >loc
1722 $startsh
1723 case \$# in
1724 0) exit 1;;
1725 esac
1726 thing=\$1
1727 shift
1728 dflt=\$1
1729 shift
1730 for dir in \$*; do
1731         case "\$thing" in
1732         .)
1733         if test -d \$dir/\$thing; then
1734                 echo \$dir
1735                 exit 0
1736         fi
1737         ;;
1738         *)
1739         for thisthing in \$dir/\$thing; do
1740                 : just loop through to pick last item
1741         done
1742         if test -f \$thisthing; then
1743                 echo \$thisthing
1744                 exit 0
1745         elif test -f \$dir/\$thing.exe; then
1746                 if test -n "$DJGPP"; then
1747                         echo \$dir/\$thing.exe
1748                 else
1749                         : on Eunice apparently
1750                         echo \$dir/\$thing
1751                 fi
1752                 exit 0
1753         fi
1754         ;;
1755         esac
1756 done
1757 echo \$dflt
1758 exit 1
1759 EOSC
1760 chmod +x loc
1761 $eunicefix loc
1762 loclist="
1763 awk
1764 cat
1765 comm
1766 cp
1767 echo
1768 expr
1769 grep
1770 ls
1771 make
1772 mkdir
1773 rm
1774 sed
1775 sort
1776 touch
1777 tr
1778 uniq
1779 "
1780 trylist="
1781 Mcc
1782 ar
1783 byacc
1784 cpp
1785 csh
1786 date
1787 egrep
1788 gzip
1789 less
1790 ln
1791 more
1792 nm
1793 nroff
1794 pg
1795 test
1796 uname
1797 zip
1798 "
1799 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1800 pth="$pth /lib /usr/lib"
1801 for file in $loclist; do
1802         eval xxx=\$$file
1803         case "$xxx" in
1804         /*|?:[\\/]*)
1805                 if test -f "$xxx"; then
1806                         : ok
1807                 else
1808                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1809                         xxx=`./loc $file $file $pth`
1810                 fi
1811                 ;;
1812         '') xxx=`./loc $file $file $pth`;;
1813         *) xxx=`./loc $xxx $xxx $pth`;;
1814         esac
1815         eval $file=$xxx
1816         eval _$file=$xxx
1817         case "$xxx" in
1818         /*)
1819                 echo $file is in $xxx.
1820                 ;;
1821         ?:[\\/]*)
1822                 echo $file is in $xxx.
1823                 ;;
1824         *)
1825                 echo "I don't know where '$file' is, and my life depends on it." >&4
1826                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1827                 exit 1
1828                 ;;
1829         esac
1830 done
1831 echo " "
1832 echo "Don't worry if any of the following aren't found..."
1833 say=offhand
1834 for file in $trylist; do
1835         eval xxx=\$$file
1836         case "$xxx" in
1837         /*|?:[\\/]*)
1838                 if test -f "$xxx"; then
1839                         : ok
1840                 else
1841                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1842                         xxx=`./loc $file $file $pth`
1843                 fi
1844                 ;;
1845         '') xxx=`./loc $file $file $pth`;;
1846         *) xxx=`./loc $xxx $xxx $pth`;;
1847         esac
1848         eval $file=$xxx
1849         eval _$file=$xxx
1850         case "$xxx" in
1851         /*)
1852                 echo $file is in $xxx.
1853                 ;;
1854         ?:[\\/]*)
1855                 echo $file is in $xxx.
1856                 ;;
1857         *)
1858                 echo "I don't see $file out there, $say."
1859                 say=either
1860                 ;;
1861         esac
1862 done
1863 case "$egrep" in
1864 egrep)
1865         echo "Substituting grep for egrep."
1866         egrep=$grep
1867         ;;
1868 esac
1869 case "$ln" in
1870 ln)
1871         echo "Substituting cp for ln."
1872         ln=$cp
1873         ;;
1874 esac
1875 case "$test" in
1876 test)
1877         echo "Hopefully test is built into your sh."
1878         ;;
1879 *)
1880         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1881                 echo "Using the test built into your sh."
1882                 test=test
1883                 _test=test
1884         fi
1885         ;;
1886 esac
1887 case "$echo" in
1888 echo)
1889         echo "Hopefully echo is built into your sh."
1890         ;;
1891 '') ;;
1892 *)
1893         echo " "
1894 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1895         $echo $n "hi there$c" >foo1
1896         echo $n "hi there$c" >foo2
1897         if cmp foo1 foo2 >/dev/null 2>&1; then
1898                 echo "They are compatible.  In fact, they may be identical."
1899         else
1900                 case "$n" in
1901                 '-n') n='' c='\c';;
1902                 *) n='-n' c='';;
1903                 esac
1904                 cat <<FOO
1905 They are not compatible!  You are probably running ksh on a non-USG system.
1906 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1907 have echo built in and we may have to run some Bourne shell scripts.  That
1908 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1909
1910 FOO
1911                 $echo $n "The star should be here-->$c"
1912                 $echo "*"
1913         fi
1914         $rm -f foo1 foo2
1915         ;;
1916 esac
1917
1918 : determine whether symbolic links are supported
1919 echo " "
1920 $touch blurfl
1921 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1922         echo "Symbolic links are supported." >&4
1923         lns="$ln -s"
1924 else
1925         echo "Symbolic links are NOT supported." >&4
1926         lns="$ln"
1927 fi
1928 $rm -f blurfl sym
1929
1930 : see whether [:lower:] and [:upper:] are supported character classes
1931 echo " "
1932 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1933 ABYZ)
1934         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1935         up='[:upper:]'
1936         low='[:lower:]'
1937         ;;
1938 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1939         # (0xc9 and 0xd1), therefore that is a nice testing point.
1940         if test "X$up" = X -o "X$low" = X; then
1941             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1942             ij) up='[A-Z]'
1943                 low='[a-z]'
1944                 ;;
1945             esac
1946         fi
1947         if test "X$up" = X -o "X$low" = X; then
1948             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1949             ij) up='A-Z'
1950                 low='a-z'
1951                 ;;
1952             esac
1953         fi
1954         if test "X$up" = X -o "X$low" = X; then
1955             case "`echo IJ | od -x 2>/dev/null`" in
1956             *C9D1*|*c9d1*)
1957                 echo "Hey, this might be EBCDIC." >&4
1958                 if test "X$up" = X -o "X$low" = X; then
1959                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1960                     ij) up='[A-IJ-RS-Z]'
1961                         low='[a-ij-rs-z]'
1962                         ;;
1963                     esac
1964                 fi
1965                 if test "X$up" = X -o "X$low" = X; then
1966                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1967                     ij) up='A-IJ-RS-Z'
1968                         low='a-ij-rs-z'
1969                         ;;
1970                     esac
1971                 fi
1972                 ;;
1973             esac
1974         fi
1975 esac
1976 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1977 ij)
1978     echo "Using $up and $low to convert case." >&4
1979     ;;
1980 *)
1981     echo "I don't know how to translate letters from upper to lower case." >&4
1982     echo "Your tr is not acting any way I know of." >&4
1983     exit 1
1984     ;;
1985 esac
1986 : set up the translation script tr, must be called with ./tr of course
1987 cat >tr <<EOSC
1988 $startsh
1989 case "\$1\$2" in
1990 '[A-Z][a-z]') exec $tr '$up' '$low';;
1991 '[a-z][A-Z]') exec $tr '$low' '$up';;
1992 esac
1993 exec $tr "\$@"
1994 EOSC
1995 chmod +x tr
1996 $eunicefix tr
1997
1998 : Try to determine whether config.sh was made on this system
1999 case "$config_sh" in
2000 '')
2001 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2002 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2003 # because the A-Z/a-z are not consecutive.
2004 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2005         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2006 newmyuname="$myuname"
2007 dflt=n
2008 case "$knowitall" in
2009 '')
2010         if test -f ../config.sh; then
2011                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2012                         eval "`grep myuname= ../config.sh`"
2013                 fi
2014                 if test "X$myuname" = "X$newmyuname"; then
2015                         dflt=y
2016                 fi
2017         fi
2018         ;;
2019 *) dflt=y;;
2020 esac
2021
2022 : Get old answers from old config file if Configure was run on the
2023 : same system, otherwise use the hints.
2024 hint=default
2025 cd ..
2026 if test -f config.sh; then
2027         echo " "
2028         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2029         . UU/myread
2030         case "$ans" in
2031         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2032         *)  echo "Fetching default answers from your old config.sh file..." >&4
2033                 tmp_n="$n"
2034                 tmp_c="$c"
2035                 tmp_sh="$sh"
2036                 . ./config.sh
2037                 cp config.sh UU
2038                 n="$tmp_n"
2039                 c="$tmp_c"
2040                 : Older versions did not always set $sh.  Catch re-use of such
2041                 : an old config.sh.
2042                 case "$sh" in
2043                 '') sh="$tmp_sh" ;;
2044                 esac
2045                 hint=previous
2046                 ;;
2047         esac
2048 fi
2049 if test ! -f config.sh; then
2050         $cat <<EOM
2051
2052 First time through, eh?  I have some defaults handy for some systems
2053 that need some extra help getting the Configure answers right:
2054
2055 EOM
2056         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2057         dflt=''
2058         : Half the following guesses are probably wrong... If you have better
2059         : tests or hints, please send them to perlbug@perl.com
2060         : The metaconfig authors would also appreciate a copy...
2061         $test -f /irix && osname=irix
2062         $test -f /xenix && osname=sco_xenix
2063         $test -f /dynix && osname=dynix
2064         $test -f /dnix && osname=dnix
2065         $test -f /lynx.os && osname=lynxos
2066         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2067         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2068         $test -f /bin/mips && /bin/mips && osname=mips
2069         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2070                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2071         $test -d /usr/apollo/bin && osname=apollo
2072         $test -f /etc/saf/_sactab && osname=svr4
2073         $test -d /usr/include/minix && osname=minix
2074         if $test -d /MachTen -o -d /MachTen_Folder; then
2075                 osname=machten
2076                 if $test -x /sbin/version; then
2077                         osvers=`/sbin/version | $awk '{print $2}' |
2078                         $sed -e 's/[A-Za-z]$//'`
2079                 elif $test -x /usr/etc/version; then
2080                         osvers=`/usr/etc/version | $awk '{print $2}' |
2081                         $sed -e 's/[A-Za-z]$//'`
2082                 else
2083                         osvers="$2.$3"
2084                 fi
2085         fi
2086        $test -f /sys/posix.dll &&
2087                $test -f /usr/bin/what &&
2088                set X `/usr/bin/what /sys/posix.dll` &&
2089                $test "$3" = UWIN &&
2090                osname=uwin &&
2091                osvers="$5"
2092         if $test -f $uname; then
2093                 set X $myuname
2094                 shift
2095
2096                 case "$5" in
2097                 fps*) osname=fps ;;
2098                 mips*)
2099                         case "$4" in
2100                         umips) osname=umips ;;
2101                         *) osname=mips ;;
2102                         esac;;
2103                 [23]100) osname=mips ;;
2104                 next*) osname=next ;;
2105                 i386*)
2106                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2107                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2108                                 osname='sco'
2109                                 osvers=$tmp
2110                         elif $test -f /etc/kconfig; then
2111                                 osname=isc
2112                                 if test "$lns" = "$ln -s"; then
2113                                         osvers=4
2114                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2115                                         osvers=3
2116                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2117                                         osvers=2
2118                                 fi
2119                         fi
2120                         tmp=''
2121                         ;;
2122                 pc*)
2123                         if test -n "$DJGPP"; then
2124                                 osname=dos
2125                                 osvers=djgpp
2126                         fi
2127                         ;;
2128                 esac
2129
2130                 case "$1" in
2131                 aix) osname=aix
2132                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2133                         case "$tmp" in
2134                         'not found') osvers="$4"."$3" ;;
2135                         '<3240'|'<>3240') osvers=3.2.0 ;;
2136                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2137                         '=3250'|'>3250') osvers=3.2.5 ;;
2138                         *) osvers=$tmp;;
2139                         esac
2140                         ;;
2141                 *dc.osx) osname=dcosx
2142                         osvers="$3"
2143                         ;;
2144                 dnix) osname=dnix
2145                         osvers="$3"
2146                         ;;
2147                 domainos) osname=apollo
2148                         osvers="$3"
2149                         ;;
2150                 dgux) osname=dgux 
2151                         osvers="$3"
2152                         ;;
2153                 dynixptx*) osname=dynixptx
2154                         osvers=`echo "$4"|sed 's/^v//'`
2155                         ;;
2156                 freebsd) osname=freebsd 
2157                         osvers="$3" ;;
2158                 genix) osname=genix ;;
2159                 hp*) osname=hpux 
2160                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2161                         ;;
2162                 irix*) osname=irix
2163                         case "$3" in
2164                         4*) osvers=4 ;;
2165                         5*) osvers=5 ;;
2166                         *)      osvers="$3" ;;
2167                         esac
2168                         ;;
2169                 linux) osname=linux
2170                         case "$3" in
2171                         *)      osvers="$3" ;;
2172                         esac
2173                         ;;
2174                 MiNT) osname=mint
2175                         ;;
2176                 netbsd*) osname=netbsd
2177                         osvers="$3"
2178                         ;;
2179                 news-os) osvers="$3"
2180                         case "$3" in
2181                         4*) osname=newsos4 ;;
2182                         *) osname=newsos ;;
2183                         esac
2184                         ;;
2185                 bsd386) osname=bsd386
2186                         osvers=`$uname -r`
2187                         ;;
2188                 POSIX-BC | posix-bc ) osname=posix-bc
2189                         osvers="$3"
2190                         ;;
2191                 powerux | power_ux | powermax_os | powermaxos | \
2192                 powerunix | power_unix) osname=powerux
2193                         osvers="$3"
2194                         ;;
2195                 next*) osname=next ;;
2196                 solaris) osname=solaris
2197                         case "$3" in
2198                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2199                         *)      osvers="$3" ;;
2200                         esac
2201                         ;;
2202                 sunos) osname=sunos
2203                         case "$3" in
2204                         5*) osname=solaris
2205                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2206                         *)      osvers="$3" ;;
2207                         esac
2208                         ;;
2209                 titanos) osname=titanos
2210                         case "$3" in
2211                         1*) osvers=1 ;;
2212                         2*) osvers=2 ;;
2213                         3*) osvers=3 ;;
2214                         4*) osvers=4 ;;
2215                         *)      osvers="$3" ;;
2216                         esac
2217                         ;;
2218                 ultrix) osname=ultrix
2219                         osvers="$3"
2220                         ;;
2221                 osf1|mls+)      case "$5" in
2222                                 alpha)
2223                                         osname=dec_osf
2224                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2225                                         ;;
2226                         hp*)    osname=hp_osf1  ;;
2227                         mips)   osname=mips_osf1 ;;
2228                         esac
2229                         ;;
2230                 uts) osname=uts 
2231                         osvers="$3"
2232                         ;;
2233                 qnx) osname=qnx
2234                         osvers="$4"
2235                         ;;
2236                 $2) case "$osname" in
2237                         *isc*) ;;
2238                         *freebsd*) ;;
2239                         svr*)
2240                                 : svr4.x or possibly later
2241                                 case "svr$3" in 
2242                                 ${osname}*)
2243                                         osname=svr$3
2244                                         osvers=$4
2245                                         ;;
2246                                 esac
2247                                 case "$osname" in
2248                                 svr4.0)
2249                                         : Check for ESIX
2250                                         if test -f /stand/boot ; then
2251                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2252                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2253                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2254                                                         if test -n "$isesix"; then
2255                                                                 osname=esix4
2256                                                         fi
2257                                                 fi
2258                                         fi
2259                                         ;;
2260                                 esac
2261                                 ;;
2262                         *)      if test -f /etc/systemid; then
2263                                         osname=sco
2264                                         set `echo $3 | $sed 's/\./ /g'` $4
2265                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2266                                                 osvers=$1.$2.$3
2267                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2268                                                 osvers=$1.$2
2269                                         elif $test -f $src/hints/sco_$1.sh; then
2270                                                 osvers=$1
2271                                         fi
2272                                 else
2273                                         case "$osname" in
2274                                         '') : Still unknown.  Probably a generic Sys V.
2275                                                 osname="sysv"
2276                                                 osvers="$3"
2277                                                 ;;
2278                                         esac
2279                                 fi
2280                                 ;;
2281                         esac
2282                         ;;
2283                 *)      case "$osname" in
2284                         '') : Still unknown.  Probably a generic BSD.
2285                                 osname="$1"
2286                                 osvers="$3"
2287                                 ;;
2288                         esac
2289                         ;;
2290                 esac
2291         else
2292                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2293                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2294                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2295                                 osname=news_os
2296                         fi
2297                         $rm -f UU/kernel.what
2298                 elif test -d c:/.; then
2299                         set X $myuname
2300                         osname=os2
2301                         osvers="$5"
2302                 fi
2303         fi
2304         
2305         : Now look for a hint file osname_osvers, unless one has been
2306         : specified already.
2307         case "$hintfile" in
2308         ''|' ')
2309                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2310                 : Also try without trailing minor version numbers.
2311                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2312                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2313                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2314                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2315                 case "$file" in
2316                 '') dflt=none ;;
2317                 *)  case "$osvers" in
2318                         '') dflt=$file
2319                                 ;;
2320                         *)  if $test -f $src/hints/$file.sh ; then
2321                                         dflt=$file
2322                                 elif $test -f $src/hints/$xfile.sh ; then
2323                                         dflt=$xfile
2324                                 elif $test -f $src/hints/$xxfile.sh ; then
2325                                         dflt=$xxfile
2326                                 elif $test -f $src/hints/$xxxfile.sh ; then
2327                                         dflt=$xxxfile
2328                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2329                                         dflt=$xxxxfile
2330                                 elif $test -f "$src/hints/${osname}.sh" ; then
2331                                         dflt="${osname}"
2332                                 else
2333                                         dflt=none
2334                                 fi
2335                                 ;;
2336                         esac
2337                         ;;
2338                 esac
2339                 if $test -f Policy.sh ; then
2340                         case "$dflt" in
2341                         *Policy*) ;;
2342                         none) dflt="Policy" ;;
2343                         *) dflt="Policy $dflt" ;;
2344                         esac
2345                 fi
2346                 ;;
2347         *)
2348                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2349                 ;;
2350         esac
2351
2352         if $test -f Policy.sh ; then
2353                 $cat <<EOM
2354
2355 There's also a Policy hint file available, which should make the
2356 site-specific (policy) questions easier to answer.
2357 EOM
2358
2359         fi
2360
2361         $cat <<EOM
2362
2363 You may give one or more space-separated answers, or "none" if appropriate.
2364 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2365 is a good thing.  DO NOT give a wrong version.
2366
2367 EOM
2368
2369         rp="Which of these apply, if any?"
2370         . UU/myread
2371         tans=$ans
2372         for file in $tans; do
2373                 if $test X$file = XPolicy -a -f Policy.sh; then
2374                         . Policy.sh
2375                         $cat Policy.sh >> UU/config.sh
2376                 elif $test -f $src/hints/$file.sh; then
2377                         . $src/hints/$file.sh
2378                         $cat $src/hints/$file.sh >> UU/config.sh
2379                 elif $test X$tans = X -o X$tans = Xnone ; then
2380                         : nothing
2381                 else
2382                         : Give one chance to correct a possible typo.
2383                         echo "$file.sh does not exist"
2384                         dflt=$file
2385                         rp="hint to use instead?"
2386                         . UU/myread
2387                         for file in $ans; do
2388                                 if $test -f "$src/hints/$file.sh"; then
2389                                         . $src/hints/$file.sh
2390                                         $cat $src/hints/$file.sh >> UU/config.sh
2391                                 elif $test X$ans = X -o X$ans = Xnone ; then
2392                                         : nothing
2393                                 else
2394                                         echo "$file.sh does not exist -- ignored."
2395                                 fi
2396                         done
2397                 fi
2398         done
2399
2400         hint=recommended
2401         : Remember our hint file for later.
2402         if $test -f "$src/hints/$file.sh" ; then
2403                 hintfile="$file"
2404         else
2405                 hintfile=''
2406         fi
2407 fi
2408 cd UU
2409 ;;
2410 *)
2411         echo " "
2412         echo "Fetching default answers from $config_sh..." >&4
2413         tmp_n="$n"
2414         tmp_c="$c"
2415         cd ..
2416         cp $config_sh config.sh 2>/dev/null
2417         chmod +w config.sh
2418         . ./config.sh
2419         cd UU
2420         cp ../config.sh .
2421         n="$tmp_n"
2422         c="$tmp_c"
2423         hint=previous
2424         ;;
2425 esac
2426 test "$override" && . ./optdef.sh
2427 myuname="$newmyuname"
2428
2429 : Restore computed paths
2430 for file in $loclist $trylist; do
2431         eval $file="\$_$file"
2432 done
2433
2434 cat << EOM
2435
2436 Configure uses the operating system name and version to set some defaults.
2437 The default value is probably right if the name rings a bell. Otherwise,
2438 since spelling matters for me, either accept the default or answer "none"
2439 to leave it blank.
2440
2441 EOM
2442 case "$osname" in
2443         ''|' ')
2444                 case "$hintfile" in
2445                 ''|' '|none) dflt=none ;;
2446                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2447                 esac
2448                 ;;
2449         *) dflt="$osname" ;;
2450 esac
2451 rp="Operating system name?"
2452 . ./myread
2453 case "$ans" in
2454 none)  osname='' ;;
2455 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2456 esac
2457 echo " "
2458 case "$osvers" in
2459         ''|' ')
2460                 case "$hintfile" in
2461                 ''|' '|none) dflt=none ;;
2462                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2463                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2464                         case "$dflt" in
2465                         ''|' ') dflt=none ;;
2466                         esac
2467                         ;;
2468                 esac
2469                 ;;
2470         *) dflt="$osvers" ;;
2471 esac
2472 rp="Operating system version?"
2473 . ./myread
2474 case "$ans" in
2475 none)  osvers='' ;;
2476 *) osvers="$ans" ;;
2477 esac
2478
2479 : who configured the system
2480 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2481 cf_by=`(logname) 2>/dev/null`
2482 case "$cf_by" in
2483 "")
2484         cf_by=`(whoami) 2>/dev/null`
2485         case "$cf_by" in
2486         "") cf_by=unknown ;;
2487         esac ;;
2488 esac
2489
2490 : set up the script used to warn in case of inconsistency
2491 cat <<EOS >whoa
2492 $startsh
2493 EOS
2494 cat <<'EOSC' >>whoa
2495 dflt=y
2496 echo " "
2497 echo "*** WHOA THERE!!! ***" >&4
2498 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2499 rp="    Keep the $hint value?"
2500 . ./myread
2501 case "$ans" in
2502 y) td=$was; tu=$was;;
2503 esac
2504 EOSC
2505
2506 : function used to set $1 to $val
2507 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2508 case "$val$was" in
2509 $define$undef) . ./whoa; eval "$var=\$td";;
2510 $undef$define) . ./whoa; eval "$var=\$tu";;
2511 *) eval "$var=$val";;
2512 esac'
2513
2514 cat <<EOM
2515
2516 Perl can be built to take advantage of threads, on some systems.
2517 To do so, Configure must be run with -Dusethreads.
2518
2519 Note that threading is a highly experimental feature, and
2520 some known race conditions still remain.  If you choose to try
2521 it, be very sure to not actually deploy it for production
2522 purposes.  README.threads has more details, and is required
2523 reading if you enable threads.
2524 EOM
2525 case "$usethreads" in
2526 $define|true|[yY]*)     dflt='y';;
2527 *) dflt='n';;
2528 esac
2529 rp='Build a threading Perl?'
2530 . ./myread
2531 case "$ans" in
2532 y|Y)    val="$define" ;;     
2533 *)      val="$undef" ;;
2534 esac
2535 set usethreads
2536 eval $setvar 
2537
2538 case "$d_oldpthreads" in
2539 '')     : Configure tests would be welcome here.  For now, assume undef.
2540         val="$undef" ;;
2541 *)      val="$d_oldpthreads" ;;
2542 esac
2543 set d_oldpthreads
2544 eval $setvar
2545
2546
2547 case "$usethreads" in
2548 "$define"|true|[yY]*)
2549 : Look for a hint-file generated 'call-back-unit'.  If the
2550 : user has specified that a threading perl is to be built,
2551 : we may need to set or change some other defaults.
2552         if $test -f usethreads.cbu; then
2553                 . ./usethreads.cbu
2554         fi
2555         case "$osname" in
2556         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2557                 # Known thread-capable platforms.
2558                 ;;
2559         *)
2560                 cat >&4 <<EOM
2561 $osname is not known to support threads.
2562 Please let perlbug@perl.com know how to do that.
2563
2564 Cannot continue, aborting.
2565 EOM
2566                 exit 1
2567         ;;
2568         esac # $osname
2569     ;;
2570 esac # $usethreads
2571
2572 cat <<EOM
2573
2574 Perl can be built so that multiple Perl interpreters can coexist
2575 within the same Perl executable.  To do so, Configure must be run with
2576 -Dusemultiplicity.
2577
2578 Normally you do not need this and you should answer no.
2579
2580 EOM
2581 case "$usemultiplicity" in
2582 $define|true|[yY]*)     dflt='y';;
2583 *) dflt='n';;
2584 esac
2585 rp='Build Perl for multiplicity?'
2586 . ./myread
2587 case "$ans" in
2588 y|Y)    val="$define" ;;     
2589 *)      val="$undef" ;;
2590 esac
2591 set usemultiplicity
2592 eval $setvar 
2593
2594 cat <<EOM
2595
2596 Perl can be built to take advantage of explicit 64-bit interfaces,
2597 on some systems.  To do so, Configure must be run with -Duse64bits.
2598
2599 If this doesn't make any sense to you, just accept the default 'n'.
2600 EOM
2601 case "$use64bits" in
2602 $define|true|[yY]*)     dflt='y';;
2603 *) dflt='n';;
2604 esac
2605 rp='Try to use explicit 64-bit interfaces, if available?'
2606 . ./myread
2607 case "$ans" in
2608 y|Y) 
2609         val="$define"
2610         ;;     
2611 *)      
2612         val="$undef"
2613         ;;
2614 esac
2615 set use64bits
2616 eval $setvar
2617
2618 case "$archname64" in
2619 '') archname64='' ;;    # not a typo
2620 esac
2621
2622 case "$use64bits" in
2623 "$define"|true|[yY]*)
2624 : Look for a hint-file generated 'call-back-unit'.  If the
2625 : user has specified that a threading perl is to be built,
2626 : we may need to set or change some other defaults.
2627         if $test -f use64bits.cbu; then
2628                 . ./use64bits.cbu
2629         fi
2630         case "$osname" in
2631         aix|dec_osf|hpux|irix|solaris|unicos)
2632                 # Known 64-bit capable platforms.
2633                 ;;
2634         *)
2635                 cat >&4 <<EOM
2636 $osname is not known to support 64-bit interfaces.
2637 Please let perlbug@perl.com know how to do that.
2638
2639 Cannot continue, aborting.
2640 EOM
2641                 exit 1
2642                 ;;
2643         esac
2644         ;;
2645 esac
2646
2647 : determine the architecture name
2648 echo " "
2649 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2650         tarch=`arch`"-$osname"
2651 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2652         if uname -m > tmparch 2>&1 ; then
2653                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2654                         -e 's/$/'"-$osname/" tmparch`
2655         else
2656                 tarch="$osname"
2657         fi
2658         $rm -f tmparch
2659 else
2660         tarch="$osname"
2661 fi
2662 case "$myarchname" in
2663 ''|"$tarch") ;;
2664 *)
2665         echo "(Your architecture name used to be $myarchname.)"
2666         archname=''
2667         ;;
2668 esac
2669 myarchname="$tarch"
2670 case "$archname" in
2671 '') dflt="$tarch";;
2672 *) dflt="$archname";;
2673 esac
2674 rp='What is your architecture name'
2675 . ./myread
2676 archname="$ans"
2677 case "$usethreads" in
2678 $define)
2679         echo "Threads selected." >&4
2680         case "$archname" in
2681         *-thread*) echo "...and architecture name already has -thread." >&4
2682                 ;;
2683         *)      archname="$archname-thread"
2684                 echo "...setting architecture name to $archname." >&4
2685                 ;;
2686         esac
2687         ;;
2688 esac
2689 case "$usemultiplicity" in
2690 $define)
2691         echo "Multiplicity selected." >&4
2692         case "$archname" in
2693         *-multi*) echo "...and architecture name already has -multi." >&4
2694                 ;;
2695         *)      archname="$archname-multi"
2696                 echo "...setting architecture name to $archname." >&4
2697                 ;;
2698         esac
2699         ;;
2700 esac
2701 case "$use64bits" in
2702 $define)
2703         echo "Explicit 64-bitness selected." >&4
2704         case "$archname64" in
2705         '')
2706                 ;;
2707         *)
2708                 case "$archname" in
2709                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2710                         ;;
2711                 *)      archname="$archname-$archname64"
2712                         echo "...setting architecture name to $archname." >&4
2713                         ;;
2714                 esac
2715                 ;;
2716         esac
2717 esac
2718
2719 : is AFS running?
2720 echo " "
2721 case "$afs" in
2722 $define|true)   afs=true ;;
2723 $undef|false)   afs=false ;;
2724 *)      if test -d /afs; then
2725                 afs=true
2726         else
2727                 afs=false
2728         fi
2729         ;;
2730 esac
2731 if $afs; then
2732         echo "AFS may be running... I'll be extra cautious then..." >&4
2733 else
2734         echo "AFS does not seem to be running..." >&4
2735 fi
2736
2737 : decide how portable to be.  Allow command line overrides.
2738 case "$d_portable" in
2739 "$undef") ;;
2740 *)      d_portable="$define" ;;
2741 esac
2742
2743 : set up shell script to do ~ expansion
2744 cat >filexp <<EOSS
2745 $startsh
2746 : expand filename
2747 case "\$1" in
2748  ~/*|~)
2749         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2750         ;;
2751  ~*)
2752         if $test -f /bin/csh; then
2753                 /bin/csh -f -c "glob \$1"
2754                 failed=\$?
2755                 echo ""
2756                 exit \$failed
2757         else
2758                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2759                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2760                 if $test ! -d "\$dir"; then
2761                         me=\`basename \$0\`
2762                         echo "\$me: can't locate home directory for: \$name" >&2
2763                         exit 1
2764                 fi
2765                 case "\$1" in
2766                 */*)
2767                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2768                         ;;
2769                 *)
2770                         echo \$dir
2771                         ;;
2772                 esac
2773         fi
2774         ;;
2775 *)
2776         echo \$1
2777         ;;
2778 esac
2779 EOSS
2780 chmod +x filexp
2781 $eunicefix filexp
2782
2783 : now set up to get a file name
2784 cat <<EOS >getfile
2785 $startsh
2786 EOS
2787 cat <<'EOSC' >>getfile
2788 tilde=''
2789 fullpath=''
2790 already=''
2791 skip=''
2792 none_ok=''
2793 exp_file=''
2794 nopath_ok=''
2795 orig_rp="$rp"
2796 orig_dflt="$dflt"
2797
2798 case "$fn" in
2799 *\(*)
2800         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2801         fn=`echo $fn | sed 's/(.*)//'`
2802         ;;
2803 esac
2804
2805 case "$fn" in
2806 *:*)
2807         loc_file=`expr $fn : '.*:\(.*\)'`
2808         fn=`expr $fn : '\(.*\):.*'`
2809         ;;
2810 esac
2811
2812 case "$fn" in
2813 *~*) tilde=true;;
2814 esac
2815 case "$fn" in
2816 */*) fullpath=true;;
2817 esac
2818 case "$fn" in
2819 *+*) skip=true;;
2820 esac
2821 case "$fn" in
2822 *n*) none_ok=true;;
2823 esac
2824 case "$fn" in
2825 *e*) exp_file=true;;
2826 esac
2827 case "$fn" in
2828 *p*) nopath_ok=true;;
2829 esac
2830
2831 case "$fn" in
2832 *f*) type='File';;
2833 *d*) type='Directory';;
2834 *l*) type='Locate';;
2835 esac
2836
2837 what="$type"
2838 case "$what" in
2839 Locate) what='File';;
2840 esac
2841
2842 case "$exp_file" in
2843 '')
2844         case "$d_portable" in
2845         "$define") ;;
2846         *) exp_file=true;;
2847         esac
2848         ;;
2849 esac
2850
2851 cd ..
2852 while test "$type"; do
2853         redo=''
2854         rp="$orig_rp"
2855         dflt="$orig_dflt"
2856         case "$tilde" in
2857         true) rp="$rp (~name ok)";;
2858         esac
2859         . UU/myread
2860         if test -f UU/getfile.ok && \
2861                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2862         then
2863                 value="$ans"
2864                 ansexp="$ans"
2865                 break
2866         fi
2867         case "$ans" in
2868         none)
2869                 value=''
2870                 ansexp=''
2871                 case "$none_ok" in
2872                 true) type='';;
2873                 esac
2874                 ;;
2875         *)
2876                 case "$tilde" in
2877                 '') value="$ans"
2878                         ansexp="$ans";;
2879                 *)
2880                         value=`UU/filexp $ans`
2881                         case $? in
2882                         0)
2883                                 if test "$ans" != "$value"; then
2884                                         echo "(That expands to $value on this system.)"
2885                                 fi
2886                                 ;;
2887                         *) value="$ans";;
2888                         esac
2889                         ansexp="$value"
2890                         case "$exp_file" in
2891                         '') value="$ans";;
2892                         esac
2893                         ;;
2894                 esac
2895                 case "$fullpath" in
2896                 true)
2897                         case "$ansexp" in
2898                         /*) value="$ansexp" ;;
2899                         *)
2900                                 redo=true
2901                                 case "$already" in
2902                                 true)
2903                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2904                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2905                                         ;;
2906                                 *)
2907                                 echo "Please give a full path name, starting with slash." >&4
2908                                         case "$tilde" in
2909                                         true)
2910                                 echo "Note that using ~name is ok provided it expands well." >&4
2911                                                 already=true
2912                                                 ;;
2913                                         esac
2914                                 esac
2915                                 ;;
2916                         esac
2917                         ;;
2918                 esac
2919                 case "$redo" in
2920                 '')
2921                         case "$type" in
2922                         File)
2923                                 if test -f "$ansexp"; then
2924                                         type=''
2925                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2926                                 then
2927                                         echo "($value is not a plain file, but that's ok.)"
2928                                         type=''
2929                                 fi
2930                                 ;;
2931                         Directory)
2932                                 if test -d "$ansexp"; then
2933                                         type=''
2934                                 fi
2935                                 ;;
2936                         Locate)
2937                                 if test -d "$ansexp"; then
2938                                         echo "(Looking for $loc_file in directory $value.)"
2939                                         value="$value/$loc_file"
2940                                         ansexp="$ansexp/$loc_file"
2941                                 fi
2942                                 if test -f "$ansexp"; then
2943                                         type=''
2944                                 fi
2945                                 case "$nopath_ok" in
2946                                 true)   case "$value" in
2947                                         */*) ;;
2948                                         *)      echo "Assuming $value will be in people's path."
2949                                                 type=''
2950                                                 ;;
2951                                         esac
2952                                         ;;
2953                                 esac
2954                                 ;;
2955                         esac
2956
2957                         case "$skip" in
2958                         true) type='';
2959                         esac
2960
2961                         case "$type" in
2962                         '') ;;
2963                         *)
2964                                 if test "$fastread" = yes; then
2965                                         dflt=y
2966                                 else
2967                                         dflt=n
2968                                 fi
2969                                 rp="$what $value doesn't exist.  Use that name anyway?"
2970                                 . UU/myread
2971                                 dflt=''
2972                                 case "$ans" in
2973                                 y*) type='';;
2974                                 *) echo " ";;
2975                                 esac
2976                                 ;;
2977                         esac
2978                         ;;
2979                 esac
2980                 ;;
2981         esac
2982 done
2983 cd UU
2984 ans="$value"
2985 rp="$orig_rp"
2986 dflt="$orig_dflt"
2987 rm -f getfile.ok
2988 EOSC
2989
2990 : determine root of directory hierarchy where package will be installed.
2991 case "$prefix" in
2992 '')
2993         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2994         ;;
2995 *)
2996         dflt="$prefix"
2997         ;;
2998 esac
2999 $cat <<EOM
3000
3001 By default, $package will be installed in $dflt/bin, manual
3002 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3003 all installation directories. Typically set to /usr/local, but you
3004 may choose /usr if you wish to install $package among your system
3005 binaries. If you wish to have binaries under /bin but manual pages
3006 under /usr/local/man, that's ok: you will be prompted separately
3007 for each of the installation directories, the prefix being only used
3008 to set the defaults.
3009
3010 EOM
3011 fn=d~
3012 rp='Installation prefix to use?'
3013 . ./getfile
3014 oldprefix=''
3015 case "$prefix" in
3016 '') ;;
3017 *)
3018         case "$ans" in
3019         "$prefix") ;;
3020         *) oldprefix="$prefix";;
3021         esac
3022         ;;
3023 esac
3024 prefix="$ans"
3025 prefixexp="$ansexp"
3026
3027 : set the prefixit variable, to compute a suitable default value
3028 prefixit='case "$3" in
3029 ""|none)
3030         case "$oldprefix" in
3031         "") eval "$1=\"\$$2\"";;
3032         *)
3033                 case "$3" in
3034                 "") eval "$1=";;
3035                 none)
3036                         eval "tp=\"\$$2\"";
3037                         case "$tp" in
3038                         ""|" ") eval "$1=\"\$$2\"";;
3039                         *) eval "$1=";;
3040                         esac;;
3041                 esac;;
3042         esac;;
3043 *)
3044         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3045         case "$tp" in
3046         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3047         /*-$oldprefix/*|\~*-$oldprefix/*)
3048                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3049         *) eval "$1=\"\$$2\"";;
3050         esac;;
3051 esac'
3052
3053 : set the base revision
3054 baserev=5.0
3055
3056 : get the patchlevel
3057 echo " "
3058 echo "Getting the current patchlevel..." >&4
3059 if $test -r $rsrc/patchlevel.h;then
3060         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3061         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3062 else
3063         patchlevel=0
3064         subversion=0
3065 fi
3066 $echo $n "(You have $package" $c
3067 case "$package" in
3068 "*$baserev")    ;;
3069 *)              $echo $n " $baserev" $c ;;
3070 esac
3071 $echo $n " patchlevel $patchlevel" $c
3072 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3073 echo ".)"
3074
3075 if test 0 -eq "$subversion"; then
3076         version=`LC_ALL=C; export LC_ALL; \
3077                  echo $baserev $patchlevel | \
3078                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3079 else
3080         version=`LC_ALL=C; export LC_ALL; \
3081                  echo $baserev $patchlevel $subversion | \
3082                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3083 fi
3084 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3085 if test "$subversion" -lt 50; then
3086         apiversion=`LC_ALL=C; export LC_ALL; \
3087                  LANGUAGE=C; export LANGUAGE; \
3088                  echo $baserev $patchlevel | \
3089                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3090 else
3091         apiversion="$version"
3092 fi
3093
3094 : determine where private library files go
3095 : Usual default is /usr/local/lib/perl5/$version.
3096 : Also allow things like /opt/perl/lib/$version, since 
3097 : /opt/perl/lib/perl5... would be redundant.
3098 case "$prefix" in
3099 *perl*) set dflt privlib lib/$version ;;
3100 *)       set dflt privlib lib/$package/$version ;;
3101 esac
3102 eval $prefixit
3103 $cat <<EOM
3104
3105 There are some auxiliary files for $package that need to be put into a
3106 private library directory that is accessible by everyone.
3107
3108 EOM
3109 fn=d~+
3110 rp='Pathname where the private library files will reside?'
3111 . ./getfile
3112 if $test "X$privlibexp" != "X$ansexp"; then
3113         installprivlib=''
3114 fi
3115 privlib="$ans"
3116 privlibexp="$ansexp"
3117 if $afs; then
3118         $cat <<EOM
3119
3120 Since you are running AFS, I need to distinguish the directory in which
3121 private files reside from the directory in which they are installed (and from
3122 which they are presumably copied to the former directory by occult means).
3123
3124 EOM
3125         case "$installprivlib" in
3126         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3127         *) dflt="$installprivlib";;
3128         esac
3129         fn=de~
3130         rp='Where will private files be installed?'
3131         . ./getfile
3132         installprivlib="$ans"
3133 else
3134         installprivlib="$privlibexp"
3135 fi
3136
3137 : set the prefixup variable, to restore leading tilda escape
3138 prefixup='case "$prefixexp" in
3139 "$prefix") ;;
3140 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3141 esac'
3142
3143 : determine where public architecture dependent libraries go
3144 set archlib archlib
3145 eval $prefixit
3146 : privlib default is /usr/local/lib/$package/$version
3147 : archlib default is /usr/local/lib/$package/$version/$archname
3148 : privlib may have an optional trailing /share.
3149 tdflt=`echo $privlib | $sed 's,/share$,,'`
3150 tdflt=$tdflt/$archname
3151 case "$archlib" in
3152 '')     dflt=$tdflt
3153         ;;
3154 *)      dflt="$archlib"
3155     ;;
3156 esac
3157 cat <<EOM
3158
3159 $spackage contains architecture-dependent library files.  If you are
3160 sharing libraries in a heterogeneous environment, you might store
3161 these files in a separate location.  Otherwise, you can just include
3162 them with the rest of the public library files.
3163
3164 EOM
3165 fn=d+~
3166 rp='Where do you want to put the public architecture-dependent libraries?'
3167 . ./getfile
3168 archlib="$ans"
3169 archlibexp="$ansexp"
3170
3171 if $afs; then
3172         $cat <<EOM
3173
3174 Since you are running AFS, I need to distinguish the directory in
3175 which architecture-dependent library files reside from the directory
3176 in which they are installed (and from which they are presumably copied
3177 to the former directory by occult means).
3178
3179 EOM
3180         case "$installarchlib" in
3181         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3182         *) dflt="$installarchlib";;
3183         esac
3184         fn=de~
3185         rp='Where will architecture-dependent library files be installed?'
3186         . ./getfile
3187         installarchlib="$ans"
3188 else
3189         installarchlib="$archlibexp"
3190 fi
3191 if $test X"$archlib" = X"$privlib"; then
3192         d_archlib="$undef"
3193 else
3194         d_archlib="$define"
3195 fi
3196
3197 : make some quick guesses about what we are up against
3198 echo " "
3199 $echo $n "Hmm...  $c"
3200 echo exit 1 >bsd
3201 echo exit 1 >usg
3202 echo exit 1 >v7
3203 echo exit 1 >osf1
3204 echo exit 1 >eunice
3205 echo exit 1 >xenix
3206 echo exit 1 >venix
3207 echo exit 1 >os2
3208 d_bsd="$undef"
3209 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3210 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3211 then
3212         echo "Looks kind of like an OSF/1 system, but we'll see..."
3213         echo exit 0 >osf1
3214 elif test `echo abc | tr a-z A-Z` = Abc ; then
3215         xxx=`./loc addbib blurfl $pth`
3216         if $test -f $xxx; then
3217         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3218                 echo exit 0 >bsd
3219                 echo exit 0 >usg
3220         else
3221                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3222                         echo "Looks kind of like an extended USG system, but we'll see..."
3223                 else
3224                         echo "Looks kind of like a USG system, but we'll see..."
3225                 fi
3226                 echo exit 0 >usg
3227         fi
3228 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3229         echo "Looks kind of like a BSD system, but we'll see..."
3230         d_bsd="$define"
3231         echo exit 0 >bsd
3232 else
3233         echo "Looks kind of like a Version 7 system, but we'll see..."
3234         echo exit 0 >v7
3235 fi
3236 case "$eunicefix" in
3237 *unixtovms*)
3238         $cat <<'EOI'
3239 There is, however, a strange, musty smell in the air that reminds me of
3240 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3241 EOI
3242         echo exit 0 >eunice
3243         d_eunice="$define"
3244 : it so happens the Eunice I know will not run shell scripts in Unix format
3245         ;;
3246 *)
3247         echo " "
3248         echo "Congratulations.  You aren't running Eunice."
3249         d_eunice="$undef"
3250         ;;
3251 esac
3252 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3253 case "$p_" in
3254 :) ;;
3255 *)
3256         $cat <<'EOI'
3257 I have the feeling something is not exactly right, however...don't tell me...
3258 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3259 EOI
3260         echo exit 0 >os2
3261         ;;
3262 esac
3263 if test -f /xenix; then
3264         echo "Actually, this looks more like a XENIX system..."
3265         echo exit 0 >xenix
3266         d_xenix="$define"
3267 else
3268         echo " "
3269         echo "It's not Xenix..."
3270         d_xenix="$undef"
3271 fi
3272 chmod +x xenix
3273 $eunicefix xenix
3274 if test -f /venix; then
3275         echo "Actually, this looks more like a VENIX system..."
3276         echo exit 0 >venix
3277 else
3278         echo " "
3279         if ./xenix; then
3280                 : null
3281         else
3282                 echo "Nor is it Venix..."
3283         fi
3284 fi
3285 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3286 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3287 $rm -f foo
3288
3289 : see if setuid scripts can be secure
3290 $cat <<EOM
3291
3292 Some kernels have a bug that prevents setuid #! scripts from being
3293 secure.  Some sites have disabled setuid #! scripts because of this.
3294
3295 First let's decide if your kernel supports secure setuid #! scripts.
3296 (If setuid #! scripts would be secure but have been disabled anyway,
3297 don't say that they are secure if asked.)
3298
3299 EOM
3300
3301 val="$undef"
3302 if $test -d /dev/fd; then
3303         echo "#!$ls" >reflect
3304         chmod +x,u+s reflect
3305         ./reflect >flect 2>&1
3306         if $contains "/dev/fd" flect >/dev/null; then
3307                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3308                 val="$define"
3309         else
3310                 $cat <<EOM
3311 If you are not sure if they are secure, I can check but I'll need a
3312 username and password different from the one you are using right now.
3313 If you don't have such a username or don't want me to test, simply
3314 enter 'none'.
3315
3316 EOM
3317                 rp='Other username to test security of setuid scripts with?'
3318                 dflt='none'
3319                 . ./myread
3320                 case "$ans" in
3321                 n|none)
3322                         case "$d_suidsafe" in
3323                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3324                                 dflt=n;;
3325                         "$undef")
3326                                 echo "Well, the $hint value is *not* secure." >&4
3327                                 dflt=n;;
3328                         *)      echo "Well, the $hint value *is* secure." >&4
3329                                 dflt=y;;
3330                         esac
3331                         ;;
3332                 *)
3333                         $rm -f reflect flect
3334                         echo "#!$ls" >reflect
3335                         chmod +x,u+s reflect
3336                         echo >flect
3337                         chmod a+w flect
3338                         echo '"su" will (probably) prompt you for '"$ans's password."
3339                         su $ans -c './reflect >flect'
3340                         if $contains "/dev/fd" flect >/dev/null; then
3341                                 echo "Okay, it looks like setuid scripts are secure." >&4
3342                                 dflt=y
3343                         else
3344                                 echo "I don't think setuid scripts are secure." >&4
3345                                 dflt=n
3346                         fi
3347                         ;;
3348                 esac
3349                 rp='Does your kernel have *secure* setuid scripts?'
3350                 . ./myread
3351                 case "$ans" in
3352                 [yY]*)  val="$define";;
3353                 *)      val="$undef";;
3354                 esac
3355         fi
3356 else
3357         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3358         echo "(That's for file descriptors, not floppy disks.)"
3359         val="$undef"
3360 fi
3361 set d_suidsafe
3362 eval $setvar
3363
3364 $rm -f reflect flect
3365
3366 : now see if they want to do setuid emulation
3367 echo " "
3368 val="$undef"
3369 case "$d_suidsafe" in
3370 "$define")
3371         val="$undef"
3372         echo "No need to emulate SUID scripts since they are secure here." >& 4
3373         ;;
3374 *)
3375         $cat <<EOM
3376 Some systems have disabled setuid scripts, especially systems where
3377 setuid scripts cannot be secure.  On systems where setuid scripts have
3378 been disabled, the setuid/setgid bits on scripts are currently
3379 useless.  It is possible for $package to detect those bits and emulate
3380 setuid/setgid in a secure fashion.  This emulation will only work if
3381 setuid scripts have been disabled in your kernel.
3382
3383 EOM
3384         case "$d_dosuid" in
3385         "$define") dflt=y ;;
3386         *) dflt=n ;;
3387         esac
3388         rp="Do you want to do setuid/setgid emulation?"
3389         . ./myread
3390         case "$ans" in
3391         [yY]*)  val="$define";;
3392         *)      val="$undef";;
3393         esac
3394         ;;
3395 esac
3396 set d_dosuid
3397 eval $setvar
3398
3399 : determine where manual pages are on this system
3400 echo " "
3401 case "$sysman" in
3402 '') 
3403         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3404         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3405         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3406         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3407         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3408         sysman=`./loc . /usr/man/man1 $syspath`
3409         ;;
3410 esac
3411 if $test -d "$sysman"; then
3412         echo "System manual is in $sysman." >&4
3413 else
3414         echo "Could not find manual pages in source form." >&4
3415 fi
3416
3417 : see what memory models we can support
3418 case "$models" in
3419 '')
3420         $cat >pdp11.c <<'EOP'
3421 int main() {
3422 #ifdef pdp11
3423         exit(0);
3424 #else
3425         exit(1);
3426 #endif
3427 }
3428 EOP
3429         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3430         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3431                 dflt='unsplit split'
3432         else
3433                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3434                 case "$tans" in
3435                 X) dflt='none';;
3436                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3437                                 dflt='small'
3438                         else
3439                                 dflt=''
3440                         fi
3441                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3442                                 dflt="$dflt medium"
3443                         fi
3444                         if $test -d /lib/large || $test -d /usr/lib/large; then
3445                                 dflt="$dflt large"
3446                         fi
3447                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3448                                 dflt="$dflt huge"
3449                         fi
3450                 esac
3451         fi;;
3452 *) dflt="$models";;
3453 esac
3454 $cat <<EOM
3455  
3456 Some systems have different model sizes.  On most systems they are called
3457 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3458 split.  If your system doesn't support different memory models, say "none".
3459 If you wish to force everything to one memory model, say "none" here and
3460 put the appropriate flags later when it asks you for other cc and ld flags.
3461 Venix systems may wish to put "none" and let the compiler figure things out.
3462 (In the following question multiple model names should be space separated.)
3463
3464 The default for most systems is "none".
3465
3466 EOM
3467 rp="Which memory models are supported?"
3468 . ./myread
3469 models="$ans"
3470
3471 case "$models" in
3472 none)
3473         small=''
3474         medium=''
3475         large=''
3476         huge=''
3477         unsplit=''
3478         split=''
3479         ;;
3480 *split)
3481         case "$split" in
3482         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3483                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3484                         dflt='-i'
3485                 else
3486                         dflt='none'
3487                 fi;;
3488         *) dflt="$split";;
3489         esac
3490         rp="What flag indicates separate I and D space?"
3491         . ./myread
3492         tans="$ans"
3493         case "$tans" in
3494         none) tans='';;
3495         esac
3496         split="$tans"
3497         unsplit='';;
3498 *large*|*small*|*medium*|*huge*)
3499         case "$models" in
3500         *large*)
3501                 case "$large" in
3502                 '') dflt='-Ml';;
3503                 *) dflt="$large";;
3504                 esac
3505         rp="What flag indicates large model?"
3506         . ./myread
3507         tans="$ans"
3508         case "$tans" in
3509         none) tans='';
3510         esac
3511         large="$tans";;
3512         *) large='';;
3513         esac
3514         case "$models" in
3515         *huge*) case "$huge" in
3516                 '') dflt='-Mh';;
3517                 *) dflt="$huge";;
3518                 esac
3519                 rp="What flag indicates huge model?"
3520                 . ./myread
3521                 tans="$ans"
3522                 case "$tans" in
3523                 none) tans='';
3524                 esac
3525                 huge="$tans";;
3526         *) huge="$large";;
3527         esac
3528         case "$models" in
3529         *medium*) case "$medium" in
3530                 '') dflt='-Mm';;
3531                 *) dflt="$medium";;
3532                 esac
3533                 rp="What flag indicates medium model?"
3534                 . ./myread
3535                 tans="$ans"
3536                 case "$tans" in
3537                 none) tans='';
3538                 esac
3539                 medium="$tans";;
3540         *) medium="$large";;
3541         esac
3542         case "$models" in
3543         *small*) case "$small" in
3544                 '') dflt='none';;
3545                 *) dflt="$small";;
3546                 esac
3547                 rp="What flag indicates small model?"
3548                 . ./myread
3549                 tans="$ans"
3550                 case "$tans" in
3551                 none) tans='';
3552                 esac
3553                 small="$tans";;
3554         *) small='';;
3555         esac
3556         ;;
3557 *)
3558         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3559         ;;
3560 esac
3561 $rm -f pdp11.* pdp11
3562
3563 : see if we need a special compiler
3564 echo " "
3565 if ./usg; then
3566         case "$cc" in
3567         '') case "$Mcc" in
3568                 /*) dflt='Mcc';;
3569                 *) case "$large" in
3570                         -M*) dflt='cc';;
3571                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3572                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3573                                                 dflt='cc'
3574                                         else
3575                                                 dflt='cc -M'
3576                                         fi
3577                                 else
3578                                         dflt='cc'
3579                                 fi;;
3580                         esac;;
3581                 esac;;
3582         *)  dflt="$cc";;
3583         esac
3584         case "$dflt" in
3585         *M*)    $cat <<'EOM'
3586 On some older systems the default C compiler will not resolve multiple global
3587 references that happen to have the same name.  On some such systems the "Mcc"
3588 command may be used to force these to be resolved.  On other systems a "cc -M"
3589 command is required.  (Note that the -M flag on other systems indicates a
3590 memory model to use!) If you have the Gnu C compiler, you might wish to use
3591 that instead.
3592
3593 EOM
3594         ;;
3595         esac
3596         rp="Use which C compiler?"
3597         . ./myread
3598         cc="$ans"
3599 else
3600         case "$cc" in
3601         '') dflt=cc;;
3602         *) dflt="$cc";;
3603         esac
3604         rp="Use which C compiler?"
3605         . ./myread
3606         cc="$ans"
3607 fi
3608 : Look for a hint-file generated 'call-back-unit'.  Now that the
3609 : user has specified the compiler, we may need to set or change some
3610 : other defaults.
3611 if $test -f cc.cbu; then
3612     . ./cc.cbu
3613 fi
3614 echo " "
3615 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3616 $cat >gccvers.c <<EOM
3617 #include <stdio.h>
3618 int main() {
3619 #ifdef __GNUC__
3620 #ifdef __VERSION__
3621         printf("%s\n", __VERSION__);
3622 #else
3623         printf("%s\n", "1");
3624 #endif
3625 #endif
3626         exit(0);
3627 }
3628 EOM
3629 if $cc -o gccvers gccvers.c; then
3630         gccversion=`./gccvers`
3631         case "$gccversion" in
3632         '') echo "You are not using GNU cc." ;;
3633         *)  echo "You are using GNU cc $gccversion." ;;
3634         esac
3635 else
3636         echo " "
3637         echo "*** WHOA THERE!!! ***" >&4
3638         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3639         case "$knowitall" in
3640         '')
3641         echo "    You'd better start hunting for one and let me know about it." >&4
3642                 exit 1
3643                 ;;
3644         esac
3645 fi
3646 $rm -f gccvers*
3647 case "$gccversion" in
3648 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3649 esac
3650
3651 : What should the include directory be ?
3652 echo " "
3653 $echo $n "Hmm...  $c"
3654 dflt='/usr/include'
3655 incpath=''
3656 mips_type=''
3657 if $test -f /bin/mips && /bin/mips; then
3658         echo "Looks like a MIPS system..."
3659         $cat >usr.c <<'EOCP'
3660 #ifdef SYSTYPE_BSD43
3661 /bsd43
3662 #endif
3663 EOCP
3664         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3665                 dflt='/bsd43/usr/include'
3666                 incpath='/bsd43'
3667                 mips_type='BSD 4.3'
3668         else
3669                 mips_type='System V'
3670         fi
3671         $rm -f usr.c usr.out
3672         echo "and you're compiling with the $mips_type compiler and libraries."
3673         xxx_prompt=y
3674         echo "exit 0" >mips
3675 else
3676         echo "Doesn't look like a MIPS system."
3677         xxx_prompt=n
3678         echo "exit 1" >mips
3679 fi
3680 chmod +x mips
3681 $eunicefix mips
3682 case "$usrinc" in
3683 '') ;;
3684 *) dflt="$usrinc";;
3685 esac
3686 case "$xxx_prompt" in
3687 y)      fn=d/
3688         echo " "
3689         rp='Where are the include files you want to use?'
3690         . ./getfile
3691         usrinc="$ans"
3692         ;;
3693 *)      usrinc="$dflt"
3694         ;;
3695 esac
3696
3697 : see how we invoke the C preprocessor
3698 echo " "
3699 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3700 cat <<'EOT' >testcpp.c
3701 #define ABC abc
3702 #define XYZ xyz
3703 ABC.XYZ
3704 EOT
3705 cd ..
3706 if test ! -f cppstdin; then
3707         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3708 else
3709         echo "Keeping your $hint cppstdin wrapper."
3710 fi
3711 chmod 755 cppstdin
3712 wrapper=`pwd`/cppstdin
3713 ok='false'
3714 cd UU
3715
3716 if $test "X$cppstdin" != "X" && \
3717         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3718         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3719 then
3720         echo "You used to use $cppstdin $cppminus so we'll use that again."
3721         case "$cpprun" in
3722         '') echo "But let's see if we can live without a wrapper..." ;;
3723         *)
3724                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3725                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3726                 then
3727                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3728                         ok='true'
3729                 else
3730                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3731                 fi
3732                 ;;
3733         esac
3734 else
3735         case "$cppstdin" in
3736         '') ;;
3737         *)
3738                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3739                 ;;
3740         esac
3741 fi
3742
3743 if $ok; then
3744         : nothing
3745 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3746         $cc -E <testcpp.c >testcpp.out 2>&1; \
3747         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3748         echo "Yup, it does."
3749         x_cpp="$cc -E"
3750         x_minus='';
3751 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3752         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3753         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3754         echo "Yup, it does."
3755         x_cpp="$cc -E"
3756         x_minus='-';
3757 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3758         $cc -P <testcpp.c >testcpp.out 2>&1; \
3759         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3760         echo "Yipee, that works!"
3761         x_cpp="$cc -P"
3762         x_minus='';
3763 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3764         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3765         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3766         echo "At long last!"
3767         x_cpp="$cc -P"
3768         x_minus='-';
3769 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3770         $cpp <testcpp.c >testcpp.out 2>&1; \
3771         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3772         echo "It works!"
3773         x_cpp="$cpp"
3774         x_minus='';
3775 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3776         $cpp - <testcpp.c >testcpp.out 2>&1; \
3777         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3778         echo "Hooray, it works!  I was beginning to wonder."
3779         x_cpp="$cpp"
3780         x_minus='-';
3781 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3782         $wrapper <testcpp.c >testcpp.out 2>&1; \
3783         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3784         x_cpp="$wrapper"
3785         x_minus=''
3786         echo "Eureka!"
3787 else
3788         dflt=''
3789         rp="No dice.  I can't find a C preprocessor.  Name one:"
3790         . ./myread
3791         x_cpp="$ans"
3792         x_minus=''
3793         $x_cpp <testcpp.c >testcpp.out 2>&1
3794         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3795                 echo "OK, that will do." >&4
3796         else
3797 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3798                 exit 1
3799         fi
3800 fi
3801
3802 case "$ok" in
3803 false)
3804         cppstdin="$x_cpp"
3805         cppminus="$x_minus"
3806         cpprun="$x_cpp"
3807         cpplast="$x_minus"
3808         set X $x_cpp
3809         shift
3810         case "$1" in
3811         "$cpp")
3812                 echo "Perhaps can we force $cc -E using a wrapper..."
3813                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3814                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3815                 then
3816                         echo "Yup, we can."
3817                         cppstdin="$wrapper"
3818                         cppminus='';
3819                 else
3820                         echo "Nope, we'll have to live without it..."
3821                 fi
3822                 ;;
3823         esac
3824         case "$cpprun" in
3825         "$wrapper")
3826                 cpprun=''
3827                 cpplast=''
3828                 ;;
3829         esac
3830         ;;
3831 esac
3832
3833 case "$cppstdin" in
3834 "$wrapper"|'cppstdin') ;;
3835 *) $rm -f $wrapper;;
3836 esac
3837 $rm -f testcpp.c testcpp.out
3838
3839 : Set private lib path
3840 case "$plibpth" in
3841 '') if ./mips; then
3842                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3843         fi;;
3844 esac
3845 case "$libpth" in
3846 ' ') dlist='';;
3847 '') dlist="$loclibpth $plibpth $glibpth";;
3848 *) dlist="$libpth";;
3849 esac
3850
3851 : Now check and see which directories actually exist, avoiding duplicates
3852 libpth=''
3853 for xxx in $dlist
3854 do
3855     if $test -d $xxx; then
3856                 case " $libpth " in
3857                 *" $xxx "*) ;;
3858                 *) libpth="$libpth $xxx";;
3859                 esac
3860     fi
3861 done
3862 $cat <<'EOM'
3863
3864 Some systems have incompatible or broken versions of libraries.  Among
3865 the directories listed in the question below, please remove any you
3866 know not to be holding relevant libraries, and add any that are needed.
3867 Say "none" for none.
3868
3869 EOM
3870 case "$libpth" in
3871 '') dflt='none';;
3872 *)
3873         set X $libpth
3874         shift
3875         dflt=${1+"$@"}
3876         ;;
3877 esac
3878 rp="Directories to use for library searches?"
3879 . ./myread
3880 case "$ans" in
3881 none) libpth=' ';;
3882 *) libpth="$ans";;
3883 esac
3884
3885 : compute shared library extension
3886 case "$so" in
3887 '')
3888         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3889                 dflt='sl'
3890         else
3891                 dflt='so'
3892         fi
3893         ;;
3894 *) dflt="$so";;
3895 esac
3896 $cat <<EOM
3897
3898 On some systems, shared libraries may be available.  Answer 'none' if
3899 you want to suppress searching of shared libraries for the remaining
3900 of this configuration.
3901
3902 EOM
3903 rp='What is the file extension used for shared libraries?'
3904 . ./myread
3905 so="$ans"
3906
3907 : Define several unixisms.
3908 : Hints files or command line option can be used to override them.
3909 : The convoluted testing is in case hints files set either the old
3910 : or the new name.
3911 case "$_exe" in
3912 '')     case "$exe_ext" in
3913     '') ;;
3914         *)      _exe="$exe_ext" ;;
3915         esac
3916         ;;
3917 esac
3918 case "$_a" in
3919 '')     case "$lib_ext" in
3920     '') _a='.a';;
3921         *)      _a="$lib_ext" ;;
3922         esac
3923         ;;
3924 esac
3925 case "$_o" in
3926 '') case "$obj_ext" in
3927         '')     _o='.o';;
3928         *)      _o="$obj_ext";;
3929         esac
3930         ;;
3931 esac
3932 case "$p_" in
3933 '') case "$path_sep" in
3934         '')     p_=':';;
3935         *)      p_="$path_sep";;
3936         esac
3937         ;;
3938 esac
3939 exe_ext=$_exe
3940 lib_ext=$_a
3941 obj_ext=$_o
3942 path_sep=$p_
3943
3944 : Which makefile gets called first.  This is used by make depend.
3945 case "$firstmakefile" in
3946 '') firstmakefile='makefile';;
3947 esac
3948
3949 : Looking for optional libraries
3950 echo " "
3951 echo "Checking for optional libraries..." >&4
3952 case "$libs" in
3953 ' '|'') dflt='';;
3954 *) dflt="$libs";;
3955 esac
3956 case "$libswanted" in
3957 '') libswanted='c_s';;
3958 esac
3959 for thislib in $libswanted; do
3960         
3961         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3962                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3963                 echo "Found -l$thislib (shared)."
3964                 case " $dflt " in
3965                 *"-l$thislib "*);;
3966                 *) dflt="$dflt -l$thislib";;
3967                 esac
3968         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3969                 echo "Found -l$thislib (shared)."
3970                 case " $dflt " in
3971                 *"-l$thislib "*);;
3972                 *) dflt="$dflt -l$thislib";;
3973                 esac
3974         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3975                 echo "Found -l$thislib."
3976                 case " $dflt " in
3977                 *"-l$thislib "*);;
3978                 *) dflt="$dflt -l$thislib";;
3979                 esac
3980         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3981                 echo "Found -l$thislib."
3982                 case " $dflt " in
3983                 *"-l$thislib "*);;
3984                 *) dflt="$dflt -l$thislib";;
3985                 esac
3986         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3987                 echo "Found -l${thislib}_s."
3988                 case " $dflt " in
3989                 *"-l$thislib "*);;
3990                 *) dflt="$dflt -l${thislib}_s";;
3991                 esac
3992         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3993                 echo "Found -l$thislib."
3994                 case " $dflt " in
3995                 *"-l$thislib "*);;
3996                 *) dflt="$dflt -l$thislib";;
3997                 esac
3998         else
3999                 echo "No -l$thislib."
4000         fi
4001 done
4002 set X $dflt
4003 shift
4004 dflt="$*"
4005 case "$libs" in
4006 '') dflt="$dflt";;
4007 *) dflt="$libs";;
4008 esac
4009 case "$dflt" in
4010 ' '|'') dflt='none';;
4011 esac
4012
4013 $cat <<EOM
4014  
4015 Some versions of Unix support shared libraries, which make executables smaller
4016 but make load time slightly longer.
4017
4018 On some systems, mostly System V Release 3's, the shared library is included
4019 by putting the option "-lc_s" as the last thing on the cc command line when
4020 linking.  Other systems use shared libraries by default.  There may be other
4021 libraries needed to compile $package on your machine as well.  If your system
4022 needs the "-lc_s" option, include it here.  Include any other special libraries
4023 here as well.  Say "none" for none.
4024 EOM
4025
4026 echo " "
4027 rp="Any additional libraries?"
4028 . ./myread
4029 case "$ans" in
4030 none) libs=' ';;
4031 *) libs="$ans";;
4032 esac
4033
4034 : determine optimize, if desired, or use for debug flag also
4035 case "$optimize" in
4036 ' '|$undef) dflt='none';;
4037 '') dflt='-O';;
4038 *) dflt="$optimize";;
4039 esac
4040 $cat <<EOH
4041
4042 Some C compilers have problems with their optimizers.  By default, $package
4043 compiles with the -O flag to use the optimizer.  Alternately, you might want
4044 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4045 systems).  Either flag can be specified here.  To use neither flag, specify
4046 the word "none".
4047
4048 EOH
4049 rp="What optimizer/debugger flag should be used?"
4050 . ./myread
4051 optimize="$ans"
4052 case "$optimize" in
4053 'none') optimize=" ";;
4054 esac
4055
4056 dflt=''
4057 : We will not override a previous value, but we might want to
4058 : augment a hint file
4059 case "$hint" in
4060 none|recommended)
4061         case "$gccversion" in
4062         1*) dflt='-fpcc-struct-return' ;;
4063         esac
4064         case "$optimize" in
4065         *-g*) dflt="$dflt -DDEBUGGING";;
4066         esac
4067         case "$gccversion" in
4068         2*) if test -d /etc/conf/kconfig.d &&
4069                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4070                 then
4071                         dflt="$dflt -posix"
4072                 fi
4073                 ;;
4074         esac
4075         ;;
4076 esac
4077
4078 case "$mips_type" in
4079 *BSD*|'') inclwanted="$locincpth $usrinc";;
4080 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4081 esac
4082 for thisincl in $inclwanted; do
4083         if $test -d $thisincl; then
4084                 if $test x$thisincl != x$usrinc; then
4085                         case "$dflt" in
4086                         *$thisincl*);;
4087                         *) dflt="$dflt -I$thisincl";;
4088                         esac
4089                 fi
4090         fi
4091 done
4092
4093 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4094         xxx=true;
4095 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4096         xxx=true;
4097 else
4098         xxx=false;
4099 fi;
4100 if $xxx; then
4101         case "$dflt" in
4102         *$2*);;
4103         *) dflt="$dflt -D$2";;
4104         esac;
4105 fi'
4106
4107 set signal.h LANGUAGE_C; eval $inctest
4108
4109 case "$hint" in
4110 none|recommended) dflt="$ccflags $dflt" ;;
4111 *) dflt="$ccflags";;
4112 esac
4113
4114 case "$dflt" in
4115 ''|' ') dflt=none;;
4116 esac
4117 $cat <<EOH
4118
4119 Your C compiler may want other flags.  For this question you should include
4120 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4121 but you should NOT include libraries or ld flags like -lwhatever.  If you
4122 want $package to honor its debug switch, you should include -DDEBUGGING here.
4123 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4124
4125 To use no flags, specify the word "none".
4126
4127 EOH
4128 set X $dflt
4129 shift
4130 dflt=${1+"$@"}
4131 rp="Any additional cc flags?"
4132 . ./myread
4133 case "$ans" in
4134 none) ccflags='';;
4135 *) ccflags="$ans";;
4136 esac
4137
4138 : the following weeds options from ccflags that are of no interest to cpp
4139 cppflags="$ccflags"
4140 case "$gccversion" in
4141 1*) cppflags="$cppflags -D__GNUC__"
4142 esac
4143 case "$mips_type" in
4144 '');;
4145 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4146 esac
4147 case "$cppflags" in
4148 '');;
4149 *)
4150         echo " "
4151         echo "Let me guess what the preprocessor flags are..." >&4
4152         set X $cppflags
4153         shift
4154         cppflags=''
4155         $cat >cpp.c <<'EOM'
4156 #define BLURFL foo
4157
4158 BLURFL xx LFRULB
4159 EOM
4160         previous=''
4161         for flag in $*
4162         do
4163                 case "$flag" in
4164                 -*) ftry="$flag";;
4165                 *) ftry="$previous $flag";;
4166                 esac
4167                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4168                         >cpp1.out 2>/dev/null && \
4169                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4170                         >cpp2.out 2>/dev/null && \
4171                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4172                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4173                 then
4174                         cppflags="$cppflags $ftry"
4175                         previous=''
4176                 else
4177                         previous="$flag"
4178                 fi
4179         done
4180         set X $cppflags
4181         shift
4182         cppflags=${1+"$@"}
4183         case "$cppflags" in
4184         *-*)  echo "They appear to be: $cppflags";;
4185         esac
4186         $rm -f cpp.c cpp?.out
4187         ;;
4188 esac
4189
4190 : flags used in final linking phase
4191 case "$ldflags" in
4192 '') if ./venix; then
4193                 dflt='-i -z'
4194         else
4195                 dflt=''
4196         fi
4197         case "$ccflags" in
4198         *-posix*) dflt="$dflt -posix" ;;
4199         esac
4200         ;;
4201 *) dflt="$ldflags";;
4202 esac
4203
4204 : Try to guess additional flags to pick up local libraries.
4205 for thislibdir in $libpth; do
4206         case " $loclibpth " in
4207         *" $thislibdir "*)
4208                 case "$dflt " in 
4209                 *"-L$thislibdir "*) ;;
4210                 *)  dflt="$dflt -L$thislibdir" ;;
4211                 esac
4212                 ;;
4213         esac
4214 done
4215
4216 case "$dflt" in
4217 '') dflt='none' ;;
4218 esac
4219
4220 $cat <<EOH
4221
4222 Your C linker may need flags.  For this question you should
4223 include -L/whatever and any other flags used by the C linker, but you
4224 should NOT include libraries like -lwhatever.
4225
4226 Make sure you include the appropriate -L/path flags if your C linker
4227 does not normally search all of the directories you specified above,
4228 namely
4229         $libpth
4230 To use no flags, specify the word "none".
4231
4232 EOH
4233
4234 rp="Any additional ld flags (NOT including libraries)?"
4235 . ./myread
4236 case "$ans" in
4237 none) ldflags='';;
4238 *) ldflags="$ans";;
4239 esac
4240 rmlist="$rmlist pdp11"
4241
4242 : coherency check
4243 echo " "
4244 echo "Checking your choice of C compiler and flags for coherency..." >&4
4245 $cat > try.c <<'EOF'
4246 #include <stdio.h>
4247 int main() { printf("Ok\n"); exit(0); }
4248 EOF
4249 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4250 shift
4251 $cat >try.msg <<'EOM'
4252 I've tried to compile and run the following simple program:
4253
4254 EOM
4255 $cat try.c >> try.msg
4256
4257 $cat >> try.msg <<EOM
4258
4259 I used the command:
4260
4261         $*
4262         ./try
4263
4264 and I got the following output:
4265
4266 EOM
4267 dflt=y
4268 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4269         if sh -c './try' >>try.msg 2>&1; then
4270                 xxx=`./try`
4271                 case "$xxx" in
4272                 "Ok") dflt=n ;;
4273                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4274                         case " $libs " in
4275                         *" -lsfio "*)
4276                                 cat >> try.msg <<'EOQS'
4277 If $libs contains -lsfio, and sfio is mis-configured, then it
4278 sometimes (apparently) runs and exits with a 0 status, but with no
4279 output!  It may have to do with sfio's use of _exit vs. exit.
4280
4281 EOQS
4282                                 rp="You have a big problem.  Shall I abort Configure"
4283                                 dflt=y
4284                                 ;;
4285                         esac
4286                         ;;
4287                 esac
4288         else
4289                 echo "The program compiled OK, but exited with status $?." >>try.msg
4290                 rp="You have a problem.  Shall I abort Configure"
4291                 dflt=y
4292         fi
4293 else
4294         echo "I can't compile the test program." >>try.msg
4295         rp="You have a BIG problem.  Shall I abort Configure"
4296         dflt=y
4297 fi
4298 case "$dflt" in
4299 y)
4300         $cat try.msg >&4
4301         case "$knowitall" in
4302         '')
4303                 echo "(The supplied flags or libraries might be incorrect.)"
4304                 ;;
4305         *) dflt=n;;
4306         esac
4307         echo " "
4308         . ./myread
4309         case "$ans" in
4310         n*|N*) ;;
4311         *)      echo "Ok.  Stopping Configure." >&4
4312                 exit 1
4313                 ;;
4314         esac
4315         ;;
4316 n) echo "OK, that should do.";;
4317 esac
4318 $rm -f try try.* core
4319
4320 : determine filename position in cpp output
4321 echo " "
4322 echo "Computing filename position in cpp output for #include directives..." >&4
4323 echo '#include <stdio.h>' > foo.c
4324 $cat >fieldn <<EOF
4325 $startsh
4326 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4327 $grep '^[       ]*#.*stdio\.h' | \
4328 while read cline; do
4329         pos=1
4330         set \$cline
4331         while $test \$# -gt 0; do
4332                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4333                         echo "\$pos"
4334                         exit 0
4335                 fi
4336                 shift
4337                 pos=\`expr \$pos + 1\`
4338         done
4339 done
4340 EOF
4341 chmod +x fieldn
4342 fieldn=`./fieldn`
4343 $rm -f foo.c fieldn
4344 case $fieldn in
4345 '') pos='???';;
4346 1) pos=first;;
4347 2) pos=second;;
4348 3) pos=third;;
4349 *) pos="${fieldn}th";;
4350 esac
4351 echo "Your cpp writes the filename in the $pos field of the line."
4352
4353 : locate header file
4354 $cat >findhdr <<EOF
4355 $startsh
4356 wanted=\$1
4357 name=''
4358 for usrincdir in $usrinc
4359 do
4360         if test -f \$usrincdir/\$wanted; then
4361                 echo "\$usrincdir/\$wanted"
4362                 exit 0
4363         fi
4364 done
4365 awkprg='{ print \$$fieldn }'
4366 echo "#include <\$wanted>" > foo\$\$.c
4367 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4368 $grep "^[       ]*#.*\$wanted" | \
4369 while read cline; do
4370         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4371         case "\$name" in
4372         *[/\\\\]\$wanted) echo "\$name"; exit 0;;
4373         *[\\\\/]\$wanted) echo "\$name"; exit 0;;
4374         *) name='';;
4375         esac;
4376 done;
4377 $rm -f foo\$\$.c;
4378 case "\$name" in
4379 '') exit 1;;
4380 esac
4381 EOF
4382 chmod +x findhdr
4383
4384 : define an alternate in-header-list? function
4385 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4386 cont=true; xxf="echo \"<\$1> found.\" >&4";
4387 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4388 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4389 esac;
4390 case $# in 4) instead=instead;; *) instead="at last";; esac;
4391 while $test "$cont"; do
4392         xxx=`./findhdr $1`
4393         var=$2; eval "was=\$$2";
4394         if $test "$xxx" && $test -r "$xxx";
4395         then eval $xxf;
4396         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4397                 cont="";
4398         else eval $xxnf;
4399         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4400         set $yyy; shift; shift; yyy=$@;
4401         case $# in 0) cont="";;
4402         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4403                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4404         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4405                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4406         esac;
4407 done;
4408 while $test "$yyy";
4409 do set $yyy; var=$2; eval "was=\$$2";
4410         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4411         set $yyy; shift; shift; yyy=$@;
4412 done'
4413
4414 : see if this is a malloc.h system
4415 set malloc.h i_malloc
4416 eval $inhdr
4417
4418 : see if stdlib is available
4419 set stdlib.h i_stdlib
4420 eval $inhdr
4421
4422 : determine which malloc to compile in
4423 echo " "
4424 case "$usemymalloc" in
4425 ''|[yY]*|true|$define)  dflt='y' ;;
4426 *)      dflt='n' ;;
4427 esac
4428 rp="Do you wish to attempt to use the malloc that comes with $package?"
4429 . ./myread
4430 usemymalloc="$ans"
4431 case "$ans" in
4432 y*|true)
4433         usemymalloc='y'
4434         mallocsrc='malloc.c'
4435         mallocobj="malloc$_o"
4436         d_mymalloc="$define"
4437         case "$libs" in
4438         *-lmalloc*)
4439                 : Remove malloc from list of libraries to use
4440                 echo "Removing unneeded -lmalloc from library list" >&4
4441                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4442                 shift
4443                 libs="$*"
4444                 echo "libs = $libs" >&4
4445                 ;;
4446         esac
4447         ;;
4448 *)
4449         usemymalloc='n'
4450         mallocsrc=''
4451         mallocobj=''
4452         d_mymalloc="$undef"
4453         ;;
4454 esac
4455
4456 : compute the return types of malloc and free
4457 echo " "
4458 $cat >malloc.c <<END
4459 #$i_malloc I_MALLOC
4460 #$i_stdlib I_STDLIB
4461 #include <stdio.h>
4462 #include <sys/types.h>
4463 #ifdef I_MALLOC
4464 #include <malloc.h>
4465 #endif
4466 #ifdef I_STDLIB
4467 #include <stdlib.h>
4468 #endif
4469 #ifdef TRY_MALLOC
4470 void *malloc();
4471 #endif
4472 #ifdef TRY_FREE
4473 void free();
4474 #endif
4475 END
4476 case "$malloctype" in
4477 '')
4478         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4479                 malloctype='void *'
4480         else
4481                 malloctype='char *'
4482         fi
4483         ;;
4484 esac
4485 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4486
4487 case "$freetype" in
4488 '')
4489         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4490                 freetype='void'
4491         else
4492                 freetype='int'
4493         fi
4494         ;;
4495 esac
4496 echo "Your system uses $freetype free(), it would seem." >&4
4497 $rm -f malloc.[co]
4498 : Cruising for prototypes
4499 echo " "
4500 echo "Checking out function prototypes..." >&4
4501 $cat >prototype.c <<'EOCP'
4502 int main(int argc, char *argv[]) {
4503         exit(0);}
4504 EOCP
4505 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4506         echo "Your C compiler appears to support function prototypes."
4507         val="$define"
4508 else
4509         echo "Your C compiler doesn't seem to understand function prototypes."
4510         val="$undef"
4511 fi
4512 set prototype
4513 eval $setvar
4514 $rm -f prototype*
4515
4516 case "$prototype" in
4517 "$define") ;;
4518 *)      ansi2knr='ansi2knr'
4519         echo " "
4520         cat <<EOM >&4
4521
4522 $me:  FATAL ERROR:
4523 This version of $package can only be compiled by a compiler that 
4524 understands function prototypes.  Unfortunately, your C compiler 
4525         $cc $ccflags
4526 doesn't seem to understand them.  Sorry about that.
4527
4528 If GNU cc is available for your system, perhaps you could try that instead.  
4529
4530 Eventually, we hope to support building Perl with pre-ANSI compilers.
4531 If you would like to help in that effort, please contact <perlbug@perl.org>.
4532
4533 Aborting Configure now.
4534 EOM
4535         exit 2
4536         ;;
4537 esac
4538
4539 : determine where public executables go
4540 echo " "
4541 set dflt bin bin
4542 eval $prefixit
4543 fn=d~
4544 rp='Pathname where the public executables will reside?'
4545 . ./getfile
4546 if $test "X$ansexp" != "X$binexp"; then
4547         installbin=''
4548 fi
4549 bin="$ans"
4550 binexp="$ansexp"
4551 if $afs; then
4552         $cat <<EOM
4553
4554 Since you are running AFS, I need to distinguish the directory in which
4555 executables reside from the directory in which they are installed (and from
4556 which they are presumably copied to the former directory by occult means).
4557
4558 EOM
4559         case "$installbin" in
4560         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4561         *) dflt="$installbin";;
4562         esac
4563         fn=de~
4564         rp='Where will public executables be installed?'
4565         . ./getfile
4566         installbin="$ans"
4567 else
4568         installbin="$binexp"
4569 fi
4570
4571 : determine whether to install perl also as /usr/bin/perl
4572
4573 echo " "
4574 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4575         $cat <<EOM
4576 Many scripts expect to perl to be installed as /usr/bin/perl.
4577 I can install the perl you are about to compile also as /usr/bin/perl
4578 (in addition to $installbin/perl).
4579 EOM
4580         case "$installusrbinperl" in
4581         "$undef"|[nN]*) dflt='n';;
4582         *)              dflt='y';;
4583         esac
4584         rp="Do you want to install perl as /usr/bin/perl?"
4585         . ./myread
4586         case "$ans" in
4587         [yY]*)  val="$define";;
4588         *)      val="$undef" ;;
4589         esac
4590 else
4591         val="$undef"
4592 fi
4593 set installusrbinperl
4594 eval $setvar
4595
4596 : define a shorthand compile call
4597 compile='
4598 mc_file=$1;
4599 shift;
4600 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4601 : define a shorthand compile call for compilations that should be ok.
4602 compile_ok='
4603 mc_file=$1;
4604 shift;
4605 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4606
4607 echo " "
4608 echo "Checking for GNU C Library..." >&4
4609 cat >gnulibc.c <<EOM
4610 #include <stdio.h>
4611 int main()
4612 {
4613 #ifdef __GLIBC__
4614     exit(0);
4615 #else
4616     exit(1);
4617 #endif
4618 }
4619 EOM
4620 set gnulibc
4621 if eval $compile_ok && ./gnulibc; then
4622         val="$define"
4623         echo "You are using the GNU C Library"
4624 else
4625         val="$undef"
4626         echo "You are not using the GNU C Library"
4627 fi
4628 $rm -f gnulibc*
4629 set d_gnulibc
4630 eval $setvar
4631
4632 : see if nm is to be used to determine whether a symbol is defined or not
4633 case "$usenm" in
4634 '')
4635         dflt=''
4636         case "$d_gnulibc" in
4637         "$define")
4638                 echo " "
4639                 echo "nm probably won't work on the GNU C Library." >&4
4640                 dflt=n
4641                 ;;
4642         esac
4643         case "$dflt" in
4644         '') 
4645                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4646                         echo " "
4647                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4648                         echo "'nm' won't be sufficient on this sytem." >&4
4649                         dflt=n
4650                 fi
4651                 ;;
4652         esac
4653         case "$dflt" in
4654         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4655                 if $test $dflt -gt 20; then
4656                         dflt=y
4657                 else
4658                         dflt=n
4659                 fi
4660                 ;;
4661         esac
4662         ;;
4663 *)
4664         case "$usenm" in
4665         true|$define) dflt=y;;
4666         *) dflt=n;;
4667         esac
4668         ;;
4669 esac
4670 $cat <<EOM
4671
4672 I can use $nm to extract the symbols from your C libraries. This
4673 is a time consuming task which may generate huge output on the disk (up
4674 to 3 megabytes) but that should make the symbols extraction faster. The
4675 alternative is to skip the 'nm' extraction part and to compile a small
4676 test program instead to determine whether each symbol is present. If
4677 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4678 this may be the best solution.
4679
4680 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4681
4682 EOM
4683 rp="Shall I use $nm to extract C symbols from the libraries?"
4684 . ./myread
4685 case "$ans" in
4686 [Nn]*) usenm=false;;
4687 *) usenm=true;;
4688 esac
4689
4690 runnm=$usenm
4691 case "$reuseval" in
4692 true) runnm=false;;
4693 esac
4694
4695 : nm options which may be necessary
4696 case "$nm_opt" in
4697 '') if $test -f /mach_boot; then
4698                 nm_opt=''       # Mach
4699         elif $test -d /usr/ccs/lib; then
4700                 nm_opt='-p'     # Solaris (and SunOS?)
4701         elif $test -f /dgux; then
4702                 nm_opt='-p'     # DG-UX
4703         elif $test -f /lib64/rld; then
4704                 nm_opt='-p'     # 64-bit Irix
4705         else
4706                 nm_opt=''
4707         fi;;
4708 esac
4709
4710 : nm options which may be necessary for shared libraries but illegal
4711 : for archive libraries.  Thank you, Linux.
4712 case "$nm_so_opt" in
4713 '')     case "$myuname" in
4714         *linux*)
4715                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4716                         nm_so_opt='--dynamic'
4717                 fi
4718                 ;;
4719         esac
4720         ;;
4721 esac
4722
4723 case "$runnm" in
4724 true)
4725 : get list of predefined functions in a handy place
4726 echo " "
4727 case "$libc" in
4728 '') libc=unknown
4729         case "$libs" in
4730         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4731         esac
4732         ;;
4733 esac
4734 libnames='';
4735 case "$libs" in
4736 '') ;;
4737 *)  for thislib in $libs; do
4738         case "$thislib" in
4739         -lc|-lc_s)
4740                 : Handle C library specially below.
4741                 ;;
4742         -l*)
4743                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4744                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4745                         :
4746                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4747                         :
4748                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4749                         :
4750                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4751                         :
4752                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4753                         :
4754                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4755                         :
4756                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4757                         :
4758                 else
4759                         try=''
4760                 fi
4761                 libnames="$libnames $try"
4762                 ;;
4763         *) libnames="$libnames $thislib" ;;
4764         esac
4765         done
4766         ;;
4767 esac
4768 xxx=normal
4769 case "$libc" in
4770 unknown)
4771         set /lib/libc.$so
4772         for xxx in $libpth; do
4773                 $test -r $1 || set $xxx/libc.$so
4774                 : The messy sed command sorts on library version numbers.
4775                 $test -r $1 || \
4776                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4777                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4778                                 h
4779                                 s/[0-9][0-9]*/0000&/g
4780                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4781                                 G
4782                                 s/\n/ /' | \
4783                          sort | $sed -e 's/^.* //'`
4784                 eval set \$$#
4785         done
4786         $test -r $1 || set /usr/ccs/lib/libc.$so
4787         $test -r $1 || set /lib/libsys_s$_a
4788         ;;
4789 *)
4790         set blurfl
4791         ;;
4792 esac
4793 if $test -r "$1"; then
4794         echo "Your (shared) C library seems to be in $1."
4795         libc="$1"
4796 elif $test -r /lib/libc && $test -r /lib/clib; then
4797         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4798         xxx=apollo
4799         libc='/lib/clib /lib/libc'
4800         if $test -r /lib/syslib; then
4801                 echo "(Your math library is in /lib/syslib.)"
4802                 libc="$libc /lib/syslib"
4803         fi
4804 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4805         echo "Your C library seems to be in $libc, as you said before."
4806 elif $test -r $incpath/usr/lib/libc$_a; then
4807         libc=$incpath/usr/lib/libc$_a;
4808         echo "Your C library seems to be in $libc.  That's fine."
4809 elif $test -r /lib/libc$_a; then
4810         libc=/lib/libc$_a;
4811         echo "Your C library seems to be in $libc.  You're normal."
4812 else
4813         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4814                 :
4815         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4816                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4817         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4818                 :
4819         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4820                 :
4821         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4822                 :
4823         else
4824                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4825         fi
4826         if $test -r "$tans"; then
4827                 echo "Your C library seems to be in $tans, of all places."
4828                 libc=$tans
4829         else
4830                 libc='blurfl'
4831         fi
4832 fi
4833 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4834         dflt="$libc"
4835         cat <<EOM
4836
4837 If the guess above is wrong (which it might be if you're using a strange
4838 compiler, or your machine supports multiple models), you can override it here.
4839
4840 EOM
4841 else
4842         dflt=''
4843         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4844         cat >&4 <<EOM
4845 I can't seem to find your C library.  I've looked in the following places:
4846
4847 EOM
4848         $sed 's/^/      /' libpath
4849         cat <<EOM
4850
4851 None of these seems to contain your C library. I need to get its name...
4852
4853 EOM
4854 fi
4855 fn=f
4856 rp='Where is your C library?'
4857 . ./getfile
4858 libc="$ans"
4859
4860 echo " "
4861 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4862 set X `cat libnames`
4863 shift
4864 xxx=files
4865 case $# in 1) xxx=file; esac
4866 echo "Extracting names from the following $xxx for later perusal:" >&4
4867 echo " "
4868 $sed 's/^/      /' libnames >&4
4869 echo " "
4870 $echo $n "This may take a while...$c" >&4
4871
4872 for file in $*; do
4873         case $file in
4874         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4875         *) $nm $nm_opt $file 2>/dev/null;;
4876         esac
4877 done >libc.tmp
4878
4879 $echo $n ".$c"
4880 $grep fprintf libc.tmp > libc.ptf
4881 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4882 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4883 xxx='[ADTSIW]'
4884 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4889         eval $xscan;\
4890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4891                 eval $xrun
4892 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4893         eval $xscan;\
4894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4895                 eval $xrun
4896 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4897         eval $xscan;\
4898         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4899                 eval $xrun
4900 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4901         eval $xscan;\
4902         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4903                 eval $xrun
4904 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4905         eval $xscan;\
4906         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4907                 eval $xrun
4908 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4909                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4910         eval $xscan;\
4911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4912                 eval $xrun
4913 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4914         eval $xscan;\
4915         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4916                 eval $xrun
4917 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4918         eval $xscan;\
4919         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4920                 eval $xrun
4921 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4922         eval $xscan;\
4923         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4924                 eval $xrun
4925 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4926         eval $xscan;\
4927         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4928                 eval $xrun
4929 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4930         eval $xscan;\
4931         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4932                 eval $xrun
4933 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4934         eval $xscan;\
4935         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4936                 eval $xrun
4937 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4938         eval $xscan;\
4939         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4940                 eval $xrun
4941 else
4942         $nm -p $* 2>/dev/null >libc.tmp
4943         $grep fprintf libc.tmp > libc.ptf
4944         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4945                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4946         then
4947                 nm_opt='-p'
4948                 eval $xrun
4949         else
4950                 echo " "
4951                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4952                 com=''
4953                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4954                         for thisname in $libnames $libc; do
4955                                 $ar t $thisname >>libc.tmp
4956                         done
4957                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4958                         echo "Ok." >&4
4959                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4960                         # Repeat libc to extract forwarders to DLL entries too
4961                         for thisname in $libnames $libc; do
4962                                 $ar tv $thisname >>libc.tmp
4963                                 # Revision 50 of EMX has bug in $ar.
4964                                 # it will not extract forwarders to DLL entries
4965                                 # Use emximp which will extract exactly them.
4966                                 emximp -o tmp.imp $thisname \
4967                                     2>/dev/null && \
4968                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4969                                     < tmp.imp >>libc.tmp
4970                                 $rm tmp.imp
4971                         done
4972                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4973                         echo "Ok." >&4
4974                 else
4975                         echo "$ar didn't seem to work right." >&4
4976                         echo "Maybe this is a Cray...trying bld instead..." >&4
4977                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4978                         then
4979                                 for thisname in $libnames; do
4980                                         bld t $libnames | \
4981                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4982                                         $ar t $thisname >>libc.tmp
4983                                 done
4984                                 echo "Ok." >&4
4985                         else
4986                                 echo "That didn't work either.  Giving up." >&4
4987                                 exit 1
4988                         fi
4989                 fi
4990         fi
4991 fi
4992 nm_extract="$com"
4993 if $test -f /lib/syscalls.exp; then
4994         echo " "
4995         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4996         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4997 fi
4998 ;;
4999 esac
5000 $rm -f libnames libpath
5001
5002 : see if dld is available
5003 set dld.h i_dld
5004 eval $inhdr
5005
5006 : is a C symbol defined?
5007 csym='tlook=$1;
5008 case "$3" in
5009 -v) tf=libc.tmp; tc=""; tdc="";;
5010 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5011 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5012 esac;
5013 tx=yes;
5014 case "$reuseval-$4" in
5015 true-) ;;
5016 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5017 esac;
5018 case "$tx" in
5019 yes)
5020         case "$runnm" in
5021         true)
5022                 if $contains $tlook $tf >/dev/null 2>&1;
5023                 then tval=true;
5024                 else tval=false;
5025                 fi;;
5026         *)
5027                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5028                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5029                 then tval=true;
5030                 else tval=false;
5031                 fi;
5032                 $rm -f t t.c;;
5033         esac;;
5034 *)
5035         case "$tval" in
5036         $define) tval=true;;
5037         *) tval=false;;
5038         esac;;
5039 esac;
5040 eval "$2=$tval"'
5041
5042 : define an is-in-libc? function
5043 inlibc='echo " "; td=$define; tu=$undef;
5044 sym=$1; var=$2; eval "was=\$$2";
5045 tx=yes;
5046 case "$reuseval$was" in
5047 true) ;;
5048 true*) tx=no;;
5049 esac;
5050 case "$tx" in
5051 yes)
5052         set $sym tres -f;
5053         eval $csym;
5054         case "$tres" in
5055         true)
5056                 echo "$sym() found." >&4;
5057                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5058         *)
5059                 echo "$sym() NOT found." >&4;
5060                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5061         esac;;
5062 *)
5063         case "$was" in
5064         $define) echo "$sym() found." >&4;;
5065         *) echo "$sym() NOT found." >&4;;
5066         esac;;
5067 esac'
5068
5069 : see if dlopen exists
5070 xxx_runnm="$runnm"
5071 runnm=false
5072 set dlopen d_dlopen
5073 eval $inlibc
5074 runnm="$xxx_runnm"
5075
5076 : determine which dynamic loading, if any, to compile in
5077 echo " "
5078 dldir="ext/DynaLoader"
5079 case "$usedl" in
5080 $define|y|true)
5081         dflt='y'
5082         usedl="$define"
5083         ;;
5084 $undef|n|false)
5085         dflt='n'
5086         usedl="$undef"
5087         ;;
5088 *) 
5089         dflt='n'
5090         case "$d_dlopen" in
5091             $define) dflt='y' ;;
5092         esac
5093         case "$i_dld" in
5094             $define) dflt='y' ;;
5095         esac
5096         : Does a dl_xxx.xs file exist for this operating system
5097         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5098         ;;
5099 esac
5100 rp="Do you wish to use dynamic loading?"
5101 . ./myread
5102 usedl="$ans"
5103 case "$ans" in
5104 y*) usedl="$define"
5105         case "$dlsrc" in
5106         '')
5107                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5108                         dflt="$dldir/dl_${osname}.xs"
5109                 elif $test "$d_dlopen" = "$define" ; then
5110                         dflt="$dldir/dl_dlopen.xs"
5111                 elif $test "$i_dld" = "$define" ; then
5112                         dflt="$dldir/dl_dld.xs"
5113                 else
5114                         dflt=''
5115                 fi
5116                 ;;
5117         *)      dflt="$dldir/$dlsrc"
5118                 ;;
5119         esac
5120     echo "The following dynamic loading files are available:"
5121         : Can not go over to $dldir because getfile has path hard-coded in.
5122         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5123         rp="Source file to use for dynamic loading"
5124         fn="fne"
5125         # XXX This getfile call will fail the existence check if you try 
5126         # building away from $src (this is not supported yet).
5127         . ./getfile
5128         usedl="$define"
5129         : emulate basename
5130         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5131
5132         $cat << EOM
5133
5134 Some systems may require passing special flags to $cc -c to
5135 compile modules that will be used to create a shared library.
5136 To use no flags, say "none".
5137
5138 EOM
5139     case "$cccdlflags" in
5140     '') case "$gccversion" in
5141                 '') case "$osname" in
5142                         hpux)   dflt='+z' ;;
5143                         next)   dflt='none' ;;
5144                         irix*)  dflt='-KPIC' ;;
5145                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5146                         sunos)  dflt='-pic' ;;
5147                         *)      dflt='none' ;;
5148                     esac
5149                         ;;
5150                 *)  case "$osname" in
5151                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5152                         *)      dflt='-fpic' ;;
5153                     esac ;;
5154             esac ;;
5155         ' ') dflt='none' ;;
5156     *)  dflt="$cccdlflags" ;;
5157     esac
5158     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5159     . ./myread
5160     case "$ans" in
5161     none) cccdlflags=' ' ;;
5162     *) cccdlflags="$ans" ;;
5163     esac
5164
5165     cat << EOM
5166
5167 Some systems use ld to create libraries that can be dynamically loaded,
5168 while other systems (such as those using ELF) use $cc.
5169
5170 EOM
5171         case "$ld" in
5172         '')     $cat >try.c <<'EOM'
5173 /* Test for whether ELF binaries are produced */
5174 #include <fcntl.h>
5175 #include <stdlib.h>
5176 int main() {
5177         char b[4];
5178         int i = open("a.out",O_RDONLY);
5179         if(i == -1) 
5180                 exit(1); /* fail */
5181         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5182                 exit(0); /* succeed (yes, it's ELF) */
5183         else
5184                 exit(1); /* fail */
5185 }
5186 EOM
5187                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5188                         cat <<EOM
5189 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5190 EOM
5191                         dflt="$cc"
5192                 else
5193                         echo "I'll use ld to build dynamic libraries."
5194                         dflt='ld'
5195                 fi
5196                 rm -f try.c a.out
5197                 ;;
5198         *)      dflt="$ld"
5199                 ;;
5200         esac
5201
5202     rp="What command should be used to create dynamic libraries?"
5203     . ./myread
5204         ld="$ans"
5205
5206     cat << EOM
5207
5208 Some systems may require passing special flags to $ld to create a
5209 library that can be dynamically loaded.  If your ld flags include
5210 -L/other/path options to locate libraries outside your loader's normal
5211 search path, you may need to specify those -L options here as well.  To
5212 use no flags, say "none".
5213
5214 EOM
5215     case "$lddlflags" in
5216     '') case "$osname" in
5217                         beos) dflt='-nostart' ;;
5218                         hpux)  dflt='-b' ;;
5219                         linux|irix*)    dflt='-shared' ;;
5220                         next)  dflt='none' ;;
5221                         solaris) dflt='-G' ;;
5222                         sunos) dflt='-assert nodefinitions' ;;
5223                         svr4*|esix*) dflt="-G $ldflags" ;;
5224                 *)     dflt='none' ;;
5225                         esac
5226                         ;;
5227     *) dflt="$lddlflags" ;;
5228     esac
5229
5230         : Try to guess additional flags to pick up local libraries.
5231         : Be careful not to append to a plain 'none'
5232         case "$dflt" in
5233         none) dflt='' ;;
5234         esac
5235         for thisflag in $ldflags; do
5236                 case "$thisflag" in
5237                 -L*)
5238                         case " $dflt " in
5239                         *" $thisflag "*) ;;
5240                         *) dflt="$dflt $thisflag" ;;
5241                         esac
5242                         ;;
5243                 esac
5244         done
5245
5246         case "$dflt" in
5247         ''|' ') dflt='none' ;;
5248         esac
5249
5250     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5251     . ./myread
5252     case "$ans" in
5253     none) lddlflags=' ' ;;
5254     *) lddlflags="$ans" ;;
5255     esac
5256
5257         cat <<EOM
5258
5259 Some systems may require passing special flags to $cc to indicate that
5260 the resulting executable will use dynamic linking.  To use no flags,
5261 say "none".
5262
5263 EOM
5264     case "$ccdlflags" in
5265     '') case "$osname" in
5266                 hpux)   dflt='-Wl,-E' ;;
5267                 linux)  dflt='-rdynamic' ;;
5268                 next)   dflt='none' ;;
5269                 sunos)  dflt='none' ;;
5270                 *)      dflt='none' ;;
5271             esac ;;
5272     ' ')  dflt='none' ;;
5273     *)  dflt="$ccdlflags" ;;
5274     esac
5275     rp="Any special flags to pass to $cc to use dynamic loading?"
5276     . ./myread
5277     case "$ans" in
5278     none) ccdlflags=' ' ;;
5279     *) ccdlflags="$ans" ;;
5280     esac
5281     ;;
5282 *)  usedl="$undef"
5283         ld='ld'
5284     dlsrc='dl_none.xs'
5285     lddlflags=''
5286     ccdlflags=''
5287     ;;
5288 esac
5289
5290 also=''
5291 case "$usedl" in
5292 $undef)
5293         # No dynamic loading being used, so don't bother even to prompt.
5294         useshrplib='false'
5295         ;;
5296 *)      case "$useshrplib" in
5297         '')     case "$osname" in
5298                 svr4*|dgux|dynixptx|esix|powerux|beos)
5299                         dflt=y
5300                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5301                         ;;
5302                 next*)
5303                         case "$osvers" in
5304                         4*)     dflt=y
5305                                 also='Building a shared libperl is needed for MAB support.'
5306                                 ;;
5307                         *)      dflt=n
5308                                 ;;
5309                         esac
5310                         ;;
5311                 *)      dflt=n
5312                         ;;
5313                 esac
5314                 ;;
5315         $define|true|[Yy]*)
5316                 dflt=y
5317                 ;;
5318         *)      dflt=n
5319                 ;;
5320         esac
5321         $cat << EOM
5322
5323 The perl executable is normally obtained by linking perlmain.c with
5324 libperl${_a}, any static extensions (usually just DynaLoader), and
5325 any other libraries needed on this system (such as -lm, etc.).  Since
5326 your system supports dynamic loading, it is probably possible to build
5327 a shared libperl.$so.  If you will have more than one executable linked
5328 to libperl.$so, this will significantly reduce the size of each
5329 executable, but it may have a noticeable affect on performance.  The
5330 default is probably sensible for your system.
5331 $also
5332
5333 EOM
5334         rp="Build a shared libperl.$so (y/n)"
5335         . ./myread
5336         case "$ans" in
5337         true|$define|[Yy]*)
5338                 useshrplib='true'
5339                 # Why does next4 have to be so different?
5340                 case "${osname}${osvers}" in
5341                 next4*|rhapsody*)
5342                         xxx='DYLD_LIBRARY_PATH' ;;
5343                 os2*)   xxx='' ;; # Nothing special needed.
5344                 beos*)  xxx='' ;;
5345                 *)              xxx='LD_LIBRARY_PATH' ;;
5346                 esac
5347                 ;;
5348         *)      useshrplib='false' ;;
5349         esac
5350         ;;
5351 esac
5352
5353 case "$useshrplib" in
5354 true)
5355         case "$libperl" in
5356         '')
5357                 # Figure out a good name for libperl.so.  Since it gets stored in
5358                 # a version-specific architecture-dependent library, the version
5359                 # number isn't really that important, except for making cc/ld happy.
5360                 #
5361                 # A name such as libperl.so.3.1
5362                 majmin="libperl.$so.$patchlevel.$subversion"
5363                 # A name such as libperl.so.301
5364                 majonly=`echo $patchlevel $subversion |
5365                         $awk '{printf "%d%02d", $1, $2}'`
5366                 majonly=libperl.$so.$majonly
5367                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5368                 # rely on figuring it out from the naming of libc.
5369                 case "${osname}${osvers}" in
5370                 next4*)
5371                         dflt=libperl.5.$so
5372                         # XXX How handle the --version stuff for MAB?
5373                         ;;
5374                 linux*)  # ld won't link with a bare -lperl otherwise.
5375                         dflt=libperl.$so
5376                         ;;
5377                 *)      # Try to guess based on whether libc has major.minor.
5378                         case "$libc" in
5379                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5380                         *libc.$so.[0-9]*) dflt=$majonly ;;
5381                         *)      dflt=libperl.$so ;;
5382                         esac
5383                         ;;
5384                 esac
5385                 ;;
5386         *)      dflt=$libperl
5387                 ;;
5388         esac
5389         cat << EOM
5390
5391 I need to select a good name for the shared libperl.  If your system uses
5392 library names with major and minor numbers, then you might want something
5393 like $majmin.  Alternatively, if your system uses a single version
5394 number for shared libraries, then you might want to use $majonly.
5395 Or, your system might be quite happy with a simple libperl.$so.
5396
5397 Since the shared libperl will get installed into a version-specific
5398 architecture-dependent directory, the version number of the shared perl
5399 library probably isn't important, so the default should be o.k.
5400
5401 EOM
5402         rp='What name do you want to give to the shared libperl?'
5403         . ./myread
5404         libperl=$ans
5405         echo "Ok, I'll use $libperl"
5406         ;;
5407 *)
5408         libperl="libperl${_a}"
5409         ;;
5410 esac
5411
5412 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5413 case "$shrpdir" in
5414 '') ;;
5415 *)      $cat >&4 <<EOM
5416 WARNING:  Use of the shrpdir variable for the installation location of
5417 the shared $libperl is not supported.  It was never documented and
5418 will not work in this version.  Let me (perlbug@perl.com)
5419 know of any problems this may cause.
5420
5421 EOM
5422         case "$shrpdir" in
5423         "$archlibexp/CORE")
5424                 $cat >&4 <<EOM
5425 But your current setting of $shrpdir is
5426 the default anyway, so it's harmless.
5427 EOM
5428                 ;;
5429         *)
5430                 $cat >&4 <<EOM
5431 Further, your current attempted setting of $shrpdir
5432 conflicts with the value of $archlibexp/CORE
5433 that installperl will use.
5434 EOM
5435                 ;;
5436         esac
5437         ;;
5438 esac
5439
5440 # How will the perl executable find the installed shared $libperl?
5441 # Add $xxx to ccdlflags.
5442 # If we can't figure out a command-line option, use $shrpenv to
5443 # set env LD_RUN_PATH.  The main perl makefile uses this.
5444 shrpdir=$archlibexp/CORE
5445 xxx=''
5446 tmp_shrpenv=''
5447 if "$useshrplib"; then
5448     case "$osname" in 
5449         aix)
5450                 # We'll set it in Makefile.SH...
5451                 ;;
5452         solaris|netbsd)
5453                 xxx="-R $shrpdir"
5454                 ;;
5455         freebsd)
5456                 xxx="-Wl,-R$shrpdir"
5457                 ;;
5458         linux|irix*|dec_osf)
5459                 xxx="-Wl,-rpath,$shrpdir"
5460                 ;;
5461         next)
5462                 # next doesn't like the default...
5463                 ;;
5464         beos)
5465                 # beos doesn't like the default, either.
5466                 ;;
5467         hpux*)
5468                 # hpux doesn't like the default, either.
5469                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5470                 ;;
5471         *)
5472                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5473                 ;;
5474         esac
5475         case "$xxx" in
5476         '') ;;
5477         *)      
5478                 # Only add $xxx if it isn't already in ccdlflags.
5479                 case " $ccdlflags " in
5480                 *" $xxx "*)     ;;
5481                 *)      ccdlflags="$ccdlflags $xxx"
5482                         cat <<EOM >&4
5483
5484 Adding $xxx to the flags
5485 passed to $ld so that the perl executable will find the 
5486 installed shared $libperl.
5487
5488 EOM
5489                         ;;
5490                 esac
5491                 ;;
5492         esac
5493 fi
5494 # Respect a hint or command-line value.
5495 case "$shrpenv" in
5496 '') shrpenv="$tmp_shrpenv" ;;
5497 esac
5498
5499 : determine where manual pages go
5500 set man1dir man1dir none
5501 eval $prefixit
5502 $cat <<EOM
5503
5504 $spackage has manual pages available in source form.
5505 EOM
5506 case "$nroff" in
5507 nroff)
5508         echo "However, you don't have nroff, so they're probably useless to you."
5509         case "$man1dir" in
5510         '') man1dir="none";;
5511         esac;;
5512 esac
5513 echo "If you don't want the manual sources installed, answer 'none'."
5514 case "$man1dir" in
5515 ' ') dflt=none
5516         ;;
5517 '')
5518         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5519         lookpath="$lookpath $prefixexp/man/p_man/man1"
5520         lookpath="$lookpath $prefixexp/man/u_man/man1"
5521         lookpath="$lookpath $prefixexp/man/man.1"
5522         case "$sysman" in
5523         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5524         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5525         esac
5526         set dflt
5527         eval $prefixup
5528         ;;
5529 *)  dflt="$man1dir"
5530         ;;
5531 esac
5532 echo " "
5533 fn=dn+~
5534 rp="Where do the main $spackage manual pages (source) go?"
5535 . ./getfile
5536 if $test "X$man1direxp" != "X$ansexp"; then
5537         installman1dir=''
5538 fi
5539 man1dir="$ans"
5540 man1direxp="$ansexp"
5541 case "$man1dir" in
5542 '') man1dir=' '
5543         installman1dir='';;
5544 esac
5545 if $afs; then
5546         $cat <<EOM
5547
5548 Since you are running AFS, I need to distinguish the directory in which
5549 manual pages reside from the directory in which they are installed (and from
5550 which they are presumably copied to the former directory by occult means).
5551
5552 EOM
5553         case "$installman1dir" in
5554         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5555         *) dflt="$installman1dir";;
5556         esac
5557         fn=de~
5558         rp='Where will man pages be installed?'
5559         . ./getfile
5560         installman1dir="$ans"
5561 else
5562         installman1dir="$man1direxp"
5563 fi
5564
5565 : What suffix to use on installed man pages
5566
5567 case "$man1dir" in
5568 ' ')
5569         man1ext='0'
5570         ;;
5571 *)
5572         rp="What suffix should be used for the main $spackage man pages?"
5573         case "$man1ext" in
5574         '')     case "$man1dir" in
5575                 *1)  dflt=1 ;;
5576                 *1p) dflt=1p ;;
5577                 *1pm) dflt=1pm ;;
5578                 *l) dflt=l;;
5579                 *n) dflt=n;;
5580                 *o) dflt=o;;
5581                 *p) dflt=p;;
5582                 *C) dflt=C;;
5583                 *L) dflt=L;;
5584                 *L1) dflt=L1;;
5585                 *) dflt=1;;
5586                 esac
5587                 ;;
5588         *)      dflt="$man1ext";;
5589         esac
5590         . ./myread
5591         man1ext="$ans"
5592         ;;
5593 esac
5594
5595 : see if we can have long filenames
5596 echo " "
5597 rmlist="$rmlist /tmp/cf$$"
5598 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5599 first=123456789abcdef
5600 second=/tmp/cf$$/$first
5601 $rm -f $first $second
5602 if (echo hi >$first) 2>/dev/null; then
5603         if $test -f 123456789abcde; then
5604                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5605                 val="$undef"
5606         else
5607                 if (echo hi >$second) 2>/dev/null; then
5608                         if $test -f /tmp/cf$$/123456789abcde; then
5609                                 $cat <<'EOM'
5610 That's peculiar... You can have filenames longer than 14 characters, but only
5611 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5612 I shall consider your system cannot support long filenames at all.
5613 EOM
5614                                 val="$undef"
5615                         else
5616                                 echo 'You can have filenames longer than 14 characters.' >&4
5617                                 val="$define"
5618                         fi
5619                 else
5620                         $cat <<'EOM'
5621 How confusing! Some of your filesystems are sane enough to allow filenames
5622 longer than 14 characters but some others like /tmp can't even think about them.
5623 So, for now on, I shall assume your kernel does not allow them at all.
5624 EOM
5625                         val="$undef"
5626                 fi
5627         fi
5628 else
5629         $cat <<'EOM'
5630 You can't have filenames longer than 14 chars.  You can't even think about them!
5631 EOM
5632         val="$undef"
5633 fi 
5634 set d_flexfnam
5635 eval $setvar
5636 $rm -rf /tmp/cf$$ 123456789abcde*
5637
5638 : determine where library module manual pages go
5639 set man3dir man3dir none
5640 eval $prefixit
5641 $cat <<EOM
5642
5643 $spackage has manual pages for many of the library modules.
5644 EOM
5645
5646 case "$nroff" in
5647 nroff)
5648         $cat <<'EOM'
5649 However, you don't have nroff, so they're probably useless to you.
5650 EOM
5651         case "$man3dir" in
5652         '') man3dir="none";;
5653         esac;;
5654 esac
5655
5656 case "$d_flexfnam" in
5657 undef)
5658         $cat <<'EOM'
5659 However, your system can't handle the long file names like File::Basename.3. 
5660 EOM
5661         case "$man3dir" in
5662         '') man3dir="none";;
5663         esac;;
5664 esac
5665
5666 echo "If you don't want the manual sources installed, answer 'none'."
5667 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5668 case "$man3dir" in
5669 '')     case "$prefix" in 
5670         *$prog*) dflt=`echo $man1dir | 
5671                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5672         *)      dflt="$privlib/man/man3" ;;
5673         esac
5674         ;;
5675 ' ') dflt=none;;
5676 *)      dflt="$man3dir" ;;
5677 esac
5678 echo " "
5679
5680 fn=dn+~
5681 rp="Where do the $package library man pages (source) go?"
5682 . ./getfile
5683 if test "X$man3direxp" != "X$ansexp"; then
5684         installman3dir=''
5685 fi
5686
5687 man3dir="$ans"
5688 man3direxp="$ansexp"
5689 case "$man3dir" in
5690 '') man3dir=' '
5691         installman3dir='';;
5692 esac
5693 if $afs; then
5694         $cat <<EOM
5695
5696 Since you are running AFS, I need to distinguish the directory in which
5697 manual pages reside from the directory in which they are installed (and from
5698 which they are presumably copied to the former directory by occult means).
5699
5700 EOM
5701         case "$installman3dir" in
5702         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5703         *) dflt="$installman3dir";;
5704         esac
5705         fn=de~
5706         rp='Where will man pages be installed?'
5707         . ./getfile
5708         installman3dir="$ans"
5709 else
5710         installman3dir="$man3direxp"
5711 fi
5712
5713 : What suffix to use on installed man pages
5714
5715 case "$man3dir" in
5716 ' ')
5717         man3ext='0'
5718         ;;
5719 *)
5720         rp="What suffix should be used for the $package library man pages?"
5721         case "$man3ext" in
5722         '')     case "$man3dir" in
5723                 *3)  dflt=3 ;;
5724                 *3p) dflt=3p ;;
5725                 *3pm) dflt=3pm ;;
5726                 *l) dflt=l;;
5727                 *n) dflt=n;;
5728                 *o) dflt=o;;
5729                 *p) dflt=p;;
5730                 *C) dflt=C;;
5731                 *L) dflt=L;;
5732                 *L3) dflt=L3;;
5733                 *) dflt=3;;
5734                 esac
5735                 ;;
5736         *)      dflt="$man3ext";;
5737         esac
5738         . ./myread
5739         man3ext="$ans"
5740         ;;
5741 esac
5742
5743 : see if we have to deal with yellow pages, now NIS.
5744 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5745         if $test -f /usr/etc/nibindd; then
5746                 echo " "
5747                 echo "I'm fairly confident you're on a NeXT."
5748                 echo " "
5749                 rp='Do you get the hosts file via NetInfo?'
5750                 dflt=y
5751                 case "$hostcat" in
5752                 nidump*) ;;
5753                 '') ;;
5754                 *) dflt=n;;
5755                 esac
5756                 . ./myread
5757                 case "$ans" in
5758                 y*) hostcat='nidump hosts .';;
5759                 *)      case "$hostcat" in
5760                         nidump*) hostcat='';;
5761                         esac
5762                         ;;
5763                 esac
5764         fi
5765         case "$hostcat" in
5766         nidump*) ;;
5767         *)
5768                 case "$hostcat" in
5769                 *ypcat*) dflt=y;;
5770                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5771                                 dflt=y
5772                         else
5773                                 dflt=n
5774                         fi;;
5775                 *) dflt=n;;
5776                 esac
5777                 echo " "
5778                 rp='Are you getting the hosts file via yellow pages?'
5779                 . ./myread
5780                 case "$ans" in
5781                 y*) hostcat='ypcat hosts';;
5782                 *) hostcat='cat /etc/hosts';;
5783                 esac
5784                 ;;
5785         esac
5786 fi
5787 case "$hostcat" in
5788 '') hostcat='cat /etc/hosts';;
5789 esac
5790 case "$groupcat" in
5791 '') groupcat='cat /etc/group';;
5792 esac
5793 case "$passcat" in
5794 '') passcat='cat /etc/passwd';;
5795 esac
5796
5797 : now get the host name
5798 echo " "
5799 echo "Figuring out host name..." >&4
5800 case "$myhostname" in
5801 '') cont=true
5802         echo 'Maybe "hostname" will work...'
5803         if tans=`sh -c hostname 2>&1` ; then
5804                 myhostname=$tans
5805                 phostname=hostname
5806                 cont=''
5807         fi
5808         ;;
5809 *) cont='';;
5810 esac
5811 if $test "$cont"; then
5812         if ./xenix; then
5813                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5814                 if tans=`cat /etc/systemid 2>&1` ; then
5815                         myhostname=$tans
5816                         phostname='cat /etc/systemid'
5817                         echo "Whadyaknow.  Xenix always was a bit strange..."
5818                         cont=''
5819                 fi
5820         elif $test -r /etc/systemid; then
5821                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5822         fi
5823 fi
5824 if $test "$cont"; then
5825         echo 'No, maybe "uuname -l" will work...'
5826         if tans=`sh -c 'uuname -l' 2>&1` ; then
5827                 myhostname=$tans
5828                 phostname='uuname -l'
5829         else
5830                 echo 'Strange.  Maybe "uname -n" will work...'
5831                 if tans=`sh -c 'uname -n' 2>&1` ; then
5832                         myhostname=$tans
5833                         phostname='uname -n'
5834                 else
5835                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5836                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5837                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5838                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5839                         else
5840                                 case "$myhostname" in
5841                                 '') echo "Does this machine have an identity crisis or something?"
5842                                         phostname='';;
5843                                 *)
5844                                         echo "Well, you said $myhostname before..."
5845                                         phostname='echo $myhostname';;
5846                                 esac
5847                         fi
5848                 fi
5849         fi
5850 fi
5851 : you do not want to know about this
5852 set $myhostname
5853 myhostname=$1
5854
5855 : verify guess
5856 if $test "$myhostname" ; then
5857         dflt=y
5858         rp='Your host name appears to be "'$myhostname'".'" Right?"
5859         . ./myread
5860         case "$ans" in
5861         y*) ;;
5862         *) myhostname='';;
5863         esac
5864 fi
5865
5866 : bad guess or no guess
5867 while $test "X$myhostname" = X ; do
5868         dflt=''
5869         rp="Please type the (one word) name of your host:"
5870         . ./myread
5871         myhostname="$ans"
5872 done
5873
5874 : translate upper to lower if necessary
5875 case "$myhostname" in
5876 *[A-Z]*)
5877         echo "(Normalizing case in your host name)"
5878         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5879         ;;
5880 esac
5881
5882 case "$myhostname" in
5883 *.*)
5884         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5885         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5886         echo "(Trimming domain name from host name--host name is now $myhostname)"
5887         ;;
5888 *) case "$mydomain" in
5889         '')
5890                 {
5891                         test "X$hostcat" = "Xypcat hosts" &&
5892                         ypmatch "$myhostname" hosts 2>/dev/null |\
5893                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5894                         $test -s hosts
5895                 } || {
5896                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5897                                         /[       ]$myhostname[  . ]/p" > hosts
5898                 }
5899                 tmp_re="[       . ]"
5900                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5901                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5902                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5903                         hosts | $sort | $uniq | \
5904                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5905                 case `$echo X$dflt` in
5906                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5907                         dflt=.
5908                         ;;
5909                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5910                         ;;
5911                 esac
5912                 case "$dflt" in
5913                 .)
5914                         tans=`./loc resolv.conf X /etc /usr/etc`
5915                         if $test -f "$tans"; then
5916                                 echo "(Attempting domain name extraction from $tans)"
5917                                 dflt=.`$sed -n -e 's/   / /g' \
5918                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5919                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5920                                 case "$dflt" in
5921                                 .) dflt=.`$sed -n -e 's/        / /g' \
5922                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5923                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5924                                         ;;
5925                                 esac
5926                         fi
5927                         ;;
5928                 esac
5929                 case "$dflt" in
5930                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5931                         dflt=.`sh -c domainname 2>/dev/null`
5932                         case "$dflt" in
5933                         '') dflt='.';;
5934                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5935                         esac
5936                         ;;
5937                 esac
5938                 case "$dflt" in
5939                 .) echo "(Lost all hope -- silly guess then)"
5940                         dflt='.uucp'
5941                         ;;
5942                 esac
5943                 $rm -f hosts
5944                 ;;
5945         *) dflt="$mydomain";;
5946         esac;;
5947 esac
5948 echo " "
5949 rp="What is your domain name?"
5950 . ./myread
5951 tans="$ans"
5952 case "$ans" in
5953 '') ;;
5954 .*) ;;
5955 *) tans=".$tans";;
5956 esac
5957 mydomain="$tans"
5958
5959 : translate upper to lower if necessary
5960 case "$mydomain" in
5961 *[A-Z]*)
5962         echo "(Normalizing case in your domain name)"
5963         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5964         ;;
5965 esac
5966
5967 : a little sanity check here
5968 case "$phostname" in
5969 '') ;;
5970 *)
5971         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5972         $myhostname$mydomain|$myhostname) ;;
5973         *)
5974                 case "$phostname" in
5975                 sed*)
5976                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5977                         ;;
5978                 *)
5979                         echo "(That doesn't agree with your $phostname command, by the way.)"
5980                         ;;
5981                 esac
5982         ;;
5983         esac
5984         ;;
5985 esac
5986
5987 $cat <<EOM
5988
5989 I need to get your e-mail address in Internet format if possible, i.e.
5990 something like user@host.domain. Please answer accurately since I have
5991 no easy means to double check it. The default value provided below
5992 is most probably close to the reality but may not be valid from outside
5993 your organization...
5994
5995 EOM
5996 cont=x
5997 while test "$cont"; do
5998         case "$cf_email" in
5999         '') dflt="$cf_by@$myhostname$mydomain";;
6000         *) dflt="$cf_email";;
6001         esac
6002         rp='What is your e-mail address?'
6003         . ./myread
6004         cf_email="$ans"
6005         case "$cf_email" in
6006         *@*.*) cont='' ;;
6007         *)
6008                 rp='Address does not look like an Internet one.  Use it anyway?'
6009                 case "$fastread" in
6010                 yes) dflt=y ;;
6011                 *) dflt=n ;;
6012                 esac
6013                 . ./myread
6014                 case "$ans" in
6015                 y*) cont='' ;;
6016                 *) echo " " ;;
6017                 esac
6018                 ;;
6019         esac
6020 done
6021
6022 $cat <<EOM
6023
6024 If you or somebody else will be maintaining perl at your site, please
6025 fill in the correct e-mail address here so that they may be contacted
6026 if necessary. Currently, the "perlbug" program included with perl
6027 will send mail to this address in addition to perlbug@perl.com. You may
6028 enter "none" for no administrator.
6029
6030 EOM
6031 case "$perladmin" in
6032 '') dflt="$cf_email";;
6033 *) dflt="$perladmin";;
6034 esac
6035 rp='Perl administrator e-mail address'
6036 . ./myread
6037 perladmin="$ans"
6038
6039 : figure out how to guarantee perl startup
6040 case "$startperl" in
6041 '')
6042         case "$sharpbang" in
6043         *!)
6044                 $cat <<EOH
6045
6046 I can use the #! construct to start perl on your system. This will
6047 make startup of perl scripts faster, but may cause problems if you
6048 want to share those scripts and perl is not in a standard place
6049 ($binexp/perl) on all your platforms. The alternative is to force
6050 a shell by starting the script with a single ':' character.
6051
6052 EOH
6053                 dflt="$binexp/perl"
6054                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6055                 . ./myread
6056                 case "$ans" in
6057                 none)   startperl=": # use perl";;
6058                 *)      startperl="#!$ans"
6059                         if $test 30 -lt `echo "$ans" | wc -c`; then
6060                                 $cat >&4 <<EOM
6061
6062 WARNING:  Some systems limit the #! command to 32 characters.
6063 If you experience difficulty running Perl scripts with #!, try
6064 installing Perl in a directory with a shorter pathname.
6065
6066 EOM
6067                         fi ;;
6068                 esac
6069                 ;;
6070         *) startperl=": # use perl"
6071                 ;;
6072         esac
6073         ;;
6074 esac
6075 echo "I'll use $startperl to start perl scripts."
6076
6077 : figure best path for perl in scripts
6078 case "$perlpath" in
6079 '')
6080         perlpath="$binexp/perl"
6081         case "$startperl" in
6082         *!*) ;;
6083         *)
6084                 $cat <<EOH
6085
6086 I will use the "eval 'exec'" idiom to start Perl on your system.
6087 I can use the full path of your Perl binary for this purpose, but
6088 doing so may cause problems if you want to share those scripts and
6089 Perl is not always in a standard place ($binexp/perl).
6090
6091 EOH
6092                 dflt="$binexp/perl"
6093                 rp="What path shall I use in \"eval 'exec'\"?"
6094                 . ./myread
6095                 perlpath="$ans"
6096                 ;;
6097         esac
6098         ;;
6099 esac
6100 case "$startperl" in
6101 *!*)    ;;
6102 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6103 esac
6104
6105 : determine where public executable scripts go
6106 set scriptdir scriptdir
6107 eval $prefixit
6108 case "$scriptdir" in
6109 '')
6110         dflt="$bin"
6111         : guess some guesses
6112         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6113         $test -d /usr/share/bin && dflt=/usr/share/bin
6114         $test -d /usr/local/script && dflt=/usr/local/script
6115         $test -d $prefixexp/script && dflt=$prefixexp/script
6116         set dflt
6117         eval $prefixup
6118         ;;
6119 *)  dflt="$scriptdir"
6120         ;;
6121 esac
6122 $cat <<EOM
6123  
6124 Some installations have a separate directory just for executable scripts so
6125 that they can mount it across multiple architectures but keep the scripts in
6126 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6127 Or you might just lump your scripts in with all your other executables.
6128  
6129 EOM
6130 fn=d~
6131 rp='Where do you keep publicly executable scripts?'
6132 . ./getfile
6133 if $test "X$ansexp" != "X$scriptdirexp"; then
6134         installscript=''
6135 fi
6136 scriptdir="$ans"
6137 scriptdirexp="$ansexp"
6138 if $afs; then
6139         $cat <<EOM
6140
6141 Since you are running AFS, I need to distinguish the directory in which
6142 scripts reside from the directory in which they are installed (and from
6143 which they are presumably copied to the former directory by occult means).
6144
6145 EOM
6146         case "$installscript" in
6147         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6148         *) dflt="$installscript";;
6149         esac
6150         fn=de~
6151         rp='Where will public scripts be installed?'
6152         . ./getfile
6153         installscript="$ans"
6154 else
6155         installscript="$scriptdirexp"
6156 fi
6157
6158 : determine where site specific libraries go.
6159 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6160 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6161 case "$prefix" in
6162 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6163 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6164 esac
6165 eval $prefixit
6166 $cat <<EOM
6167
6168 The installation process will also create a directory for
6169 site-specific extensions and modules.  Some users find it convenient
6170 to place all site-specific files in this directory rather than in the
6171 main distribution directory.
6172
6173 EOM
6174 fn=d~+
6175 rp='Pathname for the site-specific library files?'
6176 . ./getfile
6177 if $test "X$sitelibexp" != "X$ansexp"; then
6178         installsitelib=''
6179 fi
6180 sitelib="$ans"
6181 sitelibexp="$ansexp"
6182 if $afs; then
6183         $cat <<EOM
6184
6185 Since you are running AFS, I need to distinguish the directory in
6186 which site-specific files reside from the directory in which they are
6187 installed (and from which they are presumably copied to the former
6188 directory by occult means).
6189
6190 EOM
6191         case "$installsitelib" in
6192         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6193         *) dflt="$installsitelib";;
6194         esac
6195         fn=de~
6196         rp='Where will site-specific files be installed?'
6197         . ./getfile
6198         installsitelib="$ans"
6199 else
6200         installsitelib="$sitelibexp"
6201 fi
6202
6203 : determine where site specific architecture-dependent libraries go.
6204 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6205 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6206 : sitelib may have an optional trailing /share.
6207 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6208 tdflt="$tdflt/$archname"
6209 set sitearch sitearch none
6210 eval $prefixit
6211 case "$sitearch" in
6212 '')     dflt="$tdflt" ;;
6213 *)      dflt="$sitearch" ;;
6214 esac
6215 $cat <<EOM
6216
6217 The installation process will also create a directory for
6218 architecture-dependent site-specific extensions and modules.
6219
6220 EOM
6221 fn=nd~+
6222 rp='Pathname for the site-specific architecture-dependent library files?'
6223 . ./getfile
6224 if $test "X$sitearchexp" != "X$ansexp"; then
6225         installsitearch=''
6226 fi
6227 sitearch="$ans"
6228 sitearchexp="$ansexp"
6229 if $afs; then
6230         $cat <<EOM
6231
6232 Since you are running AFS, I need to distinguish the directory in
6233 which site-specific architecture-dependent library files reside from
6234 the directory in which they are installed (and from which they are
6235 presumably copied to the former directory by occult means).
6236
6237 EOM
6238         case "$installsitearch" in
6239         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6240         *) dflt="$installsitearch";;
6241         esac
6242         fn=de~
6243         rp='Where will site-specific architecture-dependent files be installed?'
6244         . ./getfile
6245         installsitearch="$ans"
6246 else
6247         installsitearch="$sitearchexp"
6248 fi
6249
6250 cat <<EOM
6251
6252 Previous version of $package used the standard IO mechanisms as defined
6253 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6254 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6255 the default.  This abstraction layer can use AT&T's sfio (if you already
6256 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6257 problems with some extension modules.  Using PerlIO with stdio is safe,
6258 but it is slower than plain stdio and therefore is not the default.
6259
6260 If this doesn't make any sense to you, just accept the default 'n'.
6261 EOM
6262 case "$useperlio" in
6263 $define|true|[yY]*)     dflt='y';;
6264 *) dflt='n';;
6265 esac
6266 rp='Use the experimental PerlIO abstraction layer?'
6267 . ./myread
6268 case "$ans" in
6269 y|Y) 
6270         val="$define"
6271         ;;     
6272 *)      
6273         echo "Ok, doing things the stdio way"
6274         val="$undef"
6275         ;;
6276 esac
6277 set useperlio
6278 eval $setvar 
6279
6280 : Check how to convert floats to strings.
6281 if test "X$d_Gconvert" = X; then
6282         echo " "
6283         echo "Checking for an efficient way to convert floats to strings."
6284         $cat >try.c <<'EOP'
6285 #ifdef TRY_gconvert
6286 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6287 char *myname = "gconvert";
6288 #endif
6289 #ifdef TRY_gcvt
6290 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6291 char *myname = "gcvt";
6292 #endif
6293 #ifdef TRY_sprintf
6294 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6295 char *myname = "sprintf";
6296 #endif
6297
6298 #include <stdio.h>
6299
6300 int
6301 checkit(expect, got)
6302 char *expect;
6303 char *got;
6304 {
6305     if (strcmp(expect, got)) {
6306                 printf("%s oddity:  Expected %s, got %s\n",
6307                         myname, expect, got);
6308                 exit(1);
6309         }
6310 }
6311
6312 int main()
6313
6314         char buf[64]; 
6315         buf[63] = '\0';
6316
6317         /* This must be 1st test on (which?) platform */
6318         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6319         Gconvert(0.1, 8, 0, buf);
6320         checkit("0.1", buf);
6321
6322         Gconvert(1.0, 8, 0, buf); 
6323         checkit("1", buf);
6324
6325         Gconvert(0.0, 8, 0, buf); 
6326         checkit("0", buf);
6327
6328         Gconvert(-1.0, 8, 0, buf); 
6329         checkit("-1", buf);
6330
6331         /* Some Linux gcvt's give 1.e+5 here. */
6332         Gconvert(100000.0, 8, 0, buf); 
6333         checkit("100000", buf);
6334         
6335         /* Some Linux gcvt's give -1.e+5 here. */
6336         Gconvert(-100000.0, 8, 0, buf); 
6337         checkit("-100000", buf);
6338
6339         exit(0);
6340 }
6341 EOP
6342         case "$d_Gconvert" in
6343         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6344         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6345         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6346         *) xxx_list='gconvert gcvt sprintf' ;;
6347         esac
6348
6349         for xxx_convert in $xxx_list; do
6350                 echo "Trying $xxx_convert"
6351                 $rm -f try try$_o
6352                 set try -DTRY_$xxx_convert
6353                 if eval $compile; then
6354                         echo "$xxx_convert" found. >&4
6355                         if ./try; then
6356                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6357                                 break;
6358                         else
6359                                 echo "...But $xxx_convert didn't work as I expected."
6360                         fi
6361                 else
6362                         echo "$xxx_convert NOT found." >&4
6363                 fi
6364         done
6365                 
6366         case "$xxx_convert" in
6367         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6368         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6369         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6370         esac
6371 fi
6372
6373 : Initialize h_fcntl
6374 h_fcntl=false
6375
6376 : Initialize h_sysfile
6377 h_sysfile=false
6378
6379 : access call always available on UNIX
6380 set access d_access
6381 eval $inlibc
6382
6383 : locate the flags for 'access()'
6384 case "$d_access" in
6385 "$define")
6386         echo " "
6387         $cat >access.c <<'EOCP'
6388 #include <sys/types.h>
6389 #ifdef I_FCNTL
6390 #include <fcntl.h>
6391 #endif
6392 #ifdef I_SYS_FILE
6393 #include <sys/file.h>
6394 #endif
6395 #ifdef I_UNISTD
6396 #include <unistd.h>
6397 #endif
6398 int main() {
6399         exit(R_OK);
6400 }
6401 EOCP
6402         : check sys/file.h first, no particular reason here
6403         if $test `./findhdr sys/file.h` && \
6404                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6405                 h_sysfile=true;
6406                 echo "<sys/file.h> defines the *_OK access constants." >&4
6407         elif $test `./findhdr fcntl.h` && \
6408                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6409                 h_fcntl=true;
6410                 echo "<fcntl.h> defines the *_OK access constants." >&4
6411         elif $test `./findhdr unistd.h` && \
6412                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6413                 echo "<unistd.h> defines the *_OK access constants." >&4
6414         else
6415                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6416         fi
6417         ;;
6418 esac
6419 $rm -f access*
6420
6421 : see if accessx exists
6422 set accessx d_accessx
6423 eval $inlibc
6424
6425 : see if alarm exists
6426 set alarm d_alarm
6427 eval $inlibc
6428
6429 : Look for GNU-cc style attribute checking
6430 echo " "
6431 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6432 $cat >attrib.c <<'EOCP'
6433 #include <stdio.h>
6434 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6435 EOCP
6436 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6437         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6438                 echo "Your C compiler doesn't fully support __attribute__."
6439                 val="$undef"
6440         else
6441                 echo "Your C compiler supports __attribute__."
6442                 val="$define"
6443         fi
6444 else
6445         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6446         val="$undef"
6447 fi
6448 set d_attribut
6449 eval $setvar
6450 $rm -f attrib*
6451
6452 : see if bcmp exists
6453 set bcmp d_bcmp
6454 eval $inlibc
6455
6456 : see if bcopy exists
6457 set bcopy d_bcopy
6458 eval $inlibc
6459
6460 : see if this is a unistd.h system
6461 set unistd.h i_unistd
6462 eval $inhdr
6463
6464 : see if getpgrp exists
6465 set getpgrp d_getpgrp
6466 eval $inlibc
6467
6468 case "$d_getpgrp" in
6469 "$define")
6470         echo " "
6471         echo "Checking to see which flavor of getpgrp is in use..."
6472         $cat >set.c <<EOP
6473 #$i_unistd I_UNISTD
6474 #include <sys/types.h>
6475 #ifdef I_UNISTD
6476 #  include <unistd.h>
6477 #endif
6478 int main()
6479 {
6480         if (getuid() == 0) {
6481                 printf("(I see you are running Configure as super-user...)\n");
6482                 setuid(1);
6483         }
6484 #ifdef TRY_BSD_PGRP
6485         if (getpgrp(1) == 0)
6486                 exit(0);
6487 #else
6488         if (getpgrp() > 0)
6489                 exit(0);
6490 #endif
6491         exit(1);
6492 }
6493 EOP
6494         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6495                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6496                 val="$define"
6497         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6498                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6499                 val="$undef"
6500         else
6501                 echo "I can't seem to compile and run the test program."
6502                 if ./usg; then
6503                         xxx="a USG one, i.e. you use getpgrp()."
6504                 else
6505                         # SVR4 systems can appear rather BSD-ish.
6506                         case "$i_unistd" in
6507                         $undef)
6508                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6509                                 val="$define"
6510                                 ;;
6511                         $define)
6512                                 xxx="probably a USG one, i.e. you use getpgrp()."
6513                                 val="$undef"
6514                                 ;;
6515                         esac
6516                 fi
6517                 echo "Assuming your getpgrp is $xxx" >&4
6518         fi
6519         ;;
6520 *) val="$undef";;
6521 esac
6522 set d_bsdgetpgrp
6523 eval $setvar
6524 $rm -f set set.c
6525
6526 : see if setpgrp exists
6527 set setpgrp d_setpgrp
6528 eval $inlibc
6529
6530 case "$d_setpgrp" in
6531 "$define")
6532         echo " "
6533         echo "Checking to see which flavor of setpgrp is in use..."
6534         $cat >set.c <<EOP
6535 #$i_unistd I_UNISTD
6536 #include <sys/types.h>
6537 #ifdef I_UNISTD
6538 #  include <unistd.h>
6539 #endif
6540 int main()
6541 {
6542         if (getuid() == 0) {
6543                 printf("(I see you are running Configure as super-user...)\n");
6544                 setuid(1);
6545         }
6546 #ifdef TRY_BSD_PGRP
6547         if (-1 == setpgrp(1, 1))
6548                 exit(0);
6549 #else
6550         if (setpgrp() != -1)
6551                 exit(0);
6552 #endif
6553         exit(1);
6554 }
6555 EOP
6556         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6557                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6558                 val="$define"
6559         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6560                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6561                 val="$undef"
6562         else
6563                 echo "(I can't seem to compile and run the test program.)"
6564                 if ./usg; then
6565                         xxx="a USG one, i.e. you use setpgrp()."
6566                 else
6567                         # SVR4 systems can appear rather BSD-ish.
6568                         case "$i_unistd" in
6569                         $undef)
6570                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6571                                 val="$define"
6572                                 ;;
6573                         $define)
6574                                 xxx="probably a USG one, i.e. you use setpgrp()."
6575                                 val="$undef"
6576                                 ;;
6577                         esac
6578                 fi
6579                 echo "Assuming your setpgrp is $xxx" >&4
6580         fi
6581         ;;
6582 *) val="$undef";;
6583 esac
6584 set d_bsdsetpgrp
6585 eval $setvar
6586 $rm -f set set.c
6587 : see if bzero exists
6588 set bzero d_bzero
6589 eval $inlibc
6590
6591 : check for lengths of integral types
6592 echo " "
6593 case "$intsize" in
6594 '')
6595         echo "Checking to see how big your integers are..." >&4
6596         $cat >intsize.c <<'EOCP'
6597 #include <stdio.h>
6598 int main()
6599 {
6600         printf("intsize=%d;\n", sizeof(int));
6601         printf("longsize=%d;\n", sizeof(long));
6602         printf("shortsize=%d;\n", sizeof(short));
6603         exit(0);
6604 }
6605 EOCP
6606         set intsize
6607         if eval $compile_ok && ./intsize > /dev/null; then
6608                 eval `./intsize`
6609                 echo "Your integers are $intsize bytes long."
6610                 echo "Your long integers are $longsize bytes long."
6611                 echo "Your short integers are $shortsize bytes long."
6612         else
6613                 $cat >&4 <<EOM
6614 !
6615 Help! I can't compile and run the intsize test program: please enlighten me!
6616 (This is probably a misconfiguration in your system or libraries, and
6617 you really ought to fix it.  Still, I'll try anyway.)
6618 !
6619 EOM
6620                 dflt=4
6621                 rp="What is the size of an integer (in bytes)?"
6622                 . ./myread
6623                 intsize="$ans"
6624                 dflt=$intsize
6625                 rp="What is the size of a long integer (in bytes)?"
6626                 . ./myread
6627                 longsize="$ans"
6628                 dflt=2
6629                 rp="What is the size of a short integer (in bytes)?"
6630                 . ./myread
6631                 shortsize="$ans"
6632         fi
6633         ;;
6634 esac
6635 $rm -f intsize intsize.*
6636
6637 : see if signal is declared as pointer to function returning int or void
6638 echo " "
6639 xxx=`./findhdr signal.h`
6640 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6641 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6642         echo "You have int (*signal())() instead of void." >&4
6643         val="$undef"
6644 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6645         echo "You have void (*signal())()." >&4
6646         val="$define"
6647 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6648         echo "You have int (*signal())() instead of void." >&4
6649         val="$undef"
6650 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6651         echo "You have void (*signal())()." >&4
6652         val="$define"
6653 else
6654         case "$d_voidsig" in
6655         '')
6656         echo "I can't determine whether signal handler returns void or int..." >&4
6657                 dflt=void
6658                 rp="What type does your signal handler return?"
6659                 . ./myread
6660                 case "$ans" in
6661                 v*) val="$define";;
6662                 *) val="$undef";;
6663                 esac;;
6664         "$define")
6665                 echo "As you already told me, signal handler returns void." >&4
6666                 val="$define"
6667                 ;;
6668         *)      echo "As you already told me, signal handler returns int." >&4
6669                 val="$undef"
6670                 ;;
6671         esac
6672 fi
6673 set d_voidsig
6674 eval $setvar
6675 case "$d_voidsig" in
6676 "$define") signal_t="void";;
6677 *) signal_t="int";;
6678 esac
6679 $rm -f $$.tmp
6680
6681 : check for ability to cast large floats to 32-bit ints.
6682 echo " "
6683 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6684 if $test "$intsize" -ge 4; then
6685         xxx=int
6686 else
6687         xxx=long
6688 fi
6689 $cat >try.c <<EOCP
6690 #include <stdio.h>
6691 #include <sys/types.h>
6692 #include <signal.h>
6693 $signal_t blech(s) int s; { exit(3); }
6694 int main()
6695 {
6696         $xxx i32;
6697         double f, g;
6698         int result = 0;
6699         char str[16];
6700         signal(SIGFPE, blech);
6701
6702         /* Don't let compiler optimize the test away.  Store the number 
6703            in a writable string for gcc to pass to sscanf under HP/UX.
6704         */
6705         sprintf(str, "2147483647");
6706         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6707         g = 10 * f;
6708         i32  = ($xxx) g;
6709
6710         /* x86 processors will probably give 0x8000 0000, which is a
6711        sign change.  We don't want that.  We want to mimic SPARC
6712            behavior here, which is to preserve the sign and give
6713            back 0x7fff ffff.
6714         */
6715         if (i32 != ($xxx) f)
6716                 result |= 1;
6717         exit(result);
6718 }
6719 EOCP
6720 set try
6721 if eval $compile_ok; then
6722         ./try
6723         yyy=$?
6724 else
6725         echo "(I can't seem to compile the test program--assuming it can't)"
6726         yyy=1
6727 fi
6728 case "$yyy" in
6729 0)      val="$define"
6730         echo "Yup, it can."
6731         ;;
6732 *)      val="$undef"
6733         echo "Nope, it can't."
6734         ;;
6735 esac
6736 set d_casti32
6737 eval $setvar
6738 $rm -f try try.*
6739
6740 : check for ability to cast negative floats to unsigned
6741 echo " "
6742 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6743 $cat >try.c <<EOCP
6744 #include <stdio.h>
6745 #include <sys/types.h>
6746 #include <signal.h>
6747 $signal_t blech(s) int s; { exit(7); }
6748 $signal_t blech_in_list(s) int s; { exit(4); }
6749 unsigned long dummy_long(p) unsigned long p; { return p; }
6750 unsigned int dummy_int(p) unsigned int p; { return p; }
6751 unsigned short dummy_short(p) unsigned short p; { return p; }
6752 int main()
6753 {
6754         double f;
6755         unsigned long along;
6756         unsigned int aint;
6757         unsigned short ashort;
6758         int result = 0;
6759         char str[16];
6760         
6761         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6762            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6763            optimized the whole file away
6764         */
6765         /* Store the number in a writable string for gcc to pass to 
6766            sscanf under HP/UX.
6767         */
6768         sprintf(str, "-123");
6769         sscanf(str, "%lf", &f);  /* f = -123.; */
6770
6771         signal(SIGFPE, blech);
6772         along = (unsigned long)f;
6773         aint = (unsigned int)f;
6774         ashort = (unsigned short)f;
6775         if (along != (unsigned long)-123)
6776                 result |= 1;
6777         if (aint != (unsigned int)-123)
6778                 result |= 1;
6779         if (ashort != (unsigned short)-123)
6780                 result |= 1;
6781         sprintf(str, "1073741824.");
6782         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6783         f = f + f;
6784         along = 0;
6785         along = (unsigned long)f;
6786         if (along != 0x80000000)
6787                 result |= 2;
6788         f -= 1.;
6789         along = 0;
6790         along = (unsigned long)f;
6791         if (along != 0x7fffffff)
6792                 result |= 1;
6793         f += 2.;
6794         along = 0;
6795         along = (unsigned long)f;
6796         if (along != 0x80000001)
6797                 result |= 2;
6798         if (result)
6799                 exit(result);
6800         signal(SIGFPE, blech_in_list);
6801         sprintf(str, "123.");
6802         sscanf(str, "%lf", &f);  /* f = 123.; */
6803         along = dummy_long((unsigned long)f);
6804         aint = dummy_int((unsigned int)f);
6805         ashort = dummy_short((unsigned short)f);
6806         if (along != (unsigned long)123)
6807                 result |= 4;
6808         if (aint != (unsigned int)123)
6809                 result |= 4;
6810         if (ashort != (unsigned short)123)
6811                 result |= 4;
6812         exit(result);
6813
6814 }
6815 EOCP
6816 set try
6817 if eval $compile_ok; then
6818         ./try
6819         castflags=$?
6820 else
6821         echo "(I can't seem to compile the test program--assuming it can't)"
6822         castflags=7
6823 fi
6824 case "$castflags" in
6825 0)      val="$define"
6826         echo "Yup, it can."
6827         ;;
6828 *)      val="$undef"
6829         echo "Nope, it can't."
6830         ;;
6831 esac
6832 set d_castneg
6833 eval $setvar
6834 $rm -f try.*
6835
6836 : see if vprintf exists
6837 echo " "
6838 if set vprintf val -f d_vprintf; eval $csym; $val; then
6839         echo 'vprintf() found.' >&4
6840         val="$define"
6841         $cat >vprintf.c <<'EOF'
6842 #include <varargs.h>
6843
6844 int main() { xxx("foo"); }
6845
6846 xxx(va_alist)
6847 va_dcl
6848 {
6849         va_list args;
6850         char buf[10];
6851
6852         va_start(args);
6853         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6854 }
6855 EOF
6856         set vprintf
6857         if eval $compile && ./vprintf; then
6858                 echo "Your vsprintf() returns (int)." >&4
6859                 val2="$undef"
6860         else
6861                 echo "Your vsprintf() returns (char*)." >&4
6862                 val2="$define"
6863         fi
6864 else
6865         echo 'vprintf() NOT found.' >&4
6866                 val="$undef"
6867                 val2="$undef"
6868 fi
6869 set d_vprintf
6870 eval $setvar
6871 val=$val2
6872 set d_charvspr
6873 eval $setvar
6874
6875 : see if chown exists
6876 set chown d_chown
6877 eval $inlibc
6878
6879 : see if chroot exists
6880 set chroot d_chroot
6881 eval $inlibc
6882
6883 : see if chsize exists
6884 set chsize d_chsize
6885 eval $inlibc
6886
6887 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6888 while $test $# -ge 2; do
6889         case "$1" in
6890         $define) echo "#include <$2>";;
6891         esac ;
6892     shift 2;
6893 done > try.c;
6894 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6895 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6896         val="$define";
6897 else
6898         val="$undef";
6899 fi;
6900 set $varname;
6901 eval $setvar;
6902 $rm -f try.c try.o'
6903
6904 : see if this is a sys/uio.h system
6905 set sys/uio.h i_sysuio
6906 eval $inhdr
6907
6908 echo "Checking to see if your system supports struct iovec..." >&4
6909 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6910 eval $hasfield
6911 case "$d_iovec_s" in
6912 "$define")      echo "Yup, it does." >&4
6913                 ;;
6914 *)              echo "Nope, it doesn't." >&4
6915                 ;;
6916 esac
6917
6918 socketlib=''
6919 sockethdr=''
6920 : see whether socket exists
6921 echo " "
6922 $echo $n "Hmm... $c" >&4
6923 if set socket val -f d_socket; eval $csym; $val; then
6924         echo "Looks like you have Berkeley networking support." >&4
6925         d_socket="$define"
6926         if set setsockopt val -f; eval $csym; $val; then
6927                 d_oldsock="$undef"
6928         else
6929                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6930                 d_oldsock="$define"
6931         fi
6932 else
6933         if $contains socklib libc.list >/dev/null 2>&1; then
6934                 echo "Looks like you have Berkeley networking support." >&4
6935                 d_socket="$define"
6936                 : we will have to assume that it supports the 4.2 BSD interface
6937                 d_oldsock="$undef"
6938         else
6939                 echo "You don't have Berkeley networking in libc$_a..." >&4
6940                 if test "X$d_socket" = "X$define"; then
6941                    echo "...but you seem to believe that you have sockets." >&4
6942                 else
6943                         for net in net socket
6944                         do
6945                                 if test -f /usr/lib/lib$net$_a; then
6946                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6947                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6948                                         if $contains socket libc.list >/dev/null 2>&1; then
6949                                                 d_socket="$define"
6950                                                 socketlib="-l$net"
6951                                                 case "$net" in
6952                                                 net)
6953                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6954                                                         sockethdr="-I/usr/netinclude"
6955                                                         ;;
6956                                                 esac
6957                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6958                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6959                                                         d_oldsock="$undef"
6960                                                 else
6961                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6962                                                         d_oldsock="$define"
6963                                                 fi
6964                                                 break
6965                                         fi
6966                                 fi
6967                         done
6968                         if test "X$d_socket" != "X$define"; then
6969                            echo "or anywhere else I see." >&4
6970                            d_socket="$undef"
6971                            d_oldsock="$undef"
6972                         fi
6973                 fi
6974         fi
6975 fi
6976
6977 : see if socketpair exists
6978 set socketpair d_sockpair
6979 eval $inlibc
6980
6981
6982 echo " "
6983 echo "Checking the availability of certain socket constants..." >& 4
6984 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6985         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6986         $cat >try.c <<EOF
6987 #include <sys/types.h>
6988 #include <sys/socket.h>
6989 int main() {
6990     int i = $ENUM;
6991 }
6992 EOF
6993         val="$undef"
6994         set try; if eval $compile; then
6995                 val="$define"
6996         fi
6997         set d_${enum}; eval $setvar
6998         $rm -f try.c try
6999 done
7000
7001 set sendmsg d_sendmsg
7002 eval $inlibc
7003
7004 set recvmsg d_recvmsg
7005 eval $inlibc
7006
7007 echo " "
7008 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7009 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7010 eval $hasfield
7011 case "$d_msghdr_s" in
7012 "$define")      echo "Yup, it does." >&4
7013                 ;;
7014 *)              echo "Nope, it doesn't." >&4
7015                 ;;
7016 esac
7017
7018 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7019 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7020 eval $hasfield
7021 case "$d_cmsghdr_s" in
7022 "$define")      echo "Yup, it does." >&4
7023                 ;;
7024 *)              echo "Nope, it doesn't." >&4
7025                 ;;
7026 esac
7027
7028 : check for const keyword
7029 echo " "
7030 echo 'Checking to see if your C compiler knows about "const"...' >&4
7031 $cat >const.c <<'EOCP'
7032 typedef struct spug { int drokk; } spug;
7033 int main()
7034 {
7035         const char *foo;
7036         const spug y;
7037 }
7038 EOCP
7039 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7040         val="$define"
7041         echo "Yup, it does."
7042 else
7043         val="$undef"
7044         echo "Nope, it doesn't."
7045 fi
7046 set d_const
7047 eval $setvar
7048
7049 : see if crypt exists
7050 echo " "
7051 if set crypt val -f d_crypt; eval $csym; $val; then
7052         echo 'crypt() found.' >&4
7053         val="$define"
7054         cryptlib=''
7055 else
7056         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7057         if $test -z "$cryptlib"; then
7058                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7059         else
7060                 cryptlib=-lcrypt
7061         fi
7062         if $test -z "$cryptlib"; then
7063                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7064         else
7065                 cryptlib=-lcrypt
7066         fi
7067         if $test -z "$cryptlib"; then
7068                 cryptlib=`./loc libcrypt$_a "" $libpth`
7069         else
7070                 cryptlib=-lcrypt
7071         fi
7072         if $test -z "$cryptlib"; then
7073                 echo 'crypt() NOT found.' >&4
7074                 val="$undef"
7075         else
7076                 val="$define"
7077         fi
7078 fi
7079 set d_crypt
7080 eval $setvar
7081
7082 : get csh whereabouts
7083 case "$csh" in
7084 'csh') val="$undef" ;;
7085 *) val="$define" ;;
7086 esac
7087 set d_csh
7088 eval $setvar
7089 : Respect a hint or command line value for full_csh.
7090 case "$full_csh" in
7091 '') full_csh=$csh ;;
7092 esac
7093
7094 : see if cuserid exists
7095 set cuserid d_cuserid
7096 eval $inlibc
7097
7098 : see if this is a limits.h system
7099 set limits.h i_limits
7100 eval $inhdr
7101
7102 : see if this is a float.h system
7103 set float.h i_float
7104 eval $inhdr
7105
7106 : See if number of significant digits in a double precision number is known
7107 echo " "
7108 $cat >dbl_dig.c <<EOM
7109 #$i_limits I_LIMITS
7110 #$i_float I_FLOAT
7111 #ifdef I_LIMITS
7112 #include <limits.h>
7113 #endif
7114 #ifdef I_FLOAT
7115 #include <float.h>
7116 #endif
7117 #ifdef DBL_DIG
7118 printf("Contains DBL_DIG");
7119 #endif
7120 EOM
7121 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7122 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7123         echo "DBL_DIG found." >&4
7124         val="$define"
7125 else
7126         echo "DBL_DIG NOT found." >&4
7127         val="$undef"
7128 fi
7129 $rm -f dbl_dig.?
7130 set d_dbl_dig
7131 eval $setvar
7132
7133
7134 if $test X"$use64bits" = X"$define"; then
7135         : see if dbminit64 exists
7136         set dbminit64 d_dbminit64
7137         eval $inlibc
7138
7139         : see if dbmclose64 exists
7140         set dbmclose64 d_dbmclose64
7141         eval $inlibc
7142
7143         : see if fetch64 exists
7144         set fetch64 d_fetch64
7145         eval $inlibc
7146
7147         : see if store64 exists
7148         set store64 d_store64
7149         eval $inlibc
7150
7151         : see if delete64 exists
7152         set delete64 d_delete64
7153         eval $inlibc
7154
7155         : see if firstkey64 exists
7156         set firstkey64 d_firstkey64
7157         eval $inlibc
7158
7159         : see if nextkey64 exists
7160         set nextkey64 d_nextkey64
7161         eval $inlibc
7162 else
7163         val="$undef"
7164         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7165         do
7166                 set $xxx
7167                 eval $setvar
7168         done
7169 fi
7170
7171 : see if difftime exists
7172 set difftime d_difftime
7173 eval $inlibc
7174
7175 : see if sys/stat.h is available
7176 set sys/stat.h i_sysstat
7177 eval $inhdr
7178
7179 : see if this is a dirent system
7180 echo " "
7181 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7182         val="$define"
7183         echo "<dirent.h> found." >&4
7184 else
7185         val="$undef"
7186         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7187                 echo "<sys/dir.h> found." >&4
7188                 echo " "
7189         else
7190                 xinc=`./findhdr sys/ndir.h`
7191         fi
7192         echo "<dirent.h> NOT found." >&4
7193 fi
7194 set i_dirent
7195 eval $setvar
7196
7197 : Look for type of directory structure.
7198 echo " "
7199 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7200
7201 case "$direntrytype" in
7202 ''|' ')
7203         case "$i_dirent" in
7204         $define) guess1='struct dirent' ;;
7205         *) guess1='struct direct'  ;;
7206         esac
7207         ;;
7208 *)      guess1="$direntrytype"
7209         ;;
7210 esac
7211
7212 case "$guess1" in
7213 'struct dirent') guess2='struct direct' ;;
7214 *) guess2='struct dirent' ;;
7215 esac
7216                 
7217 if $contains "$guess1" try.c >/dev/null 2>&1; then
7218         direntrytype="$guess1"
7219         echo "Your directory entries are $direntrytype." >&4
7220 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7221         direntrytype="$guess2"
7222         echo "Your directory entries seem to be $direntrytype." >&4
7223 else
7224         echo "I don't recognize your system's directory entries." >&4
7225         rp="What type is used for directory entries on this system?"
7226         dflt="$guess1"
7227         . ./myread
7228         direntrytype="$ans"
7229 fi
7230 $rm -f try.c
7231
7232
7233 : see if the directory entry stores field length
7234 echo " "
7235 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7236 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7237         echo "Good, your directory entry keeps length information in d_namlen." >&4
7238         val="$define"
7239 else
7240         echo "Your directory entry does not know about the d_namlen field." >&4
7241         val="$undef"
7242 fi
7243 set d_dirnamlen
7244 eval $setvar
7245 $rm -f try.c
7246
7247
7248 if $test X"$use64bits" = X"$define"; then
7249         : see if fstat64 exists
7250         set fstat64 d_fstat64
7251         eval $inlibc
7252
7253         : see if ftruncate64 exists
7254         set ftruncate64 d_ftruncate64
7255         eval $inlibc
7256
7257         : see if lockf64 exists
7258         set lockf64 d_lockf64
7259         eval $inlibc
7260
7261         : see if llseek exists
7262         set llseek d_llseek
7263         eval $inlibc
7264
7265         : see if lseek64 exists
7266         set lseek64 d_lseek64
7267         eval $inlibc
7268
7269         : see if lstat64 exists
7270         set lstat64 d_lstat64
7271         eval $inlibc
7272
7273         : see if open64 exists
7274         set open64 d_open64
7275         eval $inlibc
7276
7277         : see if opendir64 exists
7278         set opendir64 d_opendir64
7279         eval $inlibc
7280
7281         : see if readdir64 exists
7282         set readdir64 d_readdir64
7283         eval $inlibc
7284
7285         : see if seekdir64 exists
7286         set seekdir64 d_seekdir64
7287         eval $inlibc
7288
7289         : see if stat64 exists
7290         set stat64 d_stat64
7291         eval $inlibc
7292
7293         : see if telldir64 exists
7294         set telldir64 d_telldir64
7295         eval $inlibc
7296
7297         : see if truncate64 exists
7298         set truncate64 d_truncate64
7299         eval $inlibc
7300
7301         : check for off64_t
7302         echo " "
7303         echo $n "Checking to see if your system supports off64_t...$c" >&4
7304         $cat >try.c <<EOCP
7305 #include <sys/types.h>
7306 #include <unistd.h>
7307 off64_t foo() { off64_t x; x = 7; return x; }'
7308 EOCP
7309         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7310                 val="$define"
7311                 echo " Yup, it does." >&4
7312         else
7313                 val="$undef"
7314                 echo " Nope, it doesn't." >&4
7315         fi
7316         $rm -f try.*
7317         set d_off64_t
7318         eval $setvar
7319
7320         : check for offset_t
7321         echo " "
7322         echo $n "Checking to see if your system supports offset_t...$c" >&4
7323         $cat >try.c <<EOCP
7324 #include <sys/types.h>
7325 #include <unistd.h>
7326 offset_t foo() { offset_t x; x = 7; return x; }'
7327 EOCP
7328         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7329                 val="$define"
7330                 echo " Yup, it does." >&4
7331         else
7332                 val="$undef"
7333                 echo " Nope, it doesn't." >&4
7334         fi
7335         $rm -f try.*
7336         set d_offset_t
7337         eval $setvar
7338
7339         : check for ino64_t
7340         echo " "
7341         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7342         val="$undef"
7343         case "$i_sysstat" in
7344         "$define" )
7345                 $cat >try.c <<EOCP
7346 #include <sys/types.h>
7347 #include <sys/stat.h>
7348 ino64_t foo() { ino64_t x; x = 7; return x; }'
7349 EOCP
7350                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7351                         val="$define"
7352                 fi
7353                 $rm -f try.*
7354                 ;;
7355         esac
7356         if $test "X$val" = X"$define"; then
7357                 echo " Yup, it does." >&4
7358         else
7359                 echo " Nope, it doesn't." >&4
7360         fi
7361         set d_ino64_t
7362         eval $setvar
7363
7364         : check for struct flock64
7365         echo " "
7366         echo "Checking to see if your system supports struct flock64..." >&4
7367         if $h_fcntl; then
7368                 set d_flock64_s flock64 l_len define fcntl.h
7369                 eval $hasfield
7370         else
7371                 val="$undef"
7372                 set d_flock64_s
7373                 eval $setvar
7374         fi
7375         case "$d_flock64_s" in
7376         "$define")      echo "Yup, it does." >&4
7377                         ;;
7378         *)              echo "Nope, it doesn't." >&4
7379                         ;;
7380         esac
7381
7382         : check for struct dirent64
7383         echo " "
7384         echo "Checking to see if your system supports struct dirent64..." >&4
7385         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7386         eval $hasfield
7387         case "$d_dirent64_s" in
7388         "$define")      echo "Yup, it does." >&4
7389                         ;;
7390         *)              echo "Nope, it doesn't." >&4
7391                         ;;
7392         esac
7393
7394 else
7395         val="$undef"
7396         for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64_t d_offset_t d_ino64_t d_flock64_s d_dirent64_s
7397         do
7398                 set $xxx
7399                 eval $setvar
7400         done
7401 fi
7402
7403 : see if dlerror exists
7404 xxx_runnm="$runnm"
7405 runnm=false
7406 set dlerror d_dlerror
7407 eval $inlibc
7408 runnm="$xxx_runnm"
7409
7410 : see if dlfcn is available
7411 set dlfcn.h i_dlfcn
7412 eval $inhdr
7413
7414 case "$usedl" in
7415 $define|y|true)
7416         $cat << EOM
7417
7418 On a few systems, the dynamically loaded modules that perl generates and uses
7419 will need a different extension than shared libs. The default will probably
7420 be appropriate.
7421
7422 EOM
7423         case "$dlext" in
7424         '')     dflt="$so" ;;
7425         *)      dflt="$dlext" ;;
7426         esac
7427         rp='What is the extension of dynamically loaded modules'
7428         . ./myread
7429         dlext="$ans"
7430         ;;
7431 *)
7432         dlext="none"
7433         ;;
7434 esac
7435
7436 : Check if dlsym need a leading underscore
7437 echo " "
7438 val="$undef"
7439
7440 case "$dlsrc" in
7441 dl_dlopen.xs)
7442         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7443         $cat >dyna.c <<'EOM'
7444 fred () { }
7445 EOM
7446
7447 $cat >fred.c<<EOM
7448
7449 #include <stdio.h>
7450 #$i_dlfcn I_DLFCN
7451 #ifdef I_DLFCN
7452 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7453 #else
7454 #include <sys/types.h>
7455 #include <nlist.h>
7456 #include <link.h>
7457 #endif
7458
7459 extern int fred() ;
7460
7461 int main()
7462 {
7463     void * handle ;
7464     void * symbol ;
7465 #ifndef RTLD_LAZY
7466     int mode = 1 ;
7467 #else
7468     int mode = RTLD_LAZY ;
7469 #endif
7470     handle = dlopen("./dyna.$dlext", mode) ;
7471     if (handle == NULL) {
7472         printf ("1\n") ;
7473         fflush (stdout) ;
7474         exit(0);
7475     }
7476     symbol = dlsym(handle, "fred") ;
7477     if (symbol == NULL) {
7478         /* try putting a leading underscore */
7479         symbol = dlsym(handle, "_fred") ;
7480         if (symbol == NULL) {
7481             printf ("2\n") ;
7482             fflush (stdout) ;
7483             exit(0);
7484         }
7485         printf ("3\n") ;
7486     }
7487     else
7488         printf ("4\n") ;
7489     fflush (stdout) ;
7490     exit(0);
7491 }
7492 EOM
7493         : Call the object file tmp-dyna.o in case dlext=o.
7494         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7495                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7496                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7497                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7498                 xxx=`./fred`
7499                 case $xxx in
7500                 1)      echo "Test program failed using dlopen." >&4
7501                         echo "Perhaps you should not use dynamic loading." >&4;;
7502                 2)      echo "Test program failed using dlsym." >&4
7503                         echo "Perhaps you should not use dynamic loading." >&4;;
7504                 3)      echo "dlsym needs a leading underscore" >&4
7505                         val="$define" ;;
7506                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7507                 esac
7508         else
7509                 echo "I can't compile and run the test program." >&4
7510         fi
7511         ;;
7512 esac
7513                 
7514 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7515
7516 set d_dlsymun
7517 eval $setvar
7518
7519 hasproto='varname=$1; func=$2; shift; shift;
7520 while $test $# -ge 2; do
7521         case "$1" in
7522         $define) echo "#include <$2>";;
7523         esac ;
7524     shift 2;
7525 done > try.c;
7526 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7527 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7528         echo "$func() prototype found.";
7529         val="$define";
7530 else
7531         echo "$func() prototype NOT found.";
7532         val="$undef";
7533 fi;
7534 set $varname;
7535 eval $setvar;
7536 $rm -f try.c tryout.c'
7537
7538 : see if prototype for drand48 is available
7539 echo " "
7540 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7541 eval $hasproto
7542
7543 : see if dup2 exists
7544 set dup2 d_dup2
7545 eval $inlibc
7546
7547 : see if eaccess exists
7548 set eaccess d_eaccess
7549 eval $inlibc
7550
7551 : see if endgrent exists
7552 set endgrent d_endgrent
7553 eval $inlibc
7554
7555 : see if endhostent exists
7556 set endhostent d_endhent
7557 eval $inlibc
7558
7559 : see if endnetent exists
7560 set endnetent d_endnent
7561 eval $inlibc
7562
7563 : see if endprotoent exists
7564 set endprotoent d_endpent
7565 eval $inlibc
7566
7567 : see if endpwent exists
7568 set endpwent d_endpwent
7569 eval $inlibc
7570
7571 : see if endservent exists
7572 set endservent d_endsent
7573 eval $inlibc
7574
7575 : see if endspent exists
7576 set endspent d_endspent
7577 eval $inlibc
7578
7579 : Locate the flags for 'open()'
7580 echo " "
7581 $cat >open3.c <<'EOCP'
7582 #include <sys/types.h>
7583 #ifdef I_FCNTL
7584 #include <fcntl.h>
7585 #endif
7586 #ifdef I_SYS_FILE
7587 #include <sys/file.h>
7588 #endif
7589 int main() {
7590         if(O_RDONLY);
7591 #ifdef O_TRUNC
7592         exit(0);
7593 #else
7594         exit(1);
7595 #endif
7596 }
7597 EOCP
7598 : check sys/file.h first to get FREAD on Sun
7599 if $test `./findhdr sys/file.h` && \
7600                 set open3 -DI_SYS_FILE && eval $compile; then
7601         h_sysfile=true;
7602         echo "<sys/file.h> defines the O_* constants..." >&4
7603         if ./open3; then
7604                 echo "and you have the 3 argument form of open()." >&4
7605                 val="$define"
7606         else
7607                 echo "but not the 3 argument form of open().  Oh, well." >&4
7608                 val="$undef"
7609         fi
7610 elif $test `./findhdr fcntl.h` && \
7611                 set open3 -DI_FCNTL && eval $compile; then
7612         h_fcntl=true;
7613         echo "<fcntl.h> defines the O_* constants..." >&4
7614         if ./open3; then
7615                 echo "and you have the 3 argument form of open()." >&4
7616                 val="$define"
7617         else
7618                 echo "but not the 3 argument form of open().  Oh, well." >&4
7619                 val="$undef"
7620         fi
7621 else
7622         val="$undef"
7623         echo "I can't find the O_* constant definitions!  You got problems." >&4
7624 fi
7625 set d_open3
7626 eval $setvar
7627 $rm -f open3*
7628
7629 : check for non-blocking I/O stuff
7630 case "$h_sysfile" in
7631 true) echo "#include <sys/file.h>" > head.c;;
7632 *)
7633         case "$h_fcntl" in
7634         true) echo "#include <fcntl.h>" > head.c;;
7635         *) echo "#include <sys/fcntl.h>" > head.c;;
7636         esac
7637         ;;
7638 esac
7639 echo " "
7640 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7641 case "$o_nonblock" in
7642 '')
7643         $cat head.c > try.c
7644         $cat >>try.c <<'EOCP'
7645 int main() {
7646 #ifdef O_NONBLOCK
7647         printf("O_NONBLOCK\n");
7648         exit(0);
7649 #endif
7650 #ifdef O_NDELAY
7651         printf("O_NDELAY\n");
7652         exit(0);
7653 #endif
7654 #ifdef FNDELAY
7655         printf("FNDELAY\n");
7656         exit(0);
7657 #endif
7658         exit(0);
7659 }
7660 EOCP
7661         set try
7662         if eval $compile_ok; then
7663                 o_nonblock=`./try`
7664                 case "$o_nonblock" in
7665                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7666                 *) echo "Seems like we can use $o_nonblock.";;
7667                 esac
7668         else
7669                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7670         fi
7671         ;;
7672 *) echo "Using $hint value $o_nonblock.";;
7673 esac
7674 $rm -f try try.* .out core
7675
7676 echo " "
7677 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7678 case "$eagain" in
7679 '')
7680         $cat head.c > try.c
7681         $cat >>try.c <<EOCP
7682 #include <errno.h>
7683 #include <sys/types.h>
7684 #include <signal.h>
7685 #define MY_O_NONBLOCK $o_nonblock
7686 #ifndef errno  /* XXX need better Configure test */
7687 extern int errno;
7688 #endif
7689 $signal_t blech(x) int x; { exit(3); }
7690 EOCP
7691         $cat >> try.c <<'EOCP'
7692 int main()
7693 {
7694         int pd[2];
7695         int pu[2];
7696         char buf[1];
7697         char string[100];
7698
7699         pipe(pd);       /* Down: child -> parent */
7700         pipe(pu);       /* Up: parent -> child */
7701         if (0 != fork()) {
7702                 int ret;
7703                 close(pd[1]);   /* Parent reads from pd[0] */
7704                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7705                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7706                         exit(1);
7707                 signal(SIGALRM, blech);
7708                 alarm(5);
7709                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7710                         exit(2);
7711                 sprintf(string, "%d\n", ret);
7712                 write(2, string, strlen(string));
7713                 alarm(0);
7714 #ifdef EAGAIN
7715                 if (errno == EAGAIN) {
7716                         printf("EAGAIN\n");
7717                         goto ok;
7718                 }
7719 #endif
7720 #ifdef EWOULDBLOCK
7721                 if (errno == EWOULDBLOCK)
7722                         printf("EWOULDBLOCK\n");
7723 #endif
7724         ok:
7725                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7726                 sleep(2);                               /* Give it time to close our pipe */
7727                 alarm(5);
7728                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7729                 alarm(0);
7730                 sprintf(string, "%d\n", ret);
7731                 write(3, string, strlen(string));
7732                 exit(0);
7733         }
7734
7735         close(pd[0]);                   /* We write to pd[1] */
7736         close(pu[1]);                   /* We read from pu[0] */
7737         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7738         close(pd[1]);                   /* Pipe pd is now fully closed! */
7739         exit(0);                                /* Bye bye, thank you for playing! */
7740 }
7741 EOCP
7742         set try
7743         if eval $compile_ok; then
7744                 echo "$startsh" >mtry
7745                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7746                 chmod +x mtry
7747                 ./mtry >/dev/null 2>&1
7748                 case $? in
7749                 0) eagain=`$cat try.out`;;
7750                 1) echo "Could not perform non-blocking setting!";;
7751                 2) echo "I did a successful read() for something that was not there!";;
7752                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7753                 *) echo "Something terribly wrong happened during testing.";;
7754                 esac
7755                 rd_nodata=`$cat try.ret`
7756                 echo "A read() system call with no data present returns $rd_nodata."
7757                 case "$rd_nodata" in
7758                 0|-1) ;;
7759                 *)
7760                         echo "(That's peculiar, fixing that to be -1.)"
7761                         rd_nodata=-1
7762                         ;;
7763                 esac
7764                 case "$eagain" in
7765                 '')
7766                         echo "Forcing errno EAGAIN on read() with no data available."
7767                         eagain=EAGAIN
7768                         ;;
7769                 *)
7770                         echo "Your read() sets errno to $eagain when no data is available."
7771                         ;;
7772                 esac
7773                 status=`$cat try.err`
7774                 case "$status" in
7775                 0) echo "And it correctly returns 0 to signal EOF.";;
7776                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7777                 *) echo "However, your read() returns '$status' on EOF??";;
7778                 esac
7779                 val="$define"
7780                 if test "$status" = "$rd_nodata"; then
7781                         echo "WARNING: you can't distinguish between EOF and no data!"
7782                         val="$undef"
7783                 fi
7784         else
7785                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7786                 eagain=EAGAIN
7787         fi
7788         set d_eofnblk
7789         eval $setvar
7790         ;;
7791 *)
7792         echo "Using $hint value $eagain."
7793         echo "Your read() returns $rd_nodata when no data is present."
7794         case "$d_eofnblk" in
7795         "$define") echo "And you can see EOF because read() returns 0.";;
7796         "$undef") echo "But you can't see EOF status from read() returned value.";;
7797         *)
7798                 echo "(Assuming you can't see EOF status from read anyway.)"
7799                 d_eofnblk=$undef
7800                 ;;
7801         esac
7802         ;;
7803 esac
7804 $rm -f try try.* .out core head.c mtry
7805
7806 : see if fchmod exists
7807 set fchmod d_fchmod
7808 eval $inlibc
7809
7810 : see if fchown exists
7811 set fchown d_fchown
7812 eval $inlibc
7813
7814 : see if this is an fcntl system
7815 set fcntl d_fcntl
7816 eval $inlibc
7817
7818 : see if sys/select.h has to be included
7819 set sys/select.h i_sysselct
7820 eval $inhdr
7821
7822 : see if we should include time.h, sys/time.h, or both
7823 echo " "
7824 if test "X$timeincl" = X; then
7825         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7826         $echo $n "I'm now running the test program...$c"
7827         $cat >try.c <<'EOCP'
7828 #include <sys/types.h>
7829 #ifdef I_TIME
7830 #include <time.h>
7831 #endif
7832 #ifdef I_SYSTIME
7833 #ifdef SYSTIMEKERNEL
7834 #define KERNEL
7835 #endif
7836 #include <sys/time.h>
7837 #endif
7838 #ifdef I_SYSSELECT
7839 #include <sys/select.h>
7840 #endif
7841 int main()
7842 {
7843         struct tm foo;
7844 #ifdef S_TIMEVAL
7845         struct timeval bar;
7846 #endif
7847 #ifdef S_TIMEZONE
7848         struct timezone tzp;
7849 #endif
7850         if (foo.tm_sec == foo.tm_sec)
7851                 exit(0);
7852 #ifdef S_TIMEVAL
7853         if (bar.tv_sec == bar.tv_sec)
7854                 exit(0);
7855 #endif
7856         exit(1);
7857 }
7858 EOCP
7859         flags=''
7860         for s_timezone in '-DS_TIMEZONE' ''; do
7861         sysselect=''
7862         for s_timeval in '-DS_TIMEVAL' ''; do
7863         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7864         for i_time in '' '-DI_TIME'; do
7865         for i_systime in '-DI_SYSTIME' ''; do
7866                 case "$flags" in
7867                 '') $echo $n ".$c"
7868                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7869                         if eval $compile; then
7870                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7871                                 shift
7872                                 flags="$*"
7873                                 echo " "
7874                                 $echo $n "Succeeded with $flags$c"
7875                         fi
7876                         ;;
7877                 esac
7878         done
7879         done
7880         done
7881         done
7882         done
7883         timeincl=''
7884         echo " "
7885         case "$flags" in
7886         *SYSTIMEKERNEL*) i_systimek="$define"
7887                 timeincl=`./findhdr sys/time.h`
7888                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7889         *) i_systimek="$undef";;
7890         esac
7891         case "$flags" in
7892         *I_TIME*) i_time="$define"
7893                 timeincl=`./findhdr time.h`" $timeincl"
7894                 echo "We'll include <time.h>." >&4;;
7895         *) i_time="$undef";;
7896         esac
7897         case "$flags" in
7898         *I_SYSTIME*) i_systime="$define"
7899                 timeincl=`./findhdr sys/time.h`" $timeincl"
7900                 echo "We'll include <sys/time.h>." >&4;;
7901         *) i_systime="$undef";;
7902         esac
7903         $rm -f try.c try
7904 fi
7905
7906 : check for fd_set items
7907 $cat <<EOM
7908
7909 Checking to see how well your C compiler handles fd_set and friends ...
7910 EOM
7911 $cat >fd_set.c <<EOCP
7912 #$i_systime I_SYS_TIME
7913 #$i_sysselct I_SYS_SELECT
7914 #$d_socket HAS_SOCKET
7915 #include <sys/types.h>
7916 #ifdef HAS_SOCKET
7917 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7918 #endif
7919 #ifdef I_SYS_TIME
7920 #include <sys/time.h>
7921 #endif
7922 #ifdef I_SYS_SELECT
7923 #include <sys/select.h>
7924 #endif
7925 int main() {
7926         fd_set fds;
7927
7928 #ifdef TRYBITS
7929         if(fds.fds_bits);
7930 #endif
7931
7932 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7933         exit(0);
7934 #else
7935         exit(1);
7936 #endif
7937 }
7938 EOCP
7939 set fd_set -DTRYBITS
7940 if eval $compile; then
7941         d_fds_bits="$define"
7942         d_fd_set="$define"
7943         echo "Well, your system knows about the normal fd_set typedef..." >&4
7944         if ./fd_set; then
7945                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7946                 d_fd_macros="$define"
7947         else
7948                 $cat >&4 <<'EOM'
7949 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7950 EOM
7951                 d_fd_macros="$undef"
7952         fi
7953 else
7954         $cat <<'EOM'
7955 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7956 EOM
7957         set fd_set
7958         if eval $compile; then
7959                 d_fds_bits="$undef"
7960                 d_fd_set="$define"
7961                 echo "Well, your system has some sort of fd_set available..." >&4
7962                 if ./fd_set; then
7963                         echo "and you have the normal fd_set macros." >&4
7964                         d_fd_macros="$define"
7965                 else
7966                         $cat <<'EOM'
7967 but not the normal fd_set macros!  Gross!  More work for me...
7968 EOM
7969                         d_fd_macros="$undef"
7970                 fi
7971         else
7972         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7973                 d_fd_set="$undef"
7974                 d_fds_bits="$undef"
7975                 d_fd_macros="$undef"
7976         fi
7977 fi
7978 $rm -f fd_set*
7979
7980 : see if fgetpos exists
7981 set fgetpos d_fgetpos
7982 eval $inlibc
7983
7984
7985 if $test X"$use64bits" = X"$define"; then
7986         : see if fgetpos64 exists
7987         set fgetpos64 d_fgetpos64
7988         eval $inlibc
7989
7990         : see if fopen64 exists
7991         set freopen64 d_fopen64
7992         eval $inlibc
7993
7994         : see if freopen64 exists
7995         set freopen64 d_freopen64
7996         eval $inlibc
7997
7998         : see if fseek64 exists
7999         set fseek64 d_fseek64
8000         eval $inlibc
8001
8002         : see if fseeko64 exists
8003         set fseeko64 d_fseeko64
8004         eval $inlibc
8005
8006         : see if fsetpos64 exists
8007         set fsetpos64 d_fsetpos64
8008         eval $inlibc
8009
8010         : see if ftell64 exists
8011         set ftell64 d_ftell64
8012         eval $inlibc
8013
8014         : see if ftello64 exists
8015         set ftello64 d_ftello64
8016         eval $inlibc
8017
8018         : see if tmpfile64 exists
8019         set tmpfile64 d_tmpfile64
8020         eval $inlibc
8021 else
8022         val="$undef"
8023         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8024         do
8025                 set $xxx
8026                 eval $setvar
8027         done
8028 fi
8029
8030 : see if flock exists
8031 set flock d_flock
8032 eval $inlibc
8033
8034 : see if fork exists
8035 set fork d_fork
8036 eval $inlibc
8037
8038 : see if pathconf exists
8039 set pathconf d_pathconf
8040 eval $inlibc
8041
8042 : see if fpathconf exists
8043 set fpathconf d_fpathconf
8044 eval $inlibc
8045
8046 : see if fseeko exists
8047 set fseeko d_fseeko
8048 eval $inlibc
8049
8050 : see if fsetpos exists
8051 set fsetpos d_fsetpos
8052 eval $inlibc
8053
8054 : see if this is a sys/param system
8055 set sys/param.h i_sysparam
8056 eval $inhdr
8057
8058 : see if this is a sys/mount.h system
8059 set sys/mount.h i_sysmount
8060 eval $inhdr
8061
8062
8063 : see if statfs exists
8064 set statfs d_statfs
8065 eval $inlibc
8066
8067 : see if fstatfs exists
8068 set fstatfs d_fstatfs
8069 eval $inlibc
8070
8071 : see if statfs knows about mount flags
8072 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8073 eval $hasfield
8074
8075
8076 : see if statvfs exists
8077 set statvfs d_statvfs
8078 eval $inlibc
8079
8080 : see if fstatvfs exists
8081 set fstatvfs d_fstatvfs
8082 eval $inlibc
8083
8084
8085 : see if ftello exists
8086 set ftello d_ftello
8087 eval $inlibc
8088
8089 : see if getgrent exists
8090 set getgrent d_getgrent
8091 eval $inlibc
8092
8093 : see if gethostbyaddr exists
8094 set gethostbyaddr d_gethbyaddr
8095 eval $inlibc
8096
8097 : see if gethostbyname exists
8098 set gethostbyname d_gethbyname
8099 eval $inlibc
8100
8101 : see if gethostent exists
8102 set gethostent d_gethent
8103 eval $inlibc
8104
8105 : see how we will look up host name
8106 echo " "
8107 call=''
8108 if set gethostname val -f d_gethname; eval $csym; $val; then
8109         echo 'gethostname() found.' >&4
8110         d_gethname="$define"
8111         call=gethostname
8112 fi
8113 if set uname val -f d_uname; eval $csym; $val; then
8114         if ./xenix; then
8115                 $cat <<'EOM'
8116 uname() was found, but you're running xenix, and older versions of xenix
8117 have a broken uname(). If you don't really know whether your xenix is old
8118 enough to have a broken system call, use the default answer.
8119
8120 EOM
8121                 dflt=y
8122                 case "$d_uname" in
8123                 "$define") dflt=n;;
8124                 esac
8125                 rp='Is your uname() broken?'
8126                 . ./myread
8127                 case "$ans" in
8128                 n*) d_uname="$define"; call=uname;;
8129                 esac
8130         else
8131                 echo 'uname() found.' >&4
8132                 d_uname="$define"
8133                 case "$call" in
8134                 '') call=uname ;;
8135                 esac
8136         fi
8137 fi
8138 case "$d_gethname" in
8139 '') d_gethname="$undef";;
8140 esac
8141 case "$d_uname" in
8142 '') d_uname="$undef";;
8143 esac
8144 case "$d_uname$d_gethname" in
8145 *define*)
8146         dflt=n
8147         cat <<EOM
8148  
8149 Every now and then someone has a $call() that lies about the hostname
8150 but can't be fixed for political or economic reasons.  If you wish, I can
8151 pretend $call() isn't there and maybe compute hostname at run-time
8152 thanks to the '$phostname' command.
8153
8154 EOM
8155         rp="Shall I ignore $call() from now on?"
8156         . ./myread
8157         case "$ans" in
8158         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8159         esac;;
8160 esac
8161 case "$phostname" in
8162 '') aphostname='';;
8163 *) case "$aphostname" in
8164         /*) ;;
8165         *) set X $phostname
8166                 shift
8167                 file=$1
8168                 shift
8169                 file=`./loc $file $file $pth`
8170                 aphostname=`echo $file $*`
8171                 ;;
8172         esac
8173         ;;
8174 esac
8175 case "$d_uname$d_gethname" in
8176 *define*) ;;
8177 *)
8178         case "$phostname" in
8179         '')
8180                 echo "There will be no way for $package to get your hostname." >&4;;
8181         *)
8182         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8183                 ;;
8184         esac;;
8185 esac
8186 case "$d_phostname" in
8187 '') d_phostname="$undef";;
8188 esac
8189
8190 : see if this is a netdb.h system
8191 set netdb.h i_netdb
8192 eval $inhdr
8193
8194 : see if prototypes for various gethostxxx netdb.h functions are available
8195 echo " "
8196 set d_gethostprotos gethostent $i_netdb netdb.h
8197 eval $hasproto
8198
8199 : see if getlogin exists
8200 set getlogin d_getlogin
8201 eval $inlibc
8202
8203 : see if getmntent exists
8204 set getmntent d_getmntent
8205 eval $inlibc
8206
8207 : see if getnetbyaddr exists
8208 set getnetbyaddr d_getnbyaddr
8209 eval $inlibc
8210
8211 : see if getnetbyname exists
8212 set getnetbyname d_getnbyname
8213 eval $inlibc
8214
8215 : see if getnetent exists
8216 set getnetent d_getnent
8217 eval $inlibc
8218
8219 : see if prototypes for various getnetxxx netdb.h functions are available
8220 echo " "
8221 set d_getnetprotos getnetent $i_netdb netdb.h
8222 eval $hasproto
8223
8224
8225 : see if getprotobyname exists
8226 set getprotobyname d_getpbyname
8227 eval $inlibc
8228
8229 : see if getprotobynumber exists
8230 set getprotobynumber d_getpbynumber
8231 eval $inlibc
8232
8233 : see if getprotoent exists
8234 set getprotoent d_getpent
8235 eval $inlibc
8236
8237 : see if getpgid exists
8238 set getpgid d_getpgid
8239 eval $inlibc
8240
8241 : see if getpgrp2 exists
8242 set getpgrp2 d_getpgrp2
8243 eval $inlibc
8244
8245 : see if getppid exists
8246 set getppid d_getppid
8247 eval $inlibc
8248
8249 : see if getpriority exists
8250 set getpriority d_getprior
8251 eval $inlibc
8252
8253 : see if prototypes for various getprotoxxx netdb.h functions are available
8254 echo " "
8255 set d_getprotoprotos getprotoent $i_netdb netdb.h
8256 eval $hasproto
8257
8258 : see if getpwent exists
8259 set getpwent d_getpwent
8260 eval $inlibc
8261
8262
8263 : see if getservbyname exists
8264 set getservbyname d_getsbyname
8265 eval $inlibc
8266
8267 : see if getservbyport exists
8268 set getservbyport d_getsbyport
8269 eval $inlibc
8270
8271 : see if getservent exists
8272 set getservent d_getsent
8273 eval $inlibc
8274
8275 : see if prototypes for various getservxxx netdb.h functions are available
8276 echo " "
8277 set d_getservprotos getservent $i_netdb netdb.h
8278 eval $hasproto
8279
8280 : see if getspent exists
8281 set getspent d_getspent
8282 eval $inlibc
8283
8284 : see if getspnam exists
8285 set getspnam d_getspnam
8286 eval $inlibc
8287
8288 : see if gettimeofday or ftime exists
8289 set gettimeofday d_gettimeod
8290 eval $inlibc
8291 case "$d_gettimeod" in
8292 "$undef")
8293         set ftime d_ftime 
8294         eval $inlibc
8295         ;;
8296 *)
8297         val="$undef"; set d_ftime; eval $setvar
8298         ;;
8299 esac
8300 case "$d_gettimeod$d_ftime" in
8301 "$undef$undef")
8302         echo " "
8303         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8304         ;;
8305 esac
8306
8307 : see if this is an grp system
8308 set grp.h i_grp
8309 eval $inhdr
8310
8311 case "$i_grp" in
8312 $define)
8313         xxx=`./findhdr grp.h`
8314         $cppstdin $cppflags $cppminus < $xxx >$$.h
8315
8316         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8317                 val="$define"
8318         else
8319                 val="$undef"
8320         fi
8321         set d_grpasswd
8322         eval $setvar
8323
8324         $rm -f $$.h
8325         ;;
8326 *)
8327         val="$undef";
8328         set d_grpasswd; eval $setvar
8329         ;;
8330 esac
8331
8332 : see if hasmntopt exists
8333 set hasmntopt d_hasmntopt
8334 eval $inlibc
8335
8336 : see if this is a netinet/in.h or sys/in.h system
8337 set netinet/in.h i_niin sys/in.h i_sysin
8338 eval $inhdr
8339
8340 : see if arpa/inet.h has to be included
8341 set arpa/inet.h i_arpainet
8342 eval $inhdr
8343
8344 : see if htonl --and friends-- exists
8345 val=''
8346 set htonl val
8347 eval $inlibc
8348
8349 : Maybe they are macros.
8350 case "$val" in
8351 $undef)
8352         $cat >htonl.c <<EOM
8353 #include <stdio.h>
8354 #include <sys/types.h>
8355 #$i_niin I_NETINET_IN
8356 #$i_sysin I_SYS_IN
8357 #$i_arpainet I_ARPA_INET
8358 #ifdef I_NETINET_IN
8359 #include <netinet/in.h>
8360 #endif
8361 #ifdef I_SYS_IN
8362 #include <sys/in.h>
8363 #endif
8364 #ifdef I_ARPA_INET
8365 #include <arpa/inet.h>
8366 #endif
8367 #ifdef htonl
8368 printf("Defined as a macro.");
8369 #endif
8370 EOM
8371         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8372         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8373                 val="$define"
8374                 echo "But it seems to be defined as a macro." >&4
8375         fi
8376         $rm -f htonl.?
8377         ;;
8378 esac
8379 set d_htonl
8380 eval $setvar
8381
8382 : see which of string.h or strings.h is needed
8383 echo " "
8384 strings=`./findhdr string.h`
8385 if $test "$strings" && $test -r "$strings"; then
8386         echo "Using <string.h> instead of <strings.h>." >&4
8387         val="$define"
8388 else
8389         val="$undef"
8390         strings=`./findhdr strings.h`
8391         if $test "$strings" && $test -r "$strings"; then
8392                 echo "Using <strings.h> instead of <string.h>." >&4
8393         else
8394                 echo "No string header found -- You'll surely have problems." >&4
8395         fi
8396 fi
8397 set i_string
8398 eval $setvar
8399 case "$i_string" in
8400 "$undef") strings=`./findhdr strings.h`;;
8401 *)        strings=`./findhdr string.h`;;
8402 esac
8403
8404 : index or strchr
8405 echo " "
8406 if set index val -f; eval $csym; $val; then
8407         if set strchr val -f d_strchr; eval $csym; $val; then
8408                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8409                         val="$define"
8410                         vali="$undef"
8411                         echo "strchr() found." >&4
8412                 else
8413                         val="$undef"
8414                         vali="$define"
8415                         echo "index() found." >&4
8416                 fi
8417         else
8418                 val="$undef"
8419                 vali="$define"
8420                 echo "index() found." >&4
8421         fi
8422 else
8423         if set strchr val -f d_strchr; eval $csym; $val; then
8424                 val="$define"
8425                 vali="$undef"
8426                 echo "strchr() found." >&4
8427         else
8428                 echo "No index() or strchr() found!" >&4
8429                 val="$undef"
8430                 vali="$undef"
8431         fi
8432 fi
8433 set d_strchr; eval $setvar
8434 val="$vali"
8435 set d_index; eval $setvar
8436
8437 : check whether inet_aton exists
8438 set inet_aton d_inetaton
8439 eval $inlibc
8440
8441 : see if inttypes.h is available
8442 : we want a real compile instead of Inhdr because some systems
8443 : have an inttypes.h which includes non-existent headers
8444 echo " "
8445 $cat >try.c <<EOCP
8446 #include <inttypes.h>
8447 int main() {
8448         static int32_t foo32 = 0x12345678;
8449 }
8450 EOCP
8451 set try
8452 if eval $compile; then
8453         echo "<inttypes.h> found." >&4
8454         val="$define"
8455 else
8456         echo "<inttypes.h> NOT found." >&4
8457         val="$undef"
8458 fi
8459 $rm -f try.c try
8460 set i_inttypes
8461 eval $setvar
8462
8463 : check for int64_t
8464 case "$use64bits" in
8465 "$define" )
8466         echo " "
8467         echo $n "Checking to see if your system supports int64_t...$c" >&4
8468         $cat >try.c <<EOCP
8469 #include <sys/types.h>
8470 #$i_inttypes I_INTTYPES
8471 #ifdef I_INTTYPES
8472 #include <inttypes.h>
8473 #endif
8474 int64_t foo() { int64_t x; x = 7; return x; }
8475 EOCP
8476         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8477                 val="$define"
8478                 echo " Yup, it does." >&4
8479         else
8480                 val="$undef"
8481                 echo " Nope, it doesn't." >&4
8482         fi
8483         $rm -f try.*
8484         ;;
8485 *)      val="$undef"
8486         ;;
8487 esac
8488 set d_int64t
8489 eval $setvar
8490
8491
8492 : Look for isascii
8493 echo " "
8494 $cat >isascii.c <<'EOCP'
8495 #include <stdio.h>
8496 #include <ctype.h>
8497 int main() {
8498         int c = 'A';
8499         if (isascii(c))
8500                 exit(0);
8501         else
8502                 exit(1);
8503 }
8504 EOCP
8505 set isascii
8506 if eval $compile; then
8507         echo "isascii() found." >&4
8508         val="$define"
8509 else
8510         echo "isascii() NOT found." >&4
8511         val="$undef"
8512 fi
8513 set d_isascii
8514 eval $setvar
8515 $rm -f isascii*
8516
8517 : see if killpg exists
8518 set killpg d_killpg
8519 eval $inlibc
8520
8521 : see if lchown exists
8522 echo " "
8523 $cat > try.c <<'EOCP'
8524 /* System header to define __stub macros and hopefully few prototypes,
8525     which can conflict with char lchown(); below.  */
8526 #include <assert.h>
8527 /* Override any gcc2 internal prototype to avoid an error.  */
8528 /* We use char because int might match the return type of a gcc2
8529    builtin and then its argument prototype would still apply.  */
8530 char lchown();
8531 int main() {
8532     /*  The GNU C library defines this for functions which it implements
8533         to always fail with ENOSYS.  Some functions are actually named
8534         something starting with __ and the normal name is an alias.  */
8535 #if defined (__stub_lchown) || defined (__stub___lchown)
8536 choke me
8537 #else
8538 lchown();
8539 #endif
8540 ; return 0; }
8541 EOCP
8542 set try
8543 if eval $compile; then
8544     $echo "lchown() found." >&4
8545     val="$define"
8546 else
8547     $echo "lchown() NOT found." >&4
8548     val="$undef"
8549 fi
8550 set d_lchown
8551 eval $setvar
8552
8553 : see if link exists
8554 set link d_link
8555 eval $inlibc
8556
8557 : see if localeconv exists
8558 set localeconv d_locconv
8559 eval $inlibc
8560
8561 : see if lockf exists
8562 set lockf d_lockf
8563 eval $inlibc
8564
8565 : check for length of double
8566 echo " "
8567 case "$doublesize" in
8568 '')
8569         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8570         $cat >try.c <<'EOCP'
8571 #include <stdio.h>
8572 int main()
8573 {
8574         printf("%d\n", sizeof(double));
8575 }
8576 EOCP
8577         set try
8578         if eval $compile_ok; then
8579                 doublesize=`./try`
8580                 $echo " $doublesize bytes." >&4
8581         else
8582                 dflt='8'
8583                 echo "(I can't seem to compile the test program.  Guessing...)"
8584                 rp="What is the size of a double precision number (in bytes)?"
8585                 . ./myread
8586                 doublesize="$ans"
8587         fi
8588         ;;
8589 esac
8590 $rm -f try.c try
8591
8592 : check for long doubles
8593 echo " "
8594 echo $n "Checking to see if your system supports long doubles...$c" >&4
8595 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8596 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8597         val="$define"
8598         echo " Yup, it does." >&4
8599 else
8600         val="$undef"
8601         echo " Nope, it doesn't." >&4
8602 fi
8603 $rm try.*
8604 set d_longdbl
8605 eval $setvar
8606
8607 : check for length of long double
8608 case "${d_longdbl}${longdblsize}" in
8609 $define)
8610         echo " "
8611         $echo $n "Checking to see how big your long doubles are...$c" >&4
8612         $cat >try.c <<'EOCP'
8613 #include <stdio.h>
8614 int main()
8615 {
8616         printf("%d\n", sizeof(long double));
8617 }
8618 EOCP
8619         set try
8620         if eval $compile; then
8621                 longdblsize=`./try`
8622                 $echo " $longdblsize bytes." >&4
8623         else
8624                 dflt='8'
8625                 echo " "
8626                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8627                 rp="What is the size of a long double (in bytes)?"
8628                 . ./myread
8629                 longdblsize="$ans"
8630         fi
8631         if $test "X$doublesize" = "X$longdblsize"; then
8632                 echo "(That isn't any different from an ordinary double.)"
8633         fi      
8634         ;;
8635 esac
8636 $rm -f try.c try
8637
8638 : check for long long
8639 echo " "
8640 echo $n "Checking to see if your system supports long long...$c" >&4
8641 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8642 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8643         val="$define"
8644         echo " Yup, it does." >&4
8645 else
8646         val="$undef"
8647         echo " Nope, it doesn't." >&4
8648 fi
8649 $rm try.*
8650 set d_longlong
8651 eval $setvar
8652
8653 : check for length of long long
8654 case "${d_longlong}${longlongsize}" in
8655 $define)
8656         echo " "
8657         $echo $n "Checking to see how big your long longs are...$c" >&4
8658         $cat >try.c <<'EOCP'
8659 #include <stdio.h>
8660 int main()
8661 {
8662         printf("%d\n", sizeof(long long));
8663 }
8664 EOCP
8665         set try
8666         if eval $compile_ok; then
8667                 longlongsize=`./try`
8668                 $echo " $longlongsize bytes." >&4
8669         else
8670                 dflt='8'
8671                 echo " "
8672                 echo "(I can't seem to compile the test program.  Guessing...)"
8673                 rp="What is the size of a long long (in bytes)?"
8674                 . ./myread
8675                 longlongsize="$ans"
8676         fi
8677         if $test "X$longsize" = "X$longlongsize"; then
8678                 echo "(That isn't any different from an ordinary long.)"
8679         fi      
8680         ;;
8681 esac
8682 $rm -f try.c try
8683
8684 : see if lstat exists
8685 set lstat d_lstat
8686 eval $inlibc
8687
8688 : see if madvise exists
8689 set madvise d_madvise
8690 eval $inlibc
8691
8692 : see if mblen exists
8693 set mblen d_mblen
8694 eval $inlibc
8695
8696 : see if mbstowcs exists
8697 set mbstowcs d_mbstowcs
8698 eval $inlibc
8699
8700 : see if mbtowc exists
8701 set mbtowc d_mbtowc
8702 eval $inlibc
8703
8704 : see if memchr exists
8705 set memchr d_memchr
8706 eval $inlibc
8707
8708 : see if memcmp exists
8709 set memcmp d_memcmp
8710 eval $inlibc
8711
8712 : see if memcpy exists
8713 set memcpy d_memcpy
8714 eval $inlibc
8715
8716 : see if memmove exists
8717 set memmove d_memmove
8718 eval $inlibc
8719
8720 : see if memset exists
8721 set memset d_memset
8722 eval $inlibc
8723
8724 : see if mkdir exists
8725 set mkdir d_mkdir
8726 eval $inlibc
8727
8728 : see if mkfifo exists
8729 set mkfifo d_mkfifo
8730 eval $inlibc
8731
8732 : see if mktime exists
8733 set mktime d_mktime
8734 eval $inlibc
8735
8736 : see if this is a sys/mman.h system
8737 set sys/mman.h i_sysmman
8738 eval $inhdr
8739
8740 : see if mmap exists
8741 set mmap d_mmap
8742 eval $inlibc
8743 : see what shmat returns
8744 : default to something harmless
8745 mmaptype='void *'
8746 case "$i_sysmman$d_mmap" in
8747 "$define$define")
8748         $cat >mmap.c <<'END'
8749 #include <sys/mman.h>
8750 void *mmap();
8751 END
8752         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8753                 mmaptype='void *'
8754         else
8755                 mmaptype='caddr_t'
8756         fi
8757         echo "and it returns ($mmaptype)." >&4
8758         ;;
8759 esac
8760
8761
8762
8763 : see if mprotect exists
8764 set mprotect d_mprotect
8765 eval $inlibc
8766
8767 : see if msgctl exists
8768 set msgctl d_msgctl
8769 eval $inlibc
8770
8771 : see if msgget exists
8772 set msgget d_msgget
8773 eval $inlibc
8774
8775 : see if msgsnd exists
8776 set msgsnd d_msgsnd
8777 eval $inlibc
8778
8779 : see if msgrcv exists
8780 set msgrcv d_msgrcv
8781 eval $inlibc
8782
8783 : see how much of the 'msg*(2)' library is present.
8784 h_msg=true
8785 echo " "
8786 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8787 *"$undef"*) h_msg=false;;
8788 esac
8789 case "$osname" in
8790 freebsd)
8791     case "`ipcs 2>&1`" in
8792     "SVID messages"*"not configured"*)
8793         echo "Your $osname does not have the msg*(2) configured." >&4
8794         h_msg=false
8795         val="$undef"
8796         set msgctl d_msgctl
8797         eval $setvar
8798         set msgget d_msgget
8799         eval $setvar
8800         set msgsnd d_msgsnd
8801         eval $setvar
8802         set msgrcv d_msgrcv
8803         eval $setvar
8804         ;;
8805     esac
8806     ;;
8807 esac
8808 : we could also check for sys/ipc.h ...
8809 if $h_msg && $test `./findhdr sys/msg.h`; then
8810         echo "You have the full msg*(2) library." >&4
8811         val="$define"
8812 else
8813         echo "You don't have the full msg*(2) library." >&4
8814         val="$undef"
8815 fi
8816 set d_msg
8817 eval $setvar
8818
8819 : see if msync exists
8820 set msync d_msync
8821 eval $inlibc
8822
8823 : see if munmap exists
8824 set munmap d_munmap
8825 eval $inlibc
8826
8827 : see if nice exists
8828 set nice d_nice
8829 eval $inlibc
8830
8831 : see if POSIX threads are available
8832 if test "X$usethreads" = "X$define"; then
8833         set pthread.h i_pthread
8834         eval $inhdr
8835 else
8836         i_pthread="$undef"
8837 fi
8838
8839
8840
8841 : how to create joinable pthreads
8842 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8843         echo " "
8844         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8845         $cat >try.c <<'EOCP'
8846 #include <pthread.h>
8847 int main() {
8848     int detachstate = JOINABLE;
8849 }
8850 EOCP
8851         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8852         if eval $compile; then
8853                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8854                 val="$undef" # Yes, undef.
8855                 set d_old_pthread_create_joinable
8856                 eval $setvar
8857                 val=""
8858                 set old_pthread_create_joinable
8859                 eval $setvar
8860         else
8861                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8862                 if eval $compile; then
8863                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8864                         val="$define"
8865                         set d_old_pthread_create_joinable
8866                         eval $setvar
8867                         val=PTHREAD_CREATE_UNDETACHED
8868                         set old_pthread_create_joinable
8869                         eval $setvar
8870                 else            
8871                         set try -DJOINABLE=__UNDETACHED
8872                         if eval $compile; then
8873                                 echo "You seem to use __UNDETACHED." >&4
8874                                 val="$define"
8875                                 set d_old_pthread_create_joinable
8876                                 eval $setvar
8877                                 val=__UNDETACHED
8878                                 set old_pthread_create_joinable
8879                                 eval $setvar
8880                         else
8881                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8882                                 val="$define"
8883                                 set d_old_pthread_create_joinable
8884                                 eval $setvar
8885                                 val=0
8886                                 set old_pthread_create_joinable
8887                                 eval $setvar
8888                         fi
8889                 fi
8890         fi
8891         $rm -f try try.*
8892 else
8893     d_old_pthread_create_joinable="$undef"
8894     old_pthread_create_joinable=""
8895 fi
8896
8897 : see if pause exists
8898 set pause d_pause
8899 eval $inlibc
8900
8901 : see if pipe exists
8902 set pipe d_pipe
8903 eval $inlibc
8904
8905 : see if poll exists
8906 set poll d_poll
8907 eval $inlibc
8908
8909
8910 : see whether the various POSIXish _yields exist
8911 $cat >try.c <<EOP
8912 #include <pthread.h>
8913 #include <stdio.h>
8914 int main() {
8915 #ifdef SCHED_YIELD
8916         sched_yield();
8917 #else
8918 #ifdef PTHREAD_YIELD
8919         pthread_yield();
8920 #else
8921 #ifdef PTHREAD_YIELD_NULL
8922         pthread_yield(NULL);
8923 #endif
8924 #endif
8925 #endif
8926 }
8927 EOP
8928 : see if sched_yield exists
8929 set try -DSCHED_YIELD
8930 if eval $compile; then
8931     val="$define"
8932     sched_yield='sched_yield()'
8933 else
8934     val="$undef"
8935 fi
8936 case "$usethreads" in
8937 $define)
8938         case "$val" in
8939         $define) echo 'sched_yield() found.' >&4        ;;
8940         *)       echo 'sched_yield() NOT found.' >&4    ;;
8941         esac
8942 esac
8943 set d_sched_yield
8944 eval $setvar
8945
8946 : see if pthread_yield exists
8947 set try -DPTHREAD_YIELD
8948 if eval $compile; then
8949     val="$define"
8950     case "$sched_yield" in
8951     '') sched_yield='pthread_yield()' ;;
8952     esac
8953 else
8954     set try -DPTHREAD_YIELD_NULL
8955     if eval $compile; then
8956         val="$define"
8957         case "$sched_yield" in
8958         '') sched_yield='pthread_yield(NULL)' ;;
8959         esac
8960     else
8961         val="$undef"
8962     fi
8963 fi
8964 case "$usethreads" in
8965 $define)
8966         case "$val" in
8967         $define) echo 'pthread_yield() found.' >&4      ;;
8968         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8969         esac
8970         ;;
8971 esac
8972 set d_pthread_yield
8973 eval $setvar
8974
8975 case "$sched_yield" in
8976 '') sched_yield=undef ;;
8977 esac
8978
8979 $rm -f try try.*
8980
8981 : see if this is a pwd.h system
8982 set pwd.h i_pwd
8983 eval $inhdr
8984
8985 case "$i_pwd" in
8986 $define)
8987         xxx=`./findhdr pwd.h`
8988         $cppstdin $cppflags $cppminus < $xxx >$$.h
8989
8990         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8991                 val="$define"
8992         else
8993                 val="$undef"
8994         fi
8995         set d_pwquota
8996         eval $setvar
8997
8998         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8999                 val="$define"
9000         else
9001                 val="$undef"
9002         fi
9003         set d_pwage
9004         eval $setvar
9005
9006         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9007                 val="$define"
9008         else
9009                 val="$undef"
9010         fi
9011         set d_pwchange
9012         eval $setvar
9013
9014         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9015                 val="$define"
9016         else
9017                 val="$undef"
9018         fi
9019         set d_pwclass
9020         eval $setvar
9021
9022         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9023                 val="$define"
9024         else
9025                 val="$undef"
9026         fi
9027         set d_pwexpire
9028         eval $setvar
9029
9030         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9031                 val="$define"
9032         else
9033                 val="$undef"
9034         fi
9035         set d_pwcomment
9036         eval $setvar
9037
9038         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9039                 val="$define"
9040         else
9041                 val="$undef"
9042         fi
9043         set d_pwgecos
9044         eval $setvar
9045
9046         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9047                 val="$define"
9048         else
9049                 val="$undef"
9050         fi
9051         set d_pwpasswd
9052         eval $setvar
9053
9054         $rm -f $$.h
9055         ;;
9056 *)
9057         val="$undef"; 
9058         set d_pwquota; eval $setvar
9059         set d_pwage; eval $setvar
9060         set d_pwchange; eval $setvar
9061         set d_pwclass; eval $setvar
9062         set d_pwexpire; eval $setvar
9063         set d_pwcomment; eval $setvar
9064         set d_pwgecos; eval $setvar
9065         set d_pwpasswd; eval $setvar
9066         ;;
9067 esac
9068
9069 : see if readdir and friends exist
9070 set readdir d_readdir
9071 eval $inlibc
9072 set seekdir d_seekdir
9073 eval $inlibc
9074 set telldir d_telldir
9075 eval $inlibc
9076 set rewinddir d_rewinddir
9077 eval $inlibc
9078
9079 : see if readlink exists
9080 set readlink d_readlink
9081 eval $inlibc
9082
9083 : see if readv exists
9084 set readv d_readv
9085 eval $inlibc
9086
9087 : see if rename exists
9088 set rename d_rename
9089 eval $inlibc
9090
9091 : see if rmdir exists
9092 set rmdir d_rmdir
9093 eval $inlibc
9094
9095 : see if memory.h is available.
9096 val=''
9097 set memory.h val
9098 eval $inhdr
9099
9100 : See if it conflicts with string.h
9101 case "$val" in
9102 $define)
9103         case "$strings" in
9104         '') ;;
9105         *)
9106                 $cppstdin $cppflags $cppminus < $strings > mem.h
9107                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9108                         echo " "
9109                         echo "We won't be including <memory.h>."
9110                         val="$undef"
9111                 fi
9112                 $rm -f mem.h
9113                 ;;
9114         esac
9115 esac
9116 set i_memory
9117 eval $setvar
9118
9119 : can bcopy handle overlapping blocks?
9120 val="$undef"
9121 case "$d_bcopy" in
9122 "$define")
9123         echo " "
9124         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9125         $cat >try.c <<EOCP
9126 #$i_memory I_MEMORY
9127 #$i_stdlib I_STDLIB
9128 #$i_string I_STRING
9129 #$i_unistd I_UNISTD
9130 EOCP
9131         $cat >>try.c <<'EOCP'
9132 #include <stdio.h>
9133 #ifdef I_MEMORY
9134 #  include <memory.h>
9135 #endif
9136 #ifdef I_STDLIB
9137 #  include <stdlib.h>
9138 #endif
9139 #ifdef I_STRING
9140 #  include <string.h>
9141 #else
9142 #  include <strings.h>
9143 #endif
9144 #ifdef I_UNISTD
9145 #  include <unistd.h>  /* Needed for NetBSD */
9146 #endif
9147 int main()
9148 {
9149 char buf[128], abc[128];
9150 char *b;
9151 int len;
9152 int off;
9153 int align;
9154
9155 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9156
9157 for (align = 7; align >= 0; align--) {
9158         for (len = 36; len; len--) {
9159                 b = buf+align;
9160                 bcopy(abc, b, len);
9161                 for (off = 1; off <= len; off++) {
9162                         bcopy(b, b+off, len);
9163                         bcopy(b+off, b, len);
9164                         if (bcmp(b, abc, len))
9165                                 exit(1);
9166                 }
9167         }
9168 }
9169 exit(0);
9170 }
9171 EOCP
9172         set try
9173         if eval $compile_ok; then
9174                 if ./try 2>/dev/null; then
9175                         echo "Yes, it can."
9176                         val="$define"
9177                 else
9178                         echo "It can't, sorry."
9179                         case "$d_memmove" in
9180                         "$define") echo "But that's Ok since you have memmove()." ;;
9181                         esac
9182                 fi
9183         else
9184                 echo "(I can't compile the test program, so we'll assume not...)"
9185                 case "$d_memmove" in
9186                 "$define") echo "But that's Ok since you have memmove()." ;;
9187                 esac
9188         fi
9189         ;;
9190 esac
9191 $rm -f try.* try core
9192 set d_safebcpy
9193 eval $setvar
9194
9195 : can memcpy handle overlapping blocks?
9196 val="$undef"
9197 case "$d_memcpy" in
9198 "$define")
9199         echo " "
9200         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9201         $cat >try.c <<EOCP
9202 #$i_memory I_MEMORY
9203 #$i_stdlib I_STDLIB
9204 #$i_string I_STRING
9205 #$i_unistd I_UNISTD
9206 EOCP
9207         $cat >>try.c <<'EOCP'
9208 #include <stdio.h>
9209 #ifdef I_MEMORY
9210 #  include <memory.h>
9211 #endif
9212 #ifdef I_STDLIB
9213 #  include <stdlib.h>
9214 #endif
9215 #ifdef I_STRING
9216 #  include <string.h>
9217 #else
9218 #  include <strings.h>
9219 #endif
9220 #ifdef I_UNISTD
9221 #  include <unistd.h>  /* Needed for NetBSD */
9222 #endif
9223 int main()
9224 {
9225 char buf[128], abc[128];
9226 char *b;
9227 int len;
9228 int off;
9229 int align;
9230
9231 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9232    try to store the string in read-only memory. */
9233 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9234
9235 for (align = 7; align >= 0; align--) {
9236         for (len = 36; len; len--) {
9237                 b = buf+align;
9238                 memcpy(b, abc, len);
9239                 for (off = 1; off <= len; off++) {
9240                         memcpy(b+off, b, len);
9241                         memcpy(b, b+off, len);
9242                         if (memcmp(b, abc, len))
9243                                 exit(1);
9244                 }
9245         }
9246 }
9247 exit(0);
9248 }
9249 EOCP
9250         set try
9251         if eval $compile_ok; then
9252                 if ./try 2>/dev/null; then
9253                         echo "Yes, it can."
9254                         val="$define"
9255                 else
9256                         echo "It can't, sorry."
9257                         case "$d_memmove" in
9258                         "$define") echo "But that's Ok since you have memmove()." ;;
9259                         esac
9260                 fi
9261         else
9262                 echo "(I can't compile the test program, so we'll assume not...)"
9263                 case "$d_memmove" in
9264                 "$define") echo "But that's Ok since you have memmove()." ;;
9265                 esac
9266         fi
9267         ;;
9268 esac
9269 $rm -f try.* try core
9270 set d_safemcpy
9271 eval $setvar
9272
9273 : can memcmp be trusted to compare relative magnitude?
9274 val="$undef"
9275 case "$d_memcmp" in
9276 "$define")
9277         echo " "
9278         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9279         $cat >try.c <<EOCP
9280 #$i_memory I_MEMORY
9281 #$i_stdlib I_STDLIB
9282 #$i_string I_STRING
9283 #$i_unistd I_UNISTD
9284 EOCP
9285         $cat >>try.c <<'EOCP'
9286 #include <stdio.h>
9287 #ifdef I_MEMORY
9288 #  include <memory.h>
9289 #endif
9290 #ifdef I_STDLIB
9291 #  include <stdlib.h>
9292 #endif
9293 #ifdef I_STRING
9294 #  include <string.h>
9295 #else
9296 #  include <strings.h>
9297 #endif
9298 #ifdef I_UNISTD
9299 #  include <unistd.h>  /* Needed for NetBSD */
9300 #endif
9301 int main()
9302 {
9303 char a = -1;
9304 char b = 0;
9305 if ((a < b) && memcmp(&a, &b, 1) < 0)
9306         exit(1);
9307 exit(0);
9308 }
9309 EOCP
9310         set try
9311         if eval $compile_ok; then
9312                 if ./try 2>/dev/null; then
9313                         echo "Yes, it can."
9314                         val="$define"
9315                 else
9316                         echo "No, it can't (it uses signed chars)."
9317                 fi
9318         else
9319                 echo "(I can't compile the test program, so we'll assume not...)"
9320         fi
9321         ;;
9322 esac
9323 $rm -f try.* try core
9324 set d_sanemcmp
9325 eval $setvar
9326
9327 : see if select exists
9328 set select d_select
9329 eval $inlibc
9330
9331 : see if semctl exists
9332 set semctl d_semctl
9333 eval $inlibc
9334
9335 : see if semget exists
9336 set semget d_semget
9337 eval $inlibc
9338
9339 : see if semop exists
9340 set semop d_semop
9341 eval $inlibc
9342
9343 : see how much of the 'sem*(2)' library is present.
9344 h_sem=true
9345 echo " "
9346 case "$d_semctl$d_semget$d_semop" in
9347 *"$undef"*) h_sem=false;;
9348 esac
9349 case "$osname" in
9350 freebsd)
9351     case "`ipcs 2>&1`" in
9352     "SVID messages"*"not configured"*)
9353         echo "Your $osname does not have the sem*(2) configured." >&4
9354         h_sem=false
9355         val="$undef"
9356         set semctl d_semctl
9357         eval $setvar
9358         set semget d_semget
9359         eval $setvar
9360         set semop d_semop
9361         eval $setvar
9362         ;;
9363     esac
9364     ;;
9365 esac
9366 : we could also check for sys/ipc.h ...
9367 if $h_sem && $test `./findhdr sys/sem.h`; then
9368         echo "You have the full sem*(2) library." >&4
9369         val="$define"
9370 else
9371         echo "You don't have the full sem*(2) library." >&4
9372         val="$undef"
9373 fi
9374 set d_sem
9375 eval $setvar
9376
9377 : see whether sys/sem.h defines union semun
9378 echo " "
9379 $cat > try.c <<'END'
9380 #include <sys/types.h>
9381 #include <sys/ipc.h>
9382 #include <sys/sem.h>
9383 int main () { union semun semun; semun.buf = 0; }
9384 END
9385 set try
9386 if eval $compile; then
9387     echo "You have union semun in <sys/sem.h>." >&4
9388     val="$define"
9389 else
9390     echo "You do not have union semun in <sys/sem.h>." >&4
9391     val="$undef"
9392 fi
9393 $rm -f try try.c try.h
9394 set d_union_semun
9395 eval $setvar
9396
9397 : see how to do semctl IPC_STAT
9398 case "$d_sem" in
9399 $define)
9400     : see whether semctl IPC_STAT can use union semun
9401     echo " "
9402     $cat > try.h <<END
9403 #ifndef S_IRUSR
9404 #   ifdef S_IREAD
9405 #       define S_IRUSR S_IREAD
9406 #       define S_IWUSR S_IWRITE
9407 #       define S_IXUSR S_IEXEC
9408 #   else
9409 #       define S_IRUSR 0400
9410 #       define S_IWUSR 0200
9411 #       define S_IXUSR 0100
9412 #   endif
9413 #   define S_IRGRP (S_IRUSR>>3)
9414 #   define S_IWGRP (S_IWUSR>>3)
9415 #   define S_IXGRP (S_IXUSR>>3)
9416 #   define S_IROTH (S_IRUSR>>6)
9417 #   define S_IWOTH (S_IWUSR>>6)
9418 #   define S_IXOTH (S_IXUSR>>6)
9419 #endif
9420 #ifndef S_IRWXU
9421 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9422 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9423 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9424 #endif
9425 END
9426
9427     $cat > try.c <<END
9428 #include <sys/types.h>
9429 #include <sys/ipc.h>
9430 #include <sys/sem.h>
9431 #include <sys/stat.h>
9432 #include <stdio.h>
9433 #include <errno.h>
9434 #include "try.h"
9435 #ifndef errno
9436 extern int errno;
9437 #endif
9438 #$d_union_semun HAS_UNION_SEMUN
9439 int main() {
9440     union semun
9441 #ifndef HAS_UNION_SEMUN
9442     {
9443         int val;
9444         struct semid_ds *buf;
9445         unsigned short *array;
9446     }
9447 #endif
9448     arg;
9449     int sem, st;
9450
9451 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9452     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9453     if (sem > -1) {
9454         struct semid_ds argbuf;
9455         arg.buf = &argbuf;
9456 #       ifdef IPC_STAT
9457         st = semctl(sem, 0, IPC_STAT, arg);
9458         if (st == 0)
9459             printf("semun\n");
9460         else
9461 #       endif /* IPC_STAT */
9462             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9463 #       ifdef IPC_RMID
9464         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9465 #       endif /* IPC_RMID */
9466             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9467     } else
9468 #endif /* IPC_PRIVATE && ... */
9469         printf("semget failed: errno = %d\n", errno);
9470   return 0;
9471 }
9472 END
9473     val="$undef"
9474     set try
9475     if eval $compile; then
9476         xxx=`./try`
9477         case "$xxx" in
9478         semun) val="$define" ;;
9479         esac
9480     fi
9481     $rm -f try try.c
9482     set d_semctl_semun
9483     eval $setvar
9484     case "$d_semctl_semun" in
9485     $define)
9486         echo "You can use union semun for semctl IPC_STAT." >&4
9487         also='also'
9488         ;;
9489     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9490         also=''
9491         ;;
9492     esac
9493
9494     : see whether semctl IPC_STAT can use struct semid_ds pointer
9495     $cat > try.c <<'END'
9496 #include <sys/types.h>
9497 #include <sys/ipc.h>
9498 #include <sys/sem.h>
9499 #include <sys/stat.h>
9500 #include "try.h"
9501 #include <stdio.h>
9502 #include <errno.h>
9503 #ifndef errno
9504 extern int errno;
9505 #endif
9506 int main() {
9507     struct semid_ds arg;
9508     int sem, st;
9509
9510 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9511     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9512     if (sem > -1) {
9513 #       ifdef IPC_STAT
9514         st = semctl(sem, 0, IPC_STAT, &arg);
9515         if (st == 0)
9516             printf("semid_ds\n");
9517         else
9518 #       endif /* IPC_STAT */
9519             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9520 #       ifdef IPC_RMID
9521         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9522 #       endif /* IPC_RMID */
9523             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9524     } else
9525 #endif /* IPC_PRIVATE && ... */
9526         printf("semget failed: errno = %d\n", errno);
9527
9528     return 0;
9529 }
9530 END
9531     val="$undef"
9532     set try
9533     if eval $compile; then
9534         xxx=`./try`
9535         case "$xxx" in
9536         semid_ds) val="$define" ;;
9537         esac
9538     fi
9539     $rm -f try try.c
9540     set d_semctl_semid_ds
9541     eval $setvar
9542     case "$d_semctl_semid_ds" in
9543     $define)
9544         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9545         ;;
9546     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9547         ;;
9548     esac
9549     $rm -f try.h
9550     ;;
9551 *)  val="$undef"
9552
9553     # We do not have the full sem*(2) library, so assume we can not
9554     # use either.
9555
9556     set d_semctl_semun
9557     eval $setvar
9558
9559     set d_semctl_semid_ds
9560     eval $setvar
9561     ;;
9562 esac
9563
9564 : see if setegid exists
9565 set setegid d_setegid
9566 eval $inlibc
9567
9568 : see if seteuid exists
9569 set seteuid d_seteuid
9570 eval $inlibc
9571
9572 : see if setgrent exists
9573 set setgrent d_setgrent
9574 eval $inlibc
9575
9576 : see if sethostent exists
9577 set sethostent d_sethent
9578 eval $inlibc
9579
9580 : see if setlinebuf exists
9581 set setlinebuf d_setlinebuf
9582 eval $inlibc
9583
9584 : see if setlocale exists
9585 set setlocale d_setlocale
9586 eval $inlibc
9587
9588 : see if setnetent exists
9589 set setnetent d_setnent
9590 eval $inlibc
9591
9592 : see if setprotoent exists
9593 set setprotoent d_setpent
9594 eval $inlibc
9595
9596 : see if setpgid exists
9597 set setpgid d_setpgid
9598 eval $inlibc
9599
9600 : see if setpgrp2 exists
9601 set setpgrp2 d_setpgrp2
9602 eval $inlibc
9603
9604 : see if setpriority exists
9605 set setpriority d_setprior
9606 eval $inlibc
9607
9608 : see if setpwent exists
9609 set setpwent d_setpwent
9610 eval $inlibc
9611
9612 : see if setregid exists
9613 set setregid d_setregid
9614 eval $inlibc
9615 set setresgid d_setresgid
9616 eval $inlibc
9617
9618 : see if setreuid exists
9619 set setreuid d_setreuid
9620 eval $inlibc
9621 set setresuid d_setresuid
9622 eval $inlibc
9623
9624 : see if setrgid exists
9625 set setrgid d_setrgid
9626 eval $inlibc
9627
9628 : see if setruid exists
9629 set setruid d_setruid
9630 eval $inlibc
9631
9632 : see if setservent exists
9633 set setservent d_setsent
9634 eval $inlibc
9635
9636 : see if setsid exists
9637 set setsid d_setsid
9638 eval $inlibc
9639
9640 : see if setspent exists
9641 set setspent d_setspent
9642 eval $inlibc
9643
9644 : see if setvbuf exists
9645 set setvbuf d_setvbuf
9646 eval $inlibc
9647
9648 : see if sfio.h is available
9649 set sfio.h i_sfio
9650 eval $inhdr
9651
9652
9653 : see if sfio library is available
9654 case "$i_sfio" in
9655 $define)
9656         val=''
9657         set sfreserve val
9658         eval $inlibc
9659         ;;
9660 *)
9661         val="$undef"
9662         ;;
9663 esac
9664 : Ok, but do we want to use it.
9665 case "$val" in
9666 $define)
9667         case "$usesfio" in
9668         true|$define|[yY]*) dflt='y';;
9669         *) dflt='n';;
9670         esac
9671         echo "$package can use the sfio library, but it is experimental."
9672         rp="You seem to have sfio available, do you want to try using it?"
9673         . ./myread
9674         case "$ans" in
9675         y|Y) ;;
9676         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9677                 val="$undef"
9678                 : Remove sfio from list of libraries to use
9679                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9680                 shift
9681                 libs="$*"
9682                 echo "libs = $libs" >&4
9683                 ;;
9684         esac
9685         ;;
9686 *)      case "$usesfio" in
9687         true|$define|[yY]*)
9688                 echo "Sorry, cannot find sfio on this machine" >&4
9689                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9690                 ;;
9691         esac
9692         ;;
9693 esac
9694 set d_sfio
9695 eval $setvar
9696 case "$d_sfio" in
9697 $define) usesfio='true';;
9698 *) usesfio='false';;
9699 esac
9700
9701 : see if shmctl exists
9702 set shmctl d_shmctl
9703 eval $inlibc
9704
9705 : see if shmget exists
9706 set shmget d_shmget
9707 eval $inlibc
9708
9709 : see if shmat exists
9710 set shmat d_shmat
9711 eval $inlibc
9712 : see what shmat returns
9713 case "$d_shmat" in
9714 "$define")
9715         $cat >shmat.c <<'END'
9716 #include <sys/shm.h>
9717 void *shmat();
9718 END
9719         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9720                 shmattype='void *'
9721         else
9722                 shmattype='char *'
9723         fi
9724         echo "and it returns ($shmattype)." >&4
9725         : see if a prototype for shmat is available
9726         xxx=`./findhdr sys/shm.h`
9727         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9728         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9729                 val="$define"
9730         else
9731                 val="$undef"
9732         fi
9733         $rm -f shmat.[co]
9734         ;;
9735 *)
9736         val="$undef"
9737         ;;
9738 esac
9739 set d_shmatprototype
9740 eval $setvar
9741
9742 : see if shmdt exists
9743 set shmdt d_shmdt
9744 eval $inlibc
9745
9746 : see how much of the 'shm*(2)' library is present.
9747 h_shm=true
9748 echo " "
9749 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9750 *"$undef"*) h_shm=false;;
9751 esac
9752 case "$osname" in
9753 freebsd)
9754     case "`ipcs 2>&1`" in
9755     "SVID shared memory"*"not configured"*)
9756         echo "Your $osname does not have the shm*(2) configured." >&4
9757         h_shm=false
9758         val="$undef"
9759         set shmctl d_shmctl
9760         evat $setvar
9761         set shmget d_shmget
9762         evat $setvar
9763         set shmat d_shmat
9764         evat $setvar
9765         set shmdt d_shmdt
9766         evat $setvar
9767         ;;
9768     esac
9769     ;;
9770 esac
9771 : we could also check for sys/ipc.h ...
9772 if $h_shm && $test `./findhdr sys/shm.h`; then
9773         echo "You have the full shm*(2) library." >&4
9774         val="$define"
9775 else
9776         echo "You don't have the full shm*(2) library." >&4
9777         val="$undef"
9778 fi
9779 set d_shm
9780 eval $setvar
9781
9782 echo " "
9783 : see if we have sigaction
9784 if set sigaction val -f d_sigaction; eval $csym; $val; then
9785         echo 'sigaction() found.' >&4
9786         $cat > try.c <<'EOP'
9787 #include <stdio.h>
9788 #include <sys/types.h>
9789 #include <signal.h>
9790 int main()
9791 {
9792     struct sigaction act, oact;
9793 }
9794 EOP
9795         set try
9796         if eval $compile_ok; then
9797                 val="$define"
9798         else
9799                 echo "But you don't seem to have a useable struct sigaction." >&4
9800                 val="$undef"
9801         fi
9802 else
9803         echo 'sigaction NOT found.' >&4
9804         val="$undef"
9805 fi
9806 set d_sigaction; eval $setvar
9807 $rm -f try try$_o try.c
9808
9809 : see if sigsetjmp exists
9810 echo " "
9811 case "$d_sigsetjmp" in
9812 '')
9813         $cat >try.c <<'EOP'
9814 #include <setjmp.h>
9815 sigjmp_buf env;
9816 int set = 1;
9817 int main()
9818 {
9819         if (sigsetjmp(env,1))
9820                 exit(set);
9821         set = 0;
9822         siglongjmp(env, 1);
9823         exit(1);
9824 }
9825 EOP
9826         set try
9827         if eval $compile; then
9828                 if ./try >/dev/null 2>&1; then
9829                         echo "POSIX sigsetjmp found." >&4
9830                         val="$define"
9831                 else
9832                         $cat >&4 <<EOM
9833 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9834 I'll ignore them.
9835 EOM
9836                         val="$undef"
9837                 fi
9838         else
9839                 echo "sigsetjmp not found." >&4
9840                 val="$undef"
9841         fi
9842         ;;
9843 *) val="$d_sigsetjmp"
9844         case "$d_sigsetjmp" in
9845         $define) echo "POSIX sigsetjmp found." >&4;;
9846         $undef) echo "sigsetjmp not found." >&4;;
9847         esac
9848         ;;
9849 esac
9850 set d_sigsetjmp
9851 eval $setvar
9852 $rm -f try.c try
9853
9854 : see if stat knows about block sizes
9855 echo " "
9856 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9857 eval $hasfield
9858
9859 : see if _ptr and _cnt from stdio act std
9860 echo " "
9861 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9862         echo "(Looks like you have stdio.h from Linux.)"
9863         case "$stdio_ptr" in
9864         '') stdio_ptr='((fp)->_IO_read_ptr)'
9865                 ptr_lval=$define
9866                 ;;
9867         *)      ptr_lval=$d_stdio_ptr_lval;;
9868         esac
9869         case "$stdio_cnt" in
9870         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9871                 cnt_lval=$undef
9872                 ;;
9873         *)      cnt_lval=$d_stdio_cnt_lval;;
9874         esac
9875         case "$stdio_base" in
9876         '') stdio_base='((fp)->_IO_read_base)';;
9877         esac
9878         case "$stdio_bufsiz" in
9879         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9880         esac
9881 else
9882         case "$stdio_ptr" in
9883         '') stdio_ptr='((fp)->_ptr)'
9884                 ptr_lval=$define
9885                 ;;
9886         *)      ptr_lval=$d_stdio_ptr_lval;;
9887         esac
9888         case "$stdio_cnt" in
9889         '') stdio_cnt='((fp)->_cnt)'
9890                 cnt_lval=$define
9891                 ;;
9892         *)      cnt_lval=$d_stdio_cnt_lval;;
9893         esac
9894         case "$stdio_base" in
9895         '') stdio_base='((fp)->_base)';;
9896         esac
9897         case "$stdio_bufsiz" in
9898         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9899         esac
9900 fi
9901 : test whether _ptr and _cnt really work
9902 echo "Checking how std your stdio is..." >&4
9903 $cat >try.c <<EOP
9904 #include <stdio.h>
9905 #define FILE_ptr(fp)    $stdio_ptr
9906 #define FILE_cnt(fp)    $stdio_cnt
9907 int main() {
9908         FILE *fp = fopen("try.c", "r");
9909         char c = getc(fp);
9910         if (
9911                 18 <= FILE_cnt(fp) &&
9912                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9913         )
9914                 exit(0);
9915         exit(1);
9916 }
9917 EOP
9918 val="$undef"
9919 set try
9920 if eval $compile; then
9921         if ./try; then
9922                 echo "Your stdio acts pretty std."
9923                 val="$define"
9924         else
9925                 echo "Your stdio isn't very std."
9926         fi
9927 else
9928         echo "Your stdio doesn't appear very std."
9929 fi
9930 $rm -f try.c try
9931 set d_stdstdio
9932 eval $setvar
9933
9934 : Can _ptr be used as an lvalue?
9935 case "$d_stdstdio$ptr_lval" in
9936 $define$define) val=$define ;;
9937 *) val=$undef ;;
9938 esac
9939 set d_stdio_ptr_lval
9940 eval $setvar
9941
9942 : Can _cnt be used as an lvalue?
9943 case "$d_stdstdio$cnt_lval" in
9944 $define$define) val=$define ;;
9945 *) val=$undef ;;
9946 esac
9947 set d_stdio_cnt_lval
9948 eval $setvar
9949
9950 : see if _base is also standard
9951 val="$undef"
9952 case "$d_stdstdio" in
9953 $define)
9954         $cat >try.c <<EOP
9955 #include <stdio.h>
9956 #define FILE_base(fp)   $stdio_base
9957 #define FILE_bufsiz(fp) $stdio_bufsiz
9958 int main() {
9959         FILE *fp = fopen("try.c", "r");
9960         char c = getc(fp);
9961         if (
9962                 19 <= FILE_bufsiz(fp) &&
9963                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9964         )
9965                 exit(0);
9966         exit(1);
9967 }
9968 EOP
9969         set try
9970         if eval $compile; then
9971                 if ./try; then
9972                         echo "And its _base field acts std."
9973                         val="$define"
9974                 else
9975                         echo "But its _base field isn't std."
9976                 fi
9977         else
9978                 echo "However, it seems to be lacking the _base field."
9979         fi
9980         $rm -f try.c try
9981         ;;
9982 esac
9983 set d_stdiobase
9984 eval $setvar
9985
9986 $cat >&4 <<EOM
9987 Checking how to access stdio streams by file descriptor number...
9988 EOM
9989 case "$stdio_stream_array" in
9990 '')     $cat >try.c <<EOCP
9991 #include <stdio.h>
9992 int main() {
9993   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
9994     printf("yes\n");
9995 }
9996 EOCP
9997         for s in _iob __iob __sF
9998         do
9999                 set try -DSTDIO_STREAM_ARRAY=$s
10000                 if eval $compile; then
10001                         case "`./try$exe_ext`" in
10002                         yes)    stdio_stream_array=$s; break ;;
10003                         esac
10004                 fi
10005         done
10006         $rm -f try.* try$exe_ext
10007 esac
10008 case "$stdio_stream_array" in
10009 '')     $cat >&4 <<EOM
10010 I can't figure out how to access stdio streams by file descriptor number.
10011 EOM
10012         d_stdio_stream_array="$undef"
10013         ;;
10014 *)      $cat >&4 <<EOM
10015 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10016 EOM
10017         d_stdio_stream_array="$define"
10018         ;;
10019 esac
10020
10021 : see if strcoll exists
10022 set strcoll d_strcoll
10023 eval $inlibc
10024
10025 : check for structure copying
10026 echo " "
10027 echo "Checking to see if your C compiler can copy structs..." >&4
10028 $cat >try.c <<'EOCP'
10029 int main()
10030 {
10031         struct blurfl {
10032                 int dyick;
10033         } foo, bar;
10034
10035         foo = bar;
10036 }
10037 EOCP
10038 if $cc -c try.c >/dev/null 2>&1 ; then
10039         val="$define"
10040         echo "Yup, it can."
10041 else
10042         val="$undef"
10043         echo "Nope, it can't."
10044 fi
10045 set d_strctcpy
10046 eval $setvar
10047 $rm -f try.*
10048
10049 : see if strerror and/or sys_errlist[] exist
10050 echo " "
10051 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10052     if set strerror val -f d_strerror; eval $csym; $val; then
10053                 echo 'strerror() found.' >&4
10054                 d_strerror="$define"
10055                 d_strerrm='strerror(e)'
10056                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10057                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10058                         d_syserrlst="$define"
10059                 else
10060                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10061                         d_syserrlst="$undef"
10062                 fi
10063     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10064                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10065                 echo 'strerror() found in string header.' >&4
10066                 d_strerror="$define"
10067                 d_strerrm='strerror(e)'
10068                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10069                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10070                                 d_syserrlst="$define"
10071                 else
10072                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10073                         d_syserrlst="$undef"
10074                 fi
10075     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10076                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10077                 d_strerror="$undef"
10078                 d_syserrlst="$define"
10079                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10080     else
10081                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10082                 d_strerror="$undef"
10083                 d_syserrlst="$undef"
10084                 d_strerrm='"unknown"'
10085     fi
10086 fi
10087
10088 : see if strtod exists
10089 set strtod d_strtod
10090 eval $inlibc
10091
10092 : see if strtol exists
10093 set strtol d_strtol
10094 eval $inlibc
10095
10096 : see if strtoul exists
10097 set strtoul d_strtoul
10098 eval $inlibc
10099
10100 : see if strxfrm exists
10101 set strxfrm d_strxfrm
10102 eval $inlibc
10103
10104 : see if symlink exists
10105 set symlink d_symlink
10106 eval $inlibc
10107
10108 : see if syscall exists
10109 set syscall d_syscall
10110 eval $inlibc
10111
10112 : see if sysconf exists
10113 set sysconf d_sysconf
10114 eval $inlibc
10115
10116 : see if system exists
10117 set system d_system
10118 eval $inlibc
10119
10120 : see if tcgetpgrp exists
10121 set tcgetpgrp d_tcgetpgrp
10122 eval $inlibc
10123
10124 : see if tcsetpgrp exists
10125 set tcsetpgrp d_tcsetpgrp
10126 eval $inlibc
10127
10128 : see if sys/types.h has to be included
10129 set sys/types.h i_systypes
10130 eval $inhdr
10131
10132 : see if prototype for telldir is available
10133 echo " "
10134 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10135 eval $hasproto
10136
10137 : define an is-a-typedef? function
10138 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10139 case "$inclist" in
10140 "") inclist="sys/types.h";;
10141 esac;
10142 eval "varval=\$$var";
10143 case "$varval" in
10144 "")
10145         $rm -f temp.c;
10146         for inc in $inclist; do
10147                 echo "#include <$inc>" >>temp.c;
10148         done;
10149         echo "#ifdef $type" >> temp.c;
10150         echo "printf(\"We have $type\");" >> temp.c;
10151         echo "#endif" >> temp.c;
10152         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10153         if $contains $type temp.E >/dev/null 2>&1; then
10154                 eval "$var=\$type";
10155         else
10156                 eval "$var=\$def";
10157         fi;
10158         $rm -f temp.?;;
10159 *) eval "$var=\$varval";;
10160 esac'
10161
10162 : define an is-a-typedef? function that prompts if the type is not available.
10163 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10164 case "$inclist" in
10165 "") inclist="sys/types.h";;
10166 esac;
10167 eval "varval=\$$var";
10168 case "$varval" in
10169 "")
10170         $rm -f temp.c;
10171         for inc in $inclist; do
10172                 echo "#include <$inc>" >>temp.c;
10173         done;
10174         echo "#ifdef $type" >> temp.c;
10175         echo "printf(\"We have $type\");" >> temp.c;
10176         echo "#endif" >> temp.c;
10177         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10178         echo " " ;
10179         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10180         if $contains $type temp.E >/dev/null 2>&1; then
10181                 echo "$type found." >&4;
10182                 eval "$var=\$type";
10183         else
10184                 echo "$type NOT found." >&4;
10185                 dflt="$def";
10186                 . ./myread ;
10187                 eval "$var=\$ans";
10188         fi;
10189         $rm -f temp.?;;
10190 *) eval "$var=\$varval";;
10191 esac'
10192
10193 : see if this is a sys/times.h system
10194 set sys/times.h i_systimes
10195 eval $inhdr
10196
10197 : see if times exists
10198 echo " "
10199 if set times val -f d_times; eval $csym; $val; then
10200         echo 'times() found.' >&4
10201         d_times="$define"
10202         inc=''
10203         case "$i_systimes" in
10204         "$define") inc='sys/times.h';;
10205         esac
10206         rp="What is the type returned by times() on this system?"
10207         set clock_t clocktype long stdio.h sys/types.h $inc
10208         eval $typedef_ask
10209 else
10210         echo 'times() NOT found, hope that will do.' >&4
10211         d_times="$undef"
10212         clocktype='int'
10213 fi
10214
10215 : see if truncate exists
10216 set truncate d_truncate
10217 eval $inlibc
10218
10219 : see if tzname[] exists
10220 echo " "
10221 if set tzname val -a d_tzname; eval $csym; $val; then
10222         val="$define"
10223         echo 'tzname[] found.' >&4
10224 else
10225         val="$undef"
10226         echo 'tzname[] NOT found.' >&4
10227 fi
10228 set d_tzname
10229 eval $setvar
10230
10231 : see if umask exists
10232 set umask d_umask
10233 eval $inlibc
10234
10235 : backward compatibility for d_hvfork
10236 if test X$d_hvfork != X; then
10237         d_vfork="$d_hvfork"
10238         d_hvfork=''
10239 fi
10240 : see if there is a vfork
10241 val=''
10242 set vfork val
10243 eval $inlibc
10244
10245 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10246 : perl on Solaris 2.x, and probably elsewhere.
10247 case "$val" in
10248 $define)
10249         echo " "
10250         case "$usevfork" in
10251         false) dflt='n';;
10252         *) dflt='y';;
10253         esac
10254         cat <<'EOM'
10255  
10256 Perl can only use a vfork() that doesn't suffer from strict
10257 restrictions on calling functions or modifying global data in
10258 the child.  For example, glibc-2.1 contains such a vfork()
10259 that is unsuitable.  If your system provides a proper fork()
10260 call, chances are that you do NOT want perl to use vfork().
10261
10262 EOM
10263         rp="Do you still want to use vfork()?"
10264         . ./myread
10265         case "$ans" in
10266         y|Y) ;;
10267         *)
10268                 echo "Ok, we won't use vfork()."
10269                 val="$undef"
10270                 ;;
10271         esac
10272         ;;
10273 esac
10274 set d_vfork
10275 eval $setvar
10276 case "$d_vfork" in
10277 $define) usevfork='true';;
10278 *) usevfork='false';;
10279 esac
10280
10281 : see if this is an sysdir system
10282 set sys/dir.h i_sysdir
10283 eval $inhdr
10284
10285 : see if this is an sysndir system
10286 set sys/ndir.h i_sysndir
10287 eval $inhdr
10288
10289 : see if closedir exists
10290 set closedir d_closedir
10291 eval $inlibc
10292
10293 case "$d_closedir" in
10294 "$define")
10295         echo " "
10296         echo "Checking whether closedir() returns a status..." >&4
10297         cat > closedir.c <<EOM
10298 #$i_dirent I_DIRENT             /**/
10299 #$i_sysdir I_SYS_DIR            /**/
10300 #$i_sysndir I_SYS_NDIR          /**/
10301 #$i_systypes I_SYS_TYPES        /**/
10302
10303 #if defined(I_SYS_TYPES)
10304 #include <sys/types.h>
10305 #endif
10306 #if defined(I_DIRENT)
10307 #include <dirent.h>
10308 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10309 #include <sys/dir.h>
10310 #endif
10311 #else
10312 #ifdef I_SYS_NDIR
10313 #include <sys/ndir.h>
10314 #else
10315 #ifdef I_SYS_DIR
10316 #ifdef hp9000s500
10317 #include <ndir.h>       /* may be wrong in the future */
10318 #else
10319 #include <sys/dir.h>
10320 #endif
10321 #endif
10322 #endif
10323 #endif 
10324 int main() { return closedir(opendir(".")); }
10325 EOM
10326         set closedir
10327         if eval $compile_ok; then
10328                 if ./closedir > /dev/null 2>&1 ; then
10329                         echo "Yes, it does."
10330                         val="$undef"
10331                 else
10332                         echo "No, it doesn't."
10333                         val="$define"
10334                 fi
10335         else
10336                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10337                 val="$define"
10338         fi
10339         ;;
10340 *)
10341         val="$undef";
10342         ;;
10343 esac
10344 set d_void_closedir
10345 eval $setvar
10346 $rm -f closedir*
10347 : check for volatile keyword
10348 echo " "
10349 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10350 $cat >try.c <<'EOCP'
10351 int main()
10352 {
10353         typedef struct _goo_struct goo_struct;
10354         goo_struct * volatile goo = ((goo_struct *)0);
10355         struct _goo_struct {
10356                 long long_int;
10357                 int reg_int;
10358                 char char_var;
10359         };
10360         typedef unsigned short foo_t;
10361         char *volatile foo;
10362         volatile int bar;
10363         volatile foo_t blech;
10364         foo = foo;
10365 }
10366 EOCP
10367 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10368         val="$define"
10369         echo "Yup, it does."
10370 else
10371         val="$undef"
10372         echo "Nope, it doesn't."
10373 fi
10374 set d_volatile
10375 eval $setvar
10376 $rm -f try.*
10377
10378 : see if there is a wait4
10379 set wait4 d_wait4
10380 eval $inlibc
10381
10382 : see if waitpid exists
10383 set waitpid d_waitpid
10384 eval $inlibc
10385
10386 : see if wcstombs exists
10387 set wcstombs d_wcstombs
10388 eval $inlibc
10389
10390 : see if wctomb exists
10391 set wctomb d_wctomb
10392 eval $inlibc
10393
10394 : see if writev exists
10395 set writev d_writev
10396 eval $inlibc
10397
10398 : preserve RCS keywords in files with variable substitution, grrr
10399 Date='$Date'
10400 Id='$Id'
10401 Log='$Log'
10402 RCSfile='$RCSfile'
10403 Revision='$Revision'
10404
10405 case "$crosscompile" in
10406 ''|[nN]*) crosscompile="$undef" ;;
10407 esac
10408
10409 case "$osname" in
10410 next|rhapsody) multiarch="$define" ;;
10411 esac
10412 case "$multiarch" in
10413 ''|[nN]*) multiarch="$undef" ;;
10414 esac
10415
10416 : check for alignment requirements
10417 echo " "
10418 case "$crosscompile$multiarch" in
10419 *$define*)
10420         $cat <<EOM
10421 You seem to be either cross-compiling or doing a multiarchitecture build,
10422 skipping the memory alignment check.
10423
10424 EOM
10425         case "$alignbytes" in
10426         '') alignbytes=8 ;;
10427         esac
10428         ;;
10429 *)
10430         case "$alignbytes" in
10431         '') echo "Checking alignment constraints..." >&4
10432                 $cat >try.c <<'EOCP'
10433 struct foobar {
10434         char foo;
10435         double bar;
10436 } try_algn;
10437 int main()
10438 {
10439         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10440 }
10441 EOCP
10442                 set try
10443                 if eval $compile_ok; then
10444                         dflt=`./try`
10445                 else
10446                         dflt='8'
10447                         echo "(I can't seem to compile the test program...)"
10448                 fi
10449                 ;;
10450         *) dflt="$alignbytes"
10451                 ;;
10452         esac
10453         rp="Doubles must be aligned on a how-many-byte boundary?"
10454         . ./myread
10455         alignbytes="$ans"
10456         $rm -f try.c try
10457         ;;
10458 esac
10459
10460
10461 : check for ordering of bytes in a long
10462 echo " "
10463 case "$crosscompile$multiarch" in
10464 *$define*)
10465         $cat <<EOM
10466 You seem to be either cross-compiling or doing a multiarchitecture build,
10467 skipping the byteorder check.
10468
10469 EOM
10470         byteorder=''
10471         ;;
10472 *)
10473         case "$byteorder" in
10474         '')
10475                 $cat <<'EOM'
10476 In the following, larger digits indicate more significance.  A big-endian
10477 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10478 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10479 machines may have weird orders like 3412.  A Cray will report 87654321. If
10480 the test program works the default is probably right.
10481 I'm now running the test program...
10482 EOM
10483                 $cat >try.c <<'EOCP'
10484 #include <stdio.h>
10485 int main()
10486 {
10487         int i;
10488         union {
10489                 unsigned long l;
10490                 char c[sizeof(long)];
10491         } u;
10492
10493         if (sizeof(long) > 4)
10494                 u.l = (0x08070605L << 32) | 0x04030201L;
10495         else
10496                 u.l = 0x04030201L;
10497         for (i = 0; i < sizeof(long); i++)
10498                 printf("%c", u.c[i]+'0');
10499         printf("\n");
10500         exit(0);
10501 }
10502 EOCP
10503                 xxx_prompt=y
10504                 set try
10505                 if eval $compile && ./try > /dev/null; then
10506                         dflt=`./try`
10507                         case "$dflt" in
10508                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10509                                 echo "(The test program ran ok.)"
10510                                 echo "byteorder=$dflt"
10511                                 xxx_prompt=n
10512                         ;;
10513                         ????|????????) echo "(The test program ran ok.)" ;;
10514                         *) echo "(The test program didn't run right for some reason.)" ;;
10515                         esac
10516                 else
10517                         dflt='4321'
10518                         cat <<'EOM'
10519 (I can't seem to compile the test program.  Guessing big-endian...)
10520 EOM
10521                 fi
10522                 case "$xxx_prompt" in
10523                 y)
10524                         rp="What is the order of bytes in a long?"
10525                         . ./myread
10526                         byteorder="$ans"
10527                         ;;
10528                 *)      byteorder=$dflt
10529                         ;;
10530                 esac
10531                 ;;
10532         esac
10533         $rm -f try.c try
10534         ;;
10535 esac
10536
10537
10538 : how do we catenate cpp tokens here?
10539 echo " "
10540 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10541 $cat >cpp_stuff.c <<'EOCP'
10542 #define RCAT(a,b)a/**/b
10543 #define ACAT(a,b)a ## b
10544 RCAT(Rei,ser)
10545 ACAT(Cir,cus)
10546 EOCP
10547 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10548 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10549         echo "Oh!  Smells like ANSI's been here." >&4
10550         echo "We can catify or stringify, separately or together!"
10551         cpp_stuff=42
10552 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10553         echo "Ah, yes!  The good old days!" >&4
10554         echo "However, in the good old days we don't know how to stringify and"
10555         echo "catify at the same time."
10556         cpp_stuff=1
10557 else
10558         $cat >&4 <<EOM
10559 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10560 to have to edit the values of CAT[2-5] in config.h...
10561 EOM
10562         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10563 fi
10564 $rm -f cpp_stuff.*
10565
10566 : see if this is a db.h system
10567 set db.h i_db
10568 eval $inhdr
10569
10570 case "$i_db" in
10571 $define)
10572         : Check db version.
10573         echo " "
10574         echo "Checking Berkeley DB version ..." >&4
10575         $cat >try.c <<EOCP
10576 #$d_const HASCONST
10577 #ifndef HASCONST
10578 #define const
10579 #endif
10580 #include <sys/types.h>
10581 #include <stdio.h>
10582 #include <db.h>
10583 int main()
10584 {
10585 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10586     int Major, Minor, Patch ;
10587     unsigned long Version ;
10588     (void)db_version(&Major, &Minor, &Patch) ;
10589     printf("You have Berkeley DB Version 2 or greater\n");
10590
10591     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10592                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10593     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10594                 Major, Minor, Patch) ;
10595
10596     /* check that db.h & libdb are compatible */
10597     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10598         printf("db.h and libdb are incompatible\n") ;
10599         exit(3);        
10600     }
10601
10602     printf("db.h and libdb are compatible\n") ;
10603
10604     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10605                 + DB_VERSION_PATCH ;
10606
10607     /* needs to be >= 2.3.4 */
10608     if (Version < 2003004) {
10609     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10610         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10611         exit(2);        
10612     }
10613
10614     exit(0);
10615 #else
10616 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10617     printf("You have Berkeley DB Version 1\n");
10618     exit(0);    /* DB version < 2: the coast is clear. */
10619 #else
10620     exit(1);    /* <db.h> not Berkeley DB? */
10621 #endif
10622 #endif
10623 }
10624 EOCP
10625         set try
10626         if eval $compile && ./try; then
10627                 echo 'Looks OK.' >&4
10628         else
10629                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10630                 i_db=$undef
10631                 case " $libs " in
10632                 *"-ldb "*)
10633                         : Remove db from list of libraries to use
10634                         echo "Removing unusable -ldb from library list" >&4
10635                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10636                         shift
10637                         libs="$*"
10638                         echo "libs = $libs" >&4
10639                         ;;
10640                 esac
10641         fi
10642         $rm -f try.*
10643         ;;
10644 esac
10645
10646 case "$i_db" in
10647 define)
10648         : Check the return type needed for hash 
10649         echo " "
10650         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10651         $cat >try.c <<EOCP
10652 #$d_const HASCONST
10653 #ifndef HASCONST
10654 #define const
10655 #endif
10656 #include <sys/types.h>
10657 #include <db.h>
10658
10659 #ifndef DB_VERSION_MAJOR
10660 u_int32_t hash_cb (ptr, size)
10661 const void *ptr;
10662 size_t size;
10663 {
10664 }
10665 HASHINFO info;
10666 int main()
10667 {
10668         info.hash = hash_cb;
10669 }
10670 #endif
10671 EOCP
10672         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10673                 if $contains warning try.out >>/dev/null 2>&1 ; then
10674                         db_hashtype='int'
10675                 else
10676                         db_hashtype='u_int32_t'
10677                 fi
10678         else
10679                 : XXX Maybe we should just give up here.
10680                 db_hashtype=u_int32_t
10681                 $cat try.out >&4
10682                 echo "Help:  I can't seem to compile the db test program." >&4
10683                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10684         fi
10685         $rm -f try.*
10686         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10687         ;;
10688 *)      db_hashtype=u_int32_t
10689         ;;
10690 esac
10691 case "$i_db" in
10692 define)
10693         : Check the return type needed for prefix 
10694         echo " "
10695         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10696         cat >try.c <<EOCP
10697 #$d_const HASCONST
10698 #ifndef HASCONST
10699 #define const
10700 #endif
10701 #include <sys/types.h>
10702 #include <db.h>
10703
10704 #ifndef DB_VERSION_MAJOR
10705 size_t prefix_cb (key1, key2)
10706 const DBT *key1;
10707 const DBT *key2;
10708 {
10709 }
10710 BTREEINFO info;
10711 int main()
10712 {
10713         info.prefix = prefix_cb;
10714 }
10715 #endif
10716 EOCP
10717         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10718                 if $contains warning try.out >>/dev/null 2>&1 ; then
10719                         db_prefixtype='int'
10720                 else
10721                         db_prefixtype='size_t'
10722                 fi
10723         else
10724                 db_prefixtype='size_t'
10725                 : XXX Maybe we should just give up here.
10726                 $cat try.out >&4
10727                 echo "Help:  I can't seem to compile the db test program." >&4
10728                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10729         fi
10730         $rm -f try.*
10731         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10732         ;;
10733 *)      db_prefixtype='size_t'
10734         ;;
10735 esac
10736
10737 : check for void type
10738 echo " "
10739 echo "Checking to see how well your C compiler groks the void type..." >&4
10740 case "$voidflags" in
10741 '')
10742         $cat >try.c <<'EOCP'
10743 #if TRY & 1
10744 void sub() {
10745 #else
10746 sub() {
10747 #endif
10748         extern void moo();      /* function returning void */
10749         void (*goo)();          /* ptr to func returning void */
10750 #if TRY & 8
10751         void *hue;              /* generic ptr */
10752 #endif
10753 #if TRY & 2
10754         void (*foo[10])();
10755 #endif
10756
10757 #if TRY & 4
10758         if(goo == moo) {
10759                 exit(0);
10760         }
10761 #endif
10762         exit(0);
10763 }
10764 int main() { sub(); }
10765 EOCP
10766         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10767                 voidflags=$defvoidused
10768         echo "Good.  It appears to support void to the level $package wants.">&4
10769                 if $contains warning .out >/dev/null 2>&1; then
10770                         echo "However, you might get some warnings that look like this:"
10771                         $cat .out
10772                 fi
10773         else
10774 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10775                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10776                         echo "It supports 1..."
10777                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10778                                 echo "It also supports 2..."
10779                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10780                                         voidflags=7
10781                                         echo "And it supports 4 but not 8 definitely."
10782                                 else
10783                                         echo "It doesn't support 4..."
10784                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10785                                                 voidflags=11
10786                                                 echo "But it supports 8."
10787                                         else
10788                                                 voidflags=3
10789                                                 echo "Neither does it support 8."
10790                                         fi
10791                                 fi
10792                         else
10793                                 echo "It does not support 2..."
10794                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10795                                         voidflags=13
10796                                         echo "But it supports 4 and 8."
10797                                 else
10798                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10799                                                 voidflags=5
10800                                                 echo "And it supports 4 but has not heard about 8."
10801                                         else
10802                                                 echo "However it supports 8 but not 4."
10803                                         fi
10804                                 fi
10805                         fi
10806                 else
10807                         echo "There is no support at all for void."
10808                         voidflags=0
10809                 fi
10810         fi
10811 esac
10812 case "$voidflags" in
10813 "$defvoidused") ;;
10814 *)      $cat >&4 <<'EOM'
10815   Support flag bits are:
10816     1: basic void declarations.
10817     2: arrays of pointers to functions returning void.
10818     4: operations between pointers to and addresses of void functions.
10819     8: generic void pointers.
10820 EOM
10821         dflt="$voidflags";
10822         rp="Your void support flags add up to what?"
10823         . ./myread
10824         voidflags="$ans"
10825         ;;
10826 esac
10827 $rm -f try.* .out
10828
10829
10830 : How can we generate normalized random numbers ?
10831 echo " "
10832 echo "Looking for a random number function..." >&4
10833 case "$randfunc" in
10834 '')
10835         if set drand48 val -f; eval $csym; $val; then
10836                 dflt="drand48"
10837                 echo "Good, found drand48()." >&4
10838         elif set random val -f; eval $csym; $val; then
10839                 dflt="random"
10840                 echo "OK, found random()." >&4
10841         else
10842                 dflt="rand"
10843                 echo "Yick, looks like I have to use rand()." >&4
10844         fi
10845         echo " "
10846         ;;
10847 *)
10848         dflt="$randfunc"
10849         ;;
10850 esac
10851 cont=true
10852
10853 case "$ccflags" in
10854 *-Dmy_rand=*|*-Dmy_srand=*)
10855         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10856         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10857         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10858         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10859         ;;
10860 esac
10861
10862 while $test "$cont"; do
10863         rp="Use which function to generate random numbers?"
10864         . ./myread
10865         if $test "$ans" = "$dflt"; then
10866                 : null
10867         else
10868                 randbits=''
10869         fi
10870         randfunc="$ans"
10871         if set $ans val -f; eval $csym; $val; then
10872                 cont=''
10873         else
10874                 dflt=y
10875                 rp="I cannot find function $ans. Use that name anyway?"
10876                 . ./myread
10877                 dflt=rand
10878                 case "$ans" in
10879                         [yY]*) cont='';;
10880                 esac
10881         fi
10882         case "$cont" in
10883         '')
10884                 case "$randfunc" in
10885                 drand48)
10886                         drand01="drand48()"
10887                         seedfunc="srand48"
10888                         randbits=48
10889                         randseedtype=long
10890                         ;;
10891                 rand|random)
10892                         case "$randbits" in
10893                         '')
10894 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10895                                 $cat >try.c <<EOCP
10896 #$i_unistd I_UNISTD
10897 #$i_stdlib I_STDLIB
10898 #include <stdio.h>
10899 #ifdef I_UNISTD
10900 #  include <unistd.h>
10901 #endif
10902 #ifdef I_STDLIB
10903 #  include <stdlib.h>
10904 #endif
10905 int main()
10906 {
10907         register int i;
10908         register unsigned long tmp;
10909         register unsigned long max = 0L;
10910
10911         for (i = 1000; i; i--) {
10912                 tmp = (unsigned long) $randfunc();
10913                 if (tmp > max) max = tmp;
10914         }
10915         for (i = 0; max; i++)
10916                 max /= 2;
10917         printf("%d\n",i);
10918 }
10919 EOCP
10920                                 set try
10921                                 if eval $compile_ok; then
10922                                         dflt=`try`
10923                                 else
10924                                         dflt='?'
10925                                         echo "(I can't seem to compile the test program...)"
10926                                 fi
10927                                 ;;
10928                         *)
10929                                 dflt="$randbits"
10930                                 ;;
10931                         esac
10932                         rp="How many bits does your $randfunc() function produce?"
10933                         . ./myread
10934                         randbits="$ans"
10935                         $rm -f try.c try
10936                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10937                         seedfunc="s$randfunc"
10938                         randseedtype=unsigned
10939                         ;;
10940                 *)
10941                         dflt="31"
10942                         rp="How many bits does your $randfunc() function produce?"
10943                         . ./myread
10944                         randbits="$ans"
10945                         seedfunc="s$randfunc"
10946                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10947                         if set $seedfunc val -f; eval $csym; $val; then
10948                                 echo "(Using $seedfunc() to seed random generator)"
10949                         else
10950                                 echo "(Warning: no $seedfunc() to seed random generator)"
10951                                 seedfunc=rand
10952                         fi
10953                         randseedtype=unsigned
10954                         ;;
10955                 esac
10956                 ;;
10957         esac
10958 done
10959
10960 echo " "
10961 echo "Determining whether or not we are on an EBCDIC system..." >&4
10962 $cat >tebcdic.c <<'EOM'
10963 int main()
10964 {
10965   if ('M'==0xd4) return 0;
10966   return 1;
10967 }
10968 EOM
10969
10970 val=$undef
10971 set tebcdic
10972 if eval $compile_ok; then
10973         if ./tebcdic; then
10974                 echo "You have EBCDIC." >&4
10975                 val="$define"
10976         else
10977                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10978         fi
10979 else
10980         echo "I'm unable to compile the test program." >&4
10981         echo "I'll assume ASCII or some ISO Latin." >&4
10982 fi
10983 $rm -f tebcdic.c tebcdic
10984 set ebcdic
10985 eval $setvar
10986
10987 $cat >&4 <<EOM
10988 Checking how to flush all pending stdio output...
10989 EOM
10990 # I only know how to find the first 32 possibly open files on SunOS.
10991 # See also hints/sunos_4_1.sh and util.c  --AD
10992 case "$osname" in
10993 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
10994 esac
10995 $cat >>try.c <<EOCP
10996 #include <stdio.h>
10997 #$i_unistd I_UNISTD
10998 #ifdef I_UNISTD
10999 # include <unistd.h>
11000 #endif
11001 #$d_sysconf HAS_SYSCONF
11002 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11003 #ifdef HAS_STDIO_STREAM_ARRAY
11004 # define STDIO_STREAM_ARRAY $stdio_stream_array
11005 #endif
11006 int main() {
11007   FILE* p = fopen("try.out", "w");
11008 #ifdef TRY_FPUTC
11009   fputc('x', p);
11010 #else
11011 # ifdef TRY_FPRINTF
11012   fprintf(p, "x");
11013 # endif
11014 #endif
11015 #ifdef TRY_FFLUSH_NULL
11016   fflush(NULL);
11017 #endif
11018 #ifdef TRY_FFLUSH_ALL
11019   {
11020     long open_max = -1;
11021 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11022     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11023 # else
11024 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11025     open_max = sysconf(_SC_OPEN_MAX);
11026 #  else
11027 #   ifdef FOPEN_MAX
11028     open_max = FOPEN_MAX;
11029 #   else
11030 #    ifdef OPEN_MAX
11031     open_max = OPEN_MAX;
11032 #    else
11033 #     ifdef _NFILE
11034     open_max = _NFILE;
11035 #     endif
11036 #    endif
11037 #   endif
11038 #  endif
11039 # endif 
11040 # ifdef HAS_STDIO_STREAM_ARRAY
11041     if (open_max > 0) {
11042       long i;
11043       for (i = 0; i < open_max; i++)
11044             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11045                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11046                 STDIO_STREAM_ARRAY[i]._flag)
11047                 fflush(&STDIO_STREAM_ARRAY[i]);
11048     }   
11049   }
11050 # endif
11051 #endif
11052   _exit(42);
11053 }
11054 EOCP
11055 : first we have to find out how _not_ to flush
11056 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11057     output=''
11058     set try -DTRY_FPUTC
11059     if eval $compile; then
11060             $rm -f try.out
11061             ./try$exe_ext 2>/dev/null
11062             if $test ! -s try.out -a "X$?" = X42; then
11063                 output=-DTRY_FPUTC
11064             fi
11065     fi
11066     case "$output" in
11067     '')
11068             set try -DTRY_FPRINTF
11069             $rm -f try.out
11070             if eval $compile; then
11071                     $rm -f try.out
11072                     ./try$exe_ext 2>/dev/null
11073                     if $test ! -s try.out -a "X$?" = X42; then
11074                         output=-DTRY_FPRINTF
11075                     fi
11076             fi
11077         ;;
11078     esac
11079 fi
11080 : check for fflush NULL behaviour
11081 case "$fflushNULL" in
11082 '')     set try -DTRY_FFLUSH_NULL $output
11083         if eval $compile; then
11084                 $rm -f try.out
11085                 ./try$exe_ext 2>/dev/null
11086                 code="$?"
11087                 if $test -s try.out -a "X$code" = X42; then
11088                         fflushNULL="`$cat try.out`"
11089                 else
11090                         if $test "X$code" != X42; then
11091                                 $cat >&4 <<EOM
11092 (If this test failed, don't worry, we'll try another method shortly.)
11093 EOM
11094                         fi
11095                 fi
11096         fi
11097         $rm -f core try.core core.try.*
11098         case "$fflushNULL" in
11099         x)      $cat >&4 <<EOM
11100 Your fflush(NULL) works okay.
11101 EOM
11102                 fflushNULL="$define"
11103                 ;;
11104         '')     $cat >&4 <<EOM
11105 Your fflush(NULL) isn't working (contrary to ANSI C).
11106 EOM
11107                 fflushNULL="$undef"
11108                 ;;
11109         *)      $cat >&4 <<EOM
11110 Cannot figure out whether your fflush(NULL) works or not.
11111 I'm assuming it doesn't (contrary to ANSI C).
11112 EOM
11113                 fflushNULL="$undef"
11114                 ;;
11115         esac
11116         ;;
11117 $define|true|[yY]*)
11118         fflushNULL="$define"
11119         ;;
11120 *)
11121         fflushNULL="$undef"
11122         ;;
11123 esac
11124 : check explicit looping only if NULL did not work
11125 case "$fflushNULL" in
11126 "$undef")
11127         : check for fflush all behaviour
11128         case "$fflushall" in
11129         '')     set try -DTRY_FFLUSH_ALL $output
11130                 if eval $compile; then
11131                         $cat >&4 <<EOM
11132 (Now testing the other method--but note that also this may fail.)
11133 EOM
11134                         $rm -f try.out
11135                         ./try$exe_ext 2>/dev/null
11136                         if $test -s try.out -a "X$?" = X42; then
11137                                 fflushall="`$cat try.out`"
11138                         fi
11139                 fi
11140                 $rm -f core try.core core.try.*
11141                 case "$fflushall" in
11142                 x)      $cat >&4 <<EOM
11143 Whew. Flushing explicitly all the stdio streams works.
11144 EOM
11145                         fflushall="$define"
11146                         ;;
11147                 '')     $cat >&4 <<EOM
11148 Sigh. Flushing explicitly all the stdio streams doesn't work.
11149 EOM
11150                         fflushall="$undef"
11151                         ;;
11152                 *)      $cat >&4 <<EOM
11153 Cannot figure out whether flushing stdio streams explicitly works or not.
11154 I'm assuming it doesn't.
11155 EOM
11156                         fflushall="$undef"
11157                         ;;
11158                 esac
11159                 ;;
11160         "$define"|true|[yY]*)
11161                 fflushall="$define"
11162                 ;;
11163         *)
11164                 fflushall="$undef"
11165                 ;;
11166         esac
11167         ;;
11168 *)      fflushall="$undef"      
11169         ;;
11170 esac
11171 case "$fflushNULL$fflushall" in
11172 undefundef)
11173         $cat <<EOM
11174 I cannot figure out how to flush pending stdio output.
11175 EOM
11176         ;;
11177 esac
11178 $rm -f try.* try$exe_ext
11179
11180 : see what type file positions are declared as in the library
11181 rp="What is the type for file position used by fsetpos()?"
11182 set fpos_t fpostype long stdio.h sys/types.h
11183 eval $typedef_ask
11184
11185 : Store the full pathname to the ar program for use in the C program
11186 : Respect a hint or command line value for full_ar.
11187 case "$full_ar" in
11188 '') full_ar=$ar ;;
11189 esac
11190
11191 : Store the full pathname to the sed program for use in the C program
11192 full_sed=$sed
11193
11194 : see what type gids are declared as in the kernel
11195 echo " "
11196 echo "Looking for the type for group ids returned by getgid()."
11197 set gid_t gidtype xxx stdio.h sys/types.h
11198 eval $typedef
11199 case "$gidtype" in
11200 xxx)
11201         xxx=`./findhdr sys/user.h`
11202         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11203         case $1 in
11204         unsigned) dflt="$1 $2" ;;
11205         *) dflt="$1" ;;
11206         esac
11207         ;;
11208 *) dflt="$gidtype";;
11209 esac
11210 case "$gidtype" in
11211 gid_t) echo "gid_t found." ;;
11212 *)      rp="What is the type for group ids returned by getgid()?"
11213         . ./myread
11214         gidtype="$ans"
11215         ;;
11216 esac
11217
11218 : see if getgroups exists
11219 set getgroups d_getgrps
11220 eval $inlibc
11221
11222 : see if setgroups exists
11223 set setgroups d_setgrps
11224 eval $inlibc
11225
11226
11227 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11228 echo " "
11229 case "$d_getgrps$d_setgrps" in
11230 *define*)
11231         case "$groupstype" in
11232         '') dflt="$gidtype" ;;
11233         *)  dflt="$groupstype" ;;
11234         esac
11235         $cat <<EOM
11236 What type of pointer is the second argument to getgroups() and setgroups()?
11237 Usually this is the same as group ids, $gidtype, but not always.
11238
11239 EOM
11240         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11241         . ./myread
11242         groupstype="$ans"
11243         ;;
11244 *)  groupstype="$gidtype";;
11245 esac
11246
11247 : see what type lseek is declared as in the kernel
11248 rp="What is the type used for lseek's offset on this system?"
11249 set off_t lseektype long stdio.h sys/types.h
11250 eval $typedef_ask
11251
11252 echo " "
11253 $echo $n "Checking to see how big your file offsets are...$c" >&4
11254 $cat >try.c <<EOCP
11255 #include <sys/types.h>
11256 #include <stdio.h>
11257 int main()
11258 {
11259         printf("%d\n", sizeof($lseektype));
11260 }
11261 EOCP
11262 set try
11263 if eval $compile_ok; then
11264         lseeksize=`./try`
11265         $echo " $lseeksize bytes." >&4
11266 else
11267         dflt='4'
11268         echo " "
11269         echo "(I can't seem to compile the test program.  Guessing...)"
11270         rp="What is the size of your file offsets (in bytes)?"
11271         . ./myread
11272         lseeksize="$ans"
11273 fi
11274 $rm -f try.c try
11275
11276 echo " "
11277 echo "Checking if your $make program sets \$(MAKE)..." >&4
11278 case "$make_set_make" in
11279 '')
11280         $sed 's/^X //' > testmake.mak << 'EOF'
11281 Xall:
11282 X       @echo 'maketemp="$(MAKE)"'
11283 EOF
11284         case "`$make -f testmake.mak 2>/dev/null`" in
11285         *maketemp=*) make_set_make='#' ;;
11286         *)      make_set_make="MAKE=$make" ;;
11287         esac
11288         $rm -f testmake.mak
11289         ;;
11290 esac
11291 case "$make_set_make" in
11292 '#') echo "Yup, it does.";;
11293 *) echo "Nope, it doesn't.";;
11294 esac
11295
11296 : see what type is used for mode_t
11297 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11298 set mode_t modetype int stdio.h sys/types.h
11299 eval $typedef_ask
11300
11301 : define a fucntion to check prototypes
11302 $cat > protochk <<EOSH
11303 $startsh
11304 cc="$cc"
11305 optimize="$optimize"
11306 ccflags="$ccflags"
11307 prototype="$prototype"
11308 define="$define"
11309 rm=$rm
11310 EOSH
11311
11312 $cat >> protochk <<'EOSH'
11313
11314 $rm -f try.c
11315 foo="$1"
11316 shift
11317 while test $# -ge 2; do
11318         case "$1" in
11319                 $define) echo "#include <$2>" >> try.c ;;
11320                 literal) echo "$2" >> try.c ;;
11321         esac
11322     shift 2
11323 done
11324 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11325 cat >> try.c <<'EOCP'
11326 #ifdef CAN_PROTOTYPE
11327 #define _(args) args
11328 #else
11329 #define _(args) ()
11330 #endif
11331 EOCP
11332 echo "$foo" >> try.c
11333 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11334 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11335 status=$?
11336 $rm -f try.[co]
11337 exit $status
11338 EOSH
11339 chmod +x protochk
11340 $eunicefix protochk
11341
11342 : see what type is used for size_t
11343 rp="What is the type used for the length parameter for string functions?"
11344 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11345 eval $typedef_ask
11346
11347 : check for type of arguments to gethostbyaddr. 
11348 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11349         case "$d_gethbyaddr" in
11350         $define)
11351                 $cat <<EOM
11352
11353 Checking to see what type of arguments are accepted by gethostbyaddr().
11354 EOM
11355                 hdrs="$define sys/types.h
11356                         $d_socket sys/socket.h 
11357                         $i_niin netinet/in.h 
11358                         $i_netdb netdb.h
11359                         $i_unistd unistd.h"
11360                 : The first arg can 'char *' or 'void *'
11361                 : The second arg is some of integral type
11362                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11363                         for yyy in size_t long int; do
11364                                 case "$netdb_host_type" in
11365                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11366                                         if ./protochk "$try" $hdrs; then
11367                                                 echo "Your system accepts $xxx for the first arg."
11368                                                 echo "...and $yyy for the second arg."
11369                                                 netdb_host_type="$xxx"
11370                                                 netdb_hlen_type="$yyy"
11371                                         fi
11372                                         ;;
11373                                 esac
11374                         done
11375                 done
11376                 : In case none of those worked, prompt the user.
11377                 case "$netdb_host_type" in
11378                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11379                         dflt='char *'
11380                         . ./myread
11381                         netdb_host_type=$ans
11382                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11383                         dflt="$sizetype"
11384                         . ./myread
11385                         netdb_hlen_type=$ans
11386                         ;;
11387                 esac
11388                 ;;
11389         *)      : no gethostbyaddr, so pick harmless defaults
11390                 netdb_host_type='char *'
11391                 netdb_hlen_type="$sizetype"
11392                 ;;
11393         esac
11394         # Remove the "const" if needed. -- but then we'll have a 
11395         # prototype clash!
11396         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11397 fi
11398
11399 : check for type of argument to gethostbyname. 
11400 if test "X$netdb_name_type" = X ; then
11401         case "$d_gethbyname" in
11402         $define)
11403                 $cat <<EOM
11404
11405 Checking to see what type of argument is accepted by gethostbyname().
11406 EOM
11407                 hdrs="$define sys/types.h
11408                         $d_socket sys/socket.h 
11409                         $i_niin netinet/in.h 
11410                         $i_netdb netdb.h
11411                         $i_unistd unistd.h"
11412                 for xxx in "const char *" "char *"; do
11413                         case "$netdb_name_type" in
11414                         '')     try="extern struct hostent *gethostbyname($xxx);"
11415                                 if ./protochk "$try" $hdrs; then
11416                                         echo "Your system accepts $xxx."
11417                                         netdb_name_type="$xxx"
11418                                 fi
11419                                 ;;
11420                         esac
11421                 done
11422                 : In case none of those worked, prompt the user.
11423                 case "$netdb_name_type" in
11424                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11425                         dflt='char *'
11426                         . ./myread
11427                         netdb_name_type=$ans
11428                         ;;
11429                 esac
11430                 ;;
11431         *)      : no gethostbyname, so pick harmless default
11432                 netdb_name_type='char *'
11433                 ;;
11434         esac
11435 fi
11436
11437 : check for type of 1st argument to getnetbyaddr. 
11438 if test "X$netdb_net_type" = X ; then
11439         case "$d_getnbyaddr" in
11440         $define)
11441                 $cat <<EOM
11442
11443 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11444 EOM
11445                 hdrs="$define sys/types.h
11446                         $d_socket sys/socket.h 
11447                         $i_niin netinet/in.h 
11448                         $i_netdb netdb.h
11449                         $i_unistd unistd.h"
11450                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11451                         case "$netdb_net_type" in
11452                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11453                                 if ./protochk "$try" $hdrs; then
11454                                         echo "Your system accepts $xxx."
11455                                         netdb_net_type="$xxx"
11456                                 fi
11457                                 ;;
11458                         esac
11459                 done
11460                 : In case none of those worked, prompt the user.
11461                 case "$netdb_net_type" in
11462                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11463                         dflt='long'
11464                         . ./myread
11465                         netdb_net_type=$ans
11466                         ;;
11467                 esac
11468                 ;;
11469         *)      : no getnetbyaddr, so pick harmless default
11470                 netdb_net_type='long'
11471                 ;;
11472         esac
11473 fi
11474 : locate the preferred pager for this system
11475 case "$pager" in
11476 '')
11477         dflt=''
11478         case "$pg" in
11479         /*) dflt=$pg;;
11480         esac
11481         case "$more" in
11482         /*) dflt=$more;;
11483         esac
11484         case "$less" in
11485         /*) dflt=$less;;
11486         esac
11487         case "$dflt" in
11488         '') dflt=/usr/ucb/more;;
11489         esac
11490         ;;
11491 *) dflt="$pager";;
11492 esac
11493 echo " "
11494 fn=f/
11495 rp='What pager is used on your system?'
11496 . ./getfile
11497 pager="$ans"
11498
11499 : see what type pids are declared as in the kernel
11500 rp="What is the type of process ids on this system?"
11501 set pid_t pidtype int stdio.h sys/types.h
11502 eval $typedef_ask
11503
11504 : check for length of pointer
11505 echo " "
11506 case "$ptrsize" in
11507 '')
11508         $echo $n "Checking to see how big your pointers are...$c" >&4
11509         if test "$voidflags" -gt 7; then
11510                 echo '#define VOID_PTR char *' > try.c
11511         else
11512                 echo '#define VOID_PTR void *' > try.c
11513         fi
11514         $cat >>try.c <<'EOCP'
11515 #include <stdio.h>
11516 int main()
11517 {
11518         printf("%d\n", sizeof(VOID_PTR));
11519         exit(0);
11520 }
11521 EOCP
11522         set try
11523         if eval $compile_ok; then
11524                 ptrsize=`./try`
11525                 $echo " $ptrsize bytes." >&4
11526         else
11527                 dflt='4'
11528                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11529                 rp="What is the size of a pointer (in bytes)?"
11530                 . ./myread
11531                 ptrsize="$ans"
11532         fi
11533         ;;
11534 esac
11535 $rm -f try.c try
11536
11537 : see if ar generates random libraries by itself
11538 echo " "
11539 echo "Checking how to generate random libraries on your machine..." >&4
11540 echo 'int bar1() { return bar2(); }' > bar1.c
11541 echo 'int bar2() { return 2; }' > bar2.c
11542 $cat > foo.c <<'EOP'
11543 int main() { printf("%d\n", bar1()); exit(0); }
11544 EOP
11545 $cc $ccflags -c bar1.c >/dev/null 2>&1
11546 $cc $ccflags -c bar2.c >/dev/null 2>&1
11547 $cc $ccflags -c foo.c >/dev/null 2>&1
11548 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11549 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11550         ./foobar >/dev/null 2>&1; then
11551         echo "$ar appears to generate random libraries itself."
11552         orderlib=false
11553         ranlib=":"
11554 elif $ar ts bar$_a >/dev/null 2>&1 &&
11555         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11556         ./foobar >/dev/null 2>&1; then
11557                 echo "a table of contents needs to be added with '$ar ts'."
11558                 orderlib=false
11559                 ranlib="$ar ts"
11560 else
11561         case "$ranlib" in
11562         :) ranlib='';;
11563         '')
11564                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11565                 $test -f $ranlib || ranlib=''
11566                 ;;
11567         esac
11568         if $test -n "$ranlib"; then
11569                 echo "your system has '$ranlib'; we'll use that."
11570                 orderlib=false
11571         else
11572                 echo "your system doesn't seem to support random libraries"
11573                 echo "so we'll use lorder and tsort to order the libraries."
11574                 orderlib=true
11575                 ranlib=":"
11576         fi
11577 fi
11578 $rm -f foo* bar* 
11579
11580 : check for type of arguments to select. 
11581 case "$selecttype" in
11582 '') case "$d_select" in
11583         $define)
11584                 $cat <<EOM
11585 Checking to see what type of arguments are accepted by select().
11586 EOM
11587                 hdrs="$define sys/types.h
11588                         $i_systime sys/time.h 
11589                         $i_sysselct sys/select.h
11590                         $d_socket sys/socket.h"
11591                 : The first arg can be int, unsigned, or size_t
11592                 : The last arg may or may not be 'const'
11593                 val=''
11594                 : void pointer has been seen but using that
11595                 : breaks the selectminbits test
11596                 for xxx in 'fd_set *' 'int *'; do
11597                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11598                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11599                                         case "$val" in
11600                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11601                                                 if ./protochk "$try" $hdrs; then
11602                                                         echo "Your system accepts $xxx."
11603                                                         val="$xxx"
11604                                                 fi
11605                                                 ;;
11606                                         esac
11607                                 done
11608                         done
11609                 done
11610                 case "$val" in
11611                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11612                         case "$d_fd_set" in
11613                                 $define) dflt="fd_set *" ;;
11614                                 *)              dflt="int *" ;;
11615                         esac
11616                         . ./myread
11617                         val=$ans
11618                         ;;
11619                 esac
11620                 selecttype="$val"
11621                 ;;
11622         *)      : no select, so pick a harmless default
11623                 selecttype='int *'
11624                 ;;
11625         esac
11626         ;;
11627 esac
11628
11629 : check for the select 'width'
11630 case "$selectminbits" in
11631 '') case "$d_select" in
11632         $define)
11633                 $cat <<EOM
11634
11635 Checking to see on how many bits at a time your select() operates...
11636 EOM
11637                 $cat >try.c <<EOCP
11638 #include <sys/types.h>
11639 #$i_time I_TIME
11640 #$i_systime I_SYS_TIME
11641 #$i_systimek I_SYS_TIME_KERNEL
11642 #ifdef I_TIME
11643 #   include <time.h>
11644 #endif
11645 #ifdef I_SYS_TIME
11646 #   ifdef I_SYS_TIME_KERNEL
11647 #       define KERNEL
11648 #   endif
11649 #   include <sys/time.h>
11650 #   ifdef I_SYS_TIME_KERNEL
11651 #       undef KERNEL
11652 #   endif
11653 #endif
11654 #$i_sysselct I_SYS_SELECT
11655 #ifdef I_SYS_SELECT
11656 #include <sys/select.h>
11657 #endif
11658 #$d_socket HAS_SOCKET
11659 #ifdef HAS_SOCKET
11660 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11661 #endif
11662 #include <stdio.h>
11663 $selecttype b;
11664 #define S sizeof(*(b))
11665 #define MINBITS 64
11666 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11667 #define NBITS  (NBYTES * 8)
11668 int main() {
11669     char s[NBYTES];
11670     struct timeval t;
11671     int i;
11672     FILE* fp;
11673     int fd;
11674
11675     fclose(stdin);
11676     fp = fopen("try.c", "r");
11677     if (fp == 0)
11678       exit(1);
11679     fd = fileno(fp);
11680     if (fd < 0)
11681       exit(2);
11682     b = ($selecttype)s;
11683     for (i = 0; i < NBITS; i++)
11684         FD_SET(i, b);
11685     t.tv_sec  = 0;
11686     t.tv_usec = 0;
11687     select(fd + 1, b, 0, 0, &t);
11688     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11689     printf("%d\n", i + 1);
11690     return 0;
11691 }
11692 EOCP
11693                 set try
11694                 if eval $compile_ok; then
11695                         selectminbits=`./try`
11696                         case "$selectminbits" in
11697                         '')     cat >&4 <<EOM
11698 Cannot figure out on how many bits at a time your select() operates.
11699 I'll play safe and guess it is 32 bits.
11700 EOM
11701                                 selectminbits=32
11702                                 bits="32 bits"
11703                                 ;;
11704                         1)      bits="1 bit" ;;
11705                         *)      bits="$selectminbits bits" ;;
11706                         esac
11707                         echo "Your select() operates on $bits at a time." >&4
11708                 else
11709                         rp='What is the minimum number of bits your select() operates on?'
11710                         case "$byteorder" in
11711                         1234|12345678)  dflt=32 ;;
11712                         *)              dflt=1  ;;
11713                         esac
11714                         . ./myread
11715                         val=$ans
11716                         selectminbits="$val"
11717                 fi
11718                 $rm -f try.* try
11719                 ;;
11720         *)      : no select, so pick a harmless default
11721                 selectminbits='32'
11722                 ;;
11723         esac
11724         ;;
11725 esac
11726
11727 : Trace out the files included by signal.h, then look for SIGxxx names.
11728 : Remove SIGARRAYSIZE used by HPUX.
11729 : Remove SIGSTKSIZE used by Linux.
11730 : Remove SIGSTKSZ used by Posix.
11731 : Remove SIGTYP void lines used by OS2.
11732 xxx=`echo '#include <signal.h>' |
11733         $cppstdin $cppminus $cppflags 2>/dev/null |
11734         $grep '^[       ]*#.*include' | 
11735         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11736 : Check this list of files to be sure we have parsed the cpp output ok.
11737 : This will also avoid potentially non-existent files, such 
11738 : as ../foo/bar.h
11739 xxxfiles=''
11740 for xx in $xxx /dev/null ; do
11741         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11742 done
11743 : If we have found no files, at least try signal.h
11744 case "$xxxfiles" in
11745 '')     xxxfiles=`./findhdr signal.h` ;;
11746 esac
11747 xxx=`awk '
11748 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11749         print substr($2, 4, 20)
11750 }
11751 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11752         print substr($3, 4, 20)
11753 }' $xxxfiles`
11754 : Append some common names just in case the awk scan failed.
11755 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11756 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11757 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11758 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11759 : generate a few handy files for later
11760 $cat > signal.c <<'EOCP'
11761 #include <sys/types.h>
11762 #include <signal.h>
11763 #include <stdio.h>
11764 int main() {
11765
11766 /* Strange style to avoid deeply-nested #if/#else/#endif */
11767 #ifndef NSIG
11768 #  ifdef _NSIG
11769 #    define NSIG (_NSIG)
11770 #  endif
11771 #endif
11772
11773 #ifndef NSIG
11774 #  ifdef SIGMAX
11775 #    define NSIG (SIGMAX+1)
11776 #  endif
11777 #endif
11778
11779 #ifndef NSIG
11780 #  ifdef SIG_MAX
11781 #    define NSIG (SIG_MAX+1)
11782 #  endif
11783 #endif
11784
11785 #ifndef NSIG
11786 #  ifdef MAXSIG
11787 #    define NSIG (MAXSIG+1)
11788 #  endif
11789 #endif
11790
11791 #ifndef NSIG
11792 #  ifdef MAX_SIG
11793 #    define NSIG (MAX_SIG+1)
11794 #  endif
11795 #endif
11796
11797 #ifndef NSIG
11798 #  ifdef SIGARRAYSIZE
11799 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11800 #  endif
11801 #endif
11802
11803 #ifndef NSIG
11804 #  ifdef _sys_nsig
11805 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11806 #  endif
11807 #endif
11808
11809 /* Default to some arbitrary number that's big enough to get most
11810    of the common signals.
11811 */
11812 #ifndef NSIG
11813 #    define NSIG 50
11814 #endif
11815
11816 printf("NSIG %d\n", NSIG);
11817
11818 #ifndef JUST_NSIG
11819
11820 EOCP
11821
11822 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11823 {
11824         printf "#ifdef SIG"; printf $1; printf "\n"
11825         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11826         printf $1; printf ");\n"
11827         printf "#endif\n"
11828 }
11829 END {
11830         printf "#endif /* JUST_NSIG */\n";
11831         printf "}\n";
11832 }
11833 ' >>signal.c
11834 $cat >signal.awk <<'EOP'
11835 BEGIN { ndups = 0 }
11836 $1 ~ /^NSIG$/ { nsig = $2 }
11837 ($1 !~ /^NSIG$/) && (NF == 2) {
11838     if ($2 > maxsig) { maxsig = $2 }
11839     if (sig_name[$2]) {
11840         dup_name[ndups] = $1
11841         dup_num[ndups] = $2
11842         ndups++ 
11843     }
11844     else {
11845         sig_name[$2] = $1
11846         sig_num[$2] = $2
11847     }
11848 }
11849 END { 
11850     if (nsig == 0) {
11851         nsig = maxsig + 1
11852     }
11853     printf("NSIG %d\n", nsig);
11854     for (n = 1; n < nsig; n++) {
11855         if (sig_name[n]) {
11856             printf("%s %d\n", sig_name[n], sig_num[n])
11857         }
11858         else {
11859             printf("NUM%d %d\n", n, n) 
11860         }
11861     }
11862     for (n = 0; n < ndups; n++) {
11863         printf("%s %d\n", dup_name[n], dup_num[n])
11864     }
11865 }
11866 EOP
11867 $cat >signal_cmd <<EOS
11868 $startsh
11869 if $test -s signal.lst; then
11870     echo "Using your existing signal.lst file"
11871         exit 0
11872 fi
11873 xxx="$xxx"
11874 EOS
11875 $cat >>signal_cmd <<'EOS'
11876
11877 set signal
11878 if eval $compile_ok; then
11879         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11880 else
11881         echo "(I can't seem be able to compile the whole test program)" >&4
11882         echo "(I'll try it in little pieces.)" >&4
11883         set signal -DJUST_NSIG
11884         if eval $compile_ok; then
11885                 ./signal$_exe > signal.nsg
11886                 $cat signal.nsg
11887         else
11888                 echo "I can't seem to figure out how many signals you have." >&4
11889                 echo "Guessing 50." >&4
11890                 echo 'NSIG 50' > signal.nsg
11891         fi
11892         : Now look at all the signal names, one at a time.
11893         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11894                 $cat > signal.c <<EOCP
11895 #include <sys/types.h>
11896 #include <signal.h>
11897 #include <stdio.h>
11898 int main() {
11899 printf("$xx %d\n", SIG${xx});
11900 return 0;
11901 }
11902 EOCP
11903                 set signal
11904                 if eval $compile; then
11905                         echo "SIG${xx} found."
11906                         ./signal$_exe  >> signal.ls1
11907                 else
11908                         echo "SIG${xx} NOT found."
11909                 fi
11910         done
11911         if $test -s signal.ls1; then
11912                 $cat signal.nsg signal.ls1 |
11913                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11914         fi
11915
11916 fi
11917 if $test -s signal.lst; then
11918         :
11919 else
11920         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11921         echo 'kill -l' >signal
11922         set X `csh -f <signal`
11923         $rm -f signal
11924         shift
11925         case $# in
11926         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11927         esac
11928         echo $@ | $tr ' ' $trnl | \
11929             $awk '{ printf "%s %d\n", $1, ++s; }
11930                   END { printf "NSIG %d\n", ++s }' >signal.lst
11931 fi
11932 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11933 EOS
11934 chmod a+x signal_cmd
11935 $eunicefix signal_cmd
11936
11937 : generate list of signal names
11938 echo " "
11939 case "$sig_name_init" in
11940 '') doinit=yes ;;
11941 *)  case "$sig_num_init" in
11942     ''|*,*) doinit=yes ;;
11943     esac ;;
11944 esac
11945 case "$doinit" in
11946 yes)
11947         echo "Generating a list of signal names and numbers..." >&4
11948         . ./signal_cmd
11949         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11950         sig_name=`$awk 'BEGIN { printf "ZERO " }
11951                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11952         sig_num=`$awk  'BEGIN { printf "0 " }
11953                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11954         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11955                              !/^NSIG/   { printf "\"%s\", ", $1 }
11956                              END        { printf "0\n" }' signal.lst`
11957         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11958                              !/^NSIG/   { printf "%d, ", $2}
11959                              END        { printf "0\n"}' signal.lst`
11960         ;;
11961 esac
11962 echo "The following $sig_count signals are available:"
11963 echo " "
11964 echo $sig_name | $awk \
11965 'BEGIN { linelen = 0 }
11966 {
11967         for (i = 1; i <= NF; i++) {
11968                 name = "SIG" $i " "
11969                 linelen = linelen + length(name)
11970                 if (linelen > 70) {
11971                         printf "\n"
11972                         linelen = length(name)
11973                 }
11974                 printf "%s", name
11975         }
11976         printf "\n"
11977 }'
11978 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11979
11980 : see what type is used for signed size_t
11981 set ssize_t ssizetype int stdio.h sys/types.h
11982 eval $typedef
11983 dflt="$ssizetype"
11984 $cat > ssize.c <<EOM
11985 #include <stdio.h>
11986 #include <sys/types.h>
11987 #define Size_t $sizetype
11988 #define SSize_t $dflt
11989 int main()
11990 {
11991         if (sizeof(Size_t) == sizeof(SSize_t))
11992                 printf("$dflt\n");
11993         else if (sizeof(Size_t) == sizeof(int))
11994                 printf("int\n");
11995         else 
11996                 printf("long\n");
11997         exit(0);
11998 }
11999 EOM
12000 echo " "
12001 set ssize
12002 if eval $compile_ok && ./ssize > /dev/null; then
12003         ssizetype=`./ssize`
12004         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12005 else
12006         $cat >&4 <<EOM
12007 Help! I can't compile and run the ssize_t test program: please enlighten me!
12008 (This is probably a misconfiguration in your system or libraries, and
12009 you really ought to fix it.  Still, I'll try anyway.)
12010
12011 I need a type that is the same size as $sizetype, but is guaranteed to
12012 be signed.  Common values are ssize_t, int and long.
12013
12014 EOM
12015         rp="What signed type is the same size as $sizetype?"
12016         . ./myread
12017         ssizetype="$ans"
12018 fi
12019 $rm -f ssize ssize.*
12020
12021 : see what type of char stdio uses.
12022 echo " "
12023 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12024         echo "Your stdio uses unsigned chars." >&4
12025         stdchar="unsigned char"
12026 else
12027         echo "Your stdio uses signed chars." >&4
12028         stdchar="char"
12029 fi
12030
12031 : see if time exists
12032 echo " "
12033 if test "X$d_time" = X -o X"$timetype" = X; then
12034     if set time val -f d_time; eval $csym; $val; then
12035                 echo 'time() found.' >&4
12036                 val="$define"
12037                 rp="What is the type returned by time() on this system?"
12038                 set time_t timetype long stdio.h sys/types.h
12039                 eval $typedef_ask
12040     else
12041                 echo 'time() not found, hope that will do.' >&4
12042                 val="$undef"
12043                 timetype='int';
12044     fi
12045     set d_time
12046     eval $setvar
12047 fi
12048
12049 : see what type uids are declared as in the kernel
12050 echo " "
12051 echo "Looking for the type for user ids returned by getuid()."
12052 set uid_t uidtype xxx stdio.h sys/types.h
12053 eval $typedef
12054 case "$uidtype" in
12055 xxx)
12056         xxx=`./findhdr sys/user.h`
12057         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12058         case $1 in
12059         unsigned) dflt="$1 $2" ;;
12060         *) dflt="$1" ;;
12061         esac
12062         ;;
12063 *) dflt="$uidtype";;
12064 esac
12065 case "$uidtype" in
12066 uid_t)  echo "uid_t found." ;;
12067 *)      rp="What is the type for user ids returned by getuid()?"
12068         . ./myread
12069         uidtype="$ans"
12070         ;;
12071 esac
12072
12073 : see if dbm.h is available
12074 : see if dbmclose exists
12075 set dbmclose d_dbmclose
12076 eval $inlibc
12077
12078 case "$d_dbmclose" in
12079 $define)
12080         set dbm.h i_dbm
12081         eval $inhdr
12082         case "$i_dbm" in
12083         $define)
12084                 val="$undef"
12085                 set i_rpcsvcdbm
12086                 eval $setvar
12087                 ;;
12088         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12089                 eval $inhdr
12090                 ;;
12091         esac
12092         ;;
12093 *)      echo "We won't be including <dbm.h>"
12094         val="$undef"
12095         set i_dbm
12096         eval $setvar
12097         val="$undef"
12098         set i_rpcsvcdbm
12099         eval $setvar
12100         ;;
12101 esac
12102
12103 : see if this is a sys/file.h system
12104 val=''
12105 set sys/file.h val
12106 eval $inhdr
12107
12108 : do we need to include sys/file.h ?
12109 case "$val" in
12110 "$define")
12111         echo " "
12112         if $h_sysfile; then
12113                 val="$define"
12114                 echo "We'll be including <sys/file.h>." >&4
12115         else
12116                 val="$undef"
12117                 echo "We won't be including <sys/file.h>." >&4
12118         fi
12119         ;;
12120 *)
12121         h_sysfile=false
12122         ;;
12123 esac
12124 set i_sysfile
12125 eval $setvar
12126
12127 : see if fcntl.h is there
12128 val=''
12129 set fcntl.h val
12130 eval $inhdr
12131
12132 : see if we can include fcntl.h
12133 case "$val" in
12134 "$define")
12135         echo " "
12136         if $h_fcntl; then
12137                 val="$define"
12138                 echo "We'll be including <fcntl.h>." >&4
12139         else
12140                 val="$undef"
12141                 if $h_sysfile; then
12142         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12143                 else
12144                         echo "We won't be including <fcntl.h>." >&4
12145                 fi
12146         fi
12147         ;;
12148 *)
12149         h_fcntl=false
12150         val="$undef"
12151         ;;
12152 esac
12153 set i_fcntl
12154 eval $setvar
12155
12156 : see if locale.h is available
12157 set locale.h i_locale
12158 eval $inhdr
12159
12160 : see if mach cthreads are available
12161 if test "X$usethreads" = "X$define"; then
12162         set mach/cthreads.h i_machcthr
12163         eval $inhdr
12164 else
12165         i_machcthr="$undef"
12166 fi
12167
12168
12169
12170 : see if this is a math.h system
12171 set math.h i_math
12172 eval $inhdr
12173
12174 : see if this is a mntent.h system
12175 set mntent.h i_mntent
12176 eval $inhdr
12177
12178 : see if ndbm.h is available
12179 set ndbm.h t_ndbm
12180 eval $inhdr
12181 case "$t_ndbm" in
12182 $define)
12183         : see if dbm_open exists
12184         set dbm_open d_dbm_open
12185         eval $inlibc
12186         case "$d_dbm_open" in
12187         $undef)
12188                 t_ndbm="$undef"
12189                 echo "We won't be including <ndbm.h>"
12190                 ;;
12191         esac
12192         ;;
12193 esac
12194 val="$t_ndbm"
12195 set i_ndbm
12196 eval $setvar
12197
12198 : see if net/errno.h is available
12199 val=''
12200 set net/errno.h val
12201 eval $inhdr
12202
12203 : Unfortunately, it causes problems on some systems.  Arrgh.
12204 case "$val" in
12205 $define)
12206         cat > try.c <<'EOM'
12207 #include <stdio.h>
12208 #include <errno.h>
12209 #include <net/errno.h>
12210 int func()
12211 {
12212         return ENOTSOCK;
12213 }
12214 EOM
12215         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12216                 echo "We'll be including <net/errno.h>." >&4
12217         else
12218                 echo "We won't be including <net/errno.h>." >&4
12219                 val="$undef"
12220         fi
12221         $rm -f try.* try
12222         ;;
12223 esac
12224 set i_neterrno
12225 eval $setvar
12226
12227 : see if netinet/tcp.h is available
12228 set netinet/tcp.h i_netinettcp
12229 eval $inhdr
12230
12231 : see if this is a poll.h system
12232 set poll.h i_poll
12233 eval $inhdr
12234
12235 : get C preprocessor symbols handy
12236 echo " "
12237 $echo $n "Hmm... $c"
12238 echo $al | $tr ' ' $trnl >Cppsym.know
12239 $cat <<EOSS >Cppsym
12240 $startsh
12241 case "\$1" in
12242 -l) list=true
12243         shift
12244         ;;
12245 esac
12246 unknown=''
12247 case "\$list\$#" in
12248 1|2)
12249         for sym do
12250                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12251                         exit 0
12252                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12253                         :
12254                 else
12255                         unknown="\$unknown \$sym"
12256                 fi
12257         done
12258         set X \$unknown
12259         shift
12260         ;;
12261 esac
12262 case \$# in
12263 0) exit 1;;
12264 esac
12265 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12266 #ifdef \1\\
12267 exit 0; _ _ _ _\1\\      \1\\
12268 #endif\\
12269 /' >Cppsym\$\$
12270 echo "exit 1; _ _ _" >>Cppsym\$\$
12271 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12272 case "\$list" in
12273 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12274 *)
12275         sh Cppsym2\$\$
12276         status=\$?
12277         ;;
12278 esac
12279 $rm -f Cppsym\$\$ Cppsym2\$\$
12280 exit \$status
12281 EOSS
12282 chmod +x Cppsym
12283 $eunicefix Cppsym
12284 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12285
12286 : now check the C compiler for additional symbols
12287 postprocess_cc_v=''
12288 case "$osname" in
12289 aix) postprocess_cc_v="|$tr , ' '" ;;
12290 esac
12291 $cat >ccsym <<EOS
12292 $startsh
12293 $cat >tmp.c <<EOF
12294 extern int foo;
12295 EOF
12296 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12297 do
12298         case "\$i" in
12299         -D*) echo "\$i" | $sed 's/^-D//';;
12300         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12301         esac
12302 done
12303 $rm -f try.c
12304 EOS
12305 postprocess_cc_v=''
12306 chmod +x ccsym
12307 $eunicefix ccsym
12308 ./ccsym > ccsym1.raw
12309 if $test -s ccsym1.raw; then
12310        $sort ccsym1.raw | $uniq >ccsym.raw
12311 else
12312        mv ccsym1.raw ccsym.raw
12313 fi
12314
12315 $awk '/\=/ { print $0; next }
12316         { print $0"=1" }' ccsym.raw >ccsym.list
12317 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12318 $comm -13 ccsym.true ccsym.list >ccsym.own
12319 $comm -12 ccsym.true ccsym.list >ccsym.com
12320 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12321 also=''
12322 if $test -z ccsym.raw; then
12323         echo "Your C compiler doesn't seem to define any symbols!" >&4
12324         echo " "
12325         echo "However, your C preprocessor defines the following symbols:"
12326         $cat Cppsym.true
12327         ccsymbols=''
12328         cppsymbols=`$cat Cppsym.true`
12329         cppsymbols=`echo $cppsymbols`
12330         cppccsymbols="$cppsymbols"
12331 else
12332         if $test -s ccsym.com; then
12333                 echo "Your C compiler and pre-processor define these symbols:"
12334                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12335                 also='also '
12336                 symbols='ones'
12337                 cppccsymbols=`$cat ccsym.com`
12338                 cppccsymbols=`echo $cppccsymbols`
12339                 $test "$silent" || sleep 1
12340         fi
12341         if $test -s ccsym.cpp; then
12342                 $test "$also" && echo " "
12343                 echo "Your C pre-processor ${also}defines the following symbols:"
12344                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12345                 also='further '
12346                 cppsymbols=`$cat ccsym.cpp`
12347                 cppsymbols=`echo $cppsymbols`
12348                 $test "$silent" || sleep 1
12349         fi
12350         if $test -s ccsym.own; then
12351                 $test "$also" && echo " "
12352                 echo "Your C compiler ${also}defines the following cpp symbols:"
12353                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12354                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12355                 ccsymbols=`$cat ccsym.own`
12356                 ccsymbols=`echo $ccsymbols`
12357                 $test "$silent" || sleep 1
12358         fi
12359 fi
12360 $rm -f ccsym*
12361
12362 : see if this is a termio system
12363 val="$undef"
12364 val2="$undef"
12365 val3="$undef"
12366 if $test `./findhdr termios.h`; then
12367         set tcsetattr i_termios
12368         eval $inlibc
12369         val3="$i_termios"
12370 fi
12371 echo " "
12372 case "$val3" in
12373 "$define") echo "You have POSIX termios.h... good!" >&4;;
12374 *) if ./Cppsym pyr; then
12375                 case "`/bin/universe`" in
12376                 ucb) if $test `./findhdr sgtty.h`; then
12377                                 val2="$define"
12378                                 echo "<sgtty.h> found." >&4
12379                         else
12380                                 echo "System is pyramid with BSD universe."
12381                                 echo "<sgtty.h> not found--you could have problems." >&4
12382                         fi;;
12383                 *) if $test `./findhdr termio.h`; then
12384                                 val="$define"
12385                                 echo "<termio.h> found." >&4
12386                         else
12387                                 echo "System is pyramid with USG universe."
12388                                 echo "<termio.h> not found--you could have problems." >&4
12389                         fi;;
12390                 esac
12391         elif ./usg; then
12392                 if $test `./findhdr termio.h`; then
12393                         echo "<termio.h> found." >&4
12394                         val="$define"
12395                 elif $test `./findhdr sgtty.h`; then
12396                         echo "<sgtty.h> found." >&4
12397                         val2="$define"
12398                 else
12399 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12400                 fi
12401         else
12402                 if $test `./findhdr sgtty.h`; then
12403                         echo "<sgtty.h> found." >&4
12404                         val2="$define"
12405                 elif $test `./findhdr termio.h`; then
12406                         echo "<termio.h> found." >&4
12407                         val="$define"
12408                 else
12409 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12410                 fi
12411         fi;;
12412 esac
12413 set i_termio; eval $setvar
12414 val=$val2; set i_sgtty; eval $setvar
12415 val=$val3; set i_termios; eval $setvar
12416
12417 : see if this is a shadow.h system
12418 set shadow.h i_shadow
12419 eval $inhdr
12420
12421 : see if this is a socks.h system
12422 set socks.h i_socks
12423 eval $inhdr
12424
12425 : see if stdarg is available
12426 echo " "
12427 if $test `./findhdr stdarg.h`; then
12428         echo "<stdarg.h> found." >&4
12429         valstd="$define"
12430 else
12431         echo "<stdarg.h> NOT found." >&4
12432         valstd="$undef"
12433 fi
12434
12435 : see if varags is available
12436 echo " "
12437 if $test `./findhdr varargs.h`; then
12438         echo "<varargs.h> found." >&4
12439 else
12440         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12441 fi
12442
12443 : set up the varargs testing programs
12444 $cat > varargs.c <<EOP
12445 #ifdef I_STDARG
12446 #include <stdarg.h>
12447 #endif
12448 #ifdef I_VARARGS
12449 #include <varargs.h>
12450 #endif
12451
12452 #ifdef I_STDARG
12453 int f(char *p, ...)
12454 #else
12455 int f(va_alist)
12456 va_dcl
12457 #endif
12458 {
12459         va_list ap;
12460 #ifndef I_STDARG
12461         char *p;
12462 #endif
12463 #ifdef I_STDARG
12464         va_start(ap,p);
12465 #else
12466         va_start(ap);
12467         p = va_arg(ap, char *);
12468 #endif
12469         va_end(ap);
12470 }
12471 EOP
12472 $cat > varargs <<EOP
12473 $startsh
12474 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12475         echo "true"
12476 else
12477         echo "false"
12478 fi
12479 $rm -f varargs$_o
12480 EOP
12481 chmod +x varargs
12482
12483 : now check which varargs header should be included
12484 echo " "
12485 i_varhdr=''
12486 case "$valstd" in
12487 "$define")
12488         if `./varargs I_STDARG`; then
12489                 val='stdarg.h'
12490         elif `./varargs I_VARARGS`; then
12491                 val='varargs.h'
12492         fi
12493         ;;
12494 *)
12495         if `./varargs I_VARARGS`; then
12496                 val='varargs.h'
12497         fi
12498         ;;
12499 esac
12500 case "$val" in
12501 '')
12502 echo "I could not find the definition for va_dcl... You have problems..." >&4
12503         val="$undef"; set i_stdarg; eval $setvar
12504         val="$undef"; set i_varargs; eval $setvar
12505         ;;
12506 *) 
12507         set i_varhdr
12508         eval $setvar
12509         case "$i_varhdr" in
12510         stdarg.h)
12511                 val="$define"; set i_stdarg; eval $setvar
12512                 val="$undef"; set i_varargs; eval $setvar
12513                 ;;
12514         varargs.h)
12515                 val="$undef"; set i_stdarg; eval $setvar
12516                 val="$define"; set i_varargs; eval $setvar
12517                 ;;
12518         esac
12519         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12520 esac
12521 $rm -f varargs*
12522
12523 : see if stddef is available
12524 set stddef.h i_stddef
12525 eval $inhdr
12526
12527 : see if sys/access.h is available
12528 set sys/access.h i_sysaccess
12529 eval $inhdr
12530
12531 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12532 set sys/filio.h i_sysfilio
12533 eval $inhdr
12534 echo " "
12535 if $test `./findhdr sys/ioctl.h`; then
12536         val="$define"
12537         echo '<sys/ioctl.h> found.' >&4
12538 else
12539         val="$undef"
12540         if $test $i_sysfilio = "$define"; then
12541             echo '<sys/ioctl.h> NOT found.' >&4
12542         else
12543                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12544                 $test $i_termio = "$define" && xxx="termio.h"
12545                 $test $i_termios = "$define" && xxx="termios.h"
12546 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12547         fi
12548 fi
12549 set i_sysioctl
12550 eval $setvar
12551
12552 : see if sys/resource.h has to be included
12553 set sys/resource.h i_sysresrc
12554 eval $inhdr
12555
12556 : see if sys/security.h is available
12557 set sys/security.h i_syssecrt
12558 eval $inhdr
12559
12560 : see if this is a sys/statvfs.h system
12561 set sys/statvfs.h i_sysstatvfs
12562 eval $inhdr
12563
12564 : see if this is a sys/un.h system
12565 set sys/un.h i_sysun
12566 eval $inhdr
12567
12568 : see if this is a syswait system
12569 set sys/wait.h i_syswait
12570 eval $inhdr
12571
12572 : see if this is an utime system
12573 set utime.h i_utime
12574 eval $inhdr
12575
12576 : see if this is a values.h system
12577 set values.h i_values
12578 eval $inhdr
12579
12580 : see if this is a vfork system
12581 case "$d_vfork" in
12582 "$define")
12583         set vfork.h i_vfork
12584         eval $inhdr
12585         ;;
12586 *)
12587         i_vfork="$undef"
12588         ;;
12589 esac
12590
12591 : see if gdbm.h is available
12592 set gdbm.h t_gdbm
12593 eval $inhdr
12594 case "$t_gdbm" in
12595 $define)
12596         : see if gdbm_open exists
12597         set gdbm_open d_gdbm_open
12598         eval $inlibc
12599         case "$d_gdbm_open" in
12600         $undef)
12601                 t_gdbm="$undef"
12602                 echo "We won't be including <gdbm.h>"
12603                 ;;
12604         esac
12605         ;;
12606 esac
12607 val="$t_gdbm"
12608 set i_gdbm
12609 eval $setvar
12610
12611 echo " "
12612 echo "Looking for extensions..." >&4
12613 tdir=`pwd`
12614 cd $rsrc/ext
12615 : If we are using the old config.sh, known_extensions may contain
12616 : old or inaccurate or duplicate values.
12617 known_extensions=''
12618 nonxs_extensions=''
12619 : We do not use find because it might not be available.
12620 : We do not just use MANIFEST because the user may have dropped
12621 : some additional extensions into the source tree and expect them
12622 : to be built.
12623 for xxx in * ; do
12624         case "$xxx" in
12625         DynaLoader|dynaload) ;;
12626         *)      if $test -f $xxx/$xxx.xs; then
12627                         known_extensions="$known_extensions $xxx"
12628                 elif $test -f $xxx/Makefile.PL; then
12629                         nonxs_extensions="$nonxs_extensions $xxx"
12630                 else
12631                         if $test -d $xxx; then
12632                                 # Look for nested extensions, eg. Devel/Dprof.
12633                                 cd $xxx
12634                                 for yyy in * ; do
12635                                 if $test -f $yyy/$yyy.xs; then
12636                                         known_extensions="$known_extensions $xxx/$yyy"
12637                                 elif $test -f $yyy/Makefile.PL; then
12638                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12639                                 fi
12640                                 done
12641                                 cd ..
12642                         fi
12643                 fi 
12644                 ;;
12645         esac
12646 done
12647 set X $nonxs_extensions
12648 shift
12649 nonxs_extensions="$*"
12650 set X $known_extensions
12651 shift
12652 known_extensions="$*"
12653 cd $tdir
12654
12655 : Now see which are supported on this system.
12656 avail_ext=''
12657 for xxx in $known_extensions ; do
12658         case "$xxx" in
12659         DB_File|db_file)
12660                 case "$i_db" in
12661                 $define) avail_ext="$avail_ext $xxx" ;;
12662                 esac
12663                 ;;
12664         GDBM_File|gdbm_fil)
12665                 case "$i_gdbm" in 
12666                 $define) avail_ext="$avail_ext $xxx" ;;
12667                 esac
12668                 ;;
12669         NDBM_File|ndbm_fil)
12670                 case "$i_ndbm" in
12671                 $define) avail_ext="$avail_ext $xxx" ;;
12672                 esac
12673                 ;;
12674         ODBM_File|odbm_fil) 
12675                 case "${i_dbm}${i_rpcsvcdbm}" in
12676                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12677                 esac
12678                 ;;
12679         POSIX|posix)
12680                 case "$useposix" in
12681                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12682                 esac
12683                 ;;
12684         Opcode|opcode)
12685                 case "$useopcode" in
12686                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12687                 esac
12688                 ;;
12689         Socket|socket)
12690                 case "$d_socket" in 
12691                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12692                 esac
12693                 ;;
12694         Thread|thread)
12695                 case "$usethreads" in 
12696                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12697                 esac
12698                 ;;
12699         IPC/SysV|ipc/sysv)
12700                 : XXX Do we need a useipcsysv variable here
12701                 case "${d_msg}${d_sem}${d_shm}" in 
12702                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12703                 esac
12704                 ;;
12705         *)      avail_ext="$avail_ext $xxx"
12706                 ;;
12707         esac
12708 done
12709
12710 set X $avail_ext
12711 shift
12712 avail_ext="$*"
12713
12714 : Now see which nonxs extensions are supported on this system.
12715 : For now assume all are.
12716 nonxs_ext=''
12717 for xxx in $nonxs_extensions ; do
12718         case "$xxx" in
12719         *)      nonxs_ext="$nonxs_ext $xxx"
12720                 ;;
12721         esac
12722 done
12723
12724 set X $nonxs_ext
12725 shift
12726 nonxs_ext="$*"
12727
12728 case $usedl in
12729 $define)
12730         $cat <<EOM
12731 A number of extensions are supplied with $package.  You may choose to
12732 compile these extensions for dynamic loading (the default), compile
12733 them into the $package executable (static loading), or not include
12734 them at all.  Answer "none" to include no extensions.
12735 Note that DynaLoader is always built and need not be mentioned here.
12736
12737 EOM
12738         case "$dynamic_ext" in
12739         '') dflt="$avail_ext" ;;
12740         *)      dflt="$dynamic_ext"
12741                 # Perhaps we are reusing an old out-of-date config.sh.
12742                 case "$hint" in
12743                 previous)
12744                         if test X"$dynamic_ext" != X"$avail_ext"; then
12745                                 $cat <<EOM
12746 NOTICE:  Your previous config.sh list may be incorrect. 
12747 The extensions now available to you are 
12748         ${avail_ext}
12749 but the default list from your previous config.sh is
12750         ${dynamic_ext} 
12751
12752 EOM
12753                         fi
12754                         ;;
12755                 esac
12756                 ;;
12757         esac
12758         case "$dflt" in
12759         '')     dflt=none;;
12760         esac
12761         rp="What extensions do you wish to load dynamically?"
12762         . ./myread
12763         case "$ans" in
12764         none) dynamic_ext=' ' ;;
12765         *) dynamic_ext="$ans" ;;
12766         esac
12767
12768         case "$static_ext" in
12769         '')
12770                 : Exclude those already listed in dynamic linking
12771                 dflt=''
12772                 for xxx in $avail_ext; do
12773                         case " $dynamic_ext " in
12774                         *" $xxx "*) ;;
12775                         *) dflt="$dflt $xxx" ;;
12776                         esac
12777                 done
12778                 set X $dflt
12779                 shift
12780                 dflt="$*"
12781                 ;;
12782         *)  dflt="$static_ext" 
12783                 ;;
12784         esac
12785
12786         case "$dflt" in
12787         '')     dflt=none;;
12788         esac
12789         rp="What extensions do you wish to load statically?"
12790         . ./myread
12791         case "$ans" in
12792         none) static_ext=' ' ;;
12793         *) static_ext="$ans" ;;
12794         esac
12795         ;;
12796 *)
12797         $cat <<EOM
12798 A number of extensions are supplied with $package.  Answer "none" 
12799 to include no extensions. 
12800 Note that DynaLoader is always built and need not be mentioned here.
12801
12802 EOM
12803         case "$static_ext" in
12804         '') dflt="$avail_ext" ;;
12805         *)      dflt="$static_ext"
12806                 # Perhaps we are reusing an old out-of-date config.sh.
12807                 case "$hint" in
12808                 previous)
12809                         if test X"$static_ext" != X"$avail_ext"; then
12810                                 $cat <<EOM
12811 NOTICE:  Your previous config.sh list may be incorrect. 
12812 The extensions now available to you are 
12813         ${avail_ext}
12814 but the default list from your previous config.sh is
12815         ${static_ext} 
12816
12817 EOM
12818                         fi
12819                         ;;
12820                 esac
12821                 ;;
12822         esac
12823         : Exclude those that are not xs extensions
12824         case "$dflt" in
12825         '')     dflt=none;;
12826         esac
12827         rp="What extensions do you wish to include?"
12828         . ./myread
12829         case "$ans" in
12830         none) static_ext=' ' ;;
12831         *) static_ext="$ans" ;;
12832         esac
12833         ;;
12834 esac
12835
12836 set X $dynamic_ext $static_ext $nonxs_ext
12837 shift
12838 extensions="$*"
12839
12840 : Remove build directory name from cppstdin so it can be used from
12841 : either the present location or the final installed location.
12842 echo " "
12843 : Get out of the UU directory to get correct path name.
12844 cd ..
12845 case "$cppstdin" in
12846 `pwd`/cppstdin)
12847         echo "Stripping down cppstdin path name"
12848         cppstdin=cppstdin
12849         ;;
12850 esac
12851 cd UU
12852
12853 : end of configuration questions
12854 echo " "
12855 echo "End of configuration questions."
12856 echo " "
12857
12858 : back to where it started
12859 if test -d ../UU; then
12860         cd ..
12861 fi
12862
12863 : configuration may be patched via a 'config.over' file
12864 if $test -f config.over; then
12865         echo " "
12866         dflt=y
12867         rp='I see a config.over file.  Do you wish to load it?'
12868         . UU/myread
12869         case "$ans" in
12870         n*) echo "OK, I'll ignore it.";;
12871         *)      . ./config.over
12872                 echo "Configuration override changes have been loaded."
12873                 ;;
12874         esac
12875 fi
12876
12877 : in case they want portability, strip down executable paths
12878 case "$d_portable" in
12879 "$define")
12880         echo " "
12881         echo "Stripping down executable paths..." >&4
12882         for file in $loclist $trylist; do
12883                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12884                         eval $file="\$file"
12885                 fi
12886         done
12887         ;;
12888 esac
12889
12890 : create config.sh file
12891 echo " "
12892 echo "Creating config.sh..." >&4
12893 $spitshell <<EOT >config.sh
12894 $startsh
12895 #
12896 # This file was produced by running the Configure script. It holds all the
12897 # definitions figured out by Configure. Should you modify one of these values,
12898 # do not forget to propagate your changes by running "Configure -der". You may
12899 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12900 #
12901
12902 # Package name      : $package
12903 # Source directory  : $src
12904 # Configuration time: $cf_time
12905 # Configured by     : $cf_by
12906 # Target system     : $myuname
12907
12908 Author='$Author'
12909 Date='$Date'
12910 Header='$Header'
12911 Id='$Id'
12912 Locker='$Locker'
12913 Log='$Log'
12914 Mcc='$Mcc'
12915 RCSfile='$RCSfile'
12916 Revision='$Revision'
12917 Source='$Source'
12918 State='$State'
12919 _a='$_a'
12920 _exe='$_exe'
12921 _o='$_o'
12922 afs='$afs'
12923 alignbytes='$alignbytes'
12924 ansi2knr='$ansi2knr'
12925 aphostname='$aphostname'
12926 apiversion='$apiversion'
12927 ar='$ar'
12928 archlib='$archlib'
12929 archlibexp='$archlibexp'
12930 archname64='$archname64'
12931 archname='$archname'
12932 archobjs='$archobjs'
12933 awk='$awk'
12934 baserev='$baserev'
12935 bash='$bash'
12936 bin='$bin'
12937 binexp='$binexp'
12938 bison='$bison'
12939 byacc='$byacc'
12940 byteorder='$byteorder'
12941 c='$c'
12942 castflags='$castflags'
12943 cat='$cat'
12944 cc='$cc'
12945 cccdlflags='$cccdlflags'
12946 ccdlflags='$ccdlflags'
12947 ccflags='$ccflags'
12948 ccsymbols='$ccsymbols'
12949 cf_by='$cf_by'
12950 cf_email='$cf_email'
12951 cf_time='$cf_time'
12952 chgrp='$chgrp'
12953 chmod='$chmod'
12954 chown='$chown'
12955 clocktype='$clocktype'
12956 comm='$comm'
12957 compress='$compress'
12958 contains='$contains'
12959 cp='$cp'
12960 cpio='$cpio'
12961 cpp='$cpp'
12962 cpp_stuff='$cpp_stuff'
12963 cppccsymbols='$cppccsymbols'
12964 cppflags='$cppflags'
12965 cpplast='$cpplast'
12966 cppminus='$cppminus'
12967 cpprun='$cpprun'
12968 cppstdin='$cppstdin'
12969 cppsymbols='$cppsymbols'
12970 crosscompile='$crosscompile'
12971 cryptlib='$cryptlib'
12972 csh='$csh'
12973 d_Gconvert='$d_Gconvert'
12974 d_access='$d_access'
12975 d_accessx='$d_accessx'
12976 d_alarm='$d_alarm'
12977 d_archlib='$d_archlib'
12978 d_attribut='$d_attribut'
12979 d_bcmp='$d_bcmp'
12980 d_bcopy='$d_bcopy'
12981 d_bsd='$d_bsd'
12982 d_bsdgetpgrp='$d_bsdgetpgrp'
12983 d_bsdsetpgrp='$d_bsdsetpgrp'
12984 d_bzero='$d_bzero'
12985 d_casti32='$d_casti32'
12986 d_castneg='$d_castneg'
12987 d_charvspr='$d_charvspr'
12988 d_chown='$d_chown'
12989 d_chroot='$d_chroot'
12990 d_chsize='$d_chsize'
12991 d_closedir='$d_closedir'
12992 d_cmsghdr_s='$d_cmsghdr_s'
12993 d_const='$d_const'
12994 d_crypt='$d_crypt'
12995 d_csh='$d_csh'
12996 d_cuserid='$d_cuserid'
12997 d_dbl_dig='$d_dbl_dig'
12998 d_dbmclose64='$d_dbmclose64'
12999 d_dbminit64='$d_dbminit64'
13000 d_delete64='$d_delete64'
13001 d_difftime='$d_difftime'
13002 d_dirent64_s='$d_dirent64_s'
13003 d_dirnamlen='$d_dirnamlen'
13004 d_dlerror='$d_dlerror'
13005 d_dlopen='$d_dlopen'
13006 d_dlsymun='$d_dlsymun'
13007 d_dosuid='$d_dosuid'
13008 d_drand48proto='$d_drand48proto'
13009 d_dup2='$d_dup2'
13010 d_eaccess='$d_eaccess'
13011 d_endgrent='$d_endgrent'
13012 d_endhent='$d_endhent'
13013 d_endnent='$d_endnent'
13014 d_endpent='$d_endpent'
13015 d_endpwent='$d_endpwent'
13016 d_endsent='$d_endsent'
13017 d_endspent='$d_endspent'
13018 d_eofnblk='$d_eofnblk'
13019 d_eunice='$d_eunice'
13020 d_fchmod='$d_fchmod'
13021 d_fchown='$d_fchown'
13022 d_fcntl='$d_fcntl'
13023 d_fd_macros='$d_fd_macros'
13024 d_fd_set='$d_fd_set'
13025 d_fds_bits='$d_fds_bits'
13026 d_fetch64='$d_fetch64'
13027 d_fgetpos64='$d_fgetpos64'
13028 d_fgetpos='$d_fgetpos'
13029 d_firstkey64='$d_firstkey64'
13030 d_flexfnam='$d_flexfnam'
13031 d_flock64_s='$d_flock64_s'
13032 d_flock='$d_flock'
13033 d_fopen64='$d_fopen64'
13034 d_fork='$d_fork'
13035 d_fpathconf='$d_fpathconf'
13036 d_freopen64='$d_freopen64'
13037 d_fseek64='$d_fseek64'
13038 d_fseeko64='$d_fseeko64'
13039 d_fseeko='$d_fseeko'
13040 d_fsetpos64='$d_fsetpos64'
13041 d_fsetpos='$d_fsetpos'
13042 d_fstat64='$d_fstat64'
13043 d_fstatfs='$d_fstatfs'
13044 d_fstatvfs='$d_fstatvfs'
13045 d_ftell64='$d_ftell64'
13046 d_ftello64='$d_ftello64'
13047 d_ftello='$d_ftello'
13048 d_ftime='$d_ftime'
13049 d_ftruncate64='$d_ftruncate64'
13050 d_getgrent='$d_getgrent'
13051 d_getgrps='$d_getgrps'
13052 d_gethbyaddr='$d_gethbyaddr'
13053 d_gethbyname='$d_gethbyname'
13054 d_gethent='$d_gethent'
13055 d_gethname='$d_gethname'
13056 d_gethostprotos='$d_gethostprotos'
13057 d_getlogin='$d_getlogin'
13058 d_getmntent='$d_getmntent'
13059 d_getnbyaddr='$d_getnbyaddr'
13060 d_getnbyname='$d_getnbyname'
13061 d_getnent='$d_getnent'
13062 d_getnetprotos='$d_getnetprotos'
13063 d_getpbyname='$d_getpbyname'
13064 d_getpbynumber='$d_getpbynumber'
13065 d_getpent='$d_getpent'
13066 d_getpgid='$d_getpgid'
13067 d_getpgrp2='$d_getpgrp2'
13068 d_getpgrp='$d_getpgrp'
13069 d_getppid='$d_getppid'
13070 d_getprior='$d_getprior'
13071 d_getprotoprotos='$d_getprotoprotos'
13072 d_getpwent='$d_getpwent'
13073 d_getsbyname='$d_getsbyname'
13074 d_getsbyport='$d_getsbyport'
13075 d_getsent='$d_getsent'
13076 d_getservprotos='$d_getservprotos'
13077 d_getspent='$d_getspent'
13078 d_getspnam='$d_getspnam'
13079 d_gettimeod='$d_gettimeod'
13080 d_gnulibc='$d_gnulibc'
13081 d_grpasswd='$d_grpasswd'
13082 d_hasmntopt='$d_hasmntopt'
13083 d_htonl='$d_htonl'
13084 d_index='$d_index'
13085 d_inetaton='$d_inetaton'
13086 d_ino64_t='$d_ino64_t'
13087 d_int64t='$d_int64t'
13088 d_iovec_s='$d_iovec_s'
13089 d_isascii='$d_isascii'
13090 d_killpg='$d_killpg'
13091 d_lchown='$d_lchown'
13092 d_link='$d_link'
13093 d_llseek='$d_llseek'
13094 d_locconv='$d_locconv'
13095 d_lockf64='$d_lockf64'
13096 d_lockf='$d_lockf'
13097 d_longdbl='$d_longdbl'
13098 d_longlong='$d_longlong'
13099 d_lseek64='$d_lseek64'
13100 d_lstat64='$d_lstat64'
13101 d_lstat='$d_lstat'
13102 d_madvise='$d_madvise'
13103 d_mblen='$d_mblen'
13104 d_mbstowcs='$d_mbstowcs'
13105 d_mbtowc='$d_mbtowc'
13106 d_memchr='$d_memchr'
13107 d_memcmp='$d_memcmp'
13108 d_memcpy='$d_memcpy'
13109 d_memmove='$d_memmove'
13110 d_memset='$d_memset'
13111 d_mkdir='$d_mkdir'
13112 d_mkfifo='$d_mkfifo'
13113 d_mktime='$d_mktime'
13114 d_mmap='$d_mmap'
13115 d_mprotect='$d_mprotect'
13116 d_msg='$d_msg'
13117 d_msg_ctrunc='$d_msg_ctrunc'
13118 d_msg_dontroute='$d_msg_dontroute'
13119 d_msg_oob='$d_msg_oob'
13120 d_msg_peek='$d_msg_peek'
13121 d_msg_proxy='$d_msg_proxy'
13122 d_msgctl='$d_msgctl'
13123 d_msgget='$d_msgget'
13124 d_msghdr_s='$d_msghdr_s'
13125 d_msgrcv='$d_msgrcv'
13126 d_msgsnd='$d_msgsnd'
13127 d_msync='$d_msync'
13128 d_munmap='$d_munmap'
13129 d_mymalloc='$d_mymalloc'
13130 d_nextkey64='$d_nextkey64'
13131 d_nice='$d_nice'
13132 d_off64_t='$d_off64_t'
13133 d_offset_t='$d_offset_t'
13134 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13135 d_oldpthreads='$d_oldpthreads'
13136 d_oldsock='$d_oldsock'
13137 d_open3='$d_open3'
13138 d_open64='$d_open64'
13139 d_opendir64='$d_opendir64'
13140 d_pathconf='$d_pathconf'
13141 d_pause='$d_pause'
13142 d_phostname='$d_phostname'
13143 d_pipe='$d_pipe'
13144 d_poll='$d_poll'
13145 d_portable='$d_portable'
13146 d_pthread_yield='$d_pthread_yield'
13147 d_pwage='$d_pwage'
13148 d_pwchange='$d_pwchange'
13149 d_pwclass='$d_pwclass'
13150 d_pwcomment='$d_pwcomment'
13151 d_pwexpire='$d_pwexpire'
13152 d_pwgecos='$d_pwgecos'
13153 d_pwpasswd='$d_pwpasswd'
13154 d_pwquota='$d_pwquota'
13155 d_readdir64='$d_readdir64'
13156 d_readdir='$d_readdir'
13157 d_readlink='$d_readlink'
13158 d_readv='$d_readv'
13159 d_recvmsg='$d_recvmsg'
13160 d_rename='$d_rename'
13161 d_rewinddir='$d_rewinddir'
13162 d_rmdir='$d_rmdir'
13163 d_safebcpy='$d_safebcpy'
13164 d_safemcpy='$d_safemcpy'
13165 d_sanemcmp='$d_sanemcmp'
13166 d_sched_yield='$d_sched_yield'
13167 d_scm_rights='$d_scm_rights'
13168 d_seekdir64='$d_seekdir64'
13169 d_seekdir='$d_seekdir'
13170 d_select='$d_select'
13171 d_sem='$d_sem'
13172 d_semctl='$d_semctl'
13173 d_semctl_semid_ds='$d_semctl_semid_ds'
13174 d_semctl_semun='$d_semctl_semun'
13175 d_semget='$d_semget'
13176 d_semop='$d_semop'
13177 d_sendmsg='$d_sendmsg'
13178 d_setegid='$d_setegid'
13179 d_seteuid='$d_seteuid'
13180 d_setgrent='$d_setgrent'
13181 d_setgrps='$d_setgrps'
13182 d_sethent='$d_sethent'
13183 d_setlinebuf='$d_setlinebuf'
13184 d_setlocale='$d_setlocale'
13185 d_setnent='$d_setnent'
13186 d_setpent='$d_setpent'
13187 d_setpgid='$d_setpgid'
13188 d_setpgrp2='$d_setpgrp2'
13189 d_setpgrp='$d_setpgrp'
13190 d_setprior='$d_setprior'
13191 d_setpwent='$d_setpwent'
13192 d_setregid='$d_setregid'
13193 d_setresgid='$d_setresgid'
13194 d_setresuid='$d_setresuid'
13195 d_setreuid='$d_setreuid'
13196 d_setrgid='$d_setrgid'
13197 d_setruid='$d_setruid'
13198 d_setsent='$d_setsent'
13199 d_setsid='$d_setsid'
13200 d_setspent='$d_setspent'
13201 d_setvbuf='$d_setvbuf'
13202 d_sfio='$d_sfio'
13203 d_shm='$d_shm'
13204 d_shmat='$d_shmat'
13205 d_shmatprototype='$d_shmatprototype'
13206 d_shmctl='$d_shmctl'
13207 d_shmdt='$d_shmdt'
13208 d_shmget='$d_shmget'
13209 d_sigaction='$d_sigaction'
13210 d_sigsetjmp='$d_sigsetjmp'
13211 d_socket='$d_socket'
13212 d_sockpair='$d_sockpair'
13213 d_stat64='$d_stat64'
13214 d_statblks='$d_statblks'
13215 d_statfs='$d_statfs'
13216 d_statfsflags='$d_statfsflags'
13217 d_statvfs='$d_statvfs'
13218 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13219 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13220 d_stdio_stream_array='$d_stdio_stream_array'
13221 d_stdiobase='$d_stdiobase'
13222 d_stdstdio='$d_stdstdio'
13223 d_store64='$d_store64'
13224 d_strchr='$d_strchr'
13225 d_strcoll='$d_strcoll'
13226 d_strctcpy='$d_strctcpy'
13227 d_strerrm='$d_strerrm'
13228 d_strerror='$d_strerror'
13229 d_strtod='$d_strtod'
13230 d_strtol='$d_strtol'
13231 d_strtoul='$d_strtoul'
13232 d_strxfrm='$d_strxfrm'
13233 d_suidsafe='$d_suidsafe'
13234 d_symlink='$d_symlink'
13235 d_syscall='$d_syscall'
13236 d_sysconf='$d_sysconf'
13237 d_sysernlst='$d_sysernlst'
13238 d_syserrlst='$d_syserrlst'
13239 d_system='$d_system'
13240 d_tcgetpgrp='$d_tcgetpgrp'
13241 d_tcsetpgrp='$d_tcsetpgrp'
13242 d_telldir64='$d_telldir64'
13243 d_telldir='$d_telldir'
13244 d_telldirproto='$d_telldirproto'
13245 d_time='$d_time'
13246 d_times='$d_times'
13247 d_tmpfile64='$d_tmpfile64'
13248 d_truncate64='$d_truncate64'
13249 d_truncate='$d_truncate'
13250 d_tzname='$d_tzname'
13251 d_umask='$d_umask'
13252 d_uname='$d_uname'
13253 d_union_semun='$d_union_semun'
13254 d_vfork='$d_vfork'
13255 d_void_closedir='$d_void_closedir'
13256 d_voidsig='$d_voidsig'
13257 d_voidtty='$d_voidtty'
13258 d_volatile='$d_volatile'
13259 d_vprintf='$d_vprintf'
13260 d_wait4='$d_wait4'
13261 d_waitpid='$d_waitpid'
13262 d_wcstombs='$d_wcstombs'
13263 d_wctomb='$d_wctomb'
13264 d_writev='$d_writev'
13265 d_xenix='$d_xenix'
13266 date='$date'
13267 db_hashtype='$db_hashtype'
13268 db_prefixtype='$db_prefixtype'
13269 defvoidused='$defvoidused'
13270 direntrytype='$direntrytype'
13271 dlext='$dlext'
13272 dlsrc='$dlsrc'
13273 doublesize='$doublesize'
13274 drand01='$drand01'
13275 dynamic_ext='$dynamic_ext'
13276 eagain='$eagain'
13277 ebcdic='$ebcdic'
13278 echo='$echo'
13279 egrep='$egrep'
13280 emacs='$emacs'
13281 eunicefix='$eunicefix'
13282 exe_ext='$exe_ext'
13283 expr='$expr'
13284 extensions='$extensions'
13285 fflushNULL='$fflushNULL'
13286 fflushall='$fflushall'
13287 find='$find'
13288 firstmakefile='$firstmakefile'
13289 flex='$flex'
13290 fpostype='$fpostype'
13291 freetype='$freetype'
13292 full_ar='$full_ar'
13293 full_csh='$full_csh'
13294 full_sed='$full_sed'
13295 gccversion='$gccversion'
13296 gidtype='$gidtype'
13297 glibpth='$glibpth'
13298 grep='$grep'
13299 groupcat='$groupcat'
13300 groupstype='$groupstype'
13301 gzip='$gzip'
13302 h_fcntl='$h_fcntl'
13303 h_sysfile='$h_sysfile'
13304 hint='$hint'
13305 hostcat='$hostcat'
13306 huge='$huge'
13307 i_arpainet='$i_arpainet'
13308 i_bsdioctl='$i_bsdioctl'
13309 i_db='$i_db'
13310 i_dbm='$i_dbm'
13311 i_dirent='$i_dirent'
13312 i_dld='$i_dld'
13313 i_dlfcn='$i_dlfcn'
13314 i_fcntl='$i_fcntl'
13315 i_float='$i_float'
13316 i_gdbm='$i_gdbm'
13317 i_grp='$i_grp'
13318 i_inttypes='$i_inttypes'
13319 i_limits='$i_limits'
13320 i_locale='$i_locale'
13321 i_machcthr='$i_machcthr'
13322 i_malloc='$i_malloc'
13323 i_math='$i_math'
13324 i_memory='$i_memory'
13325 i_mntent='$i_mntent'
13326 i_ndbm='$i_ndbm'
13327 i_netdb='$i_netdb'
13328 i_neterrno='$i_neterrno'
13329 i_netinettcp='$i_netinettcp'
13330 i_niin='$i_niin'
13331 i_poll='$i_poll'
13332 i_pthread='$i_pthread'
13333 i_pwd='$i_pwd'
13334 i_rpcsvcdbm='$i_rpcsvcdbm'
13335 i_sfio='$i_sfio'
13336 i_sgtty='$i_sgtty'
13337 i_shadow='$i_shadow'
13338 i_socks='$i_socks'
13339 i_stdarg='$i_stdarg'
13340 i_stddef='$i_stddef'
13341 i_stdlib='$i_stdlib'
13342 i_string='$i_string'
13343 i_sysaccess='$i_sysaccess'
13344 i_sysdir='$i_sysdir'
13345 i_sysfile='$i_sysfile'
13346 i_sysfilio='$i_sysfilio'
13347 i_sysin='$i_sysin'
13348 i_sysioctl='$i_sysioctl'
13349 i_sysmman='$i_sysmman'
13350 i_sysmount='$i_sysmount'
13351 i_sysndir='$i_sysndir'
13352 i_sysparam='$i_sysparam'
13353 i_sysresrc='$i_sysresrc'
13354 i_syssecrt='$i_syssecrt'
13355 i_sysselct='$i_sysselct'
13356 i_syssockio='$i_syssockio'
13357 i_sysstat='$i_sysstat'
13358 i_sysstatvfs='$i_sysstatvfs'
13359 i_systime='$i_systime'
13360 i_systimek='$i_systimek'
13361 i_systimes='$i_systimes'
13362 i_systypes='$i_systypes'
13363 i_sysuio='$i_sysuio'
13364 i_sysun='$i_sysun'
13365 i_syswait='$i_syswait'
13366 i_termio='$i_termio'
13367 i_termios='$i_termios'
13368 i_time='$i_time'
13369 i_unistd='$i_unistd'
13370 i_utime='$i_utime'
13371 i_values='$i_values'
13372 i_varargs='$i_varargs'
13373 i_varhdr='$i_varhdr'
13374 i_vfork='$i_vfork'
13375 ignore_versioned_solibs='$ignore_versioned_solibs'
13376 incpath='$incpath'
13377 inews='$inews'
13378 installarchlib='$installarchlib'
13379 installbin='$installbin'
13380 installman1dir='$installman1dir'
13381 installman3dir='$installman3dir'
13382 installprivlib='$installprivlib'
13383 installscript='$installscript'
13384 installsitearch='$installsitearch'
13385 installsitelib='$installsitelib'
13386 installusrbinperl='$installusrbinperl'
13387 intsize='$intsize'
13388 known_extensions='$known_extensions'
13389 ksh='$ksh'
13390 large='$large'
13391 ld='$ld'
13392 lddlflags='$lddlflags'
13393 ldflags='$ldflags'
13394 less='$less'
13395 lib_ext='$lib_ext'
13396 libc='$libc'
13397 libperl='$libperl'
13398 libpth='$libpth'
13399 libs='$libs'
13400 libswanted='$libswanted'
13401 line='$line'
13402 lint='$lint'
13403 lkflags='$lkflags'
13404 ln='$ln'
13405 lns='$lns'
13406 locincpth='$locincpth'
13407 loclibpth='$loclibpth'
13408 longdblsize='$longdblsize'
13409 longlongsize='$longlongsize'
13410 longsize='$longsize'
13411 lp='$lp'
13412 lpr='$lpr'
13413 ls='$ls'
13414 lseeksize='$lseeksize'
13415 lseektype='$lseektype'
13416 mail='$mail'
13417 mailx='$mailx'
13418 make='$make'
13419 make_set_make='$make_set_make'
13420 mallocobj='$mallocobj'
13421 mallocsrc='$mallocsrc'
13422 malloctype='$malloctype'
13423 man1dir='$man1dir'
13424 man1direxp='$man1direxp'
13425 man1ext='$man1ext'
13426 man3dir='$man3dir'
13427 man3direxp='$man3direxp'
13428 man3ext='$man3ext'
13429 medium='$medium'
13430 mips='$mips'
13431 mips_type='$mips_type'
13432 mkdir='$mkdir'
13433 mmaptype='$mmaptype'
13434 models='$models'
13435 modetype='$modetype'
13436 more='$more'
13437 multiarch='$multiarch'
13438 mv='$mv'
13439 myarchname='$myarchname'
13440 mydomain='$mydomain'
13441 myhostname='$myhostname'
13442 myuname='$myuname'
13443 n='$n'
13444 netdb_hlen_type='$netdb_hlen_type'
13445 netdb_host_type='$netdb_host_type'
13446 netdb_name_type='$netdb_name_type'
13447 netdb_net_type='$netdb_net_type'
13448 nm='$nm'
13449 nm_opt='$nm_opt'
13450 nm_so_opt='$nm_so_opt'
13451 nonxs_ext='$nonxs_ext'
13452 nroff='$nroff'
13453 o_nonblock='$o_nonblock'
13454 obj_ext='$obj_ext'
13455 old_pthread_create_joinable='$old_pthread_create_joinable'
13456 optimize='$optimize'
13457 orderlib='$orderlib'
13458 osname='$osname'
13459 osvers='$osvers'
13460 package='$package'
13461 pager='$pager'
13462 passcat='$passcat'
13463 patchlevel='$patchlevel'
13464 path_sep='$path_sep'
13465 perl='$perl'
13466 perladmin='$perladmin'
13467 perlpath='$perlpath'
13468 pg='$pg'
13469 phostname='$phostname'
13470 pidtype='$pidtype'
13471 plibpth='$plibpth'
13472 pmake='$pmake'
13473 pr='$pr'
13474 prefix='$prefix'
13475 prefixexp='$prefixexp'
13476 privlib='$privlib'
13477 privlibexp='$privlibexp'
13478 prototype='$prototype'
13479 ptrsize='$ptrsize'
13480 randbits='$randbits'
13481 randfunc='$randfunc'
13482 randseedtype='$randseedtype'
13483 ranlib='$ranlib'
13484 rd_nodata='$rd_nodata'
13485 rm='$rm'
13486 rmail='$rmail'
13487 runnm='$runnm'
13488 sched_yield='$sched_yield'
13489 scriptdir='$scriptdir'
13490 scriptdirexp='$scriptdirexp'
13491 sed='$sed'
13492 seedfunc='$seedfunc'
13493 selectminbits='$selectminbits'
13494 selecttype='$selecttype'
13495 sendmail='$sendmail'
13496 sh='$sh'
13497 shar='$shar'
13498 sharpbang='$sharpbang'
13499 shmattype='$shmattype'
13500 shortsize='$shortsize'
13501 shrpenv='$shrpenv'
13502 shsharp='$shsharp'
13503 sig_count='$sig_count'
13504 sig_name='$sig_name'
13505 sig_name_init='$sig_name_init'
13506 sig_num='$sig_num'
13507 sig_num_init='$sig_num_init'
13508 signal_t='$signal_t'
13509 sitearch='$sitearch'
13510 sitearchexp='$sitearchexp'
13511 sitelib='$sitelib'
13512 sitelibexp='$sitelibexp'
13513 sizetype='$sizetype'
13514 sleep='$sleep'
13515 smail='$smail'
13516 small='$small'
13517 so='$so'
13518 sockethdr='$sockethdr'
13519 socketlib='$socketlib'
13520 sort='$sort'
13521 spackage='$spackage'
13522 spitshell='$spitshell'
13523 split='$split'
13524 src='$src'
13525 ssizetype='$ssizetype'
13526 startperl='$startperl'
13527 startsh='$startsh'
13528 static_ext='$static_ext'
13529 stdchar='$stdchar'
13530 stdio_base='$stdio_base'
13531 stdio_bufsiz='$stdio_bufsiz'
13532 stdio_cnt='$stdio_cnt'
13533 stdio_filbuf='$stdio_filbuf'
13534 stdio_ptr='$stdio_ptr'
13535 stdio_stream_array='$stdio_stream_array'
13536 strings='$strings'
13537 submit='$submit'
13538 subversion='$subversion'
13539 sysman='$sysman'
13540 tail='$tail'
13541 tar='$tar'
13542 tbl='$tbl'
13543 tee='$tee'
13544 test='$test'
13545 timeincl='$timeincl'
13546 timetype='$timetype'
13547 touch='$touch'
13548 tr='$tr'
13549 trnl='$trnl'
13550 troff='$troff'
13551 uidtype='$uidtype'
13552 uname='$uname'
13553 uniq='$uniq'
13554 use64bits='$use64bits'
13555 usedl='$usedl'
13556 usemultiplicity='$usemultiplicity'
13557 usemymalloc='$usemymalloc'
13558 usenm='$usenm'
13559 useopcode='$useopcode'
13560 useperlio='$useperlio'
13561 useposix='$useposix'
13562 usesfio='$usesfio'
13563 useshrplib='$useshrplib'
13564 usethreads='$usethreads'
13565 usevfork='$usevfork'
13566 usrinc='$usrinc'
13567 uuname='$uuname'
13568 version='$version'
13569 vi='$vi'
13570 voidflags='$voidflags'
13571 xlibpth='$xlibpth'
13572 zcat='$zcat'
13573 zip='$zip'
13574 EOT
13575
13576 : Add in command line options if available
13577 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13578
13579 : add special variables
13580 $test -f $src/patchlevel.h && \
13581 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13582 echo "CONFIGDOTSH=true" >>config.sh
13583
13584 : propagate old symbols
13585 if $test -f UU/config.sh; then
13586         <UU/config.sh sort | uniq >UU/oldconfig.sh
13587         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13588         sort | uniq -u >UU/oldsyms
13589         set X `cat UU/oldsyms`
13590         shift
13591         case $# in
13592         0) ;;
13593         *)
13594                 cat <<EOM
13595 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13596 EOM
13597                 echo "# Variables propagated from previous config.sh file." >>config.sh
13598                 for sym in `cat UU/oldsyms`; do
13599                         echo "    Propagating $hint variable "'$'"$sym..."
13600                         eval 'tmp="$'"${sym}"'"'
13601                         echo "$tmp" | \
13602                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13603                 done
13604                 ;;
13605         esac
13606 fi
13607
13608 : Finish up by extracting the .SH files
13609 case "$alldone" in
13610 exit)
13611         $rm -rf UU
13612         echo "Done."
13613         exit 0
13614         ;;
13615 cont)
13616         ;;
13617 '')
13618         dflt=''
13619         nostick=true
13620         $cat <<EOM
13621
13622 If you'd like to make any changes to the config.sh file before I begin
13623 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13624
13625 EOM
13626         rp="Press return or use a shell escape to edit config.sh:"
13627         . UU/myread
13628         nostick=''
13629         case "$ans" in
13630         '') ;;
13631         *) : in case they cannot read
13632                 sh 1>&4 -c "$ans";;
13633         esac
13634         ;;
13635 esac
13636
13637 : if this fails, just run all the .SH files by hand
13638 . ./config.sh
13639
13640 echo " "
13641 exec 1>&4
13642 . ./UU/extract
13643
13644 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13645         dflt=y
13646         case "$silent" in
13647         true) ;;
13648         *)
13649                 $cat <<EOM
13650
13651 Now you need to generate make dependencies by running "$make depend".
13652 You might prefer to run it in background: "$make depend > makedepend.out &"
13653 It can take a while, so you might not want to run it right now.
13654
13655 EOM
13656                 ;;
13657         esac
13658         rp="Run $make depend now?"
13659         . UU/myread
13660         case "$ans" in
13661         y*)
13662                 $make depend && echo "Now you must run a $make."
13663                 ;;
13664         *)
13665                 echo "You must run '$make depend' then '$make'."
13666                 ;;
13667         esac
13668 elif test -f [Mm]akefile; then
13669         echo " "
13670         echo "Now you must run a $make."
13671 else
13672         echo "Done."
13673 fi
13674
13675 if $test -f Policy.sh; then
13676     $cat <<EOM
13677
13678 If you compile $package on a different machine or from a different object
13679 directory, copy the Policy.sh file from this object directory to the
13680 new one before you run Configure -- this will help you with most of
13681 the policy defaults.
13682
13683 EOM
13684 fi
13685 if $test -f config.msg; then
13686     echo "Hmm.  I also noted the following information while running:"
13687     echo " "
13688     $cat config.msg >&4
13689     $rm -f config.msg
13690 fi
13691 $rm -f kit*isdone ark*isdone
13692 $rm -rf UU
13693
13694 : End of Configure
13695