Re: [PATCH 5.005_57] pp_sort sorted out
[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 Sun May 30 15:51:19 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_stddef=''
632 i_stdlib=''
633 i_string=''
634 strings=''
635 i_sysaccess=''
636 i_sysdir=''
637 i_sysfile=''
638 d_voidtty=''
639 i_bsdioctl=''
640 i_sysfilio=''
641 i_sysioctl=''
642 i_syssockio=''
643 i_sysmman=''
644 i_sysmount=''
645 i_sysndir=''
646 i_sysparam=''
647 i_sysresrc=''
648 i_syssecrt=''
649 i_sysselct=''
650 i_sysstat=''
651 i_sysstatvfs=''
652 i_systimes=''
653 i_systypes=''
654 d_iovec_s=''
655 i_sysuio=''
656 i_sysun=''
657 i_syswait=''
658 i_sgtty=''
659 i_termio=''
660 i_termios=''
661 i_systime=''
662 i_systimek=''
663 i_time=''
664 timeincl=''
665 i_unistd=''
666 i_utime=''
667 i_values=''
668 i_stdarg=''
669 i_varargs=''
670 i_varhdr=''
671 i_vfork=''
672 installusrbinperl=''
673 intsize=''
674 longsize=''
675 shortsize=''
676 d_dirent64_s=''
677 d_flock64_s=''
678 d_fstat64=''
679 d_ftruncate64=''
680 d_ino64_t=''
681 d_llseek=''
682 d_lockf64=''
683 d_lseek64=''
684 d_lstat64=''
685 d_off64_t=''
686 d_offset_t=''
687 d_open64=''
688 d_opendir64=''
689 d_readdir64=''
690 d_seekdir64=''
691 d_stat64=''
692 d_telldir64=''
693 d_truncate64=''
694 libc=''
695 libperl=''
696 shrpenv=''
697 useshrplib=''
698 glibpth=''
699 libpth=''
700 loclibpth=''
701 plibpth=''
702 xlibpth=''
703 ignore_versioned_solibs=''
704 libs=''
705 lns=''
706 lseeksize=''
707 lseektype=''
708 make_set_make=''
709 d_mymalloc=''
710 freetype=''
711 mallocobj=''
712 mallocsrc=''
713 malloctype=''
714 usemymalloc=''
715 installman1dir=''
716 man1dir=''
717 man1direxp=''
718 man1ext=''
719 installman3dir=''
720 man3dir=''
721 man3direxp=''
722 man3ext=''
723 huge=''
724 large=''
725 medium=''
726 models=''
727 small=''
728 split=''
729 modetype=''
730 multiarch=''
731 mydomain=''
732 myhostname=''
733 phostname=''
734 c=''
735 n=''
736 d_eofnblk=''
737 eagain=''
738 o_nonblock=''
739 rd_nodata=''
740 netdb_hlen_type=''
741 netdb_host_type=''
742 netdb_name_type=''
743 netdb_net_type=''
744 groupcat=''
745 hostcat=''
746 passcat=''
747 orderlib=''
748 ranlib=''
749 package=''
750 spackage=''
751 pager=''
752 apiversion=''
753 patchlevel=''
754 subversion=''
755 version=''
756 perladmin=''
757 perlpath=''
758 pidtype=''
759 prefix=''
760 prefixexp=''
761 installprivlib=''
762 privlib=''
763 privlibexp=''
764 prototype=''
765 ptrsize=''
766 drand01=''
767 randbits=''
768 randfunc=''
769 randseedtype=''
770 seedfunc=''
771 installscript=''
772 scriptdir=''
773 scriptdirexp=''
774 selectminbits=''
775 selecttype=''
776 sh=''
777 sig_count=''
778 sig_name=''
779 sig_name_init=''
780 sig_num=''
781 sig_num_init=''
782 installsitearch=''
783 sitearch=''
784 sitearchexp=''
785 installsitelib=''
786 sitelib=''
787 sitelibexp=''
788 sizetype=''
789 so=''
790 sharpbang=''
791 shsharp=''
792 spitshell=''
793 src=''
794 ssizetype=''
795 startperl=''
796 startsh=''
797 stdchar=''
798 d_fgetpos64=''
799 d_fopen64=''
800 d_freopen64=''
801 d_fseek64=''
802 d_fseeko64=''
803 d_fsetpos64=''
804 d_ftell64=''
805 d_ftello64=''
806 d_tmpfile64=''
807 d_stdio_stream_array=''
808 stdio_stream_array=''
809 sysman=''
810 trnl=''
811 uidtype=''
812 archname64=''
813 use64bits=''
814 usemultiplicity=''
815 nm_opt=''
816 nm_so_opt=''
817 runnm=''
818 usenm=''
819 useperlio=''
820 d_oldpthreads=''
821 usethreads=''
822 incpath=''
823 mips=''
824 mips_type=''
825 usrinc=''
826 defvoidused=''
827 voidflags=''
828 CONFIG=''
829
830 define='define'
831 undef='undef'
832 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
833 rmlist=''
834
835 : We must find out about Eunice early
836 eunicefix=':'
837 if test -f /etc/unixtovms; then
838         eunicefix=/etc/unixtovms
839 fi
840 if test -f /etc/unixtovms.exe; then
841         eunicefix=/etc/unixtovms.exe
842 fi
843
844 i_whoami=''
845 : Possible local include directories to search.
846 : Set locincpth to "" in a hint file to defeat local include searches.
847 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
848 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
849 :
850 : no include file wanted by default
851 inclwanted=''
852
853 : list of known cpp symbols, sorted alphabetically
854 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
855 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
856 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
857 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
858 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
859 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
860 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
861 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
862 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
863 al="$al VMS Xenix286"
864 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
865 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
866 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
867 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
868 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
869 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
870 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
871 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
872 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
873 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
874 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
875 al="$al __SVR4_2__ __UMAXV__"
876 al="$al ____386BSD____ __alpha __alpha__ __amiga"
877 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
878 al="$al __host_mips__"
879 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
880 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
881 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
882 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
883 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
884 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
885 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
886 al="$al __mc88100 __mc88100__ __mips __mips__"
887 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
888 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
889 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
890 al="$al _host_mips _mips _unix"
891 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
892 al="$al apollo ardent att386 att3b"
893 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
894 al="$al cadmus clipper concurrent convex cray ctix"
895 al="$al dmert encore gcos gcx gimpel gould"
896 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
897 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
898 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
899 al="$al i186 i286 i386 i486 i8086"
900 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
901 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
902 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
903 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
904 al="$al mc88000 mc88100 merlin mert mips mvs n16"
905 al="$al ncl_el ncl_mr"
906 al="$al news1500 news1700 news1800 news1900 news3700"
907 al="$al news700 news800 news900 ns16000 ns32000"
908 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
909 al="$al parisc pc532 pdp11 plexus posix pyr"
910 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
911 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
912 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
913 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
914 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
915 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
916 al="$al xenix z8000"
917
918 : Trailing extension.  Override this in a hint file, if needed.
919 _exe=''
920 : Extra object files, if any, needed on this platform.
921 archobjs=''
922 groupstype=''
923 : change the next line if compiling for Xenix/286 on Xenix/386
924 xlibpth='/usr/lib/386 /lib/386'
925
926 : Possible local library directories to search.
927 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
928 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
929
930 : general looking path for locating libraries
931 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
932 glibpth="$glibpth /lib /usr/lib $xlibpth"
933 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
934 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
935
936 : Private path used by Configure to find libraries.  Its value
937 : is prepended to libpth. This variable takes care of special
938 : machines, like the mips.  Usually, it should be empty.
939 plibpth=''
940
941 : default library list
942 libswanted=''
943 : some systems want to use only the non-versioned libso:s
944 ignore_versioned_solibs=''
945 : full support for void wanted by default
946 defvoidused=15
947
948 : set useposix=false in your hint file to disable the POSIX extension.
949 useposix=true
950 : set useopcode=false in your hint file to disable the Opcode extension.
951 useopcode=true
952 : set usemultiplicity on the Configure command line to enable multiplicity.
953 : set usethreads on the Configure command line to enable threads.
954 : List of libraries we want.
955 : If anyone needs -lnet, put it in a hint file.
956 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
957 libswanted="$libswanted dld ld sun m rt c cposix posix"
958 libswanted="$libswanted ndir dir crypt sec"
959 libswanted="$libswanted ucb bsd BSD PW x"
960 : We probably want to search /usr/shlib before most other libraries.
961 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
962 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
963 glibpth="/usr/shlib $glibpth"
964 : Do not use vfork unless overridden by a hint file.
965 usevfork=false
966
967 : Find the basic shell for Bourne shell scripts
968 case "$sh" in
969 '')
970         case "$SYSTYPE" in
971         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
972         *) xxx='/bin/sh';;
973         esac
974         if test -f "$xxx"; then
975                 sh="$xxx"
976         else
977                 : Build up a list and do a single loop so we can 'break' out.
978                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
979                 for xxx in sh bash ksh pdksh ash; do
980                         for p in $pth; do
981                                 try="$try ${p}/${xxx}"
982                         done
983                 done
984                 for xxx in $try; do
985                         if test -f "$xxx"; then
986                                 sh="$xxx";
987                                 break
988                         elif test -f "$xxx.exe"; then
989                                 sh="$xxx";
990                                 break
991                         fi
992                 done
993         fi
994         ;;
995 esac
996
997 case "$sh" in
998 '')     cat <<EOM >&2
999 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1000
1001 Usually it's in /bin/sh.  How did you even get this far?
1002 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1003 we'll try to straighten this all out.
1004 EOM
1005         exit 1
1006         ;;
1007 esac
1008
1009 : see if sh knows # comments
1010 if `$sh -c '#' >/dev/null 2>&1`; then
1011         shsharp=true
1012         spitshell=cat
1013         xcat=/bin/cat
1014         test -f $xcat || xcat=/usr/bin/cat
1015         echo "#!$xcat" >try
1016         $eunicefix try
1017         chmod +x try
1018         ./try > today
1019         if test -s today; then
1020                 sharpbang='#!'
1021         else
1022                 echo "#! $xcat" > try
1023                 $eunicefix try
1024                 chmod +x try
1025                 ./try > today
1026                 if test -s today; then
1027                         sharpbang='#! '
1028                 else
1029                         sharpbang=': use '
1030                 fi
1031         fi
1032 else
1033         echo " "
1034         echo "Your $sh doesn't grok # comments--I will strip them later on."
1035         shsharp=false
1036         cd ..
1037         echo "exec grep -v '^[  ]*#'" >spitshell
1038         chmod +x spitshell
1039         $eunicefix spitshell
1040         spitshell=`pwd`/spitshell
1041         cd UU
1042         echo "I presume that if # doesn't work, #! won't work either!"
1043         sharpbang=': use '
1044 fi
1045 rm -f try today
1046
1047 : figure out how to guarantee sh startup
1048 case "$startsh" in
1049 '') startsh=${sharpbang}${sh} ;;
1050 *)
1051 esac
1052 cat >try <<EOSS
1053 $startsh
1054 set abc
1055 test "$?abc" != 1
1056 EOSS
1057
1058 chmod +x try
1059 $eunicefix try
1060 if ./try; then
1061         : echo "Yup, it does."
1062 else
1063         echo "Hmm... '$startsh' does not guarantee sh startup..."
1064         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1065 fi
1066 rm -f try
1067
1068
1069 : Save command line options in file UU/cmdline.opt for later use in
1070 : generating config.sh.
1071 cat > cmdline.opt <<EOSH
1072 # Configure command line arguments.
1073 config_arg0='$0'
1074 config_args='$*'
1075 config_argc=$#
1076 EOSH
1077 argn=1
1078 for arg in "$@"; do
1079         cat >>cmdline.opt <<EOSH
1080 config_arg$argn='$arg'
1081 EOSH
1082         argn=`expr $argn + 1`
1083 done
1084
1085 : produce awk script to parse command line options
1086 cat >options.awk <<'EOF'
1087 BEGIN {
1088         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1089
1090         len = length(optstr);
1091         for (i = 1; i <= len; i++) {
1092                 c = substr(optstr, i, 1);
1093                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1094                 if (a == ":") {
1095                         arg[c] = 1;
1096                         i++;
1097                 }
1098                 opt[c] = 1;
1099         }
1100 }
1101 {
1102         expect = 0;
1103         str = $0;
1104         if (substr(str, 1, 1) != "-") {
1105                 printf("'%s'\n", str);
1106                 next;
1107         }
1108         len = length($0);
1109         for (i = 2; i <= len; i++) {
1110                 c = substr(str, i, 1);
1111                 if (!opt[c]) {
1112                         printf("-%s\n", substr(str, i));
1113                         next;
1114                 }
1115                 printf("-%s\n", c);
1116                 if (arg[c]) {
1117                         if (i < len)
1118                                 printf("'%s'\n", substr(str, i + 1));
1119                         else
1120                                 expect = 1;
1121                         next;
1122                 }
1123         }
1124 }
1125 END {
1126         if (expect)
1127                 print "?";
1128 }
1129 EOF
1130
1131 : process the command line options
1132 set X `for arg in "$@"; do echo "X$arg"; done |
1133         sed -e s/X// | awk -f options.awk`
1134 eval "set $*"
1135 shift
1136 rm -f options.awk
1137
1138 : set up default values
1139 fastread=''
1140 reuseval=false
1141 config_sh=''
1142 alldone=''
1143 error=''
1144 silent=''
1145 extractsh=''
1146 override=''
1147 knowitall=''
1148 rm -f optdef.sh
1149 cat >optdef.sh <<EOS
1150 $startsh
1151 EOS
1152
1153
1154 : option parsing
1155 while test $# -gt 0; do
1156         case "$1" in
1157         -d) shift; fastread=yes;;
1158         -e) shift; alldone=cont;;
1159         -f)
1160                 shift
1161                 cd ..
1162                 if test -r "$1"; then
1163                         config_sh="$1"
1164                 else
1165                         echo "$me: cannot read config file $1." >&2
1166                         error=true
1167                 fi
1168                 cd UU
1169                 shift;;
1170         -h) shift; error=true;;
1171         -r) shift; reuseval=true;;
1172         -s) shift; silent=true; realsilent=true;;
1173         -E) shift; alldone=exit;;
1174         -K) shift; knowitall=true;;
1175         -O) shift; override=true;;
1176         -S) shift; silent=true; extractsh=true;;
1177         -D)
1178                 shift
1179                 case "$1" in
1180                 *=)
1181                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1182                         echo "$me: ignoring -D $1" >&2
1183                         ;;
1184                 *=*) echo "$1" | \
1185                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1186                 *) echo "$1='define'" >> optdef.sh;;
1187                 esac
1188                 shift
1189                 ;;
1190         -U)
1191                 shift
1192                 case "$1" in
1193                 *=) echo "$1" >> optdef.sh;;
1194                 *=*)
1195                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1196                         echo "$me: ignoring -U $1" >&2
1197                         ;;
1198                 *) echo "$1='undef'" >> optdef.sh;;
1199                 esac
1200                 shift
1201                 ;;
1202         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1203                 exit 0;;
1204         --) break;;
1205         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1206         *) break;;
1207         esac
1208 done
1209
1210 case "$error" in
1211 true)
1212         cat >&2 <<EOM
1213 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1214                  [-U symbol] [-U symbol=]
1215   -d : use defaults for all answers.
1216   -e : go on without questioning past the production of config.sh.
1217   -f : specify an alternate default configuration file.
1218   -h : print this help message and exit (with an error status).
1219   -r : reuse C symbols value if possible (skips costly nm extraction).
1220   -s : silent mode, only echoes questions and essential information.
1221   -D : define symbol to have some value:
1222          -D symbol         symbol gets the value 'define'
1223          -D symbol=value   symbol gets the value 'value'
1224   -E : stop at the end of questions, after having produced config.sh.
1225   -K : do not use unless you know what you are doing.
1226   -O : let -D and -U override definitions from loaded configuration file.
1227   -S : perform variable substitutions on all .SH files (can mix with -f)
1228   -U : undefine symbol:
1229          -U symbol    symbol gets the value 'undef'
1230          -U symbol=   symbol gets completely empty
1231   -V : print version number and exit (with a zero status).
1232 EOM
1233         exit 1
1234         ;;
1235 esac
1236
1237 : Sanity checks
1238 case "$fastread$alldone" in
1239 yescont|yesexit) ;;
1240 *)
1241         if test ! -t 0; then
1242                 echo "Say 'sh Configure', not 'sh <Configure'"
1243                 exit 1
1244         fi
1245         ;;
1246 esac
1247
1248 exec 4>&1
1249 case "$silent" in
1250 true) exec 1>/dev/null;;
1251 esac
1252
1253 : run the defines and the undefines, if any, but leave the file out there...
1254 touch optdef.sh
1255 . ./optdef.sh
1256
1257 : set package name
1258 package=perl5
1259 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1260 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1261 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1262 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1263 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1264 esac
1265
1266 : Some greps do not return status, grrr.
1267 echo "grimblepritz" >grimble
1268 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1269         contains=contains
1270 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1271         contains=grep
1272 else
1273         contains=contains
1274 fi
1275 rm -f grimble
1276 : the following should work in any shell
1277 case "$contains" in
1278 contains*)
1279         echo " "
1280         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1281         cat >contains <<'EOSS'
1282 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1283 EOSS
1284 chmod +x contains
1285 esac
1286
1287 : Find the path to the source tree
1288 case "$src" in
1289 '') case "$0" in
1290     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1291     *)   src='.';;
1292     esac;;
1293 esac
1294 case "$src" in
1295 '')     src=/
1296         rsrc=/
1297         ;;
1298 /*) rsrc="$src";;
1299 *) rsrc="../$src";;
1300 esac
1301 if test -f $rsrc/Configure && \
1302         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1303 then
1304    : found it, so we are ok.
1305 else
1306         rsrc=''
1307         for src in . .. ../.. ../../.. ../../../..; do
1308                 if test -f ../$src/Configure && \
1309                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1310                 then
1311                         rsrc=../$src
1312                         break
1313                 fi
1314         done
1315 fi
1316 case "$rsrc" in
1317 '')
1318         cat <<EOM >&4
1319
1320 Sorry, I can't seem to locate the source dir for $package.  Please start
1321 Configure with an explicit path -- i.e. /some/path/Configure.
1322
1323 EOM
1324         exit 1
1325         ;;
1326 ../.)   rsrc='..';;
1327 *)
1328         echo " "
1329         echo "Sources for $package found in \"$src\"." >&4
1330         ;;
1331 esac
1332
1333 : script used to extract .SH files with variable substitutions
1334 cat >extract <<'EOS'
1335 CONFIGDOTSH=true
1336 echo "Doing variable substitutions on .SH files..."
1337 if test -f $src/MANIFEST; then
1338         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1339 else
1340         echo "(Looking for .SH files under the source directory.)"
1341         set x `(cd $src; find . -name "*.SH" -print)`
1342 fi
1343 shift
1344 case $# in
1345 0) set x `(cd $src; echo *.SH)`; shift;;
1346 esac
1347 if test ! -f $src/$1; then
1348         shift
1349 fi
1350 mkdir_p='
1351 name=$1;
1352 create="";
1353 while test $name; do
1354         if test ! -d "$name"; then
1355                 create="$name $create";
1356                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1357                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1358         else
1359                 name="";
1360         fi;
1361 done;
1362 for file in $create; do
1363         mkdir $file;
1364 done
1365 '
1366 for file in $*; do
1367         case "$src" in
1368         ".")
1369                 case "$file" in
1370                 */*)
1371                         dir=`expr X$file : 'X\(.*\)/'`
1372                         file=`expr X$file : 'X.*/\(.*\)'`
1373                         (cd $dir && . ./$file)
1374                         ;;
1375                 *)
1376                         . ./$file
1377                         ;;
1378                 esac
1379                 ;;
1380         *)
1381                 case "$file" in
1382                 */*)
1383                         dir=`expr X$file : 'X\(.*\)/'`
1384                         file=`expr X$file : 'X.*/\(.*\)'`
1385                         (set x $dir; shift; eval $mkdir_p)
1386                         sh <$src/$dir/$file
1387                         ;;
1388                 *)
1389                         sh <$src/$file
1390                         ;;
1391                 esac
1392                 ;;
1393         esac
1394 done
1395 if test -f $src/config_h.SH; then
1396         if test ! -f config.h; then
1397         : oops, they left it out of MANIFEST, probably, so do it anyway.
1398         . $src/config_h.SH
1399         fi
1400 fi
1401 EOS
1402
1403 : extract files and exit if asked to do so
1404 case "$extractsh" in
1405 true)
1406         case "$realsilent" in
1407         true) ;;
1408         *) exec 1>&4;;
1409         esac
1410         case "$config_sh" in
1411         '') config_sh='config.sh';;
1412         esac
1413         echo " "
1414         echo "Fetching answers from $config_sh..."
1415         cd ..
1416         . $config_sh
1417         test "$override" && . ./optdef.sh
1418         echo " "
1419         . UU/extract
1420         rm -rf UU
1421         echo "Done."
1422         exit 0
1423         ;;
1424 esac
1425
1426 : Eunice requires " " instead of "", can you believe it
1427 echo " "
1428 : Here we go...
1429 echo "Beginning of configuration questions for $package."
1430
1431 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1432
1433 : first determine how to suppress newline on echo command
1434 echo " "
1435 echo "Checking echo to see how to suppress newlines..."
1436 (echo "hi there\c" ; echo " ") >.echotmp
1437 if $contains c .echotmp >/dev/null 2>&1 ; then
1438         echo "...using -n."
1439         n='-n'
1440         c=''
1441 else
1442         cat <<'EOM'
1443 ...using \c
1444 EOM
1445         n=''
1446         c='\c'
1447 fi
1448 echo $n "The star should be here-->$c"
1449 echo '*'
1450 rm -f .echotmp
1451
1452 : Now test for existence of everything in MANIFEST
1453 echo " "
1454 if test -f $rsrc/MANIFEST; then
1455         echo "First let's make sure your kit is complete.  Checking..." >&4
1456         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1457         rm -f missing
1458         tmppwd=`pwd`
1459         for filelist in x??; do
1460                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1461         done
1462         if test -s missing; then
1463                 cat missing >&4
1464                 cat >&4 <<'EOM'
1465
1466 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1467
1468 You have the option of continuing the configuration process, despite the
1469 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1470 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1471 and contact the author (perlbug@perl.com).
1472
1473 EOM
1474                 echo $n "Continue? [n] $c" >&4
1475                 read ans
1476                 case "$ans" in
1477                 y*)
1478                         echo "Continuing..." >&4
1479                         rm -f missing
1480                         ;;
1481                 *)
1482                         echo "ABORTING..." >&4
1483                         kill $$
1484                         ;;
1485                 esac
1486         else
1487                 echo "Looks good..."
1488         fi
1489 else
1490         echo "There is no MANIFEST file.  I hope your kit is complete !"
1491 fi
1492 rm -f missing x??
1493
1494 echo " "
1495 : Find the appropriate value for a newline for tr
1496 if test -n "$DJGPP"; then
1497        trnl='\012'
1498 fi
1499 if test X"$trnl" = X; then
1500         case "`echo foo|tr '\n' x 2>/dev/null`" in
1501         foox) trnl='\n' ;;
1502         esac
1503 fi
1504 if test X"$trnl" = X; then
1505         case "`echo foo|tr '\012' x 2>/dev/null`" in
1506         foox) trnl='\012' ;;
1507         esac
1508 fi
1509 if test X"$trnl" = X; then
1510         cat <<EOM >&2
1511
1512 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1513
1514 EOM
1515         exit 1
1516 fi
1517
1518 : compute the number of columns on the terminal for proper question formatting
1519 case "$COLUMNS" in
1520 '') COLUMNS='80';;
1521 esac
1522
1523 : set up the echo used in my read
1524 myecho="case \"\$xxxm\" in
1525 '') echo $n \"\$rp $c\" >&4;;
1526 *) case \"\$rp\" in
1527         '') echo $n \"[\$xxxm] $c\";;
1528         *)
1529                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1530                         echo \"\$rp\" >&4
1531                         echo $n \"[\$xxxm] $c\" >&4
1532                 else
1533                         echo $n \"\$rp [\$xxxm] $c\" >&4
1534                 fi
1535                 ;;
1536         esac;;
1537 esac"
1538
1539 : now set up to do reads with possible shell escape and default assignment
1540 cat <<EOSC >myread
1541 $startsh
1542 xxxm=\$dflt
1543 $myecho
1544 ans='!'
1545 case "\$fastread" in
1546 yes) case "\$dflt" in
1547         '') ;;
1548         *) ans='';
1549                 case "\$silent-\$rp" in
1550                 true-) ;;
1551                 *) echo " " >&4;;
1552                 esac;;
1553         esac;;
1554 *) case "\$silent" in
1555         true) case "\$rp" in
1556                 '') ans='';;
1557                 esac;;
1558         esac;;
1559 esac
1560 while expr "X\$ans" : "X!" >/dev/null; do
1561         read answ
1562         set x \$xxxm
1563         shift
1564         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1565         case  "\$answ" in
1566         "!")
1567                 sh 1>&4
1568                 echo " "
1569                 $myecho
1570                 ;;
1571         !*)
1572                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1573                 shift
1574                 sh 1>&4 -c "\$*"
1575                 echo " "
1576                 $myecho
1577                 ;;
1578         "\$ans")
1579                 case "\$ans" in
1580                 \\&*)
1581                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1582                         shift
1583                         case "\$1" in
1584                         -d)
1585                                 fastread=yes
1586                                 echo "(OK, I'll run with -d after this question.)" >&4
1587                                 ;;
1588                         -*)
1589                                 echo "*** Sorry, \$1 not supported yet." >&4
1590                                 ;;
1591                         esac
1592                         $myecho
1593                         ans=!
1594                         ;;
1595                 esac;;
1596         *)
1597                 case "\$aok" in
1598                 y)
1599                         echo "*** Substitution done -- please confirm."
1600                         xxxm="\$ans"
1601                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1602                         xxxm="\$ans"
1603                         ans=!
1604                         ;;
1605                 *)
1606                         echo "*** Error -- try again."
1607                         ans=!
1608                         ;;
1609                 esac
1610                 $myecho
1611                 ;;
1612         esac
1613         case "\$ans\$xxxm\$nostick" in
1614         '')
1615                 ans=!
1616                 $myecho
1617                 ;;
1618         esac
1619 done
1620 case "\$ans" in
1621 '') ans="\$xxxm";;
1622 esac
1623 EOSC
1624
1625 : create .config dir to save info across Configure sessions
1626 test -d ../.config || mkdir ../.config
1627 cat >../.config/README <<EOF
1628 This directory created by Configure to save information that should
1629 persist across sessions for $package.
1630
1631 You may safely delete it if you wish.
1632 EOF
1633
1634 : general instructions
1635 needman=true
1636 firsttime=true
1637 user=`(logname) 2>/dev/null`
1638 case "$user" in
1639 '') user=`whoami 2>&1`;;
1640 esac
1641 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1642         firsttime=false
1643         echo " "
1644         rp='Would you like to see the instructions?'
1645         dflt=n
1646         . ./myread
1647         case "$ans" in
1648         [yY]*) ;;
1649         *) needman=false;;
1650         esac
1651 fi
1652 if $needman; then
1653         cat <<EOH
1654
1655 This installation shell script will examine your system and ask you questions
1656 to determine how the perl5 package should be installed. If you get
1657 stuck on a question, you may use a ! shell escape to start a subshell or
1658 execute a command.  Many of the questions will have default answers in square
1659 brackets; typing carriage return will give you the default.
1660
1661 On some of the questions which ask for file or directory names you are allowed
1662 to use the ~name construct to specify the login directory belonging to "name",
1663 even if you don't have a shell which knows about that.  Questions where this is
1664 allowed will be marked "(~name ok)".
1665
1666 EOH
1667         rp=''
1668         dflt='Type carriage return to continue'
1669         . ./myread
1670         cat <<'EOH'
1671
1672 The prompter used in this script allows you to use shell variables and
1673 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1674 in the default answer, as if the default line was a set of arguments given to a
1675 script shell.  This means you may also use $* to repeat the whole default line,
1676 so you do not have to re-type everything to add something to the default.
1677
1678 Everytime there is a substitution, you will have to confirm.  If there is an
1679 error (e.g. an unmatched backtick), the default answer will remain unchanged
1680 and you will be prompted again.
1681
1682 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1683 the questions and use the computed defaults (or the previous answers if there
1684 was already a config.sh file). Type 'Configure -h' for a list of options.
1685 You may also start interactively and then answer '& -d' at any prompt to turn
1686 on the non-interactive behaviour for the remainder of the execution.
1687
1688 EOH
1689         . ./myread
1690         cat <<EOH
1691
1692 Much effort has been expended to ensure that this shell script will run on any
1693 Unix system.  If despite that it blows up on yours, your best bet is to edit
1694 Configure and run it again.  If you can't run Configure for some reason,
1695 you'll have to generate a config.sh file by hand.  Whatever problems you
1696 have, let me (perlbug@perl.com) know how I blew it.
1697
1698 This installation script affects things in two ways:
1699
1700 1) it may do direct variable substitutions on some of the files included
1701    in this kit.
1702 2) it builds a config.h file for inclusion in C programs.  You may edit
1703    any of these files as the need arises after running this script.
1704
1705 If you make a mistake on a question, there is no easy way to back up to it
1706 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1707 files.  Configure will offer to let you do this before it runs the SH files.
1708
1709 EOH
1710         dflt='Type carriage return to continue'
1711         . ./myread
1712         case "$firsttime" in
1713         true) echo $user >>../.config/instruct;;
1714         esac
1715 fi
1716
1717 : find out where common programs are
1718 echo " "
1719 echo "Locating common programs..." >&4
1720 cat <<EOSC >loc
1721 $startsh
1722 case \$# in
1723 0) exit 1;;
1724 esac
1725 thing=\$1
1726 shift
1727 dflt=\$1
1728 shift
1729 for dir in \$*; do
1730         case "\$thing" in
1731         .)
1732         if test -d \$dir/\$thing; then
1733                 echo \$dir
1734                 exit 0
1735         fi
1736         ;;
1737         *)
1738         for thisthing in \$dir/\$thing; do
1739                 : just loop through to pick last item
1740         done
1741         if test -f \$thisthing; then
1742                 echo \$thisthing
1743                 exit 0
1744         elif test -f \$dir/\$thing.exe; then
1745                 if test -n "$DJGPP"; then
1746                         echo \$dir/\$thing.exe
1747                 else
1748                         : on Eunice apparently
1749                         echo \$dir/\$thing
1750                 fi
1751                 exit 0
1752         fi
1753         ;;
1754         esac
1755 done
1756 echo \$dflt
1757 exit 1
1758 EOSC
1759 chmod +x loc
1760 $eunicefix loc
1761 loclist="
1762 awk
1763 cat
1764 comm
1765 cp
1766 echo
1767 expr
1768 grep
1769 ls
1770 make
1771 mkdir
1772 rm
1773 sed
1774 sort
1775 touch
1776 tr
1777 uniq
1778 "
1779 trylist="
1780 Mcc
1781 ar
1782 byacc
1783 cpp
1784 csh
1785 date
1786 egrep
1787 gzip
1788 less
1789 ln
1790 more
1791 nm
1792 nroff
1793 pg
1794 test
1795 uname
1796 zip
1797 "
1798 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1799 pth="$pth /lib /usr/lib"
1800 for file in $loclist; do
1801         eval xxx=\$$file
1802         case "$xxx" in
1803         /*|?:[\\/]*)
1804                 if test -f "$xxx"; then
1805                         : ok
1806                 else
1807                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1808                         xxx=`./loc $file $file $pth`
1809                 fi
1810                 ;;
1811         '') xxx=`./loc $file $file $pth`;;
1812         *) xxx=`./loc $xxx $xxx $pth`;;
1813         esac
1814         eval $file=$xxx
1815         eval _$file=$xxx
1816         case "$xxx" in
1817         /*)
1818                 echo $file is in $xxx.
1819                 ;;
1820         ?:[\\/]*)
1821                 echo $file is in $xxx.
1822                 ;;
1823         *)
1824                 echo "I don't know where '$file' is, and my life depends on it." >&4
1825                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1826                 exit 1
1827                 ;;
1828         esac
1829 done
1830 echo " "
1831 echo "Don't worry if any of the following aren't found..."
1832 say=offhand
1833 for file in $trylist; do
1834         eval xxx=\$$file
1835         case "$xxx" in
1836         /*|?:[\\/]*)
1837                 if test -f "$xxx"; then
1838                         : ok
1839                 else
1840                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1841                         xxx=`./loc $file $file $pth`
1842                 fi
1843                 ;;
1844         '') xxx=`./loc $file $file $pth`;;
1845         *) xxx=`./loc $xxx $xxx $pth`;;
1846         esac
1847         eval $file=$xxx
1848         eval _$file=$xxx
1849         case "$xxx" in
1850         /*)
1851                 echo $file is in $xxx.
1852                 ;;
1853         ?:[\\/]*)
1854                 echo $file is in $xxx.
1855                 ;;
1856         *)
1857                 echo "I don't see $file out there, $say."
1858                 say=either
1859                 ;;
1860         esac
1861 done
1862 case "$egrep" in
1863 egrep)
1864         echo "Substituting grep for egrep."
1865         egrep=$grep
1866         ;;
1867 esac
1868 case "$ln" in
1869 ln)
1870         echo "Substituting cp for ln."
1871         ln=$cp
1872         ;;
1873 esac
1874 case "$test" in
1875 test)
1876         echo "Hopefully test is built into your sh."
1877         ;;
1878 *)
1879         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1880                 echo "Using the test built into your sh."
1881                 test=test
1882                 _test=test
1883         fi
1884         ;;
1885 esac
1886 case "$echo" in
1887 echo)
1888         echo "Hopefully echo is built into your sh."
1889         ;;
1890 '') ;;
1891 *)
1892         echo " "
1893 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1894         $echo $n "hi there$c" >foo1
1895         echo $n "hi there$c" >foo2
1896         if cmp foo1 foo2 >/dev/null 2>&1; then
1897                 echo "They are compatible.  In fact, they may be identical."
1898         else
1899                 case "$n" in
1900                 '-n') n='' c='\c';;
1901                 *) n='-n' c='';;
1902                 esac
1903                 cat <<FOO
1904 They are not compatible!  You are probably running ksh on a non-USG system.
1905 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1906 have echo built in and we may have to run some Bourne shell scripts.  That
1907 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1908
1909 FOO
1910                 $echo $n "The star should be here-->$c"
1911                 $echo "*"
1912         fi
1913         $rm -f foo1 foo2
1914         ;;
1915 esac
1916
1917 : determine whether symbolic links are supported
1918 echo " "
1919 $touch blurfl
1920 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1921         echo "Symbolic links are supported." >&4
1922         lns="$ln -s"
1923 else
1924         echo "Symbolic links are NOT supported." >&4
1925         lns="$ln"
1926 fi
1927 $rm -f blurfl sym
1928
1929 : see whether [:lower:] and [:upper:] are supported character classes
1930 echo " "
1931 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1932 ABYZ)
1933         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1934         up='[:upper:]'
1935         low='[:lower:]'
1936         ;;
1937 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1938         # (0xc9 and 0xd1), therefore that is a nice testing point.
1939         if test "X$up" = X -o "X$low" = X; then
1940             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1941             ij) up='[A-Z]'
1942                 low='[a-z]'
1943                 ;;
1944             esac
1945         fi
1946         if test "X$up" = X -o "X$low" = X; then
1947             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1948             ij) up='A-Z'
1949                 low='a-z'
1950                 ;;
1951             esac
1952         fi
1953         if test "X$up" = X -o "X$low" = X; then
1954             case "`echo IJ | od -x 2>/dev/null`" in
1955             *C9D1*|*c9d1*)
1956                 echo "Hey, this might be EBCDIC." >&4
1957                 if test "X$up" = X -o "X$low" = X; then
1958                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1959                     ij) up='[A-IJ-RS-Z]'
1960                         low='[a-ij-rs-z]'
1961                         ;;
1962                     esac
1963                 fi
1964                 if test "X$up" = X -o "X$low" = X; then
1965                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1966                     ij) up='A-IJ-RS-Z'
1967                         low='a-ij-rs-z'
1968                         ;;
1969                     esac
1970                 fi
1971                 ;;
1972             esac
1973         fi
1974 esac
1975 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1976 ij)
1977     echo "Using $up and $low to convert case." >&4
1978     ;;
1979 *)
1980     echo "I don't know how to translate letters from upper to lower case." >&4
1981     echo "Your tr is not acting any way I know of." >&4
1982     exit 1
1983     ;;
1984 esac
1985 : set up the translation script tr, must be called with ./tr of course
1986 cat >tr <<EOSC
1987 $startsh
1988 case "\$1\$2" in
1989 '[A-Z][a-z]') exec $tr '$up' '$low';;
1990 '[a-z][A-Z]') exec $tr '$low' '$up';;
1991 esac
1992 exec $tr "\$@"
1993 EOSC
1994 chmod +x tr
1995 $eunicefix tr
1996
1997 : Try to determine whether config.sh was made on this system
1998 case "$config_sh" in
1999 '')
2000 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2001 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2002 # because the A-Z/a-z are not consecutive.
2003 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2004         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2005 newmyuname="$myuname"
2006 dflt=n
2007 case "$knowitall" in
2008 '')
2009         if test -f ../config.sh; then
2010                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2011                         eval "`grep myuname= ../config.sh`"
2012                 fi
2013                 if test "X$myuname" = "X$newmyuname"; then
2014                         dflt=y
2015                 fi
2016         fi
2017         ;;
2018 *) dflt=y;;
2019 esac
2020
2021 : Get old answers from old config file if Configure was run on the
2022 : same system, otherwise use the hints.
2023 hint=default
2024 cd ..
2025 if test -f config.sh; then
2026         echo " "
2027         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2028         . UU/myread
2029         case "$ans" in
2030         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2031         *)  echo "Fetching default answers from your old config.sh file..." >&4
2032                 tmp_n="$n"
2033                 tmp_c="$c"
2034                 tmp_sh="$sh"
2035                 . ./config.sh
2036                 cp config.sh UU
2037                 n="$tmp_n"
2038                 c="$tmp_c"
2039                 : Older versions did not always set $sh.  Catch re-use of such
2040                 : an old config.sh.
2041                 case "$sh" in
2042                 '') sh="$tmp_sh" ;;
2043                 esac
2044                 hint=previous
2045                 ;;
2046         esac
2047 fi
2048 if test ! -f config.sh; then
2049         $cat <<EOM
2050
2051 First time through, eh?  I have some defaults handy for some systems
2052 that need some extra help getting the Configure answers right:
2053
2054 EOM
2055         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2056         dflt=''
2057         : Half the following guesses are probably wrong... If you have better
2058         : tests or hints, please send them to perlbug@perl.com
2059         : The metaconfig authors would also appreciate a copy...
2060         $test -f /irix && osname=irix
2061         $test -f /xenix && osname=sco_xenix
2062         $test -f /dynix && osname=dynix
2063         $test -f /dnix && osname=dnix
2064         $test -f /lynx.os && osname=lynxos
2065         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2066         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2067         $test -f /bin/mips && /bin/mips && osname=mips
2068         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2069                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2070         $test -d /usr/apollo/bin && osname=apollo
2071         $test -f /etc/saf/_sactab && osname=svr4
2072         $test -d /usr/include/minix && osname=minix
2073         if $test -d /MachTen -o -d /MachTen_Folder; then
2074                 osname=machten
2075                 if $test -x /sbin/version; then
2076                         osvers=`/sbin/version | $awk '{print $2}' |
2077                         $sed -e 's/[A-Za-z]$//'`
2078                 elif $test -x /usr/etc/version; then
2079                         osvers=`/usr/etc/version | $awk '{print $2}' |
2080                         $sed -e 's/[A-Za-z]$//'`
2081                 else
2082                         osvers="$2.$3"
2083                 fi
2084         fi
2085        $test -f /sys/posix.dll &&
2086                $test -f /usr/bin/what &&
2087                set X `/usr/bin/what /sys/posix.dll` &&
2088                $test "$3" = UWIN &&
2089                osname=uwin &&
2090                osvers="$5"
2091         if $test -f $uname; then
2092                 set X $myuname
2093                 shift
2094
2095                 case "$5" in
2096                 fps*) osname=fps ;;
2097                 mips*)
2098                         case "$4" in
2099                         umips) osname=umips ;;
2100                         *) osname=mips ;;
2101                         esac;;
2102                 [23]100) osname=mips ;;
2103                 next*) osname=next ;;
2104                 i386*)
2105                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2106                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2107                                 osname='sco'
2108                                 osvers=$tmp
2109                         elif $test -f /etc/kconfig; then
2110                                 osname=isc
2111                                 if test "$lns" = "$ln -s"; then
2112                                         osvers=4
2113                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2114                                         osvers=3
2115                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2116                                         osvers=2
2117                                 fi
2118                         fi
2119                         tmp=''
2120                         ;;
2121                 pc*)
2122                         if test -n "$DJGPP"; then
2123                                 osname=dos
2124                                 osvers=djgpp
2125                         fi
2126                         ;;
2127                 esac
2128
2129                 case "$1" in
2130                 aix) osname=aix
2131                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2132                         case "$tmp" in
2133                         'not found') osvers="$4"."$3" ;;
2134                         '<3240'|'<>3240') osvers=3.2.0 ;;
2135                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2136                         '=3250'|'>3250') osvers=3.2.5 ;;
2137                         *) osvers=$tmp;;
2138                         esac
2139                         ;;
2140                 *dc.osx) osname=dcosx
2141                         osvers="$3"
2142                         ;;
2143                 dnix) osname=dnix
2144                         osvers="$3"
2145                         ;;
2146                 domainos) osname=apollo
2147                         osvers="$3"
2148                         ;;
2149                 dgux) osname=dgux 
2150                         osvers="$3"
2151                         ;;
2152                 dynixptx*) osname=dynixptx
2153                         osvers=`echo "$4"|sed 's/^v//'`
2154                         ;;
2155                 freebsd) osname=freebsd 
2156                         osvers="$3" ;;
2157                 genix) osname=genix ;;
2158                 hp*) osname=hpux 
2159                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2160                         ;;
2161                 irix*) osname=irix
2162                         case "$3" in
2163                         4*) osvers=4 ;;
2164                         5*) osvers=5 ;;
2165                         *)      osvers="$3" ;;
2166                         esac
2167                         ;;
2168                 linux) osname=linux
2169                         case "$3" in
2170                         *)      osvers="$3" ;;
2171                         esac
2172                         ;;
2173                 MiNT) osname=mint
2174                         ;;
2175                 netbsd*) osname=netbsd
2176                         osvers="$3"
2177                         ;;
2178                 news-os) osvers="$3"
2179                         case "$3" in
2180                         4*) osname=newsos4 ;;
2181                         *) osname=newsos ;;
2182                         esac
2183                         ;;
2184                 bsd386) osname=bsd386
2185                         osvers=`$uname -r`
2186                         ;;
2187                 POSIX-BC | posix-bc ) osname=posix-bc
2188                         osvers="$3"
2189                         ;;
2190                 powerux | power_ux | powermax_os | powermaxos | \
2191                 powerunix | power_unix) osname=powerux
2192                         osvers="$3"
2193                         ;;
2194                 next*) osname=next ;;
2195                 solaris) osname=solaris
2196                         case "$3" in
2197                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2198                         *)      osvers="$3" ;;
2199                         esac
2200                         ;;
2201                 sunos) osname=sunos
2202                         case "$3" in
2203                         5*) osname=solaris
2204                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2205                         *)      osvers="$3" ;;
2206                         esac
2207                         ;;
2208                 titanos) osname=titanos
2209                         case "$3" in
2210                         1*) osvers=1 ;;
2211                         2*) osvers=2 ;;
2212                         3*) osvers=3 ;;
2213                         4*) osvers=4 ;;
2214                         *)      osvers="$3" ;;
2215                         esac
2216                         ;;
2217                 ultrix) osname=ultrix
2218                         osvers="$3"
2219                         ;;
2220                 osf1|mls+)      case "$5" in
2221                                 alpha)
2222                                         osname=dec_osf
2223                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2224                                         ;;
2225                         hp*)    osname=hp_osf1  ;;
2226                         mips)   osname=mips_osf1 ;;
2227                         esac
2228                         ;;
2229                 uts) osname=uts 
2230                         osvers="$3"
2231                         ;;
2232                 qnx) osname=qnx
2233                         osvers="$4"
2234                         ;;
2235                 $2) case "$osname" in
2236                         *isc*) ;;
2237                         *freebsd*) ;;
2238                         svr*)
2239                                 : svr4.x or possibly later
2240                                 case "svr$3" in 
2241                                 ${osname}*)
2242                                         osname=svr$3
2243                                         osvers=$4
2244                                         ;;
2245                                 esac
2246                                 case "$osname" in
2247                                 svr4.0)
2248                                         : Check for ESIX
2249                                         if test -f /stand/boot ; then
2250                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2251                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2252                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2253                                                         if test -n "$isesix"; then
2254                                                                 osname=esix4
2255                                                         fi
2256                                                 fi
2257                                         fi
2258                                         ;;
2259                                 esac
2260                                 ;;
2261                         *)      if test -f /etc/systemid; then
2262                                         osname=sco
2263                                         set `echo $3 | $sed 's/\./ /g'` $4
2264                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2265                                                 osvers=$1.$2.$3
2266                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2267                                                 osvers=$1.$2
2268                                         elif $test -f $src/hints/sco_$1.sh; then
2269                                                 osvers=$1
2270                                         fi
2271                                 else
2272                                         case "$osname" in
2273                                         '') : Still unknown.  Probably a generic Sys V.
2274                                                 osname="sysv"
2275                                                 osvers="$3"
2276                                                 ;;
2277                                         esac
2278                                 fi
2279                                 ;;
2280                         esac
2281                         ;;
2282                 *)      case "$osname" in
2283                         '') : Still unknown.  Probably a generic BSD.
2284                                 osname="$1"
2285                                 osvers="$3"
2286                                 ;;
2287                         esac
2288                         ;;
2289                 esac
2290         else
2291                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2292                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2293                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2294                                 osname=news_os
2295                         fi
2296                         $rm -f UU/kernel.what
2297                 elif test -d c:/.; then
2298                         set X $myuname
2299                         osname=os2
2300                         osvers="$5"
2301                 fi
2302         fi
2303         
2304         : Now look for a hint file osname_osvers, unless one has been
2305         : specified already.
2306         case "$hintfile" in
2307         ''|' ')
2308                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2309                 : Also try without trailing minor version numbers.
2310                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2311                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2312                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2313                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2314                 case "$file" in
2315                 '') dflt=none ;;
2316                 *)  case "$osvers" in
2317                         '') dflt=$file
2318                                 ;;
2319                         *)  if $test -f $src/hints/$file.sh ; then
2320                                         dflt=$file
2321                                 elif $test -f $src/hints/$xfile.sh ; then
2322                                         dflt=$xfile
2323                                 elif $test -f $src/hints/$xxfile.sh ; then
2324                                         dflt=$xxfile
2325                                 elif $test -f $src/hints/$xxxfile.sh ; then
2326                                         dflt=$xxxfile
2327                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2328                                         dflt=$xxxxfile
2329                                 elif $test -f "$src/hints/${osname}.sh" ; then
2330                                         dflt="${osname}"
2331                                 else
2332                                         dflt=none
2333                                 fi
2334                                 ;;
2335                         esac
2336                         ;;
2337                 esac
2338                 if $test -f Policy.sh ; then
2339                         case "$dflt" in
2340                         *Policy*) ;;
2341                         none) dflt="Policy" ;;
2342                         *) dflt="Policy $dflt" ;;
2343                         esac
2344                 fi
2345                 ;;
2346         *)
2347                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2348                 ;;
2349         esac
2350
2351         if $test -f Policy.sh ; then
2352                 $cat <<EOM
2353
2354 There's also a Policy hint file available, which should make the
2355 site-specific (policy) questions easier to answer.
2356 EOM
2357
2358         fi
2359
2360         $cat <<EOM
2361
2362 You may give one or more space-separated answers, or "none" if appropriate.
2363 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2364 is a good thing.  DO NOT give a wrong version.
2365
2366 EOM
2367
2368         rp="Which of these apply, if any?"
2369         . UU/myread
2370         tans=$ans
2371         for file in $tans; do
2372                 if $test X$file = XPolicy -a -f Policy.sh; then
2373                         . Policy.sh
2374                         $cat Policy.sh >> UU/config.sh
2375                 elif $test -f $src/hints/$file.sh; then
2376                         . $src/hints/$file.sh
2377                         $cat $src/hints/$file.sh >> UU/config.sh
2378                 elif $test X$tans = X -o X$tans = Xnone ; then
2379                         : nothing
2380                 else
2381                         : Give one chance to correct a possible typo.
2382                         echo "$file.sh does not exist"
2383                         dflt=$file
2384                         rp="hint to use instead?"
2385                         . UU/myread
2386                         for file in $ans; do
2387                                 if $test -f "$src/hints/$file.sh"; then
2388                                         . $src/hints/$file.sh
2389                                         $cat $src/hints/$file.sh >> UU/config.sh
2390                                 elif $test X$ans = X -o X$ans = Xnone ; then
2391                                         : nothing
2392                                 else
2393                                         echo "$file.sh does not exist -- ignored."
2394                                 fi
2395                         done
2396                 fi
2397         done
2398
2399         hint=recommended
2400         : Remember our hint file for later.
2401         if $test -f "$src/hints/$file.sh" ; then
2402                 hintfile="$file"
2403         else
2404                 hintfile=''
2405         fi
2406 fi
2407 cd UU
2408 ;;
2409 *)
2410         echo " "
2411         echo "Fetching default answers from $config_sh..." >&4
2412         tmp_n="$n"
2413         tmp_c="$c"
2414         cd ..
2415         cp $config_sh config.sh 2>/dev/null
2416         chmod +w config.sh
2417         . ./config.sh
2418         cd UU
2419         cp ../config.sh .
2420         n="$tmp_n"
2421         c="$tmp_c"
2422         hint=previous
2423         ;;
2424 esac
2425 test "$override" && . ./optdef.sh
2426 myuname="$newmyuname"
2427
2428 : Restore computed paths
2429 for file in $loclist $trylist; do
2430         eval $file="\$_$file"
2431 done
2432
2433 cat << EOM
2434
2435 Configure uses the operating system name and version to set some defaults.
2436 The default value is probably right if the name rings a bell. Otherwise,
2437 since spelling matters for me, either accept the default or answer "none"
2438 to leave it blank.
2439
2440 EOM
2441 case "$osname" in
2442         ''|' ')
2443                 case "$hintfile" in
2444                 ''|' '|none) dflt=none ;;
2445                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2446                 esac
2447                 ;;
2448         *) dflt="$osname" ;;
2449 esac
2450 rp="Operating system name?"
2451 . ./myread
2452 case "$ans" in
2453 none)  osname='' ;;
2454 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2455 esac
2456 echo " "
2457 case "$osvers" in
2458         ''|' ')
2459                 case "$hintfile" in
2460                 ''|' '|none) dflt=none ;;
2461                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2462                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2463                         case "$dflt" in
2464                         ''|' ') dflt=none ;;
2465                         esac
2466                         ;;
2467                 esac
2468                 ;;
2469         *) dflt="$osvers" ;;
2470 esac
2471 rp="Operating system version?"
2472 . ./myread
2473 case "$ans" in
2474 none)  osvers='' ;;
2475 *) osvers="$ans" ;;
2476 esac
2477
2478 : who configured the system
2479 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2480 cf_by=`(logname) 2>/dev/null`
2481 case "$cf_by" in
2482 "")
2483         cf_by=`(whoami) 2>/dev/null`
2484         case "$cf_by" in
2485         "") cf_by=unknown ;;
2486         esac ;;
2487 esac
2488
2489 : set up the script used to warn in case of inconsistency
2490 cat <<EOS >whoa
2491 $startsh
2492 EOS
2493 cat <<'EOSC' >>whoa
2494 dflt=y
2495 echo " "
2496 echo "*** WHOA THERE!!! ***" >&4
2497 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2498 rp="    Keep the $hint value?"
2499 . ./myread
2500 case "$ans" in
2501 y) td=$was; tu=$was;;
2502 esac
2503 EOSC
2504
2505 : function used to set $1 to $val
2506 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2507 case "$val$was" in
2508 $define$undef) . ./whoa; eval "$var=\$td";;
2509 $undef$define) . ./whoa; eval "$var=\$tu";;
2510 *) eval "$var=$val";;
2511 esac'
2512
2513 cat <<EOM
2514
2515 Perl can be built to take advantage of threads, on some systems.
2516 To do so, Configure must be run with -Dusethreads.
2517
2518 Note that threading is a highly experimental feature, and
2519 some known race conditions still remain.  If you choose to try
2520 it, be very sure to not actually deploy it for production
2521 purposes.  README.threads has more details, and is required
2522 reading if you enable threads.
2523 EOM
2524 case "$usethreads" in
2525 $define|true|[yY]*)     dflt='y';;
2526 *) dflt='n';;
2527 esac
2528 rp='Build a threading Perl?'
2529 . ./myread
2530 case "$ans" in
2531 y|Y)    val="$define" ;;     
2532 *)      val="$undef" ;;
2533 esac
2534 set usethreads
2535 eval $setvar 
2536
2537 case "$d_oldpthreads" in
2538 '')     : Configure tests would be welcome here.  For now, assume undef.
2539         val="$undef" ;;
2540 *)      val="$d_oldpthreads" ;;
2541 esac
2542 set d_oldpthreads
2543 eval $setvar
2544
2545
2546 case "$usethreads" in
2547 "$define"|true|[yY]*)
2548 : Look for a hint-file generated 'call-back-unit'.  If the
2549 : user has specified that a threading perl is to be built,
2550 : we may need to set or change some other defaults.
2551         if $test -f usethreads.cbu; then
2552                 . ./usethreads.cbu
2553         fi
2554         case "$osname" in
2555         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2556                 # Known thread-capable platforms.
2557                 ;;
2558         *)
2559                 cat >&4 <<EOM
2560 $osname is not known to support threads.
2561 Please let perlbug@perl.com know how to do that.
2562
2563 Cannot continue, aborting.
2564 EOM
2565                 exit 1
2566         ;;
2567         esac # $osname
2568     ;;
2569 esac # $usethreads
2570
2571 cat <<EOM
2572
2573 Perl can be built so that multiple Perl interpreters can coexist
2574 within the same Perl executable.  To do so, Configure must be run with
2575 -Dusemultiplicity.
2576
2577 Normally you do not need this and you should answer no.
2578
2579 EOM
2580 case "$usemultiplicity" in
2581 $define|true|[yY]*)     dflt='y';;
2582 *) dflt='n';;
2583 esac
2584 rp='Build Perl for multiplicity?'
2585 . ./myread
2586 case "$ans" in
2587 y|Y)    val="$define" ;;     
2588 *)      val="$undef" ;;
2589 esac
2590 set usemultiplicity
2591 eval $setvar 
2592
2593 cat <<EOM
2594
2595 Perl can be built to take advantage of explicit 64-bit interfaces,
2596 on some systems.  To do so, Configure must be run with -Duse64bits.
2597
2598 If this doesn't make any sense to you, just accept the default 'n'.
2599 EOM
2600 case "$use64bits" in
2601 $define|true|[yY]*)     dflt='y';;
2602 *) dflt='n';;
2603 esac
2604 rp='Try to use explicit 64-bit interfaces, if available?'
2605 . ./myread
2606 case "$ans" in
2607 y|Y) 
2608         val="$define"
2609         ;;     
2610 *)      
2611         val="$undef"
2612         ;;
2613 esac
2614 set use64bits
2615 eval $setvar
2616
2617 case "$archname64" in
2618 '') archname64='' ;;    # not a typo
2619 esac
2620
2621 case "$use64bits" in
2622 "$define"|true|[yY]*)
2623 : Look for a hint-file generated 'call-back-unit'.  If the
2624 : user has specified that a threading perl is to be built,
2625 : we may need to set or change some other defaults.
2626         if $test -f use64bits.cbu; then
2627                 . ./use64bits.cbu
2628         fi
2629         case "$osname" in
2630         dec_osf|hpux|irix|solaris|unicos)
2631                 # Known 64-bit capable platforms.
2632                 ;;
2633         *)
2634                 cat >&4 <<EOM
2635 $osname is not known to support 64-bit interfaces.
2636 Please let perlbug@perl.com know how to do that.
2637
2638 Cannot continue, aborting.
2639 EOM
2640                 exit 1
2641                 ;;
2642         esac
2643         ;;
2644 esac
2645
2646 : determine the architecture name
2647 echo " "
2648 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2649         tarch=`arch`"-$osname"
2650 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2651         if uname -m > tmparch 2>&1 ; then
2652                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2653                         -e 's/$/'"-$osname/" tmparch`
2654         else
2655                 tarch="$osname"
2656         fi
2657         $rm -f tmparch
2658 else
2659         tarch="$osname"
2660 fi
2661 case "$myarchname" in
2662 ''|"$tarch") ;;
2663 *)
2664         echo "(Your architecture name used to be $myarchname.)"
2665         archname=''
2666         ;;
2667 esac
2668 myarchname="$tarch"
2669 case "$archname" in
2670 '') dflt="$tarch";;
2671 *) dflt="$archname";;
2672 esac
2673 rp='What is your architecture name'
2674 . ./myread
2675 archname="$ans"
2676 case "$usethreads" in
2677 $define)
2678         echo "Threads selected." >&4
2679         case "$archname" in
2680         *-thread*) echo "...and architecture name already has -thread." >&4
2681                 ;;
2682         *)      archname="$archname-thread"
2683                 echo "...setting architecture name to $archname." >&4
2684                 ;;
2685         esac
2686         ;;
2687 esac
2688 case "$usemultiplicity" in
2689 $define)
2690         echo "Multiplicity selected." >&4
2691         case "$archname" in
2692         *-multi*) echo "...and architecture name already has -multi." >&4
2693                 ;;
2694         *)      archname="$archname-multi"
2695                 echo "...setting architecture name to $archname." >&4
2696                 ;;
2697         esac
2698         ;;
2699 esac
2700 case "$use64bits" in
2701 $define)
2702         echo "Explicit 64-bitness selected." >&4
2703         case "$archname64" in
2704         '')
2705                 ;;
2706         *)
2707                 case "$archname" in
2708                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2709                         ;;
2710                 *)      archname="$archname-$archname64"
2711                         echo "...setting architecture name to $archname." >&4
2712                         ;;
2713                 esac
2714                 ;;
2715         esac
2716 esac
2717
2718 : is AFS running?
2719 echo " "
2720 case "$afs" in
2721 $define|true)   afs=true ;;
2722 $undef|false)   afs=false ;;
2723 *)      if test -d /afs; then
2724                 afs=true
2725         else
2726                 afs=false
2727         fi
2728         ;;
2729 esac
2730 if $afs; then
2731         echo "AFS may be running... I'll be extra cautious then..." >&4
2732 else
2733         echo "AFS does not seem to be running..." >&4
2734 fi
2735
2736 : decide how portable to be.  Allow command line overrides.
2737 case "$d_portable" in
2738 "$undef") ;;
2739 *)      d_portable="$define" ;;
2740 esac
2741
2742 : set up shell script to do ~ expansion
2743 cat >filexp <<EOSS
2744 $startsh
2745 : expand filename
2746 case "\$1" in
2747  ~/*|~)
2748         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2749         ;;
2750  ~*)
2751         if $test -f /bin/csh; then
2752                 /bin/csh -f -c "glob \$1"
2753                 failed=\$?
2754                 echo ""
2755                 exit \$failed
2756         else
2757                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2758                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2759                 if $test ! -d "\$dir"; then
2760                         me=\`basename \$0\`
2761                         echo "\$me: can't locate home directory for: \$name" >&2
2762                         exit 1
2763                 fi
2764                 case "\$1" in
2765                 */*)
2766                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2767                         ;;
2768                 *)
2769                         echo \$dir
2770                         ;;
2771                 esac
2772         fi
2773         ;;
2774 *)
2775         echo \$1
2776         ;;
2777 esac
2778 EOSS
2779 chmod +x filexp
2780 $eunicefix filexp
2781
2782 : now set up to get a file name
2783 cat <<EOS >getfile
2784 $startsh
2785 EOS
2786 cat <<'EOSC' >>getfile
2787 tilde=''
2788 fullpath=''
2789 already=''
2790 skip=''
2791 none_ok=''
2792 exp_file=''
2793 nopath_ok=''
2794 orig_rp="$rp"
2795 orig_dflt="$dflt"
2796
2797 case "$fn" in
2798 *\(*)
2799         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2800         fn=`echo $fn | sed 's/(.*)//'`
2801         ;;
2802 esac
2803
2804 case "$fn" in
2805 *:*)
2806         loc_file=`expr $fn : '.*:\(.*\)'`
2807         fn=`expr $fn : '\(.*\):.*'`
2808         ;;
2809 esac
2810
2811 case "$fn" in
2812 *~*) tilde=true;;
2813 esac
2814 case "$fn" in
2815 */*) fullpath=true;;
2816 esac
2817 case "$fn" in
2818 *+*) skip=true;;
2819 esac
2820 case "$fn" in
2821 *n*) none_ok=true;;
2822 esac
2823 case "$fn" in
2824 *e*) exp_file=true;;
2825 esac
2826 case "$fn" in
2827 *p*) nopath_ok=true;;
2828 esac
2829
2830 case "$fn" in
2831 *f*) type='File';;
2832 *d*) type='Directory';;
2833 *l*) type='Locate';;
2834 esac
2835
2836 what="$type"
2837 case "$what" in
2838 Locate) what='File';;
2839 esac
2840
2841 case "$exp_file" in
2842 '')
2843         case "$d_portable" in
2844         "$define") ;;
2845         *) exp_file=true;;
2846         esac
2847         ;;
2848 esac
2849
2850 cd ..
2851 while test "$type"; do
2852         redo=''
2853         rp="$orig_rp"
2854         dflt="$orig_dflt"
2855         case "$tilde" in
2856         true) rp="$rp (~name ok)";;
2857         esac
2858         . UU/myread
2859         if test -f UU/getfile.ok && \
2860                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2861         then
2862                 value="$ans"
2863                 ansexp="$ans"
2864                 break
2865         fi
2866         case "$ans" in
2867         none)
2868                 value=''
2869                 ansexp=''
2870                 case "$none_ok" in
2871                 true) type='';;
2872                 esac
2873                 ;;
2874         *)
2875                 case "$tilde" in
2876                 '') value="$ans"
2877                         ansexp="$ans";;
2878                 *)
2879                         value=`UU/filexp $ans`
2880                         case $? in
2881                         0)
2882                                 if test "$ans" != "$value"; then
2883                                         echo "(That expands to $value on this system.)"
2884                                 fi
2885                                 ;;
2886                         *) value="$ans";;
2887                         esac
2888                         ansexp="$value"
2889                         case "$exp_file" in
2890                         '') value="$ans";;
2891                         esac
2892                         ;;
2893                 esac
2894                 case "$fullpath" in
2895                 true)
2896                         case "$ansexp" in
2897                         /*) value="$ansexp" ;;
2898                         *)
2899                                 redo=true
2900                                 case "$already" in
2901                                 true)
2902                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2903                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2904                                         ;;
2905                                 *)
2906                                 echo "Please give a full path name, starting with slash." >&4
2907                                         case "$tilde" in
2908                                         true)
2909                                 echo "Note that using ~name is ok provided it expands well." >&4
2910                                                 already=true
2911                                                 ;;
2912                                         esac
2913                                 esac
2914                                 ;;
2915                         esac
2916                         ;;
2917                 esac
2918                 case "$redo" in
2919                 '')
2920                         case "$type" in
2921                         File)
2922                                 if test -f "$ansexp"; then
2923                                         type=''
2924                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2925                                 then
2926                                         echo "($value is not a plain file, but that's ok.)"
2927                                         type=''
2928                                 fi
2929                                 ;;
2930                         Directory)
2931                                 if test -d "$ansexp"; then
2932                                         type=''
2933                                 fi
2934                                 ;;
2935                         Locate)
2936                                 if test -d "$ansexp"; then
2937                                         echo "(Looking for $loc_file in directory $value.)"
2938                                         value="$value/$loc_file"
2939                                         ansexp="$ansexp/$loc_file"
2940                                 fi
2941                                 if test -f "$ansexp"; then
2942                                         type=''
2943                                 fi
2944                                 case "$nopath_ok" in
2945                                 true)   case "$value" in
2946                                         */*) ;;
2947                                         *)      echo "Assuming $value will be in people's path."
2948                                                 type=''
2949                                                 ;;
2950                                         esac
2951                                         ;;
2952                                 esac
2953                                 ;;
2954                         esac
2955
2956                         case "$skip" in
2957                         true) type='';
2958                         esac
2959
2960                         case "$type" in
2961                         '') ;;
2962                         *)
2963                                 if test "$fastread" = yes; then
2964                                         dflt=y
2965                                 else
2966                                         dflt=n
2967                                 fi
2968                                 rp="$what $value doesn't exist.  Use that name anyway?"
2969                                 . UU/myread
2970                                 dflt=''
2971                                 case "$ans" in
2972                                 y*) type='';;
2973                                 *) echo " ";;
2974                                 esac
2975                                 ;;
2976                         esac
2977                         ;;
2978                 esac
2979                 ;;
2980         esac
2981 done
2982 cd UU
2983 ans="$value"
2984 rp="$orig_rp"
2985 dflt="$orig_dflt"
2986 rm -f getfile.ok
2987 EOSC
2988
2989 : determine root of directory hierarchy where package will be installed.
2990 case "$prefix" in
2991 '')
2992         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2993         ;;
2994 *)
2995         dflt="$prefix"
2996         ;;
2997 esac
2998 $cat <<EOM
2999
3000 By default, $package will be installed in $dflt/bin, manual
3001 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3002 all installation directories. Typically set to /usr/local, but you
3003 may choose /usr if you wish to install $package among your system
3004 binaries. If you wish to have binaries under /bin but manual pages
3005 under /usr/local/man, that's ok: you will be prompted separately
3006 for each of the installation directories, the prefix being only used
3007 to set the defaults.
3008
3009 EOM
3010 fn=d~
3011 rp='Installation prefix to use?'
3012 . ./getfile
3013 oldprefix=''
3014 case "$prefix" in
3015 '') ;;
3016 *)
3017         case "$ans" in
3018         "$prefix") ;;
3019         *) oldprefix="$prefix";;
3020         esac
3021         ;;
3022 esac
3023 prefix="$ans"
3024 prefixexp="$ansexp"
3025
3026 : set the prefixit variable, to compute a suitable default value
3027 prefixit='case "$3" in
3028 ""|none)
3029         case "$oldprefix" in
3030         "") eval "$1=\"\$$2\"";;
3031         *)
3032                 case "$3" in
3033                 "") eval "$1=";;
3034                 none)
3035                         eval "tp=\"\$$2\"";
3036                         case "$tp" in
3037                         ""|" ") eval "$1=\"\$$2\"";;
3038                         *) eval "$1=";;
3039                         esac;;
3040                 esac;;
3041         esac;;
3042 *)
3043         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3044         case "$tp" in
3045         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3046         /*-$oldprefix/*|\~*-$oldprefix/*)
3047                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3048         *) eval "$1=\"\$$2\"";;
3049         esac;;
3050 esac'
3051
3052 : set the base revision
3053 baserev=5.0
3054
3055 : get the patchlevel
3056 echo " "
3057 echo "Getting the current patchlevel..." >&4
3058 if $test -r $rsrc/patchlevel.h;then
3059         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3060         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3061 else
3062         patchlevel=0
3063         subversion=0
3064 fi
3065 $echo $n "(You have $package" $c
3066 case "$package" in
3067 "*$baserev")    ;;
3068 *)              $echo $n " $baserev" $c ;;
3069 esac
3070 $echo $n " patchlevel $patchlevel" $c
3071 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3072 echo ".)"
3073
3074 if test 0 -eq "$subversion"; then
3075         version=`LC_ALL=C; export LC_ALL; \
3076                  echo $baserev $patchlevel | \
3077                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3078 else
3079         version=`LC_ALL=C; export LC_ALL; \
3080                  echo $baserev $patchlevel $subversion | \
3081                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3082 fi
3083 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3084 if test "$subversion" -lt 50; then
3085         apiversion=`LC_ALL=C; export LC_ALL; \
3086                  LANGUAGE=C; export LANGUAGE; \
3087                  echo $baserev $patchlevel | \
3088                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3089 else
3090         apiversion="$version"
3091 fi
3092
3093 : determine where private library files go
3094 : Usual default is /usr/local/lib/perl5/$version.
3095 : Also allow things like /opt/perl/lib/$version, since 
3096 : /opt/perl/lib/perl5... would be redundant.
3097 case "$prefix" in
3098 *perl*) set dflt privlib lib/$version ;;
3099 *)       set dflt privlib lib/$package/$version ;;
3100 esac
3101 eval $prefixit
3102 $cat <<EOM
3103
3104 There are some auxiliary files for $package that need to be put into a
3105 private library directory that is accessible by everyone.
3106
3107 EOM
3108 fn=d~+
3109 rp='Pathname where the private library files will reside?'
3110 . ./getfile
3111 if $test "X$privlibexp" != "X$ansexp"; then
3112         installprivlib=''
3113 fi
3114 privlib="$ans"
3115 privlibexp="$ansexp"
3116 if $afs; then
3117         $cat <<EOM
3118
3119 Since you are running AFS, I need to distinguish the directory in which
3120 private files reside from the directory in which they are installed (and from
3121 which they are presumably copied to the former directory by occult means).
3122
3123 EOM
3124         case "$installprivlib" in
3125         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3126         *) dflt="$installprivlib";;
3127         esac
3128         fn=de~
3129         rp='Where will private files be installed?'
3130         . ./getfile
3131         installprivlib="$ans"
3132 else
3133         installprivlib="$privlibexp"
3134 fi
3135
3136 : set the prefixup variable, to restore leading tilda escape
3137 prefixup='case "$prefixexp" in
3138 "$prefix") ;;
3139 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3140 esac'
3141
3142 : determine where public architecture dependent libraries go
3143 set archlib archlib
3144 eval $prefixit
3145 : privlib default is /usr/local/lib/$package/$version
3146 : archlib default is /usr/local/lib/$package/$version/$archname
3147 : privlib may have an optional trailing /share.
3148 tdflt=`echo $privlib | $sed 's,/share$,,'`
3149 tdflt=$tdflt/$archname
3150 case "$archlib" in
3151 '')     dflt=$tdflt
3152         ;;
3153 *)      dflt="$archlib"
3154     ;;
3155 esac
3156 cat <<EOM
3157
3158 $spackage contains architecture-dependent library files.  If you are
3159 sharing libraries in a heterogeneous environment, you might store
3160 these files in a separate location.  Otherwise, you can just include
3161 them with the rest of the public library files.
3162
3163 EOM
3164 fn=d+~
3165 rp='Where do you want to put the public architecture-dependent libraries?'
3166 . ./getfile
3167 archlib="$ans"
3168 archlibexp="$ansexp"
3169
3170 if $afs; then
3171         $cat <<EOM
3172
3173 Since you are running AFS, I need to distinguish the directory in
3174 which architecture-dependent library files reside from the directory
3175 in which they are installed (and from which they are presumably copied
3176 to the former directory by occult means).
3177
3178 EOM
3179         case "$installarchlib" in
3180         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3181         *) dflt="$installarchlib";;
3182         esac
3183         fn=de~
3184         rp='Where will architecture-dependent library files be installed?'
3185         . ./getfile
3186         installarchlib="$ans"
3187 else
3188         installarchlib="$archlibexp"
3189 fi
3190 if $test X"$archlib" = X"$privlib"; then
3191         d_archlib="$undef"
3192 else
3193         d_archlib="$define"
3194 fi
3195
3196 : make some quick guesses about what we are up against
3197 echo " "
3198 $echo $n "Hmm...  $c"
3199 echo exit 1 >bsd
3200 echo exit 1 >usg
3201 echo exit 1 >v7
3202 echo exit 1 >osf1
3203 echo exit 1 >eunice
3204 echo exit 1 >xenix
3205 echo exit 1 >venix
3206 echo exit 1 >os2
3207 d_bsd="$undef"
3208 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3209 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3210 then
3211         echo "Looks kind of like an OSF/1 system, but we'll see..."
3212         echo exit 0 >osf1
3213 elif test `echo abc | tr a-z A-Z` = Abc ; then
3214         xxx=`./loc addbib blurfl $pth`
3215         if $test -f $xxx; then
3216         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3217                 echo exit 0 >bsd
3218                 echo exit 0 >usg
3219         else
3220                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3221                         echo "Looks kind of like an extended USG system, but we'll see..."
3222                 else
3223                         echo "Looks kind of like a USG system, but we'll see..."
3224                 fi
3225                 echo exit 0 >usg
3226         fi
3227 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3228         echo "Looks kind of like a BSD system, but we'll see..."
3229         d_bsd="$define"
3230         echo exit 0 >bsd
3231 else
3232         echo "Looks kind of like a Version 7 system, but we'll see..."
3233         echo exit 0 >v7
3234 fi
3235 case "$eunicefix" in
3236 *unixtovms*)
3237         $cat <<'EOI'
3238 There is, however, a strange, musty smell in the air that reminds me of
3239 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3240 EOI
3241         echo exit 0 >eunice
3242         d_eunice="$define"
3243 : it so happens the Eunice I know will not run shell scripts in Unix format
3244         ;;
3245 *)
3246         echo " "
3247         echo "Congratulations.  You aren't running Eunice."
3248         d_eunice="$undef"
3249         ;;
3250 esac
3251 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3252 case "$p_" in
3253 :) ;;
3254 *)
3255         $cat <<'EOI'
3256 I have the feeling something is not exactly right, however...don't tell me...
3257 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3258 EOI
3259         echo exit 0 >os2
3260         ;;
3261 esac
3262 if test -f /xenix; then
3263         echo "Actually, this looks more like a XENIX system..."
3264         echo exit 0 >xenix
3265         d_xenix="$define"
3266 else
3267         echo " "
3268         echo "It's not Xenix..."
3269         d_xenix="$undef"
3270 fi
3271 chmod +x xenix
3272 $eunicefix xenix
3273 if test -f /venix; then
3274         echo "Actually, this looks more like a VENIX system..."
3275         echo exit 0 >venix
3276 else
3277         echo " "
3278         if ./xenix; then
3279                 : null
3280         else
3281                 echo "Nor is it Venix..."
3282         fi
3283 fi
3284 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3285 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3286 $rm -f foo
3287
3288 : see if setuid scripts can be secure
3289 $cat <<EOM
3290
3291 Some kernels have a bug that prevents setuid #! scripts from being
3292 secure.  Some sites have disabled setuid #! scripts because of this.
3293
3294 First let's decide if your kernel supports secure setuid #! scripts.
3295 (If setuid #! scripts would be secure but have been disabled anyway,
3296 don't say that they are secure if asked.)
3297
3298 EOM
3299
3300 val="$undef"
3301 if $test -d /dev/fd; then
3302         echo "#!$ls" >reflect
3303         chmod +x,u+s reflect
3304         ./reflect >flect 2>&1
3305         if $contains "/dev/fd" flect >/dev/null; then
3306                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3307                 val="$define"
3308         else
3309                 $cat <<EOM
3310 If you are not sure if they are secure, I can check but I'll need a
3311 username and password different from the one you are using right now.
3312 If you don't have such a username or don't want me to test, simply
3313 enter 'none'.
3314
3315 EOM
3316                 rp='Other username to test security of setuid scripts with?'
3317                 dflt='none'
3318                 . ./myread
3319                 case "$ans" in
3320                 n|none)
3321                         case "$d_suidsafe" in
3322                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3323                                 dflt=n;;
3324                         "$undef")
3325                                 echo "Well, the $hint value is *not* secure." >&4
3326                                 dflt=n;;
3327                         *)      echo "Well, the $hint value *is* secure." >&4
3328                                 dflt=y;;
3329                         esac
3330                         ;;
3331                 *)
3332                         $rm -f reflect flect
3333                         echo "#!$ls" >reflect
3334                         chmod +x,u+s reflect
3335                         echo >flect
3336                         chmod a+w flect
3337                         echo '"su" will (probably) prompt you for '"$ans's password."
3338                         su $ans -c './reflect >flect'
3339                         if $contains "/dev/fd" flect >/dev/null; then
3340                                 echo "Okay, it looks like setuid scripts are secure." >&4
3341                                 dflt=y
3342                         else
3343                                 echo "I don't think setuid scripts are secure." >&4
3344                                 dflt=n
3345                         fi
3346                         ;;
3347                 esac
3348                 rp='Does your kernel have *secure* setuid scripts?'
3349                 . ./myread
3350                 case "$ans" in
3351                 [yY]*)  val="$define";;
3352                 *)      val="$undef";;
3353                 esac
3354         fi
3355 else
3356         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3357         echo "(That's for file descriptors, not floppy disks.)"
3358         val="$undef"
3359 fi
3360 set d_suidsafe
3361 eval $setvar
3362
3363 $rm -f reflect flect
3364
3365 : now see if they want to do setuid emulation
3366 echo " "
3367 val="$undef"
3368 case "$d_suidsafe" in
3369 "$define")
3370         val="$undef"
3371         echo "No need to emulate SUID scripts since they are secure here." >& 4
3372         ;;
3373 *)
3374         $cat <<EOM
3375 Some systems have disabled setuid scripts, especially systems where
3376 setuid scripts cannot be secure.  On systems where setuid scripts have
3377 been disabled, the setuid/setgid bits on scripts are currently
3378 useless.  It is possible for $package to detect those bits and emulate
3379 setuid/setgid in a secure fashion.  This emulation will only work if
3380 setuid scripts have been disabled in your kernel.
3381
3382 EOM
3383         case "$d_dosuid" in
3384         "$define") dflt=y ;;
3385         *) dflt=n ;;
3386         esac
3387         rp="Do you want to do setuid/setgid emulation?"
3388         . ./myread
3389         case "$ans" in
3390         [yY]*)  val="$define";;
3391         *)      val="$undef";;
3392         esac
3393         ;;
3394 esac
3395 set d_dosuid
3396 eval $setvar
3397
3398 : determine where manual pages are on this system
3399 echo " "
3400 case "$sysman" in
3401 '') 
3402         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3403         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3404         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3405         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3406         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3407         sysman=`./loc . /usr/man/man1 $syspath`
3408         ;;
3409 esac
3410 if $test -d "$sysman"; then
3411         echo "System manual is in $sysman." >&4
3412 else
3413         echo "Could not find manual pages in source form." >&4
3414 fi
3415
3416 : see what memory models we can support
3417 case "$models" in
3418 '')
3419         $cat >pdp11.c <<'EOP'
3420 int main() {
3421 #ifdef pdp11
3422         exit(0);
3423 #else
3424         exit(1);
3425 #endif
3426 }
3427 EOP
3428         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3429         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3430                 dflt='unsplit split'
3431         else
3432                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3433                 case "$tans" in
3434                 X) dflt='none';;
3435                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3436                                 dflt='small'
3437                         else
3438                                 dflt=''
3439                         fi
3440                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3441                                 dflt="$dflt medium"
3442                         fi
3443                         if $test -d /lib/large || $test -d /usr/lib/large; then
3444                                 dflt="$dflt large"
3445                         fi
3446                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3447                                 dflt="$dflt huge"
3448                         fi
3449                 esac
3450         fi;;
3451 *) dflt="$models";;
3452 esac
3453 $cat <<EOM
3454  
3455 Some systems have different model sizes.  On most systems they are called
3456 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3457 split.  If your system doesn't support different memory models, say "none".
3458 If you wish to force everything to one memory model, say "none" here and
3459 put the appropriate flags later when it asks you for other cc and ld flags.
3460 Venix systems may wish to put "none" and let the compiler figure things out.
3461 (In the following question multiple model names should be space separated.)
3462
3463 The default for most systems is "none".
3464
3465 EOM
3466 rp="Which memory models are supported?"
3467 . ./myread
3468 models="$ans"
3469
3470 case "$models" in
3471 none)
3472         small=''
3473         medium=''
3474         large=''
3475         huge=''
3476         unsplit=''
3477         split=''
3478         ;;
3479 *split)
3480         case "$split" in
3481         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3482                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3483                         dflt='-i'
3484                 else
3485                         dflt='none'
3486                 fi;;
3487         *) dflt="$split";;
3488         esac
3489         rp="What flag indicates separate I and D space?"
3490         . ./myread
3491         tans="$ans"
3492         case "$tans" in
3493         none) tans='';;
3494         esac
3495         split="$tans"
3496         unsplit='';;
3497 *large*|*small*|*medium*|*huge*)
3498         case "$models" in
3499         *large*)
3500                 case "$large" in
3501                 '') dflt='-Ml';;
3502                 *) dflt="$large";;
3503                 esac
3504         rp="What flag indicates large model?"
3505         . ./myread
3506         tans="$ans"
3507         case "$tans" in
3508         none) tans='';
3509         esac
3510         large="$tans";;
3511         *) large='';;
3512         esac
3513         case "$models" in
3514         *huge*) case "$huge" in
3515                 '') dflt='-Mh';;
3516                 *) dflt="$huge";;
3517                 esac
3518                 rp="What flag indicates huge model?"
3519                 . ./myread
3520                 tans="$ans"
3521                 case "$tans" in
3522                 none) tans='';
3523                 esac
3524                 huge="$tans";;
3525         *) huge="$large";;
3526         esac
3527         case "$models" in
3528         *medium*) case "$medium" in
3529                 '') dflt='-Mm';;
3530                 *) dflt="$medium";;
3531                 esac
3532                 rp="What flag indicates medium model?"
3533                 . ./myread
3534                 tans="$ans"
3535                 case "$tans" in
3536                 none) tans='';
3537                 esac
3538                 medium="$tans";;
3539         *) medium="$large";;
3540         esac
3541         case "$models" in
3542         *small*) case "$small" in
3543                 '') dflt='none';;
3544                 *) dflt="$small";;
3545                 esac
3546                 rp="What flag indicates small model?"
3547                 . ./myread
3548                 tans="$ans"
3549                 case "$tans" in
3550                 none) tans='';
3551                 esac
3552                 small="$tans";;
3553         *) small='';;
3554         esac
3555         ;;
3556 *)
3557         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3558         ;;
3559 esac
3560 $rm -f pdp11.* pdp11
3561
3562 : see if we need a special compiler
3563 echo " "
3564 if ./usg; then
3565         case "$cc" in
3566         '') case "$Mcc" in
3567                 /*) dflt='Mcc';;
3568                 *) case "$large" in
3569                         -M*) dflt='cc';;
3570                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3571                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3572                                                 dflt='cc'
3573                                         else
3574                                                 dflt='cc -M'
3575                                         fi
3576                                 else
3577                                         dflt='cc'
3578                                 fi;;
3579                         esac;;
3580                 esac;;
3581         *)  dflt="$cc";;
3582         esac
3583         case "$dflt" in
3584         *M*)    $cat <<'EOM'
3585 On some older systems the default C compiler will not resolve multiple global
3586 references that happen to have the same name.  On some such systems the "Mcc"
3587 command may be used to force these to be resolved.  On other systems a "cc -M"
3588 command is required.  (Note that the -M flag on other systems indicates a
3589 memory model to use!) If you have the Gnu C compiler, you might wish to use
3590 that instead.
3591
3592 EOM
3593         ;;
3594         esac
3595         rp="Use which C compiler?"
3596         . ./myread
3597         cc="$ans"
3598 else
3599         case "$cc" in
3600         '') dflt=cc;;
3601         *) dflt="$cc";;
3602         esac
3603         rp="Use which C compiler?"
3604         . ./myread
3605         cc="$ans"
3606 fi
3607 : Look for a hint-file generated 'call-back-unit'.  Now that the
3608 : user has specified the compiler, we may need to set or change some
3609 : other defaults.
3610 if $test -f cc.cbu; then
3611     . ./cc.cbu
3612 fi
3613 echo " "
3614 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3615 $cat >gccvers.c <<EOM
3616 #include <stdio.h>
3617 int main() {
3618 #ifdef __GNUC__
3619 #ifdef __VERSION__
3620         printf("%s\n", __VERSION__);
3621 #else
3622         printf("%s\n", "1");
3623 #endif
3624 #endif
3625         exit(0);
3626 }
3627 EOM
3628 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3629         gccversion=`./gccvers`
3630         case "$gccversion" in
3631         '') echo "You are not using GNU cc." ;;
3632         *)  echo "You are using GNU cc $gccversion." ;;
3633         esac
3634 else
3635         echo " "
3636         echo "*** WHOA THERE!!! ***" >&4
3637         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3638         case "$knowitall" in
3639         '')
3640         echo "    You'd better start hunting for one and let me know about it." >&4
3641                 exit 1
3642                 ;;
3643         esac
3644 fi
3645 $rm -f gccvers*
3646 case "$gccversion" in
3647 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3648 esac
3649
3650 : What should the include directory be ?
3651 echo " "
3652 $echo $n "Hmm...  $c"
3653 dflt='/usr/include'
3654 incpath=''
3655 mips_type=''
3656 if $test -f /bin/mips && /bin/mips; then
3657         echo "Looks like a MIPS system..."
3658         $cat >usr.c <<'EOCP'
3659 #ifdef SYSTYPE_BSD43
3660 /bsd43
3661 #endif
3662 EOCP
3663         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3664                 dflt='/bsd43/usr/include'
3665                 incpath='/bsd43'
3666                 mips_type='BSD 4.3'
3667         else
3668                 mips_type='System V'
3669         fi
3670         $rm -f usr.c usr.out
3671         echo "and you're compiling with the $mips_type compiler and libraries."
3672         xxx_prompt=y
3673         echo "exit 0" >mips
3674 else
3675         echo "Doesn't look like a MIPS system."
3676         xxx_prompt=n
3677         echo "exit 1" >mips
3678 fi
3679 chmod +x mips
3680 $eunicefix mips
3681 case "$usrinc" in
3682 '') ;;
3683 *) dflt="$usrinc";;
3684 esac
3685 case "$xxx_prompt" in
3686 y)      fn=d/
3687         echo " "
3688         rp='Where are the include files you want to use?'
3689         . ./getfile
3690         usrinc="$ans"
3691         ;;
3692 *)      usrinc="$dflt"
3693         ;;
3694 esac
3695
3696 : see how we invoke the C preprocessor
3697 echo " "
3698 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3699 cat <<'EOT' >testcpp.c
3700 #define ABC abc
3701 #define XYZ xyz
3702 ABC.XYZ
3703 EOT
3704 cd ..
3705 if test ! -f cppstdin; then
3706         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3707 else
3708         echo "Keeping your $hint cppstdin wrapper."
3709 fi
3710 chmod 755 cppstdin
3711 wrapper=`pwd`/cppstdin
3712 ok='false'
3713 cd UU
3714
3715 if $test "X$cppstdin" != "X" && \
3716         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3717         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3718 then
3719         echo "You used to use $cppstdin $cppminus so we'll use that again."
3720         case "$cpprun" in
3721         '') echo "But let's see if we can live without a wrapper..." ;;
3722         *)
3723                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3724                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3725                 then
3726                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3727                         ok='true'
3728                 else
3729                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3730                 fi
3731                 ;;
3732         esac
3733 else
3734         case "$cppstdin" in
3735         '') ;;
3736         *)
3737                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3738                 ;;
3739         esac
3740 fi
3741
3742 if $ok; then
3743         : nothing
3744 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3745         $cc -E <testcpp.c >testcpp.out 2>&1; \
3746         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3747         echo "Yup, it does."
3748         x_cpp="$cc -E"
3749         x_minus='';
3750 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3751         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3752         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3753         echo "Yup, it does."
3754         x_cpp="$cc -E"
3755         x_minus='-';
3756 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3757         $cc -P <testcpp.c >testcpp.out 2>&1; \
3758         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3759         echo "Yipee, that works!"
3760         x_cpp="$cc -P"
3761         x_minus='';
3762 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3763         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3764         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3765         echo "At long last!"
3766         x_cpp="$cc -P"
3767         x_minus='-';
3768 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3769         $cpp <testcpp.c >testcpp.out 2>&1; \
3770         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3771         echo "It works!"
3772         x_cpp="$cpp"
3773         x_minus='';
3774 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3775         $cpp - <testcpp.c >testcpp.out 2>&1; \
3776         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3777         echo "Hooray, it works!  I was beginning to wonder."
3778         x_cpp="$cpp"
3779         x_minus='-';
3780 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3781         $wrapper <testcpp.c >testcpp.out 2>&1; \
3782         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3783         x_cpp="$wrapper"
3784         x_minus=''
3785         echo "Eureka!"
3786 else
3787         dflt=''
3788         rp="No dice.  I can't find a C preprocessor.  Name one:"
3789         . ./myread
3790         x_cpp="$ans"
3791         x_minus=''
3792         $x_cpp <testcpp.c >testcpp.out 2>&1
3793         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3794                 echo "OK, that will do." >&4
3795         else
3796 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3797                 exit 1
3798         fi
3799 fi
3800
3801 case "$ok" in
3802 false)
3803         cppstdin="$x_cpp"
3804         cppminus="$x_minus"
3805         cpprun="$x_cpp"
3806         cpplast="$x_minus"
3807         set X $x_cpp
3808         shift
3809         case "$1" in
3810         "$cpp")
3811                 echo "Perhaps can we force $cc -E using a wrapper..."
3812                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3813                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3814                 then
3815                         echo "Yup, we can."
3816                         cppstdin="$wrapper"
3817                         cppminus='';
3818                 else
3819                         echo "Nope, we'll have to live without it..."
3820                 fi
3821                 ;;
3822         esac
3823         case "$cpprun" in
3824         "$wrapper")
3825                 cpprun=''
3826                 cpplast=''
3827                 ;;
3828         esac
3829         ;;
3830 esac
3831
3832 case "$cppstdin" in
3833 "$wrapper"|'cppstdin') ;;
3834 *) $rm -f $wrapper;;
3835 esac
3836 $rm -f testcpp.c testcpp.out
3837
3838 : Set private lib path
3839 case "$plibpth" in
3840 '') if ./mips; then
3841                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3842         fi;;
3843 esac
3844 case "$libpth" in
3845 ' ') dlist='';;
3846 '') dlist="$loclibpth $plibpth $glibpth";;
3847 *) dlist="$libpth";;
3848 esac
3849
3850 : Now check and see which directories actually exist, avoiding duplicates
3851 libpth=''
3852 for xxx in $dlist
3853 do
3854     if $test -d $xxx; then
3855                 case " $libpth " in
3856                 *" $xxx "*) ;;
3857                 *) libpth="$libpth $xxx";;
3858                 esac
3859     fi
3860 done
3861 $cat <<'EOM'
3862
3863 Some systems have incompatible or broken versions of libraries.  Among
3864 the directories listed in the question below, please remove any you
3865 know not to be holding relevant libraries, and add any that are needed.
3866 Say "none" for none.
3867
3868 EOM
3869 case "$libpth" in
3870 '') dflt='none';;
3871 *)
3872         set X $libpth
3873         shift
3874         dflt=${1+"$@"}
3875         ;;
3876 esac
3877 rp="Directories to use for library searches?"
3878 . ./myread
3879 case "$ans" in
3880 none) libpth=' ';;
3881 *) libpth="$ans";;
3882 esac
3883
3884 : compute shared library extension
3885 case "$so" in
3886 '')
3887         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3888                 dflt='sl'
3889         else
3890                 dflt='so'
3891         fi
3892         ;;
3893 *) dflt="$so";;
3894 esac
3895 $cat <<EOM
3896
3897 On some systems, shared libraries may be available.  Answer 'none' if
3898 you want to suppress searching of shared libraries for the remaining
3899 of this configuration.
3900
3901 EOM
3902 rp='What is the file extension used for shared libraries?'
3903 . ./myread
3904 so="$ans"
3905
3906 : Define several unixisms.
3907 : Hints files or command line option can be used to override them.
3908 : The convoluted testing is in case hints files set either the old
3909 : or the new name.
3910 case "$_exe" in
3911 '')     case "$exe_ext" in
3912     '') ;;
3913         *)      _exe="$exe_ext" ;;
3914         esac
3915         ;;
3916 esac
3917 case "$_a" in
3918 '')     case "$lib_ext" in
3919     '') _a='.a';;
3920         *)      _a="$lib_ext" ;;
3921         esac
3922         ;;
3923 esac
3924 case "$_o" in
3925 '') case "$obj_ext" in
3926         '')     _o='.o';;
3927         *)      _o="$obj_ext";;
3928         esac
3929         ;;
3930 esac
3931 case "$p_" in
3932 '') case "$path_sep" in
3933         '')     p_=':';;
3934         *)      p_="$path_sep";;
3935         esac
3936         ;;
3937 esac
3938 exe_ext=$_exe
3939 lib_ext=$_a
3940 obj_ext=$_o
3941 path_sep=$p_
3942
3943 : Which makefile gets called first.  This is used by make depend.
3944 case "$firstmakefile" in
3945 '') firstmakefile='makefile';;
3946 esac
3947
3948 : Looking for optional libraries
3949 echo " "
3950 echo "Checking for optional libraries..." >&4
3951 case "$libs" in
3952 ' '|'') dflt='';;
3953 *) dflt="$libs";;
3954 esac
3955 case "$libswanted" in
3956 '') libswanted='c_s';;
3957 esac
3958 for thislib in $libswanted; do
3959         
3960         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3961                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3962                 echo "Found -l$thislib (shared)."
3963                 case " $dflt " in
3964                 *"-l$thislib "*);;
3965                 *) dflt="$dflt -l$thislib";;
3966                 esac
3967         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3968                 echo "Found -l$thislib (shared)."
3969                 case " $dflt " in
3970                 *"-l$thislib "*);;
3971                 *) dflt="$dflt -l$thislib";;
3972                 esac
3973         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3974                 echo "Found -l$thislib."
3975                 case " $dflt " in
3976                 *"-l$thislib "*);;
3977                 *) dflt="$dflt -l$thislib";;
3978                 esac
3979         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3980                 echo "Found -l$thislib."
3981                 case " $dflt " in
3982                 *"-l$thislib "*);;
3983                 *) dflt="$dflt -l$thislib";;
3984                 esac
3985         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3986                 echo "Found -l${thislib}_s."
3987                 case " $dflt " in
3988                 *"-l$thislib "*);;
3989                 *) dflt="$dflt -l${thislib}_s";;
3990                 esac
3991         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3992                 echo "Found -l$thislib."
3993                 case " $dflt " in
3994                 *"-l$thislib "*);;
3995                 *) dflt="$dflt -l$thislib";;
3996                 esac
3997         else
3998                 echo "No -l$thislib."
3999         fi
4000 done
4001 set X $dflt
4002 shift
4003 dflt="$*"
4004 case "$libs" in
4005 '') dflt="$dflt";;
4006 *) dflt="$libs";;
4007 esac
4008 case "$dflt" in
4009 ' '|'') dflt='none';;
4010 esac
4011
4012 $cat <<EOM
4013  
4014 Some versions of Unix support shared libraries, which make executables smaller
4015 but make load time slightly longer.
4016
4017 On some systems, mostly System V Release 3's, the shared library is included
4018 by putting the option "-lc_s" as the last thing on the cc command line when
4019 linking.  Other systems use shared libraries by default.  There may be other
4020 libraries needed to compile $package on your machine as well.  If your system
4021 needs the "-lc_s" option, include it here.  Include any other special libraries
4022 here as well.  Say "none" for none.
4023 EOM
4024
4025 echo " "
4026 rp="Any additional libraries?"
4027 . ./myread
4028 case "$ans" in
4029 none) libs=' ';;
4030 *) libs="$ans";;
4031 esac
4032
4033 : determine optimize, if desired, or use for debug flag also
4034 case "$optimize" in
4035 ' '|$undef) dflt='none';;
4036 '') dflt='-O';;
4037 *) dflt="$optimize";;
4038 esac
4039 $cat <<EOH
4040
4041 Some C compilers have problems with their optimizers.  By default, $package
4042 compiles with the -O flag to use the optimizer.  Alternately, you might want
4043 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4044 systems).  Either flag can be specified here.  To use neither flag, specify
4045 the word "none".
4046
4047 EOH
4048 rp="What optimizer/debugger flag should be used?"
4049 . ./myread
4050 optimize="$ans"
4051 case "$optimize" in
4052 'none') optimize=" ";;
4053 esac
4054
4055 dflt=''
4056 : We will not override a previous value, but we might want to
4057 : augment a hint file
4058 case "$hint" in
4059 none|recommended)
4060         case "$gccversion" in
4061         1*) dflt='-fpcc-struct-return' ;;
4062         esac
4063         case "$optimize" in
4064         *-g*) dflt="$dflt -DDEBUGGING";;
4065         esac
4066         case "$gccversion" in
4067         2*) if test -d /etc/conf/kconfig.d &&
4068                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4069                 then
4070                         dflt="$dflt -posix"
4071                 fi
4072                 ;;
4073         esac
4074         ;;
4075 esac
4076
4077 case "$mips_type" in
4078 *BSD*|'') inclwanted="$locincpth $usrinc";;
4079 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4080 esac
4081 for thisincl in $inclwanted; do
4082         if $test -d $thisincl; then
4083                 if $test x$thisincl != x$usrinc; then
4084                         case "$dflt" in
4085                         *$thisincl*);;
4086                         *) dflt="$dflt -I$thisincl";;
4087                         esac
4088                 fi
4089         fi
4090 done
4091
4092 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4093         xxx=true;
4094 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4095         xxx=true;
4096 else
4097         xxx=false;
4098 fi;
4099 if $xxx; then
4100         case "$dflt" in
4101         *$2*);;
4102         *) dflt="$dflt -D$2";;
4103         esac;
4104 fi'
4105
4106 set signal.h LANGUAGE_C; eval $inctest
4107
4108 case "$hint" in
4109 none|recommended) dflt="$ccflags $dflt" ;;
4110 *) dflt="$ccflags";;
4111 esac
4112
4113 case "$dflt" in
4114 ''|' ') dflt=none;;
4115 esac
4116 $cat <<EOH
4117
4118 Your C compiler may want other flags.  For this question you should include
4119 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4120 but you should NOT include libraries or ld flags like -lwhatever.  If you
4121 want $package to honor its debug switch, you should include -DDEBUGGING here.
4122 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4123
4124 To use no flags, specify the word "none".
4125
4126 EOH
4127 set X $dflt
4128 shift
4129 dflt=${1+"$@"}
4130 rp="Any additional cc flags?"
4131 . ./myread
4132 case "$ans" in
4133 none) ccflags='';;
4134 *) ccflags="$ans";;
4135 esac
4136
4137 : the following weeds options from ccflags that are of no interest to cpp
4138 cppflags="$ccflags"
4139 case "$gccversion" in
4140 1*) cppflags="$cppflags -D__GNUC__"
4141 esac
4142 case "$mips_type" in
4143 '');;
4144 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4145 esac
4146 case "$cppflags" in
4147 '');;
4148 *)
4149         echo " "
4150         echo "Let me guess what the preprocessor flags are..." >&4
4151         set X $cppflags
4152         shift
4153         cppflags=''
4154         $cat >cpp.c <<'EOM'
4155 #define BLURFL foo
4156
4157 BLURFL xx LFRULB
4158 EOM
4159         previous=''
4160         for flag in $*
4161         do
4162                 case "$flag" in
4163                 -*) ftry="$flag";;
4164                 *) ftry="$previous $flag";;
4165                 esac
4166                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4167                         >cpp1.out 2>/dev/null && \
4168                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4169                         >cpp2.out 2>/dev/null && \
4170                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4171                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4172                 then
4173                         cppflags="$cppflags $ftry"
4174                         previous=''
4175                 else
4176                         previous="$flag"
4177                 fi
4178         done
4179         set X $cppflags
4180         shift
4181         cppflags=${1+"$@"}
4182         case "$cppflags" in
4183         *-*)  echo "They appear to be: $cppflags";;
4184         esac
4185         $rm -f cpp.c cpp?.out
4186         ;;
4187 esac
4188
4189 : flags used in final linking phase
4190 case "$ldflags" in
4191 '') if ./venix; then
4192                 dflt='-i -z'
4193         else
4194                 dflt=''
4195         fi
4196         case "$ccflags" in
4197         *-posix*) dflt="$dflt -posix" ;;
4198         esac
4199         ;;
4200 *) dflt="$ldflags";;
4201 esac
4202
4203 : Try to guess additional flags to pick up local libraries.
4204 for thislibdir in $libpth; do
4205         case " $loclibpth " in
4206         *" $thislibdir "*)
4207                 case "$dflt " in 
4208                 *"-L$thislibdir "*) ;;
4209                 *)  dflt="$dflt -L$thislibdir" ;;
4210                 esac
4211                 ;;
4212         esac
4213 done
4214
4215 case "$dflt" in
4216 '') dflt='none' ;;
4217 esac
4218
4219 $cat <<EOH
4220
4221 Your C linker may need flags.  For this question you should
4222 include -L/whatever and any other flags used by the C linker, but you
4223 should NOT include libraries like -lwhatever.
4224
4225 Make sure you include the appropriate -L/path flags if your C linker
4226 does not normally search all of the directories you specified above,
4227 namely
4228         $libpth
4229 To use no flags, specify the word "none".
4230
4231 EOH
4232
4233 rp="Any additional ld flags (NOT including libraries)?"
4234 . ./myread
4235 case "$ans" in
4236 none) ldflags='';;
4237 *) ldflags="$ans";;
4238 esac
4239 rmlist="$rmlist pdp11"
4240
4241 : coherency check
4242 echo " "
4243 echo "Checking your choice of C compiler and flags for coherency..." >&4
4244 $cat > try.c <<'EOF'
4245 #include <stdio.h>
4246 int main() { printf("Ok\n"); exit(0); }
4247 EOF
4248 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4249 shift
4250 $cat >try.msg <<'EOM'
4251 I've tried to compile and run the following simple program:
4252
4253 EOM
4254 $cat try.c >> try.msg
4255
4256 $cat >> try.msg <<EOM
4257
4258 I used the command:
4259
4260         $*
4261         ./try
4262
4263 and I got the following output:
4264
4265 EOM
4266 dflt=y
4267 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4268         if sh -c './try' >>try.msg 2>&1; then
4269                 xxx=`./try`
4270                 case "$xxx" in
4271                 "Ok") dflt=n ;;
4272                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4273                         case " $libs " in
4274                         *" -lsfio "*)
4275                                 cat >> try.msg <<'EOQS'
4276 If $libs contains -lsfio, and sfio is mis-configured, then it
4277 sometimes (apparently) runs and exits with a 0 status, but with no
4278 output!  It may have to do with sfio's use of _exit vs. exit.
4279
4280 EOQS
4281                                 rp="You have a big problem.  Shall I abort Configure"
4282                                 dflt=y
4283                                 ;;
4284                         esac
4285                         ;;
4286                 esac
4287         else
4288                 echo "The program compiled OK, but exited with status $?." >>try.msg
4289                 rp="You have a problem.  Shall I abort Configure"
4290                 dflt=y
4291         fi
4292 else
4293         echo "I can't compile the test program." >>try.msg
4294         rp="You have a BIG problem.  Shall I abort Configure"
4295         dflt=y
4296 fi
4297 case "$dflt" in
4298 y)
4299         $cat try.msg >&4
4300         case "$knowitall" in
4301         '')
4302                 echo "(The supplied flags or libraries might be incorrect.)"
4303                 ;;
4304         *) dflt=n;;
4305         esac
4306         echo " "
4307         . ./myread
4308         case "$ans" in
4309         n*|N*) ;;
4310         *)      echo "Ok.  Stopping Configure." >&4
4311                 exit 1
4312                 ;;
4313         esac
4314         ;;
4315 n) echo "OK, that should do.";;
4316 esac
4317 $rm -f try try.* core
4318
4319 : determine filename position in cpp output
4320 echo " "
4321 echo "Computing filename position in cpp output for #include directives..." >&4
4322 echo '#include <stdio.h>' > foo.c
4323 $cat >fieldn <<EOF
4324 $startsh
4325 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4326 $grep '^[       ]*#.*stdio\.h' | \
4327 while read cline; do
4328         pos=1
4329         set \$cline
4330         while $test \$# -gt 0; do
4331                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4332                         echo "\$pos"
4333                         exit 0
4334                 fi
4335                 shift
4336                 pos=\`expr \$pos + 1\`
4337         done
4338 done
4339 EOF
4340 chmod +x fieldn
4341 fieldn=`./fieldn`
4342 $rm -f foo.c fieldn
4343 case $fieldn in
4344 '') pos='???';;
4345 1) pos=first;;
4346 2) pos=second;;
4347 3) pos=third;;
4348 *) pos="${fieldn}th";;
4349 esac
4350 echo "Your cpp writes the filename in the $pos field of the line."
4351
4352 : locate header file
4353 $cat >findhdr <<EOF
4354 $startsh
4355 wanted=\$1
4356 name=''
4357 for usrincdir in $usrinc
4358 do
4359         if test -f \$usrincdir/\$wanted; then
4360                 echo "\$usrincdir/\$wanted"
4361                 exit 0
4362         fi
4363 done
4364 awkprg='{ print \$$fieldn }'
4365 echo "#include <\$wanted>" > foo\$\$.c
4366 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4367 $grep "^[       ]*#.*\$wanted" | \
4368 while read cline; do
4369         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4370         case "\$name" in
4371         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4372         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4373         *) exit 2;;
4374         esac;
4375 done;
4376 #
4377 #status=0: grep returned 0 lines, case statement not executed
4378 #status=1: headerfile found
4379 #status=2: while loop executed, no headerfile found
4380 #
4381 status=\$?
4382 $rm -f foo\$\$.c;
4383 if test \$status -eq 1; then
4384         exit 0;
4385 fi
4386 exit 1
4387 EOF
4388 chmod +x findhdr
4389
4390
4391 : define an alternate in-header-list? function
4392 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4393 cont=true; xxf="echo \"<\$1> found.\" >&4";
4394 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4395 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4396 esac;
4397 case $# in 4) instead=instead;; *) instead="at last";; esac;
4398 while $test "$cont"; do
4399         xxx=`./findhdr $1`
4400         var=$2; eval "was=\$$2";
4401         if $test "$xxx" && $test -r "$xxx";
4402         then eval $xxf;
4403         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4404                 cont="";
4405         else eval $xxnf;
4406         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4407         set $yyy; shift; shift; yyy=$@;
4408         case $# in 0) cont="";;
4409         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4410                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4411         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4412                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4413         esac;
4414 done;
4415 while $test "$yyy";
4416 do set $yyy; var=$2; eval "was=\$$2";
4417         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4418         set $yyy; shift; shift; yyy=$@;
4419 done'
4420
4421 : see if this is a malloc.h system
4422 set malloc.h i_malloc
4423 eval $inhdr
4424
4425 : see if stdlib is available
4426 set stdlib.h i_stdlib
4427 eval $inhdr
4428
4429 : determine which malloc to compile in
4430 echo " "
4431 case "$usemymalloc" in
4432 ''|[yY]*|true|$define)  dflt='y' ;;
4433 *)      dflt='n' ;;
4434 esac
4435 rp="Do you wish to attempt to use the malloc that comes with $package?"
4436 . ./myread
4437 usemymalloc="$ans"
4438 case "$ans" in
4439 y*|true)
4440         usemymalloc='y'
4441         mallocsrc='malloc.c'
4442         mallocobj="malloc$_o"
4443         d_mymalloc="$define"
4444         case "$libs" in
4445         *-lmalloc*)
4446                 : Remove malloc from list of libraries to use
4447                 echo "Removing unneeded -lmalloc from library list" >&4
4448                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4449                 shift
4450                 libs="$*"
4451                 echo "libs = $libs" >&4
4452                 ;;
4453         esac
4454         ;;
4455 *)
4456         usemymalloc='n'
4457         mallocsrc=''
4458         mallocobj=''
4459         d_mymalloc="$undef"
4460         ;;
4461 esac
4462
4463 : compute the return types of malloc and free
4464 echo " "
4465 $cat >malloc.c <<END
4466 #$i_malloc I_MALLOC
4467 #$i_stdlib I_STDLIB
4468 #include <stdio.h>
4469 #include <sys/types.h>
4470 #ifdef I_MALLOC
4471 #include <malloc.h>
4472 #endif
4473 #ifdef I_STDLIB
4474 #include <stdlib.h>
4475 #endif
4476 #ifdef TRY_MALLOC
4477 void *malloc();
4478 #endif
4479 #ifdef TRY_FREE
4480 void free();
4481 #endif
4482 END
4483 case "$malloctype" in
4484 '')
4485         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4486                 malloctype='void *'
4487         else
4488                 malloctype='char *'
4489         fi
4490         ;;
4491 esac
4492 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4493
4494 case "$freetype" in
4495 '')
4496         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4497                 freetype='void'
4498         else
4499                 freetype='int'
4500         fi
4501         ;;
4502 esac
4503 echo "Your system uses $freetype free(), it would seem." >&4
4504 $rm -f malloc.[co]
4505 : Cruising for prototypes
4506 echo " "
4507 echo "Checking out function prototypes..." >&4
4508 $cat >prototype.c <<'EOCP'
4509 int main(int argc, char *argv[]) {
4510         exit(0);}
4511 EOCP
4512 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4513         echo "Your C compiler appears to support function prototypes."
4514         val="$define"
4515 else
4516         echo "Your C compiler doesn't seem to understand function prototypes."
4517         val="$undef"
4518 fi
4519 set prototype
4520 eval $setvar
4521 $rm -f prototype*
4522
4523 case "$prototype" in
4524 "$define") ;;
4525 *)      ansi2knr='ansi2knr'
4526         echo " "
4527         cat <<EOM >&4
4528
4529 $me:  FATAL ERROR:
4530 This version of $package can only be compiled by a compiler that 
4531 understands function prototypes.  Unfortunately, your C compiler 
4532         $cc $ccflags
4533 doesn't seem to understand them.  Sorry about that.
4534
4535 If GNU cc is available for your system, perhaps you could try that instead.  
4536
4537 Eventually, we hope to support building Perl with pre-ANSI compilers.
4538 If you would like to help in that effort, please contact <perlbug@perl.org>.
4539
4540 Aborting Configure now.
4541 EOM
4542         exit 2
4543         ;;
4544 esac
4545
4546 : determine where public executables go
4547 echo " "
4548 set dflt bin bin
4549 eval $prefixit
4550 fn=d~
4551 rp='Pathname where the public executables will reside?'
4552 . ./getfile
4553 if $test "X$ansexp" != "X$binexp"; then
4554         installbin=''
4555 fi
4556 bin="$ans"
4557 binexp="$ansexp"
4558 if $afs; then
4559         $cat <<EOM
4560
4561 Since you are running AFS, I need to distinguish the directory in which
4562 executables reside from the directory in which they are installed (and from
4563 which they are presumably copied to the former directory by occult means).
4564
4565 EOM
4566         case "$installbin" in
4567         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4568         *) dflt="$installbin";;
4569         esac
4570         fn=de~
4571         rp='Where will public executables be installed?'
4572         . ./getfile
4573         installbin="$ans"
4574 else
4575         installbin="$binexp"
4576 fi
4577
4578 : determine whether to install perl also as /usr/bin/perl
4579
4580 echo " "
4581 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4582         $cat <<EOM
4583 Many scripts expect to perl to be installed as /usr/bin/perl.
4584 I can install the perl you are about to compile also as /usr/bin/perl
4585 (in addition to $installbin/perl).
4586 EOM
4587         case "$installusrbinperl" in
4588         "$undef"|[nN]*) dflt='n';;
4589         *)              dflt='y';;
4590         esac
4591         rp="Do you want to install perl as /usr/bin/perl?"
4592         . ./myread
4593         case "$ans" in
4594         [yY]*)  val="$define";;
4595         *)      val="$undef" ;;
4596         esac
4597 else
4598         val="$undef"
4599 fi
4600 set installusrbinperl
4601 eval $setvar
4602
4603 : define a shorthand compile call
4604 compile='
4605 mc_file=$1;
4606 shift;
4607 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4608 : define a shorthand compile call for compilations that should be ok.
4609 compile_ok='
4610 mc_file=$1;
4611 shift;
4612 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4613
4614 echo " "
4615 echo "Checking for GNU C Library..." >&4
4616 cat >gnulibc.c <<EOM
4617 #include <stdio.h>
4618 int main()
4619 {
4620 #ifdef __GLIBC__
4621     exit(0);
4622 #else
4623     exit(1);
4624 #endif
4625 }
4626 EOM
4627 set gnulibc
4628 if eval $compile_ok && ./gnulibc; then
4629         val="$define"
4630         echo "You are using the GNU C Library"
4631 else
4632         val="$undef"
4633         echo "You are not using the GNU C Library"
4634 fi
4635 $rm -f gnulibc*
4636 set d_gnulibc
4637 eval $setvar
4638
4639 : see if nm is to be used to determine whether a symbol is defined or not
4640 case "$usenm" in
4641 '')
4642         dflt=''
4643         case "$d_gnulibc" in
4644         "$define")
4645                 echo " "
4646                 echo "nm probably won't work on the GNU C Library." >&4
4647                 dflt=n
4648                 ;;
4649         esac
4650         case "$dflt" in
4651         '') 
4652                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4653                         echo " "
4654                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4655                         echo "'nm' won't be sufficient on this sytem." >&4
4656                         dflt=n
4657                 fi
4658                 ;;
4659         esac
4660         case "$dflt" in
4661         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4662                 if $test $dflt -gt 20; then
4663                         dflt=y
4664                 else
4665                         dflt=n
4666                 fi
4667                 ;;
4668         esac
4669         ;;
4670 *)
4671         case "$usenm" in
4672         true|$define) dflt=y;;
4673         *) dflt=n;;
4674         esac
4675         ;;
4676 esac
4677 $cat <<EOM
4678
4679 I can use $nm to extract the symbols from your C libraries. This
4680 is a time consuming task which may generate huge output on the disk (up
4681 to 3 megabytes) but that should make the symbols extraction faster. The
4682 alternative is to skip the 'nm' extraction part and to compile a small
4683 test program instead to determine whether each symbol is present. If
4684 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4685 this may be the best solution.
4686
4687 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4688
4689 EOM
4690 rp="Shall I use $nm to extract C symbols from the libraries?"
4691 . ./myread
4692 case "$ans" in
4693 [Nn]*) usenm=false;;
4694 *) usenm=true;;
4695 esac
4696
4697 runnm=$usenm
4698 case "$reuseval" in
4699 true) runnm=false;;
4700 esac
4701
4702 : nm options which may be necessary
4703 case "$nm_opt" in
4704 '') if $test -f /mach_boot; then
4705                 nm_opt=''       # Mach
4706         elif $test -d /usr/ccs/lib; then
4707                 nm_opt='-p'     # Solaris (and SunOS?)
4708         elif $test -f /dgux; then
4709                 nm_opt='-p'     # DG-UX
4710         elif $test -f /lib64/rld; then
4711                 nm_opt='-p'     # 64-bit Irix
4712         else
4713                 nm_opt=''
4714         fi;;
4715 esac
4716
4717 : nm options which may be necessary for shared libraries but illegal
4718 : for archive libraries.  Thank you, Linux.
4719 case "$nm_so_opt" in
4720 '')     case "$myuname" in
4721         *linux*)
4722                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4723                         nm_so_opt='--dynamic'
4724                 fi
4725                 ;;
4726         esac
4727         ;;
4728 esac
4729
4730 case "$runnm" in
4731 true)
4732 : get list of predefined functions in a handy place
4733 echo " "
4734 case "$libc" in
4735 '') libc=unknown
4736         case "$libs" in
4737         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4738         esac
4739         ;;
4740 esac
4741 libnames='';
4742 case "$libs" in
4743 '') ;;
4744 *)  for thislib in $libs; do
4745         case "$thislib" in
4746         -lc|-lc_s)
4747                 : Handle C library specially below.
4748                 ;;
4749         -l*)
4750                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4751                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4752                         :
4753                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4754                         :
4755                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4756                         :
4757                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4758                         :
4759                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4760                         :
4761                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4762                         :
4763                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4764                         :
4765                 else
4766                         try=''
4767                 fi
4768                 libnames="$libnames $try"
4769                 ;;
4770         *) libnames="$libnames $thislib" ;;
4771         esac
4772         done
4773         ;;
4774 esac
4775 xxx=normal
4776 case "$libc" in
4777 unknown)
4778         set /lib/libc.$so
4779         for xxx in $libpth; do
4780                 $test -r $1 || set $xxx/libc.$so
4781                 : The messy sed command sorts on library version numbers.
4782                 $test -r $1 || \
4783                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4784                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4785                                 h
4786                                 s/[0-9][0-9]*/0000&/g
4787                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4788                                 G
4789                                 s/\n/ /' | \
4790                          sort | $sed -e 's/^.* //'`
4791                 eval set \$$#
4792         done
4793         $test -r $1 || set /usr/ccs/lib/libc.$so
4794         $test -r $1 || set /lib/libsys_s$_a
4795         ;;
4796 *)
4797         set blurfl
4798         ;;
4799 esac
4800 if $test -r "$1"; then
4801         echo "Your (shared) C library seems to be in $1."
4802         libc="$1"
4803 elif $test -r /lib/libc && $test -r /lib/clib; then
4804         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4805         xxx=apollo
4806         libc='/lib/clib /lib/libc'
4807         if $test -r /lib/syslib; then
4808                 echo "(Your math library is in /lib/syslib.)"
4809                 libc="$libc /lib/syslib"
4810         fi
4811 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4812         echo "Your C library seems to be in $libc, as you said before."
4813 elif $test -r $incpath/usr/lib/libc$_a; then
4814         libc=$incpath/usr/lib/libc$_a;
4815         echo "Your C library seems to be in $libc.  That's fine."
4816 elif $test -r /lib/libc$_a; then
4817         libc=/lib/libc$_a;
4818         echo "Your C library seems to be in $libc.  You're normal."
4819 else
4820         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4821                 :
4822         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4823                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4824         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4825                 :
4826         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4827                 :
4828         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4829                 :
4830         else
4831                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4832         fi
4833         if $test -r "$tans"; then
4834                 echo "Your C library seems to be in $tans, of all places."
4835                 libc=$tans
4836         else
4837                 libc='blurfl'
4838         fi
4839 fi
4840 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4841         dflt="$libc"
4842         cat <<EOM
4843
4844 If the guess above is wrong (which it might be if you're using a strange
4845 compiler, or your machine supports multiple models), you can override it here.
4846
4847 EOM
4848 else
4849         dflt=''
4850         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4851         cat >&4 <<EOM
4852 I can't seem to find your C library.  I've looked in the following places:
4853
4854 EOM
4855         $sed 's/^/      /' libpath
4856         cat <<EOM
4857
4858 None of these seems to contain your C library. I need to get its name...
4859
4860 EOM
4861 fi
4862 fn=f
4863 rp='Where is your C library?'
4864 . ./getfile
4865 libc="$ans"
4866
4867 echo " "
4868 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4869 set X `cat libnames`
4870 shift
4871 xxx=files
4872 case $# in 1) xxx=file; esac
4873 echo "Extracting names from the following $xxx for later perusal:" >&4
4874 echo " "
4875 $sed 's/^/      /' libnames >&4
4876 echo " "
4877 $echo $n "This may take a while...$c" >&4
4878
4879 for file in $*; do
4880         case $file in
4881         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4882         *) $nm $nm_opt $file 2>/dev/null;;
4883         esac
4884 done >libc.tmp
4885
4886 $echo $n ".$c"
4887 $grep fprintf libc.tmp > libc.ptf
4888 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4889 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4890 xxx='[ADTSIW]'
4891 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4892         eval $xscan;\
4893         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4894                 eval $xrun
4895 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4896         eval $xscan;\
4897         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4898                 eval $xrun
4899 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4900         eval $xscan;\
4901         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4902                 eval $xrun
4903 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4904         eval $xscan;\
4905         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4906                 eval $xrun
4907 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4908         eval $xscan;\
4909         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4910                 eval $xrun
4911 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4912         eval $xscan;\
4913         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4914                 eval $xrun
4915 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4916                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4917         eval $xscan;\
4918         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4919                 eval $xrun
4920 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4921         eval $xscan;\
4922         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4923                 eval $xrun
4924 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4925         eval $xscan;\
4926         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4927                 eval $xrun
4928 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4929         eval $xscan;\
4930         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4931                 eval $xrun
4932 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4933         eval $xscan;\
4934         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4935                 eval $xrun
4936 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4937         eval $xscan;\
4938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4939                 eval $xrun
4940 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4941         eval $xscan;\
4942         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4943                 eval $xrun
4944 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4945         eval $xscan;\
4946         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4947                 eval $xrun
4948 else
4949         $nm -p $* 2>/dev/null >libc.tmp
4950         $grep fprintf libc.tmp > libc.ptf
4951         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4952                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4953         then
4954                 nm_opt='-p'
4955                 eval $xrun
4956         else
4957                 echo " "
4958                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4959                 com=''
4960                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4961                         for thisname in $libnames $libc; do
4962                                 $ar t $thisname >>libc.tmp
4963                         done
4964                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4965                         echo "Ok." >&4
4966                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4967                         # Repeat libc to extract forwarders to DLL entries too
4968                         for thisname in $libnames $libc; do
4969                                 $ar tv $thisname >>libc.tmp
4970                                 # Revision 50 of EMX has bug in $ar.
4971                                 # it will not extract forwarders to DLL entries
4972                                 # Use emximp which will extract exactly them.
4973                                 emximp -o tmp.imp $thisname \
4974                                     2>/dev/null && \
4975                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4976                                     < tmp.imp >>libc.tmp
4977                                 $rm tmp.imp
4978                         done
4979                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4980                         echo "Ok." >&4
4981                 else
4982                         echo "$ar didn't seem to work right." >&4
4983                         echo "Maybe this is a Cray...trying bld instead..." >&4
4984                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4985                         then
4986                                 for thisname in $libnames; do
4987                                         bld t $libnames | \
4988                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4989                                         $ar t $thisname >>libc.tmp
4990                                 done
4991                                 echo "Ok." >&4
4992                         else
4993                                 echo "That didn't work either.  Giving up." >&4
4994                                 exit 1
4995                         fi
4996                 fi
4997         fi
4998 fi
4999 nm_extract="$com"
5000 if $test -f /lib/syscalls.exp; then
5001         echo " "
5002         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5003         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5004 fi
5005 ;;
5006 esac
5007 $rm -f libnames libpath
5008
5009 : see if dld is available
5010 set dld.h i_dld
5011 eval $inhdr
5012
5013 : is a C symbol defined?
5014 csym='tlook=$1;
5015 case "$3" in
5016 -v) tf=libc.tmp; tc=""; tdc="";;
5017 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5018 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5019 esac;
5020 tx=yes;
5021 case "$reuseval-$4" in
5022 true-) ;;
5023 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5024 esac;
5025 case "$tx" in
5026 yes)
5027         case "$runnm" in
5028         true)
5029                 if $contains $tlook $tf >/dev/null 2>&1;
5030                 then tval=true;
5031                 else tval=false;
5032                 fi;;
5033         *)
5034                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5035                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5036                 then tval=true;
5037                 else tval=false;
5038                 fi;
5039                 $rm -f t t.c;;
5040         esac;;
5041 *)
5042         case "$tval" in
5043         $define) tval=true;;
5044         *) tval=false;;
5045         esac;;
5046 esac;
5047 eval "$2=$tval"'
5048
5049 : define an is-in-libc? function
5050 inlibc='echo " "; td=$define; tu=$undef;
5051 sym=$1; var=$2; eval "was=\$$2";
5052 tx=yes;
5053 case "$reuseval$was" in
5054 true) ;;
5055 true*) tx=no;;
5056 esac;
5057 case "$tx" in
5058 yes)
5059         set $sym tres -f;
5060         eval $csym;
5061         case "$tres" in
5062         true)
5063                 echo "$sym() found." >&4;
5064                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5065         *)
5066                 echo "$sym() NOT found." >&4;
5067                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5068         esac;;
5069 *)
5070         case "$was" in
5071         $define) echo "$sym() found." >&4;;
5072         *) echo "$sym() NOT found." >&4;;
5073         esac;;
5074 esac'
5075
5076 : see if dlopen exists
5077 xxx_runnm="$runnm"
5078 runnm=false
5079 set dlopen d_dlopen
5080 eval $inlibc
5081 runnm="$xxx_runnm"
5082
5083 : determine which dynamic loading, if any, to compile in
5084 echo " "
5085 dldir="ext/DynaLoader"
5086 case "$usedl" in
5087 $define|y|true)
5088         dflt='y'
5089         usedl="$define"
5090         ;;
5091 $undef|n|false)
5092         dflt='n'
5093         usedl="$undef"
5094         ;;
5095 *) 
5096         dflt='n'
5097         case "$d_dlopen" in
5098             $define) dflt='y' ;;
5099         esac
5100         case "$i_dld" in
5101             $define) dflt='y' ;;
5102         esac
5103         : Does a dl_xxx.xs file exist for this operating system
5104         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5105         ;;
5106 esac
5107 rp="Do you wish to use dynamic loading?"
5108 . ./myread
5109 usedl="$ans"
5110 case "$ans" in
5111 y*) usedl="$define"
5112         case "$dlsrc" in
5113         '')
5114                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5115                         dflt="$dldir/dl_${osname}.xs"
5116                 elif $test "$d_dlopen" = "$define" ; then
5117                         dflt="$dldir/dl_dlopen.xs"
5118                 elif $test "$i_dld" = "$define" ; then
5119                         dflt="$dldir/dl_dld.xs"
5120                 else
5121                         dflt=''
5122                 fi
5123                 ;;
5124         *)      dflt="$dldir/$dlsrc"
5125                 ;;
5126         esac
5127     echo "The following dynamic loading files are available:"
5128         : Can not go over to $dldir because getfile has path hard-coded in.
5129         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5130         rp="Source file to use for dynamic loading"
5131         fn="fne"
5132         # XXX This getfile call will fail the existence check if you try 
5133         # building away from $src (this is not supported yet).
5134         . ./getfile
5135         usedl="$define"
5136         : emulate basename
5137         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5138
5139         $cat << EOM
5140
5141 Some systems may require passing special flags to $cc -c to
5142 compile modules that will be used to create a shared library.
5143 To use no flags, say "none".
5144
5145 EOM
5146     case "$cccdlflags" in
5147     '') case "$gccversion" in
5148                 '') case "$osname" in
5149                         hpux)   dflt='+z' ;;
5150                         next)   dflt='none' ;;
5151                         irix*)  dflt='-KPIC' ;;
5152                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5153                         sunos)  dflt='-pic' ;;
5154                         *)      dflt='none' ;;
5155                     esac
5156                         ;;
5157                 *)  case "$osname" in
5158                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5159                         *)      dflt='-fpic' ;;
5160                     esac ;;
5161             esac ;;
5162         ' ') dflt='none' ;;
5163     *)  dflt="$cccdlflags" ;;
5164     esac
5165     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5166     . ./myread
5167     case "$ans" in
5168     none) cccdlflags=' ' ;;
5169     *) cccdlflags="$ans" ;;
5170     esac
5171
5172     cat << EOM
5173
5174 Some systems use ld to create libraries that can be dynamically loaded,
5175 while other systems (such as those using ELF) use $cc.
5176
5177 EOM
5178         case "$ld" in
5179         '')     $cat >try.c <<'EOM'
5180 /* Test for whether ELF binaries are produced */
5181 #include <fcntl.h>
5182 #include <stdlib.h>
5183 int main() {
5184         char b[4];
5185         int i = open("a.out",O_RDONLY);
5186         if(i == -1) 
5187                 exit(1); /* fail */
5188         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5189                 exit(0); /* succeed (yes, it's ELF) */
5190         else
5191                 exit(1); /* fail */
5192 }
5193 EOM
5194                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5195                         cat <<EOM
5196 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5197 EOM
5198                         dflt="$cc"
5199                 else
5200                         echo "I'll use ld to build dynamic libraries."
5201                         dflt='ld'
5202                 fi
5203                 rm -f try.c a.out
5204                 ;;
5205         *)      dflt="$ld"
5206                 ;;
5207         esac
5208
5209     rp="What command should be used to create dynamic libraries?"
5210     . ./myread
5211         ld="$ans"
5212
5213     cat << EOM
5214
5215 Some systems may require passing special flags to $ld to create a
5216 library that can be dynamically loaded.  If your ld flags include
5217 -L/other/path options to locate libraries outside your loader's normal
5218 search path, you may need to specify those -L options here as well.  To
5219 use no flags, say "none".
5220
5221 EOM
5222     case "$lddlflags" in
5223     '') case "$osname" in
5224                         beos) dflt='-nostart' ;;
5225                         hpux)  dflt='-b' ;;
5226                         linux|irix*)    dflt='-shared' ;;
5227                         next)  dflt='none' ;;
5228                         solaris) dflt='-G' ;;
5229                         sunos) dflt='-assert nodefinitions' ;;
5230                         svr4*|esix*) dflt="-G $ldflags" ;;
5231                 *)     dflt='none' ;;
5232                         esac
5233                         ;;
5234     *) dflt="$lddlflags" ;;
5235     esac
5236
5237         : Try to guess additional flags to pick up local libraries.
5238         : Be careful not to append to a plain 'none'
5239         case "$dflt" in
5240         none) dflt='' ;;
5241         esac
5242         for thisflag in $ldflags; do
5243                 case "$thisflag" in
5244                 -L*)
5245                         case " $dflt " in
5246                         *" $thisflag "*) ;;
5247                         *) dflt="$dflt $thisflag" ;;
5248                         esac
5249                         ;;
5250                 esac
5251         done
5252
5253         case "$dflt" in
5254         ''|' ') dflt='none' ;;
5255         esac
5256
5257     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5258     . ./myread
5259     case "$ans" in
5260     none) lddlflags=' ' ;;
5261     *) lddlflags="$ans" ;;
5262     esac
5263
5264         cat <<EOM
5265
5266 Some systems may require passing special flags to $cc to indicate that
5267 the resulting executable will use dynamic linking.  To use no flags,
5268 say "none".
5269
5270 EOM
5271     case "$ccdlflags" in
5272     '') case "$osname" in
5273                 hpux)   dflt='-Wl,-E' ;;
5274                 linux)  dflt='-rdynamic' ;;
5275                 next)   dflt='none' ;;
5276                 sunos)  dflt='none' ;;
5277                 *)      dflt='none' ;;
5278             esac ;;
5279     ' ')  dflt='none' ;;
5280     *)  dflt="$ccdlflags" ;;
5281     esac
5282     rp="Any special flags to pass to $cc to use dynamic loading?"
5283     . ./myread
5284     case "$ans" in
5285     none) ccdlflags=' ' ;;
5286     *) ccdlflags="$ans" ;;
5287     esac
5288     ;;
5289 *)  usedl="$undef"
5290         ld='ld'
5291     dlsrc='dl_none.xs'
5292     lddlflags=''
5293     ccdlflags=''
5294     ;;
5295 esac
5296
5297 also=''
5298 case "$usedl" in
5299 $undef)
5300         # No dynamic loading being used, so don't bother even to prompt.
5301         useshrplib='false'
5302         ;;
5303 *)      case "$useshrplib" in
5304         '')     case "$osname" in
5305                 svr4*|dgux|dynixptx|esix|powerux|beos)
5306                         dflt=y
5307                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5308                         ;;
5309                 next*)
5310                         case "$osvers" in
5311                         4*)     dflt=y
5312                                 also='Building a shared libperl is needed for MAB support.'
5313                                 ;;
5314                         *)      dflt=n
5315                                 ;;
5316                         esac
5317                         ;;
5318                 *)      dflt=n
5319                         ;;
5320                 esac
5321                 ;;
5322         $define|true|[Yy]*)
5323                 dflt=y
5324                 ;;
5325         *)      dflt=n
5326                 ;;
5327         esac
5328         $cat << EOM
5329
5330 The perl executable is normally obtained by linking perlmain.c with
5331 libperl${_a}, any static extensions (usually just DynaLoader), and
5332 any other libraries needed on this system (such as -lm, etc.).  Since
5333 your system supports dynamic loading, it is probably possible to build
5334 a shared libperl.$so.  If you will have more than one executable linked
5335 to libperl.$so, this will significantly reduce the size of each
5336 executable, but it may have a noticeable affect on performance.  The
5337 default is probably sensible for your system.
5338 $also
5339
5340 EOM
5341         rp="Build a shared libperl.$so (y/n)"
5342         . ./myread
5343         case "$ans" in
5344         true|$define|[Yy]*)
5345                 useshrplib='true'
5346                 # Why does next4 have to be so different?
5347                 case "${osname}${osvers}" in
5348                 next4*|rhapsody*)
5349                         xxx='DYLD_LIBRARY_PATH' ;;
5350                 os2*)   xxx='' ;; # Nothing special needed.
5351                 beos*)  xxx='' ;;
5352                 *)              xxx='LD_LIBRARY_PATH' ;;
5353                 esac
5354                 ;;
5355         *)      useshrplib='false' ;;
5356         esac
5357         ;;
5358 esac
5359
5360 case "$useshrplib" in
5361 true)
5362         case "$libperl" in
5363         '')
5364                 # Figure out a good name for libperl.so.  Since it gets stored in
5365                 # a version-specific architecture-dependent library, the version
5366                 # number isn't really that important, except for making cc/ld happy.
5367                 #
5368                 # A name such as libperl.so.3.1
5369                 majmin="libperl.$so.$patchlevel.$subversion"
5370                 # A name such as libperl.so.301
5371                 majonly=`echo $patchlevel $subversion |
5372                         $awk '{printf "%d%02d", $1, $2}'`
5373                 majonly=libperl.$so.$majonly
5374                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5375                 # rely on figuring it out from the naming of libc.
5376                 case "${osname}${osvers}" in
5377                 next4*)
5378                         dflt=libperl.5.$so
5379                         # XXX How handle the --version stuff for MAB?
5380                         ;;
5381                 linux*)  # ld won't link with a bare -lperl otherwise.
5382                         dflt=libperl.$so
5383                         ;;
5384                 *)      # Try to guess based on whether libc has major.minor.
5385                         case "$libc" in
5386                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5387                         *libc.$so.[0-9]*) dflt=$majonly ;;
5388                         *)      dflt=libperl.$so ;;
5389                         esac
5390                         ;;
5391                 esac
5392                 ;;
5393         *)      dflt=$libperl
5394                 ;;
5395         esac
5396         cat << EOM
5397
5398 I need to select a good name for the shared libperl.  If your system uses
5399 library names with major and minor numbers, then you might want something
5400 like $majmin.  Alternatively, if your system uses a single version
5401 number for shared libraries, then you might want to use $majonly.
5402 Or, your system might be quite happy with a simple libperl.$so.
5403
5404 Since the shared libperl will get installed into a version-specific
5405 architecture-dependent directory, the version number of the shared perl
5406 library probably isn't important, so the default should be o.k.
5407
5408 EOM
5409         rp='What name do you want to give to the shared libperl?'
5410         . ./myread
5411         libperl=$ans
5412         echo "Ok, I'll use $libperl"
5413         ;;
5414 *)
5415         libperl="libperl${_a}"
5416         ;;
5417 esac
5418
5419 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5420 case "$shrpdir" in
5421 '') ;;
5422 *)      $cat >&4 <<EOM
5423 WARNING:  Use of the shrpdir variable for the installation location of
5424 the shared $libperl is not supported.  It was never documented and
5425 will not work in this version.  Let me (perlbug@perl.com)
5426 know of any problems this may cause.
5427
5428 EOM
5429         case "$shrpdir" in
5430         "$archlibexp/CORE")
5431                 $cat >&4 <<EOM
5432 But your current setting of $shrpdir is
5433 the default anyway, so it's harmless.
5434 EOM
5435                 ;;
5436         *)
5437                 $cat >&4 <<EOM
5438 Further, your current attempted setting of $shrpdir
5439 conflicts with the value of $archlibexp/CORE
5440 that installperl will use.
5441 EOM
5442                 ;;
5443         esac
5444         ;;
5445 esac
5446
5447 # How will the perl executable find the installed shared $libperl?
5448 # Add $xxx to ccdlflags.
5449 # If we can't figure out a command-line option, use $shrpenv to
5450 # set env LD_RUN_PATH.  The main perl makefile uses this.
5451 shrpdir=$archlibexp/CORE
5452 xxx=''
5453 tmp_shrpenv=''
5454 if "$useshrplib"; then
5455     case "$osname" in 
5456         aix)
5457                 # We'll set it in Makefile.SH...
5458                 ;;
5459         solaris|netbsd)
5460                 xxx="-R $shrpdir"
5461                 ;;
5462         freebsd)
5463                 xxx="-Wl,-R$shrpdir"
5464                 ;;
5465         linux|irix*|dec_osf)
5466                 xxx="-Wl,-rpath,$shrpdir"
5467                 ;;
5468         next)
5469                 # next doesn't like the default...
5470                 ;;
5471         beos)
5472                 # beos doesn't like the default, either.
5473                 ;;
5474         hpux*)
5475                 # hpux doesn't like the default, either.
5476                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5477                 ;;
5478         *)
5479                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5480                 ;;
5481         esac
5482         case "$xxx" in
5483         '') ;;
5484         *)      
5485                 # Only add $xxx if it isn't already in ccdlflags.
5486                 case " $ccdlflags " in
5487                 *" $xxx "*)     ;;
5488                 *)      ccdlflags="$ccdlflags $xxx"
5489                         cat <<EOM >&4
5490
5491 Adding $xxx to the flags
5492 passed to $ld so that the perl executable will find the 
5493 installed shared $libperl.
5494
5495 EOM
5496                         ;;
5497                 esac
5498                 ;;
5499         esac
5500 fi
5501 # Respect a hint or command-line value.
5502 case "$shrpenv" in
5503 '') shrpenv="$tmp_shrpenv" ;;
5504 esac
5505
5506 : determine where manual pages go
5507 set man1dir man1dir none
5508 eval $prefixit
5509 $cat <<EOM
5510
5511 $spackage has manual pages available in source form.
5512 EOM
5513 case "$nroff" in
5514 nroff)
5515         echo "However, you don't have nroff, so they're probably useless to you."
5516         case "$man1dir" in
5517         '') man1dir="none";;
5518         esac;;
5519 esac
5520 echo "If you don't want the manual sources installed, answer 'none'."
5521 case "$man1dir" in
5522 ' ') dflt=none
5523         ;;
5524 '')
5525         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5526         lookpath="$lookpath $prefixexp/man/p_man/man1"
5527         lookpath="$lookpath $prefixexp/man/u_man/man1"
5528         lookpath="$lookpath $prefixexp/man/man.1"
5529         case "$sysman" in
5530         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5531         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5532         esac
5533         set dflt
5534         eval $prefixup
5535         ;;
5536 *)  dflt="$man1dir"
5537         ;;
5538 esac
5539 echo " "
5540 fn=dn+~
5541 rp="Where do the main $spackage manual pages (source) go?"
5542 . ./getfile
5543 if $test "X$man1direxp" != "X$ansexp"; then
5544         installman1dir=''
5545 fi
5546 man1dir="$ans"
5547 man1direxp="$ansexp"
5548 case "$man1dir" in
5549 '') man1dir=' '
5550         installman1dir='';;
5551 esac
5552 if $afs; then
5553         $cat <<EOM
5554
5555 Since you are running AFS, I need to distinguish the directory in which
5556 manual pages reside from the directory in which they are installed (and from
5557 which they are presumably copied to the former directory by occult means).
5558
5559 EOM
5560         case "$installman1dir" in
5561         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5562         *) dflt="$installman1dir";;
5563         esac
5564         fn=de~
5565         rp='Where will man pages be installed?'
5566         . ./getfile
5567         installman1dir="$ans"
5568 else
5569         installman1dir="$man1direxp"
5570 fi
5571
5572 : What suffix to use on installed man pages
5573
5574 case "$man1dir" in
5575 ' ')
5576         man1ext='0'
5577         ;;
5578 *)
5579         rp="What suffix should be used for the main $spackage man pages?"
5580         case "$man1ext" in
5581         '')     case "$man1dir" in
5582                 *1)  dflt=1 ;;
5583                 *1p) dflt=1p ;;
5584                 *1pm) dflt=1pm ;;
5585                 *l) dflt=l;;
5586                 *n) dflt=n;;
5587                 *o) dflt=o;;
5588                 *p) dflt=p;;
5589                 *C) dflt=C;;
5590                 *L) dflt=L;;
5591                 *L1) dflt=L1;;
5592                 *) dflt=1;;
5593                 esac
5594                 ;;
5595         *)      dflt="$man1ext";;
5596         esac
5597         . ./myread
5598         man1ext="$ans"
5599         ;;
5600 esac
5601
5602 : see if we can have long filenames
5603 echo " "
5604 rmlist="$rmlist /tmp/cf$$"
5605 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5606 first=123456789abcdef
5607 second=/tmp/cf$$/$first
5608 $rm -f $first $second
5609 if (echo hi >$first) 2>/dev/null; then
5610         if $test -f 123456789abcde; then
5611                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5612                 val="$undef"
5613         else
5614                 if (echo hi >$second) 2>/dev/null; then
5615                         if $test -f /tmp/cf$$/123456789abcde; then
5616                                 $cat <<'EOM'
5617 That's peculiar... You can have filenames longer than 14 characters, but only
5618 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5619 I shall consider your system cannot support long filenames at all.
5620 EOM
5621                                 val="$undef"
5622                         else
5623                                 echo 'You can have filenames longer than 14 characters.' >&4
5624                                 val="$define"
5625                         fi
5626                 else
5627                         $cat <<'EOM'
5628 How confusing! Some of your filesystems are sane enough to allow filenames
5629 longer than 14 characters but some others like /tmp can't even think about them.
5630 So, for now on, I shall assume your kernel does not allow them at all.
5631 EOM
5632                         val="$undef"
5633                 fi
5634         fi
5635 else
5636         $cat <<'EOM'
5637 You can't have filenames longer than 14 chars.  You can't even think about them!
5638 EOM
5639         val="$undef"
5640 fi 
5641 set d_flexfnam
5642 eval $setvar
5643 $rm -rf /tmp/cf$$ 123456789abcde*
5644
5645 : determine where library module manual pages go
5646 set man3dir man3dir none
5647 eval $prefixit
5648 $cat <<EOM
5649
5650 $spackage has manual pages for many of the library modules.
5651 EOM
5652
5653 case "$nroff" in
5654 nroff)
5655         $cat <<'EOM'
5656 However, you don't have nroff, so they're probably useless to you.
5657 EOM
5658         case "$man3dir" in
5659         '') man3dir="none";;
5660         esac;;
5661 esac
5662
5663 case "$d_flexfnam" in
5664 undef)
5665         $cat <<'EOM'
5666 However, your system can't handle the long file names like File::Basename.3. 
5667 EOM
5668         case "$man3dir" in
5669         '') man3dir="none";;
5670         esac;;
5671 esac
5672
5673 echo "If you don't want the manual sources installed, answer 'none'."
5674 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5675 case "$man3dir" in
5676 '')     case "$prefix" in 
5677         *$prog*) dflt=`echo $man1dir | 
5678                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5679         *)      dflt="$privlib/man/man3" ;;
5680         esac
5681         ;;
5682 ' ') dflt=none;;
5683 *)      dflt="$man3dir" ;;
5684 esac
5685 echo " "
5686
5687 fn=dn+~
5688 rp="Where do the $package library man pages (source) go?"
5689 . ./getfile
5690 if test "X$man3direxp" != "X$ansexp"; then
5691         installman3dir=''
5692 fi
5693
5694 man3dir="$ans"
5695 man3direxp="$ansexp"
5696 case "$man3dir" in
5697 '') man3dir=' '
5698         installman3dir='';;
5699 esac
5700 if $afs; then
5701         $cat <<EOM
5702
5703 Since you are running AFS, I need to distinguish the directory in which
5704 manual pages reside from the directory in which they are installed (and from
5705 which they are presumably copied to the former directory by occult means).
5706
5707 EOM
5708         case "$installman3dir" in
5709         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5710         *) dflt="$installman3dir";;
5711         esac
5712         fn=de~
5713         rp='Where will man pages be installed?'
5714         . ./getfile
5715         installman3dir="$ans"
5716 else
5717         installman3dir="$man3direxp"
5718 fi
5719
5720 : What suffix to use on installed man pages
5721
5722 case "$man3dir" in
5723 ' ')
5724         man3ext='0'
5725         ;;
5726 *)
5727         rp="What suffix should be used for the $package library man pages?"
5728         case "$man3ext" in
5729         '')     case "$man3dir" in
5730                 *3)  dflt=3 ;;
5731                 *3p) dflt=3p ;;
5732                 *3pm) dflt=3pm ;;
5733                 *l) dflt=l;;
5734                 *n) dflt=n;;
5735                 *o) dflt=o;;
5736                 *p) dflt=p;;
5737                 *C) dflt=C;;
5738                 *L) dflt=L;;
5739                 *L3) dflt=L3;;
5740                 *) dflt=3;;
5741                 esac
5742                 ;;
5743         *)      dflt="$man3ext";;
5744         esac
5745         . ./myread
5746         man3ext="$ans"
5747         ;;
5748 esac
5749
5750 : see if we have to deal with yellow pages, now NIS.
5751 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5752         if $test -f /usr/etc/nibindd; then
5753                 echo " "
5754                 echo "I'm fairly confident you're on a NeXT."
5755                 echo " "
5756                 rp='Do you get the hosts file via NetInfo?'
5757                 dflt=y
5758                 case "$hostcat" in
5759                 nidump*) ;;
5760                 '') ;;
5761                 *) dflt=n;;
5762                 esac
5763                 . ./myread
5764                 case "$ans" in
5765                 y*) hostcat='nidump hosts .';;
5766                 *)      case "$hostcat" in
5767                         nidump*) hostcat='';;
5768                         esac
5769                         ;;
5770                 esac
5771         fi
5772         case "$hostcat" in
5773         nidump*) ;;
5774         *)
5775                 case "$hostcat" in
5776                 *ypcat*) dflt=y;;
5777                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5778                                 dflt=y
5779                         else
5780                                 dflt=n
5781                         fi;;
5782                 *) dflt=n;;
5783                 esac
5784                 echo " "
5785                 rp='Are you getting the hosts file via yellow pages?'
5786                 . ./myread
5787                 case "$ans" in
5788                 y*) hostcat='ypcat hosts';;
5789                 *) hostcat='cat /etc/hosts';;
5790                 esac
5791                 ;;
5792         esac
5793 fi
5794 case "$hostcat" in
5795 '') hostcat='cat /etc/hosts';;
5796 esac
5797 case "$groupcat" in
5798 '') groupcat='cat /etc/group';;
5799 esac
5800 case "$passcat" in
5801 '') passcat='cat /etc/passwd';;
5802 esac
5803
5804 : now get the host name
5805 echo " "
5806 echo "Figuring out host name..." >&4
5807 case "$myhostname" in
5808 '') cont=true
5809         echo 'Maybe "hostname" will work...'
5810         if tans=`sh -c hostname 2>&1` ; then
5811                 myhostname=$tans
5812                 phostname=hostname
5813                 cont=''
5814         fi
5815         ;;
5816 *) cont='';;
5817 esac
5818 if $test "$cont"; then
5819         if ./xenix; then
5820                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5821                 if tans=`cat /etc/systemid 2>&1` ; then
5822                         myhostname=$tans
5823                         phostname='cat /etc/systemid'
5824                         echo "Whadyaknow.  Xenix always was a bit strange..."
5825                         cont=''
5826                 fi
5827         elif $test -r /etc/systemid; then
5828                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5829         fi
5830 fi
5831 if $test "$cont"; then
5832         echo 'No, maybe "uuname -l" will work...'
5833         if tans=`sh -c 'uuname -l' 2>&1` ; then
5834                 myhostname=$tans
5835                 phostname='uuname -l'
5836         else
5837                 echo 'Strange.  Maybe "uname -n" will work...'
5838                 if tans=`sh -c 'uname -n' 2>&1` ; then
5839                         myhostname=$tans
5840                         phostname='uname -n'
5841                 else
5842                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5843                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5844                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5845                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5846                         else
5847                                 case "$myhostname" in
5848                                 '') echo "Does this machine have an identity crisis or something?"
5849                                         phostname='';;
5850                                 *)
5851                                         echo "Well, you said $myhostname before..."
5852                                         phostname='echo $myhostname';;
5853                                 esac
5854                         fi
5855                 fi
5856         fi
5857 fi
5858 : you do not want to know about this
5859 set $myhostname
5860 myhostname=$1
5861
5862 : verify guess
5863 if $test "$myhostname" ; then
5864         dflt=y
5865         rp='Your host name appears to be "'$myhostname'".'" Right?"
5866         . ./myread
5867         case "$ans" in
5868         y*) ;;
5869         *) myhostname='';;
5870         esac
5871 fi
5872
5873 : bad guess or no guess
5874 while $test "X$myhostname" = X ; do
5875         dflt=''
5876         rp="Please type the (one word) name of your host:"
5877         . ./myread
5878         myhostname="$ans"
5879 done
5880
5881 : translate upper to lower if necessary
5882 case "$myhostname" in
5883 *[A-Z]*)
5884         echo "(Normalizing case in your host name)"
5885         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5886         ;;
5887 esac
5888
5889 case "$myhostname" in
5890 *.*)
5891         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5892         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5893         echo "(Trimming domain name from host name--host name is now $myhostname)"
5894         ;;
5895 *) case "$mydomain" in
5896         '')
5897                 {
5898                         test "X$hostcat" = "Xypcat hosts" &&
5899                         ypmatch "$myhostname" hosts 2>/dev/null |\
5900                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5901                         $test -s hosts
5902                 } || {
5903                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5904                                         /[       ]$myhostname[  . ]/p" > hosts
5905                 }
5906                 tmp_re="[       . ]"
5907                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5908                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5909                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5910                         hosts | $sort | $uniq | \
5911                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5912                 case `$echo X$dflt` in
5913                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5914                         dflt=.
5915                         ;;
5916                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5917                         ;;
5918                 esac
5919                 case "$dflt" in
5920                 .)
5921                         tans=`./loc resolv.conf X /etc /usr/etc`
5922                         if $test -f "$tans"; then
5923                                 echo "(Attempting domain name extraction from $tans)"
5924                                 dflt=.`$sed -n -e 's/   / /g' \
5925                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5926                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5927                                 case "$dflt" in
5928                                 .) dflt=.`$sed -n -e 's/        / /g' \
5929                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5930                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5931                                         ;;
5932                                 esac
5933                         fi
5934                         ;;
5935                 esac
5936                 case "$dflt" in
5937                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5938                         dflt=.`sh -c domainname 2>/dev/null`
5939                         case "$dflt" in
5940                         '') dflt='.';;
5941                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5942                         esac
5943                         ;;
5944                 esac
5945                 case "$dflt" in
5946                 .) echo "(Lost all hope -- silly guess then)"
5947                         dflt='.uucp'
5948                         ;;
5949                 esac
5950                 $rm -f hosts
5951                 ;;
5952         *) dflt="$mydomain";;
5953         esac;;
5954 esac
5955 echo " "
5956 rp="What is your domain name?"
5957 . ./myread
5958 tans="$ans"
5959 case "$ans" in
5960 '') ;;
5961 .*) ;;
5962 *) tans=".$tans";;
5963 esac
5964 mydomain="$tans"
5965
5966 : translate upper to lower if necessary
5967 case "$mydomain" in
5968 *[A-Z]*)
5969         echo "(Normalizing case in your domain name)"
5970         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5971         ;;
5972 esac
5973
5974 : a little sanity check here
5975 case "$phostname" in
5976 '') ;;
5977 *)
5978         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5979         $myhostname$mydomain|$myhostname) ;;
5980         *)
5981                 case "$phostname" in
5982                 sed*)
5983                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5984                         ;;
5985                 *)
5986                         echo "(That doesn't agree with your $phostname command, by the way.)"
5987                         ;;
5988                 esac
5989         ;;
5990         esac
5991         ;;
5992 esac
5993
5994 $cat <<EOM
5995
5996 I need to get your e-mail address in Internet format if possible, i.e.
5997 something like user@host.domain. Please answer accurately since I have
5998 no easy means to double check it. The default value provided below
5999 is most probably close to the reality but may not be valid from outside
6000 your organization...
6001
6002 EOM
6003 cont=x
6004 while test "$cont"; do
6005         case "$cf_email" in
6006         '') dflt="$cf_by@$myhostname$mydomain";;
6007         *) dflt="$cf_email";;
6008         esac
6009         rp='What is your e-mail address?'
6010         . ./myread
6011         cf_email="$ans"
6012         case "$cf_email" in
6013         *@*.*) cont='' ;;
6014         *)
6015                 rp='Address does not look like an Internet one.  Use it anyway?'
6016                 case "$fastread" in
6017                 yes) dflt=y ;;
6018                 *) dflt=n ;;
6019                 esac
6020                 . ./myread
6021                 case "$ans" in
6022                 y*) cont='' ;;
6023                 *) echo " " ;;
6024                 esac
6025                 ;;
6026         esac
6027 done
6028
6029 $cat <<EOM
6030
6031 If you or somebody else will be maintaining perl at your site, please
6032 fill in the correct e-mail address here so that they may be contacted
6033 if necessary. Currently, the "perlbug" program included with perl
6034 will send mail to this address in addition to perlbug@perl.com. You may
6035 enter "none" for no administrator.
6036
6037 EOM
6038 case "$perladmin" in
6039 '') dflt="$cf_email";;
6040 *) dflt="$perladmin";;
6041 esac
6042 rp='Perl administrator e-mail address'
6043 . ./myread
6044 perladmin="$ans"
6045
6046 : figure out how to guarantee perl startup
6047 case "$startperl" in
6048 '')
6049         case "$sharpbang" in
6050         *!)
6051                 $cat <<EOH
6052
6053 I can use the #! construct to start perl on your system. This will
6054 make startup of perl scripts faster, but may cause problems if you
6055 want to share those scripts and perl is not in a standard place
6056 ($binexp/perl) on all your platforms. The alternative is to force
6057 a shell by starting the script with a single ':' character.
6058
6059 EOH
6060                 dflt="$binexp/perl"
6061                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6062                 . ./myread
6063                 case "$ans" in
6064                 none)   startperl=": # use perl";;
6065                 *)      startperl="#!$ans"
6066                         if $test 30 -lt `echo "$ans" | wc -c`; then
6067                                 $cat >&4 <<EOM
6068
6069 WARNING:  Some systems limit the #! command to 32 characters.
6070 If you experience difficulty running Perl scripts with #!, try
6071 installing Perl in a directory with a shorter pathname.
6072
6073 EOM
6074                         fi ;;
6075                 esac
6076                 ;;
6077         *) startperl=": # use perl"
6078                 ;;
6079         esac
6080         ;;
6081 esac
6082 echo "I'll use $startperl to start perl scripts."
6083
6084 : figure best path for perl in scripts
6085 case "$perlpath" in
6086 '')
6087         perlpath="$binexp/perl"
6088         case "$startperl" in
6089         *!*) ;;
6090         *)
6091                 $cat <<EOH
6092
6093 I will use the "eval 'exec'" idiom to start Perl on your system.
6094 I can use the full path of your Perl binary for this purpose, but
6095 doing so may cause problems if you want to share those scripts and
6096 Perl is not always in a standard place ($binexp/perl).
6097
6098 EOH
6099                 dflt="$binexp/perl"
6100                 rp="What path shall I use in \"eval 'exec'\"?"
6101                 . ./myread
6102                 perlpath="$ans"
6103                 ;;
6104         esac
6105         ;;
6106 esac
6107 case "$startperl" in
6108 *!*)    ;;
6109 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6110 esac
6111
6112 : determine where public executable scripts go
6113 set scriptdir scriptdir
6114 eval $prefixit
6115 case "$scriptdir" in
6116 '')
6117         dflt="$bin"
6118         : guess some guesses
6119         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6120         $test -d /usr/share/bin && dflt=/usr/share/bin
6121         $test -d /usr/local/script && dflt=/usr/local/script
6122         $test -d $prefixexp/script && dflt=$prefixexp/script
6123         set dflt
6124         eval $prefixup
6125         ;;
6126 *)  dflt="$scriptdir"
6127         ;;
6128 esac
6129 $cat <<EOM
6130  
6131 Some installations have a separate directory just for executable scripts so
6132 that they can mount it across multiple architectures but keep the scripts in
6133 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6134 Or you might just lump your scripts in with all your other executables.
6135  
6136 EOM
6137 fn=d~
6138 rp='Where do you keep publicly executable scripts?'
6139 . ./getfile
6140 if $test "X$ansexp" != "X$scriptdirexp"; then
6141         installscript=''
6142 fi
6143 scriptdir="$ans"
6144 scriptdirexp="$ansexp"
6145 if $afs; then
6146         $cat <<EOM
6147
6148 Since you are running AFS, I need to distinguish the directory in which
6149 scripts reside from the directory in which they are installed (and from
6150 which they are presumably copied to the former directory by occult means).
6151
6152 EOM
6153         case "$installscript" in
6154         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6155         *) dflt="$installscript";;
6156         esac
6157         fn=de~
6158         rp='Where will public scripts be installed?'
6159         . ./getfile
6160         installscript="$ans"
6161 else
6162         installscript="$scriptdirexp"
6163 fi
6164
6165 : determine where site specific libraries go.
6166 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6167 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6168 case "$prefix" in
6169 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6170 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6171 esac
6172 eval $prefixit
6173 $cat <<EOM
6174
6175 The installation process will also create a directory for
6176 site-specific extensions and modules.  Some users find it convenient
6177 to place all site-specific files in this directory rather than in the
6178 main distribution directory.
6179
6180 EOM
6181 fn=d~+
6182 rp='Pathname for the site-specific library files?'
6183 . ./getfile
6184 if $test "X$sitelibexp" != "X$ansexp"; then
6185         installsitelib=''
6186 fi
6187 sitelib="$ans"
6188 sitelibexp="$ansexp"
6189 if $afs; then
6190         $cat <<EOM
6191
6192 Since you are running AFS, I need to distinguish the directory in
6193 which site-specific files reside from the directory in which they are
6194 installed (and from which they are presumably copied to the former
6195 directory by occult means).
6196
6197 EOM
6198         case "$installsitelib" in
6199         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6200         *) dflt="$installsitelib";;
6201         esac
6202         fn=de~
6203         rp='Where will site-specific files be installed?'
6204         . ./getfile
6205         installsitelib="$ans"
6206 else
6207         installsitelib="$sitelibexp"
6208 fi
6209
6210 : determine where site specific architecture-dependent libraries go.
6211 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6212 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6213 : sitelib may have an optional trailing /share.
6214 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6215 tdflt="$tdflt/$archname"
6216 set sitearch sitearch none
6217 eval $prefixit
6218 case "$sitearch" in
6219 '')     dflt="$tdflt" ;;
6220 *)      dflt="$sitearch" ;;
6221 esac
6222 $cat <<EOM
6223
6224 The installation process will also create a directory for
6225 architecture-dependent site-specific extensions and modules.
6226
6227 EOM
6228 fn=nd~+
6229 rp='Pathname for the site-specific architecture-dependent library files?'
6230 . ./getfile
6231 if $test "X$sitearchexp" != "X$ansexp"; then
6232         installsitearch=''
6233 fi
6234 sitearch="$ans"
6235 sitearchexp="$ansexp"
6236 if $afs; then
6237         $cat <<EOM
6238
6239 Since you are running AFS, I need to distinguish the directory in
6240 which site-specific architecture-dependent library files reside from
6241 the directory in which they are installed (and from which they are
6242 presumably copied to the former directory by occult means).
6243
6244 EOM
6245         case "$installsitearch" in
6246         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6247         *) dflt="$installsitearch";;
6248         esac
6249         fn=de~
6250         rp='Where will site-specific architecture-dependent files be installed?'
6251         . ./getfile
6252         installsitearch="$ans"
6253 else
6254         installsitearch="$sitearchexp"
6255 fi
6256
6257 cat <<EOM
6258
6259 Previous version of $package used the standard IO mechanisms as defined
6260 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6261 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6262 the default.  This abstraction layer can use AT&T's sfio (if you already
6263 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6264 problems with some extension modules.  Using PerlIO with stdio is safe,
6265 but it is slower than plain stdio and therefore is not the default.
6266
6267 If this doesn't make any sense to you, just accept the default 'n'.
6268 EOM
6269 case "$useperlio" in
6270 $define|true|[yY]*)     dflt='y';;
6271 *) dflt='n';;
6272 esac
6273 rp='Use the experimental PerlIO abstraction layer?'
6274 . ./myread
6275 case "$ans" in
6276 y|Y) 
6277         val="$define"
6278         ;;     
6279 *)      
6280         echo "Ok, doing things the stdio way"
6281         val="$undef"
6282         ;;
6283 esac
6284 set useperlio
6285 eval $setvar 
6286
6287 : Check how to convert floats to strings.
6288 if test "X$d_Gconvert" = X; then
6289         echo " "
6290         echo "Checking for an efficient way to convert floats to strings."
6291         $cat >try.c <<'EOP'
6292 #ifdef TRY_gconvert
6293 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6294 char *myname = "gconvert";
6295 #endif
6296 #ifdef TRY_gcvt
6297 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6298 char *myname = "gcvt";
6299 #endif
6300 #ifdef TRY_sprintf
6301 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6302 char *myname = "sprintf";
6303 #endif
6304
6305 #include <stdio.h>
6306
6307 int
6308 checkit(expect, got)
6309 char *expect;
6310 char *got;
6311 {
6312     if (strcmp(expect, got)) {
6313                 printf("%s oddity:  Expected %s, got %s\n",
6314                         myname, expect, got);
6315                 exit(1);
6316         }
6317 }
6318
6319 int main()
6320
6321         char buf[64]; 
6322         buf[63] = '\0';
6323
6324         /* This must be 1st test on (which?) platform */
6325         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6326         Gconvert(0.1, 8, 0, buf);
6327         checkit("0.1", buf);
6328
6329         Gconvert(1.0, 8, 0, buf); 
6330         checkit("1", buf);
6331
6332         Gconvert(0.0, 8, 0, buf); 
6333         checkit("0", buf);
6334
6335         Gconvert(-1.0, 8, 0, buf); 
6336         checkit("-1", buf);
6337
6338         /* Some Linux gcvt's give 1.e+5 here. */
6339         Gconvert(100000.0, 8, 0, buf); 
6340         checkit("100000", buf);
6341         
6342         /* Some Linux gcvt's give -1.e+5 here. */
6343         Gconvert(-100000.0, 8, 0, buf); 
6344         checkit("-100000", buf);
6345
6346         exit(0);
6347 }
6348 EOP
6349         case "$d_Gconvert" in
6350         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6351         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6352         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6353         *) xxx_list='gconvert gcvt sprintf' ;;
6354         esac
6355
6356         for xxx_convert in $xxx_list; do
6357                 echo "Trying $xxx_convert"
6358                 $rm -f try try$_o
6359                 set try -DTRY_$xxx_convert
6360                 if eval $compile; then
6361                         echo "$xxx_convert" found. >&4
6362                         if ./try; then
6363                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6364                                 break;
6365                         else
6366                                 echo "...But $xxx_convert didn't work as I expected."
6367                         fi
6368                 else
6369                         echo "$xxx_convert NOT found." >&4
6370                 fi
6371         done
6372                 
6373         case "$xxx_convert" in
6374         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6375         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6376         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6377         esac
6378 fi
6379
6380 : Initialize h_fcntl
6381 h_fcntl=false
6382
6383 : Initialize h_sysfile
6384 h_sysfile=false
6385
6386 : access call always available on UNIX
6387 set access d_access
6388 eval $inlibc
6389
6390 : locate the flags for 'access()'
6391 case "$d_access" in
6392 "$define")
6393         echo " "
6394         $cat >access.c <<'EOCP'
6395 #include <sys/types.h>
6396 #ifdef I_FCNTL
6397 #include <fcntl.h>
6398 #endif
6399 #ifdef I_SYS_FILE
6400 #include <sys/file.h>
6401 #endif
6402 #ifdef I_UNISTD
6403 #include <unistd.h>
6404 #endif
6405 int main() {
6406         exit(R_OK);
6407 }
6408 EOCP
6409         : check sys/file.h first, no particular reason here
6410         if $test `./findhdr sys/file.h` && \
6411                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6412                 h_sysfile=true;
6413                 echo "<sys/file.h> defines the *_OK access constants." >&4
6414         elif $test `./findhdr fcntl.h` && \
6415                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6416                 h_fcntl=true;
6417                 echo "<fcntl.h> defines the *_OK access constants." >&4
6418         elif $test `./findhdr unistd.h` && \
6419                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6420                 echo "<unistd.h> defines the *_OK access constants." >&4
6421         else
6422                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6423         fi
6424         ;;
6425 esac
6426 $rm -f access*
6427
6428 : see if accessx exists
6429 set accessx d_accessx
6430 eval $inlibc
6431
6432 : see if alarm exists
6433 set alarm d_alarm
6434 eval $inlibc
6435
6436 : Look for GNU-cc style attribute checking
6437 echo " "
6438 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6439 $cat >attrib.c <<'EOCP'
6440 #include <stdio.h>
6441 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6442 EOCP
6443 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6444         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6445                 echo "Your C compiler doesn't fully support __attribute__."
6446                 val="$undef"
6447         else
6448                 echo "Your C compiler supports __attribute__."
6449                 val="$define"
6450         fi
6451 else
6452         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6453         val="$undef"
6454 fi
6455 set d_attribut
6456 eval $setvar
6457 $rm -f attrib*
6458
6459 : see if bcmp exists
6460 set bcmp d_bcmp
6461 eval $inlibc
6462
6463 : see if bcopy exists
6464 set bcopy d_bcopy
6465 eval $inlibc
6466
6467 : see if this is a unistd.h system
6468 set unistd.h i_unistd
6469 eval $inhdr
6470
6471 : see if getpgrp exists
6472 set getpgrp d_getpgrp
6473 eval $inlibc
6474
6475 case "$d_getpgrp" in
6476 "$define")
6477         echo " "
6478         echo "Checking to see which flavor of getpgrp is in use..."
6479         $cat >set.c <<EOP
6480 #$i_unistd I_UNISTD
6481 #include <sys/types.h>
6482 #ifdef I_UNISTD
6483 #  include <unistd.h>
6484 #endif
6485 int main()
6486 {
6487         if (getuid() == 0) {
6488                 printf("(I see you are running Configure as super-user...)\n");
6489                 setuid(1);
6490         }
6491 #ifdef TRY_BSD_PGRP
6492         if (getpgrp(1) == 0)
6493                 exit(0);
6494 #else
6495         if (getpgrp() > 0)
6496                 exit(0);
6497 #endif
6498         exit(1);
6499 }
6500 EOP
6501         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6502                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6503                 val="$define"
6504         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6505                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6506                 val="$undef"
6507         else
6508                 echo "I can't seem to compile and run the test program."
6509                 if ./usg; then
6510                         xxx="a USG one, i.e. you use getpgrp()."
6511                 else
6512                         # SVR4 systems can appear rather BSD-ish.
6513                         case "$i_unistd" in
6514                         $undef)
6515                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6516                                 val="$define"
6517                                 ;;
6518                         $define)
6519                                 xxx="probably a USG one, i.e. you use getpgrp()."
6520                                 val="$undef"
6521                                 ;;
6522                         esac
6523                 fi
6524                 echo "Assuming your getpgrp is $xxx" >&4
6525         fi
6526         ;;
6527 *) val="$undef";;
6528 esac
6529 set d_bsdgetpgrp
6530 eval $setvar
6531 $rm -f set set.c
6532
6533 : see if setpgrp exists
6534 set setpgrp d_setpgrp
6535 eval $inlibc
6536
6537 case "$d_setpgrp" in
6538 "$define")
6539         echo " "
6540         echo "Checking to see which flavor of setpgrp is in use..."
6541         $cat >set.c <<EOP
6542 #$i_unistd I_UNISTD
6543 #include <sys/types.h>
6544 #ifdef I_UNISTD
6545 #  include <unistd.h>
6546 #endif
6547 int main()
6548 {
6549         if (getuid() == 0) {
6550                 printf("(I see you are running Configure as super-user...)\n");
6551                 setuid(1);
6552         }
6553 #ifdef TRY_BSD_PGRP
6554         if (-1 == setpgrp(1, 1))
6555                 exit(0);
6556 #else
6557         if (setpgrp() != -1)
6558                 exit(0);
6559 #endif
6560         exit(1);
6561 }
6562 EOP
6563         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6564                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6565                 val="$define"
6566         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6567                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6568                 val="$undef"
6569         else
6570                 echo "(I can't seem to compile and run the test program.)"
6571                 if ./usg; then
6572                         xxx="a USG one, i.e. you use setpgrp()."
6573                 else
6574                         # SVR4 systems can appear rather BSD-ish.
6575                         case "$i_unistd" in
6576                         $undef)
6577                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6578                                 val="$define"
6579                                 ;;
6580                         $define)
6581                                 xxx="probably a USG one, i.e. you use setpgrp()."
6582                                 val="$undef"
6583                                 ;;
6584                         esac
6585                 fi
6586                 echo "Assuming your setpgrp is $xxx" >&4
6587         fi
6588         ;;
6589 *) val="$undef";;
6590 esac
6591 set d_bsdsetpgrp
6592 eval $setvar
6593 $rm -f set set.c
6594 : see if bzero exists
6595 set bzero d_bzero
6596 eval $inlibc
6597
6598 : check for lengths of integral types
6599 echo " "
6600 case "$intsize" in
6601 '')
6602         echo "Checking to see how big your integers are..." >&4
6603         $cat >intsize.c <<'EOCP'
6604 #include <stdio.h>
6605 int main()
6606 {
6607         printf("intsize=%d;\n", sizeof(int));
6608         printf("longsize=%d;\n", sizeof(long));
6609         printf("shortsize=%d;\n", sizeof(short));
6610         exit(0);
6611 }
6612 EOCP
6613         set intsize
6614         if eval $compile_ok && ./intsize > /dev/null; then
6615                 eval `./intsize`
6616                 echo "Your integers are $intsize bytes long."
6617                 echo "Your long integers are $longsize bytes long."
6618                 echo "Your short integers are $shortsize bytes long."
6619         else
6620                 $cat >&4 <<EOM
6621 !
6622 Help! I can't compile and run the intsize test program: please enlighten me!
6623 (This is probably a misconfiguration in your system or libraries, and
6624 you really ought to fix it.  Still, I'll try anyway.)
6625 !
6626 EOM
6627                 dflt=4
6628                 rp="What is the size of an integer (in bytes)?"
6629                 . ./myread
6630                 intsize="$ans"
6631                 dflt=$intsize
6632                 rp="What is the size of a long integer (in bytes)?"
6633                 . ./myread
6634                 longsize="$ans"
6635                 dflt=2
6636                 rp="What is the size of a short integer (in bytes)?"
6637                 . ./myread
6638                 shortsize="$ans"
6639         fi
6640         ;;
6641 esac
6642 $rm -f intsize intsize.*
6643
6644 : see if signal is declared as pointer to function returning int or void
6645 echo " "
6646 xxx=`./findhdr signal.h`
6647 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6648 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6649         echo "You have int (*signal())() instead of void." >&4
6650         val="$undef"
6651 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6652         echo "You have void (*signal())()." >&4
6653         val="$define"
6654 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6655         echo "You have int (*signal())() instead of void." >&4
6656         val="$undef"
6657 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6658         echo "You have void (*signal())()." >&4
6659         val="$define"
6660 else
6661         case "$d_voidsig" in
6662         '')
6663         echo "I can't determine whether signal handler returns void or int..." >&4
6664                 dflt=void
6665                 rp="What type does your signal handler return?"
6666                 . ./myread
6667                 case "$ans" in
6668                 v*) val="$define";;
6669                 *) val="$undef";;
6670                 esac;;
6671         "$define")
6672                 echo "As you already told me, signal handler returns void." >&4
6673                 val="$define"
6674                 ;;
6675         *)      echo "As you already told me, signal handler returns int." >&4
6676                 val="$undef"
6677                 ;;
6678         esac
6679 fi
6680 set d_voidsig
6681 eval $setvar
6682 case "$d_voidsig" in
6683 "$define") signal_t="void";;
6684 *) signal_t="int";;
6685 esac
6686 $rm -f $$.tmp
6687
6688 : check for ability to cast large floats to 32-bit ints.
6689 echo " "
6690 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6691 if $test "$intsize" -ge 4; then
6692         xxx=int
6693 else
6694         xxx=long
6695 fi
6696 $cat >try.c <<EOCP
6697 #include <stdio.h>
6698 #include <sys/types.h>
6699 #include <signal.h>
6700 $signal_t blech(s) int s; { exit(3); }
6701 int main()
6702 {
6703         $xxx i32;
6704         double f, g;
6705         int result = 0;
6706         char str[16];
6707         signal(SIGFPE, blech);
6708
6709         /* Don't let compiler optimize the test away.  Store the number 
6710            in a writable string for gcc to pass to sscanf under HP/UX.
6711         */
6712         sprintf(str, "2147483647");
6713         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6714         g = 10 * f;
6715         i32  = ($xxx) g;
6716
6717         /* x86 processors will probably give 0x8000 0000, which is a
6718        sign change.  We don't want that.  We want to mimic SPARC
6719            behavior here, which is to preserve the sign and give
6720            back 0x7fff ffff.
6721         */
6722         if (i32 != ($xxx) f)
6723                 result |= 1;
6724         exit(result);
6725 }
6726 EOCP
6727 set try
6728 if eval $compile_ok; then
6729         ./try
6730         yyy=$?
6731 else
6732         echo "(I can't seem to compile the test program--assuming it can't)"
6733         yyy=1
6734 fi
6735 case "$yyy" in
6736 0)      val="$define"
6737         echo "Yup, it can."
6738         ;;
6739 *)      val="$undef"
6740         echo "Nope, it can't."
6741         ;;
6742 esac
6743 set d_casti32
6744 eval $setvar
6745 $rm -f try try.*
6746
6747 : check for ability to cast negative floats to unsigned
6748 echo " "
6749 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6750 $cat >try.c <<EOCP
6751 #include <stdio.h>
6752 #include <sys/types.h>
6753 #include <signal.h>
6754 $signal_t blech(s) int s; { exit(7); }
6755 $signal_t blech_in_list(s) int s; { exit(4); }
6756 unsigned long dummy_long(p) unsigned long p; { return p; }
6757 unsigned int dummy_int(p) unsigned int p; { return p; }
6758 unsigned short dummy_short(p) unsigned short p; { return p; }
6759 int main()
6760 {
6761         double f;
6762         unsigned long along;
6763         unsigned int aint;
6764         unsigned short ashort;
6765         int result = 0;
6766         char str[16];
6767         
6768         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6769            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6770            optimized the whole file away
6771         */
6772         /* Store the number in a writable string for gcc to pass to 
6773            sscanf under HP/UX.
6774         */
6775         sprintf(str, "-123");
6776         sscanf(str, "%lf", &f);  /* f = -123.; */
6777
6778         signal(SIGFPE, blech);
6779         along = (unsigned long)f;
6780         aint = (unsigned int)f;
6781         ashort = (unsigned short)f;
6782         if (along != (unsigned long)-123)
6783                 result |= 1;
6784         if (aint != (unsigned int)-123)
6785                 result |= 1;
6786         if (ashort != (unsigned short)-123)
6787                 result |= 1;
6788         sprintf(str, "1073741824.");
6789         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6790         f = f + f;
6791         along = 0;
6792         along = (unsigned long)f;
6793         if (along != 0x80000000)
6794                 result |= 2;
6795         f -= 1.;
6796         along = 0;
6797         along = (unsigned long)f;
6798         if (along != 0x7fffffff)
6799                 result |= 1;
6800         f += 2.;
6801         along = 0;
6802         along = (unsigned long)f;
6803         if (along != 0x80000001)
6804                 result |= 2;
6805         if (result)
6806                 exit(result);
6807         signal(SIGFPE, blech_in_list);
6808         sprintf(str, "123.");
6809         sscanf(str, "%lf", &f);  /* f = 123.; */
6810         along = dummy_long((unsigned long)f);
6811         aint = dummy_int((unsigned int)f);
6812         ashort = dummy_short((unsigned short)f);
6813         if (along != (unsigned long)123)
6814                 result |= 4;
6815         if (aint != (unsigned int)123)
6816                 result |= 4;
6817         if (ashort != (unsigned short)123)
6818                 result |= 4;
6819         exit(result);
6820
6821 }
6822 EOCP
6823 set try
6824 if eval $compile_ok; then
6825         ./try
6826         castflags=$?
6827 else
6828         echo "(I can't seem to compile the test program--assuming it can't)"
6829         castflags=7
6830 fi
6831 case "$castflags" in
6832 0)      val="$define"
6833         echo "Yup, it can."
6834         ;;
6835 *)      val="$undef"
6836         echo "Nope, it can't."
6837         ;;
6838 esac
6839 set d_castneg
6840 eval $setvar
6841 $rm -f try.*
6842
6843 : see if vprintf exists
6844 echo " "
6845 if set vprintf val -f d_vprintf; eval $csym; $val; then
6846         echo 'vprintf() found.' >&4
6847         val="$define"
6848         $cat >vprintf.c <<'EOF'
6849 #include <varargs.h>
6850
6851 int main() { xxx("foo"); }
6852
6853 xxx(va_alist)
6854 va_dcl
6855 {
6856         va_list args;
6857         char buf[10];
6858
6859         va_start(args);
6860         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6861 }
6862 EOF
6863         set vprintf
6864         if eval $compile && ./vprintf; then
6865                 echo "Your vsprintf() returns (int)." >&4
6866                 val2="$undef"
6867         else
6868                 echo "Your vsprintf() returns (char*)." >&4
6869                 val2="$define"
6870         fi
6871 else
6872         echo 'vprintf() NOT found.' >&4
6873                 val="$undef"
6874                 val2="$undef"
6875 fi
6876 set d_vprintf
6877 eval $setvar
6878 val=$val2
6879 set d_charvspr
6880 eval $setvar
6881
6882 : see if chown exists
6883 set chown d_chown
6884 eval $inlibc
6885
6886 : see if chroot exists
6887 set chroot d_chroot
6888 eval $inlibc
6889
6890 : see if chsize exists
6891 set chsize d_chsize
6892 eval $inlibc
6893
6894 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6895 while $test $# -ge 2; do
6896         case "$1" in
6897         $define) echo "#include <$2>";;
6898         esac ;
6899     shift 2;
6900 done > try.c;
6901 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6902 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6903         val="$define";
6904 else
6905         val="$undef";
6906 fi;
6907 set $varname;
6908 eval $setvar;
6909 $rm -f try.c try.o'
6910
6911 : see if this is a sys/uio.h system
6912 set sys/uio.h i_sysuio
6913 eval $inhdr
6914
6915 echo "Checking to see if your system supports struct iovec..." >&4
6916 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6917 eval $hasfield
6918 case "$d_iovec_s" in
6919 "$define")      echo "Yup, it does." >&4
6920                 ;;
6921 *)              echo "Nope, it doesn't." >&4
6922                 ;;
6923 esac
6924
6925 socketlib=''
6926 sockethdr=''
6927 : see whether socket exists
6928 echo " "
6929 $echo $n "Hmm... $c" >&4
6930 if set socket val -f d_socket; eval $csym; $val; then
6931         echo "Looks like you have Berkeley networking support." >&4
6932         d_socket="$define"
6933         if set setsockopt val -f; eval $csym; $val; then
6934                 d_oldsock="$undef"
6935         else
6936                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6937                 d_oldsock="$define"
6938         fi
6939 else
6940         if $contains socklib libc.list >/dev/null 2>&1; then
6941                 echo "Looks like you have Berkeley networking support." >&4
6942                 d_socket="$define"
6943                 : we will have to assume that it supports the 4.2 BSD interface
6944                 d_oldsock="$undef"
6945         else
6946                 echo "You don't have Berkeley networking in libc$_a..." >&4
6947                 if test "X$d_socket" = "X$define"; then
6948                    echo "...but you seem to believe that you have sockets." >&4
6949                 else
6950                         for net in net socket
6951                         do
6952                                 if test -f /usr/lib/lib$net$_a; then
6953                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6954                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6955                                         if $contains socket libc.list >/dev/null 2>&1; then
6956                                                 d_socket="$define"
6957                                                 socketlib="-l$net"
6958                                                 case "$net" in
6959                                                 net)
6960                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6961                                                         sockethdr="-I/usr/netinclude"
6962                                                         ;;
6963                                                 esac
6964                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6965                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6966                                                         d_oldsock="$undef"
6967                                                 else
6968                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6969                                                         d_oldsock="$define"
6970                                                 fi
6971                                                 break
6972                                         fi
6973                                 fi
6974                         done
6975                         if test "X$d_socket" != "X$define"; then
6976                            echo "or anywhere else I see." >&4
6977                            d_socket="$undef"
6978                            d_oldsock="$undef"
6979                         fi
6980                 fi
6981         fi
6982 fi
6983
6984 : see if socketpair exists
6985 set socketpair d_sockpair
6986 eval $inlibc
6987
6988
6989 echo " "
6990 echo "Checking the availability of certain socket constants..." >& 4
6991 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6992         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6993         $cat >try.c <<EOF
6994 #include <sys/types.h>
6995 #include <sys/socket.h>
6996 int main() {
6997     int i = $ENUM;
6998 }
6999 EOF
7000         val="$undef"
7001         set try; if eval $compile; then
7002                 val="$define"
7003         fi
7004         set d_${enum}; eval $setvar
7005         $rm -f try.c try
7006 done
7007
7008 set sendmsg d_sendmsg
7009 eval $inlibc
7010
7011 set recvmsg d_recvmsg
7012 eval $inlibc
7013
7014 echo " "
7015 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7016 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7017 eval $hasfield
7018 case "$d_msghdr_s" in
7019 "$define")      echo "Yup, it does." >&4
7020                 ;;
7021 *)              echo "Nope, it doesn't." >&4
7022                 ;;
7023 esac
7024
7025 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7026 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7027 eval $hasfield
7028 case "$d_cmsghdr_s" in
7029 "$define")      echo "Yup, it does." >&4
7030                 ;;
7031 *)              echo "Nope, it doesn't." >&4
7032                 ;;
7033 esac
7034
7035 : check for const keyword
7036 echo " "
7037 echo 'Checking to see if your C compiler knows about "const"...' >&4
7038 $cat >const.c <<'EOCP'
7039 typedef struct spug { int drokk; } spug;
7040 int main()
7041 {
7042         const char *foo;
7043         const spug y;
7044 }
7045 EOCP
7046 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7047         val="$define"
7048         echo "Yup, it does."
7049 else
7050         val="$undef"
7051         echo "Nope, it doesn't."
7052 fi
7053 set d_const
7054 eval $setvar
7055
7056 : see if crypt exists
7057 echo " "
7058 if set crypt val -f d_crypt; eval $csym; $val; then
7059         echo 'crypt() found.' >&4
7060         val="$define"
7061         cryptlib=''
7062 else
7063         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7064         if $test -z "$cryptlib"; then
7065                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7066         else
7067                 cryptlib=-lcrypt
7068         fi
7069         if $test -z "$cryptlib"; then
7070                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7071         else
7072                 cryptlib=-lcrypt
7073         fi
7074         if $test -z "$cryptlib"; then
7075                 cryptlib=`./loc libcrypt$_a "" $libpth`
7076         else
7077                 cryptlib=-lcrypt
7078         fi
7079         if $test -z "$cryptlib"; then
7080                 echo 'crypt() NOT found.' >&4
7081                 val="$undef"
7082         else
7083                 val="$define"
7084         fi
7085 fi
7086 set d_crypt
7087 eval $setvar
7088
7089 : get csh whereabouts
7090 case "$csh" in
7091 'csh') val="$undef" ;;
7092 *) val="$define" ;;
7093 esac
7094 set d_csh
7095 eval $setvar
7096 : Respect a hint or command line value for full_csh.
7097 case "$full_csh" in
7098 '') full_csh=$csh ;;
7099 esac
7100
7101 : see if cuserid exists
7102 set cuserid d_cuserid
7103 eval $inlibc
7104
7105 : see if this is a limits.h system
7106 set limits.h i_limits
7107 eval $inhdr
7108
7109 : see if this is a float.h system
7110 set float.h i_float
7111 eval $inhdr
7112
7113 : See if number of significant digits in a double precision number is known
7114 echo " "
7115 $cat >dbl_dig.c <<EOM
7116 #$i_limits I_LIMITS
7117 #$i_float I_FLOAT
7118 #ifdef I_LIMITS
7119 #include <limits.h>
7120 #endif
7121 #ifdef I_FLOAT
7122 #include <float.h>
7123 #endif
7124 #ifdef DBL_DIG
7125 printf("Contains DBL_DIG");
7126 #endif
7127 EOM
7128 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7129 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7130         echo "DBL_DIG found." >&4
7131         val="$define"
7132 else
7133         echo "DBL_DIG NOT found." >&4
7134         val="$undef"
7135 fi
7136 $rm -f dbl_dig.?
7137 set d_dbl_dig
7138 eval $setvar
7139
7140
7141 if $test X"$use64bits" = X"$define"; then
7142         : see if dbminit64 exists
7143         set dbminit64 d_dbminit64
7144         eval $inlibc
7145
7146         : see if dbmclose64 exists
7147         set dbmclose64 d_dbmclose64
7148         eval $inlibc
7149
7150         : see if fetch64 exists
7151         set fetch64 d_fetch64
7152         eval $inlibc
7153
7154         : see if store64 exists
7155         set store64 d_store64
7156         eval $inlibc
7157
7158         : see if delete64 exists
7159         set delete64 d_delete64
7160         eval $inlibc
7161
7162         : see if firstkey64 exists
7163         set firstkey64 d_firstkey64
7164         eval $inlibc
7165
7166         : see if nextkey64 exists
7167         set nextkey64 d_nextkey64
7168         eval $inlibc
7169 else
7170         val="$undef"
7171         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7172         do
7173                 set $xxx
7174                 eval $setvar
7175         done
7176 fi
7177
7178 : see if difftime exists
7179 set difftime d_difftime
7180 eval $inlibc
7181
7182 : see if sys/stat.h is available
7183 set sys/stat.h i_sysstat
7184 eval $inhdr
7185
7186 : see if this is a dirent system
7187 echo " "
7188 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7189         val="$define"
7190         echo "<dirent.h> found." >&4
7191 else
7192         val="$undef"
7193         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7194                 echo "<sys/dir.h> found." >&4
7195                 echo " "
7196         else
7197                 xinc=`./findhdr sys/ndir.h`
7198         fi
7199         echo "<dirent.h> NOT found." >&4
7200 fi
7201 set i_dirent
7202 eval $setvar
7203
7204 : Look for type of directory structure.
7205 echo " "
7206 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7207
7208 case "$direntrytype" in
7209 ''|' ')
7210         case "$i_dirent" in
7211         $define) guess1='struct dirent' ;;
7212         *) guess1='struct direct'  ;;
7213         esac
7214         ;;
7215 *)      guess1="$direntrytype"
7216         ;;
7217 esac
7218
7219 case "$guess1" in
7220 'struct dirent') guess2='struct direct' ;;
7221 *) guess2='struct dirent' ;;
7222 esac
7223                 
7224 if $contains "$guess1" try.c >/dev/null 2>&1; then
7225         direntrytype="$guess1"
7226         echo "Your directory entries are $direntrytype." >&4
7227 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7228         direntrytype="$guess2"
7229         echo "Your directory entries seem to be $direntrytype." >&4
7230 else
7231         echo "I don't recognize your system's directory entries." >&4
7232         rp="What type is used for directory entries on this system?"
7233         dflt="$guess1"
7234         . ./myread
7235         direntrytype="$ans"
7236 fi
7237 $rm -f try.c
7238
7239
7240 : see if the directory entry stores field length
7241 echo " "
7242 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7243 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7244         echo "Good, your directory entry keeps length information in d_namlen." >&4
7245         val="$define"
7246 else
7247         echo "Your directory entry does not know about the d_namlen field." >&4
7248         val="$undef"
7249 fi
7250 set d_dirnamlen
7251 eval $setvar
7252 $rm -f try.c
7253
7254
7255 if $test X"$use64bits" = X"$define"; then
7256         : see if fstat64 exists
7257         set fstat64 d_fstat64
7258         eval $inlibc
7259
7260         : see if ftruncate64 exists
7261         set ftruncate64 d_ftruncate64
7262         eval $inlibc
7263
7264         : see if lockf64 exists
7265         set lockf64 d_lockf64
7266         eval $inlibc
7267
7268         : see if llseek exists
7269         set llseek d_llseek
7270         eval $inlibc
7271
7272         : see if lseek64 exists
7273         set lseek64 d_lseek64
7274         eval $inlibc
7275
7276         : see if lstat64 exists
7277         set lstat64 d_lstat64
7278         eval $inlibc
7279
7280         : see if open64 exists
7281         set open64 d_open64
7282         eval $inlibc
7283
7284         : see if opendir64 exists
7285         set opendir64 d_opendir64
7286         eval $inlibc
7287
7288         : see if readdir64 exists
7289         set readdir64 d_readdir64
7290         eval $inlibc
7291
7292         : see if seekdir64 exists
7293         set seekdir64 d_seekdir64
7294         eval $inlibc
7295
7296         : see if stat64 exists
7297         set stat64 d_stat64
7298         eval $inlibc
7299
7300         : see if telldir64 exists
7301         set telldir64 d_telldir64
7302         eval $inlibc
7303
7304         : see if truncate64 exists
7305         set truncate64 d_truncate64
7306         eval $inlibc
7307
7308         : check for off64_t
7309         echo " "
7310         echo $n "Checking to see if your system supports off64_t...$c" >&4
7311         $cat >try.c <<EOCP
7312 #include <sys/types.h>
7313 #include <unistd.h>
7314 off64_t foo() { off64_t x; x = 7; return x; }'
7315 EOCP
7316         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7317                 val="$define"
7318                 echo " Yup, it does." >&4
7319         else
7320                 val="$undef"
7321                 echo " Nope, it doesn't." >&4
7322         fi
7323         $rm -f try.*
7324         set d_off64_t
7325         eval $setvar
7326
7327         : check for offset_t
7328         echo " "
7329         echo $n "Checking to see if your system supports offset_t...$c" >&4
7330         $cat >try.c <<EOCP
7331 #include <sys/types.h>
7332 #include <unistd.h>
7333 offset_t foo() { offset_t x; x = 7; return x; }'
7334 EOCP
7335         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7336                 val="$define"
7337                 echo " Yup, it does." >&4
7338         else
7339                 val="$undef"
7340                 echo " Nope, it doesn't." >&4
7341         fi
7342         $rm -f try.*
7343         set d_offset_t
7344         eval $setvar
7345
7346         : check for ino64_t
7347         echo " "
7348         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7349         val="$undef"
7350         case "$i_sysstat" in
7351         "$define" )
7352                 $cat >try.c <<EOCP
7353 #include <sys/types.h>
7354 #include <sys/stat.h>
7355 ino64_t foo() { ino64_t x; x = 7; return x; }'
7356 EOCP
7357                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7358                         val="$define"
7359                 fi
7360                 $rm -f try.*
7361                 ;;
7362         esac
7363         if $test "X$val" = X"$define"; then
7364                 echo " Yup, it does." >&4
7365         else
7366                 echo " Nope, it doesn't." >&4
7367         fi
7368         set d_ino64_t
7369         eval $setvar
7370
7371         : check for struct flock64
7372         echo " "
7373         echo "Checking to see if your system supports struct flock64..." >&4
7374         if $h_fcntl; then
7375                 set d_flock64_s flock64 l_len define fcntl.h
7376                 eval $hasfield
7377         else
7378                 val="$undef"
7379                 set d_flock64_s
7380                 eval $setvar
7381         fi
7382         case "$d_flock64_s" in
7383         "$define")      echo "Yup, it does." >&4
7384                         ;;
7385         *)              echo "Nope, it doesn't." >&4
7386                         ;;
7387         esac
7388
7389         : check for struct dirent64
7390         echo " "
7391         echo "Checking to see if your system supports struct dirent64..." >&4
7392         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7393         eval $hasfield
7394         case "$d_dirent64_s" in
7395         "$define")      echo "Yup, it does." >&4
7396                         ;;
7397         *)              echo "Nope, it doesn't." >&4
7398                         ;;
7399         esac
7400
7401 else
7402         val="$undef"
7403         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
7404         do
7405                 set $xxx
7406                 eval $setvar
7407         done
7408 fi
7409
7410 : see if dlerror exists
7411 xxx_runnm="$runnm"
7412 runnm=false
7413 set dlerror d_dlerror
7414 eval $inlibc
7415 runnm="$xxx_runnm"
7416
7417 : see if dlfcn is available
7418 set dlfcn.h i_dlfcn
7419 eval $inhdr
7420
7421 case "$usedl" in
7422 $define|y|true)
7423         $cat << EOM
7424
7425 On a few systems, the dynamically loaded modules that perl generates and uses
7426 will need a different extension than shared libs. The default will probably
7427 be appropriate.
7428
7429 EOM
7430         case "$dlext" in
7431         '')     dflt="$so" ;;
7432         *)      dflt="$dlext" ;;
7433         esac
7434         rp='What is the extension of dynamically loaded modules'
7435         . ./myread
7436         dlext="$ans"
7437         ;;
7438 *)
7439         dlext="none"
7440         ;;
7441 esac
7442
7443 : Check if dlsym need a leading underscore
7444 echo " "
7445 val="$undef"
7446
7447 case "$dlsrc" in
7448 dl_dlopen.xs)
7449         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7450         $cat >dyna.c <<'EOM'
7451 fred () { }
7452 EOM
7453
7454 $cat >fred.c<<EOM
7455
7456 #include <stdio.h>
7457 #$i_dlfcn I_DLFCN
7458 #ifdef I_DLFCN
7459 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7460 #else
7461 #include <sys/types.h>
7462 #include <nlist.h>
7463 #include <link.h>
7464 #endif
7465
7466 extern int fred() ;
7467
7468 int main()
7469 {
7470     void * handle ;
7471     void * symbol ;
7472 #ifndef RTLD_LAZY
7473     int mode = 1 ;
7474 #else
7475     int mode = RTLD_LAZY ;
7476 #endif
7477     handle = dlopen("./dyna.$dlext", mode) ;
7478     if (handle == NULL) {
7479         printf ("1\n") ;
7480         fflush (stdout) ;
7481         exit(0);
7482     }
7483     symbol = dlsym(handle, "fred") ;
7484     if (symbol == NULL) {
7485         /* try putting a leading underscore */
7486         symbol = dlsym(handle, "_fred") ;
7487         if (symbol == NULL) {
7488             printf ("2\n") ;
7489             fflush (stdout) ;
7490             exit(0);
7491         }
7492         printf ("3\n") ;
7493     }
7494     else
7495         printf ("4\n") ;
7496     fflush (stdout) ;
7497     exit(0);
7498 }
7499 EOM
7500         : Call the object file tmp-dyna.o in case dlext=o.
7501         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7502                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7503                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7504                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7505                 xxx=`./fred`
7506                 case $xxx in
7507                 1)      echo "Test program failed using dlopen." >&4
7508                         echo "Perhaps you should not use dynamic loading." >&4;;
7509                 2)      echo "Test program failed using dlsym." >&4
7510                         echo "Perhaps you should not use dynamic loading." >&4;;
7511                 3)      echo "dlsym needs a leading underscore" >&4
7512                         val="$define" ;;
7513                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7514                 esac
7515         else
7516                 echo "I can't compile and run the test program." >&4
7517         fi
7518         ;;
7519 esac
7520                 
7521 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7522
7523 set d_dlsymun
7524 eval $setvar
7525
7526 hasproto='varname=$1; func=$2; shift; shift;
7527 while $test $# -ge 2; do
7528         case "$1" in
7529         $define) echo "#include <$2>";;
7530         esac ;
7531     shift 2;
7532 done > try.c;
7533 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7534 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7535         echo "$func() prototype found.";
7536         val="$define";
7537 else
7538         echo "$func() prototype NOT found.";
7539         val="$undef";
7540 fi;
7541 set $varname;
7542 eval $setvar;
7543 $rm -f try.c tryout.c'
7544
7545 : see if prototype for drand48 is available
7546 echo " "
7547 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7548 eval $hasproto
7549
7550 : see if dup2 exists
7551 set dup2 d_dup2
7552 eval $inlibc
7553
7554 : see if eaccess exists
7555 set eaccess d_eaccess
7556 eval $inlibc
7557
7558 : see if endgrent exists
7559 set endgrent d_endgrent
7560 eval $inlibc
7561
7562 : see if endhostent exists
7563 set endhostent d_endhent
7564 eval $inlibc
7565
7566 : see if endnetent exists
7567 set endnetent d_endnent
7568 eval $inlibc
7569
7570 : see if endprotoent exists
7571 set endprotoent d_endpent
7572 eval $inlibc
7573
7574 : see if endpwent exists
7575 set endpwent d_endpwent
7576 eval $inlibc
7577
7578 : see if endservent exists
7579 set endservent d_endsent
7580 eval $inlibc
7581
7582 : see if endspent exists
7583 set endspent d_endspent
7584 eval $inlibc
7585
7586 : Locate the flags for 'open()'
7587 echo " "
7588 $cat >open3.c <<'EOCP'
7589 #include <sys/types.h>
7590 #ifdef I_FCNTL
7591 #include <fcntl.h>
7592 #endif
7593 #ifdef I_SYS_FILE
7594 #include <sys/file.h>
7595 #endif
7596 int main() {
7597         if(O_RDONLY);
7598 #ifdef O_TRUNC
7599         exit(0);
7600 #else
7601         exit(1);
7602 #endif
7603 }
7604 EOCP
7605 : check sys/file.h first to get FREAD on Sun
7606 if $test `./findhdr sys/file.h` && \
7607                 set open3 -DI_SYS_FILE && eval $compile; then
7608         h_sysfile=true;
7609         echo "<sys/file.h> defines the O_* constants..." >&4
7610         if ./open3; then
7611                 echo "and you have the 3 argument form of open()." >&4
7612                 val="$define"
7613         else
7614                 echo "but not the 3 argument form of open().  Oh, well." >&4
7615                 val="$undef"
7616         fi
7617 elif $test `./findhdr fcntl.h` && \
7618                 set open3 -DI_FCNTL && eval $compile; then
7619         h_fcntl=true;
7620         echo "<fcntl.h> defines the O_* constants..." >&4
7621         if ./open3; then
7622                 echo "and you have the 3 argument form of open()." >&4
7623                 val="$define"
7624         else
7625                 echo "but not the 3 argument form of open().  Oh, well." >&4
7626                 val="$undef"
7627         fi
7628 else
7629         val="$undef"
7630         echo "I can't find the O_* constant definitions!  You got problems." >&4
7631 fi
7632 set d_open3
7633 eval $setvar
7634 $rm -f open3*
7635
7636 : check for non-blocking I/O stuff
7637 case "$h_sysfile" in
7638 true) echo "#include <sys/file.h>" > head.c;;
7639 *)
7640         case "$h_fcntl" in
7641         true) echo "#include <fcntl.h>" > head.c;;
7642         *) echo "#include <sys/fcntl.h>" > head.c;;
7643         esac
7644         ;;
7645 esac
7646 echo " "
7647 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7648 case "$o_nonblock" in
7649 '')
7650         $cat head.c > try.c
7651         $cat >>try.c <<'EOCP'
7652 int main() {
7653 #ifdef O_NONBLOCK
7654         printf("O_NONBLOCK\n");
7655         exit(0);
7656 #endif
7657 #ifdef O_NDELAY
7658         printf("O_NDELAY\n");
7659         exit(0);
7660 #endif
7661 #ifdef FNDELAY
7662         printf("FNDELAY\n");
7663         exit(0);
7664 #endif
7665         exit(0);
7666 }
7667 EOCP
7668         set try
7669         if eval $compile_ok; then
7670                 o_nonblock=`./try`
7671                 case "$o_nonblock" in
7672                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7673                 *) echo "Seems like we can use $o_nonblock.";;
7674                 esac
7675         else
7676                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7677         fi
7678         ;;
7679 *) echo "Using $hint value $o_nonblock.";;
7680 esac
7681 $rm -f try try.* .out core
7682
7683 echo " "
7684 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7685 case "$eagain" in
7686 '')
7687         $cat head.c > try.c
7688         $cat >>try.c <<EOCP
7689 #include <errno.h>
7690 #include <sys/types.h>
7691 #include <signal.h>
7692 #define MY_O_NONBLOCK $o_nonblock
7693 #ifndef errno  /* XXX need better Configure test */
7694 extern int errno;
7695 #endif
7696 $signal_t blech(x) int x; { exit(3); }
7697 EOCP
7698         $cat >> try.c <<'EOCP'
7699 int main()
7700 {
7701         int pd[2];
7702         int pu[2];
7703         char buf[1];
7704         char string[100];
7705
7706         pipe(pd);       /* Down: child -> parent */
7707         pipe(pu);       /* Up: parent -> child */
7708         if (0 != fork()) {
7709                 int ret;
7710                 close(pd[1]);   /* Parent reads from pd[0] */
7711                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7712                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7713                         exit(1);
7714                 signal(SIGALRM, blech);
7715                 alarm(5);
7716                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7717                         exit(2);
7718                 sprintf(string, "%d\n", ret);
7719                 write(2, string, strlen(string));
7720                 alarm(0);
7721 #ifdef EAGAIN
7722                 if (errno == EAGAIN) {
7723                         printf("EAGAIN\n");
7724                         goto ok;
7725                 }
7726 #endif
7727 #ifdef EWOULDBLOCK
7728                 if (errno == EWOULDBLOCK)
7729                         printf("EWOULDBLOCK\n");
7730 #endif
7731         ok:
7732                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7733                 sleep(2);                               /* Give it time to close our pipe */
7734                 alarm(5);
7735                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7736                 alarm(0);
7737                 sprintf(string, "%d\n", ret);
7738                 write(3, string, strlen(string));
7739                 exit(0);
7740         }
7741
7742         close(pd[0]);                   /* We write to pd[1] */
7743         close(pu[1]);                   /* We read from pu[0] */
7744         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7745         close(pd[1]);                   /* Pipe pd is now fully closed! */
7746         exit(0);                                /* Bye bye, thank you for playing! */
7747 }
7748 EOCP
7749         set try
7750         if eval $compile_ok; then
7751                 echo "$startsh" >mtry
7752                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7753                 chmod +x mtry
7754                 ./mtry >/dev/null 2>&1
7755                 case $? in
7756                 0) eagain=`$cat try.out`;;
7757                 1) echo "Could not perform non-blocking setting!";;
7758                 2) echo "I did a successful read() for something that was not there!";;
7759                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7760                 *) echo "Something terribly wrong happened during testing.";;
7761                 esac
7762                 rd_nodata=`$cat try.ret`
7763                 echo "A read() system call with no data present returns $rd_nodata."
7764                 case "$rd_nodata" in
7765                 0|-1) ;;
7766                 *)
7767                         echo "(That's peculiar, fixing that to be -1.)"
7768                         rd_nodata=-1
7769                         ;;
7770                 esac
7771                 case "$eagain" in
7772                 '')
7773                         echo "Forcing errno EAGAIN on read() with no data available."
7774                         eagain=EAGAIN
7775                         ;;
7776                 *)
7777                         echo "Your read() sets errno to $eagain when no data is available."
7778                         ;;
7779                 esac
7780                 status=`$cat try.err`
7781                 case "$status" in
7782                 0) echo "And it correctly returns 0 to signal EOF.";;
7783                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7784                 *) echo "However, your read() returns '$status' on EOF??";;
7785                 esac
7786                 val="$define"
7787                 if test "$status" = "$rd_nodata"; then
7788                         echo "WARNING: you can't distinguish between EOF and no data!"
7789                         val="$undef"
7790                 fi
7791         else
7792                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7793                 eagain=EAGAIN
7794         fi
7795         set d_eofnblk
7796         eval $setvar
7797         ;;
7798 *)
7799         echo "Using $hint value $eagain."
7800         echo "Your read() returns $rd_nodata when no data is present."
7801         case "$d_eofnblk" in
7802         "$define") echo "And you can see EOF because read() returns 0.";;
7803         "$undef") echo "But you can't see EOF status from read() returned value.";;
7804         *)
7805                 echo "(Assuming you can't see EOF status from read anyway.)"
7806                 d_eofnblk=$undef
7807                 ;;
7808         esac
7809         ;;
7810 esac
7811 $rm -f try try.* .out core head.c mtry
7812
7813 : see if fchmod exists
7814 set fchmod d_fchmod
7815 eval $inlibc
7816
7817 : see if fchown exists
7818 set fchown d_fchown
7819 eval $inlibc
7820
7821 : see if this is an fcntl system
7822 set fcntl d_fcntl
7823 eval $inlibc
7824
7825 : see if sys/select.h has to be included
7826 set sys/select.h i_sysselct
7827 eval $inhdr
7828
7829 : see if we should include time.h, sys/time.h, or both
7830 echo " "
7831 if test "X$timeincl" = X; then
7832         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7833         $echo $n "I'm now running the test program...$c"
7834         $cat >try.c <<'EOCP'
7835 #include <sys/types.h>
7836 #ifdef I_TIME
7837 #include <time.h>
7838 #endif
7839 #ifdef I_SYSTIME
7840 #ifdef SYSTIMEKERNEL
7841 #define KERNEL
7842 #endif
7843 #include <sys/time.h>
7844 #endif
7845 #ifdef I_SYSSELECT
7846 #include <sys/select.h>
7847 #endif
7848 int main()
7849 {
7850         struct tm foo;
7851 #ifdef S_TIMEVAL
7852         struct timeval bar;
7853 #endif
7854 #ifdef S_TIMEZONE
7855         struct timezone tzp;
7856 #endif
7857         if (foo.tm_sec == foo.tm_sec)
7858                 exit(0);
7859 #ifdef S_TIMEVAL
7860         if (bar.tv_sec == bar.tv_sec)
7861                 exit(0);
7862 #endif
7863         exit(1);
7864 }
7865 EOCP
7866         flags=''
7867         for s_timezone in '-DS_TIMEZONE' ''; do
7868         sysselect=''
7869         for s_timeval in '-DS_TIMEVAL' ''; do
7870         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7871         for i_time in '' '-DI_TIME'; do
7872         for i_systime in '-DI_SYSTIME' ''; do
7873                 case "$flags" in
7874                 '') $echo $n ".$c"
7875                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7876                         if eval $compile; then
7877                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7878                                 shift
7879                                 flags="$*"
7880                                 echo " "
7881                                 $echo $n "Succeeded with $flags$c"
7882                         fi
7883                         ;;
7884                 esac
7885         done
7886         done
7887         done
7888         done
7889         done
7890         timeincl=''
7891         echo " "
7892         case "$flags" in
7893         *SYSTIMEKERNEL*) i_systimek="$define"
7894                 timeincl=`./findhdr sys/time.h`
7895                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7896         *) i_systimek="$undef";;
7897         esac
7898         case "$flags" in
7899         *I_TIME*) i_time="$define"
7900                 timeincl=`./findhdr time.h`" $timeincl"
7901                 echo "We'll include <time.h>." >&4;;
7902         *) i_time="$undef";;
7903         esac
7904         case "$flags" in
7905         *I_SYSTIME*) i_systime="$define"
7906                 timeincl=`./findhdr sys/time.h`" $timeincl"
7907                 echo "We'll include <sys/time.h>." >&4;;
7908         *) i_systime="$undef";;
7909         esac
7910         $rm -f try.c try
7911 fi
7912
7913 : check for fd_set items
7914 $cat <<EOM
7915
7916 Checking to see how well your C compiler handles fd_set and friends ...
7917 EOM
7918 $cat >fd_set.c <<EOCP
7919 #$i_systime I_SYS_TIME
7920 #$i_sysselct I_SYS_SELECT
7921 #$d_socket HAS_SOCKET
7922 #include <sys/types.h>
7923 #ifdef HAS_SOCKET
7924 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7925 #endif
7926 #ifdef I_SYS_TIME
7927 #include <sys/time.h>
7928 #endif
7929 #ifdef I_SYS_SELECT
7930 #include <sys/select.h>
7931 #endif
7932 int main() {
7933         fd_set fds;
7934
7935 #ifdef TRYBITS
7936         if(fds.fds_bits);
7937 #endif
7938
7939 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7940         exit(0);
7941 #else
7942         exit(1);
7943 #endif
7944 }
7945 EOCP
7946 set fd_set -DTRYBITS
7947 if eval $compile; then
7948         d_fds_bits="$define"
7949         d_fd_set="$define"
7950         echo "Well, your system knows about the normal fd_set typedef..." >&4
7951         if ./fd_set; then
7952                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7953                 d_fd_macros="$define"
7954         else
7955                 $cat >&4 <<'EOM'
7956 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7957 EOM
7958                 d_fd_macros="$undef"
7959         fi
7960 else
7961         $cat <<'EOM'
7962 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7963 EOM
7964         set fd_set
7965         if eval $compile; then
7966                 d_fds_bits="$undef"
7967                 d_fd_set="$define"
7968                 echo "Well, your system has some sort of fd_set available..." >&4
7969                 if ./fd_set; then
7970                         echo "and you have the normal fd_set macros." >&4
7971                         d_fd_macros="$define"
7972                 else
7973                         $cat <<'EOM'
7974 but not the normal fd_set macros!  Gross!  More work for me...
7975 EOM
7976                         d_fd_macros="$undef"
7977                 fi
7978         else
7979         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7980                 d_fd_set="$undef"
7981                 d_fds_bits="$undef"
7982                 d_fd_macros="$undef"
7983         fi
7984 fi
7985 $rm -f fd_set*
7986
7987 : see if fgetpos exists
7988 set fgetpos d_fgetpos
7989 eval $inlibc
7990
7991
7992 if $test X"$use64bits" = X"$define"; then
7993         : see if fgetpos64 exists
7994         set fgetpos64 d_fgetpos64
7995         eval $inlibc
7996
7997         : see if fopen64 exists
7998         set freopen64 d_fopen64
7999         eval $inlibc
8000
8001         : see if freopen64 exists
8002         set freopen64 d_freopen64
8003         eval $inlibc
8004
8005         : see if fseek64 exists
8006         set fseek64 d_fseek64
8007         eval $inlibc
8008
8009         : see if fseeko64 exists
8010         set fseeko64 d_fseeko64
8011         eval $inlibc
8012
8013         : see if fsetpos64 exists
8014         set fsetpos64 d_fsetpos64
8015         eval $inlibc
8016
8017         : see if ftell64 exists
8018         set ftell64 d_ftell64
8019         eval $inlibc
8020
8021         : see if ftello64 exists
8022         set ftello64 d_ftello64
8023         eval $inlibc
8024
8025         : see if tmpfile64 exists
8026         set tmpfile64 d_tmpfile64
8027         eval $inlibc
8028 else
8029         val="$undef"
8030         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8031         do
8032                 set $xxx
8033                 eval $setvar
8034         done
8035 fi
8036
8037 : see if flock exists
8038 set flock d_flock
8039 eval $inlibc
8040
8041 : see if fork exists
8042 set fork d_fork
8043 eval $inlibc
8044
8045 : see if pathconf exists
8046 set pathconf d_pathconf
8047 eval $inlibc
8048
8049 : see if fpathconf exists
8050 set fpathconf d_fpathconf
8051 eval $inlibc
8052
8053 : see if fseeko exists
8054 set fseeko d_fseeko
8055 eval $inlibc
8056
8057 : see if fsetpos exists
8058 set fsetpos d_fsetpos
8059 eval $inlibc
8060
8061 : see if this is a sys/param system
8062 set sys/param.h i_sysparam
8063 eval $inhdr
8064
8065 : see if this is a sys/mount.h system
8066 set sys/mount.h i_sysmount
8067 eval $inhdr
8068
8069
8070 : see if statfs exists
8071 set statfs d_statfs
8072 eval $inlibc
8073
8074 : see if fstatfs exists
8075 set fstatfs d_fstatfs
8076 eval $inlibc
8077
8078 : see if statfs knows about mount flags
8079 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8080 eval $hasfield
8081
8082
8083 : see if statvfs exists
8084 set statvfs d_statvfs
8085 eval $inlibc
8086
8087 : see if fstatvfs exists
8088 set fstatvfs d_fstatvfs
8089 eval $inlibc
8090
8091
8092 : see if ftello exists
8093 set ftello d_ftello
8094 eval $inlibc
8095
8096 : see if getgrent exists
8097 set getgrent d_getgrent
8098 eval $inlibc
8099
8100 : see if gethostbyaddr exists
8101 set gethostbyaddr d_gethbyaddr
8102 eval $inlibc
8103
8104 : see if gethostbyname exists
8105 set gethostbyname d_gethbyname
8106 eval $inlibc
8107
8108 : see if gethostent exists
8109 set gethostent d_gethent
8110 eval $inlibc
8111
8112 : see how we will look up host name
8113 echo " "
8114 call=''
8115 if set gethostname val -f d_gethname; eval $csym; $val; then
8116         echo 'gethostname() found.' >&4
8117         d_gethname="$define"
8118         call=gethostname
8119 fi
8120 if set uname val -f d_uname; eval $csym; $val; then
8121         if ./xenix; then
8122                 $cat <<'EOM'
8123 uname() was found, but you're running xenix, and older versions of xenix
8124 have a broken uname(). If you don't really know whether your xenix is old
8125 enough to have a broken system call, use the default answer.
8126
8127 EOM
8128                 dflt=y
8129                 case "$d_uname" in
8130                 "$define") dflt=n;;
8131                 esac
8132                 rp='Is your uname() broken?'
8133                 . ./myread
8134                 case "$ans" in
8135                 n*) d_uname="$define"; call=uname;;
8136                 esac
8137         else
8138                 echo 'uname() found.' >&4
8139                 d_uname="$define"
8140                 case "$call" in
8141                 '') call=uname ;;
8142                 esac
8143         fi
8144 fi
8145 case "$d_gethname" in
8146 '') d_gethname="$undef";;
8147 esac
8148 case "$d_uname" in
8149 '') d_uname="$undef";;
8150 esac
8151 case "$d_uname$d_gethname" in
8152 *define*)
8153         dflt=n
8154         cat <<EOM
8155  
8156 Every now and then someone has a $call() that lies about the hostname
8157 but can't be fixed for political or economic reasons.  If you wish, I can
8158 pretend $call() isn't there and maybe compute hostname at run-time
8159 thanks to the '$phostname' command.
8160
8161 EOM
8162         rp="Shall I ignore $call() from now on?"
8163         . ./myread
8164         case "$ans" in
8165         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8166         esac;;
8167 esac
8168 case "$phostname" in
8169 '') aphostname='';;
8170 *) case "$aphostname" in
8171         /*) ;;
8172         *) set X $phostname
8173                 shift
8174                 file=$1
8175                 shift
8176                 file=`./loc $file $file $pth`
8177                 aphostname=`echo $file $*`
8178                 ;;
8179         esac
8180         ;;
8181 esac
8182 case "$d_uname$d_gethname" in
8183 *define*) ;;
8184 *)
8185         case "$phostname" in
8186         '')
8187                 echo "There will be no way for $package to get your hostname." >&4;;
8188         *)
8189         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8190                 ;;
8191         esac;;
8192 esac
8193 case "$d_phostname" in
8194 '') d_phostname="$undef";;
8195 esac
8196
8197 : see if this is a netdb.h system
8198 set netdb.h i_netdb
8199 eval $inhdr
8200
8201 : see if prototypes for various gethostxxx netdb.h functions are available
8202 echo " "
8203 set d_gethostprotos gethostent $i_netdb netdb.h
8204 eval $hasproto
8205
8206 : see if getlogin exists
8207 set getlogin d_getlogin
8208 eval $inlibc
8209
8210 : see if getmntent exists
8211 set getmntent d_getmntent
8212 eval $inlibc
8213
8214 : see if getnetbyaddr exists
8215 set getnetbyaddr d_getnbyaddr
8216 eval $inlibc
8217
8218 : see if getnetbyname exists
8219 set getnetbyname d_getnbyname
8220 eval $inlibc
8221
8222 : see if getnetent exists
8223 set getnetent d_getnent
8224 eval $inlibc
8225
8226 : see if prototypes for various getnetxxx netdb.h functions are available
8227 echo " "
8228 set d_getnetprotos getnetent $i_netdb netdb.h
8229 eval $hasproto
8230
8231
8232 : see if getprotobyname exists
8233 set getprotobyname d_getpbyname
8234 eval $inlibc
8235
8236 : see if getprotobynumber exists
8237 set getprotobynumber d_getpbynumber
8238 eval $inlibc
8239
8240 : see if getprotoent exists
8241 set getprotoent d_getpent
8242 eval $inlibc
8243
8244 : see if getpgid exists
8245 set getpgid d_getpgid
8246 eval $inlibc
8247
8248 : see if getpgrp2 exists
8249 set getpgrp2 d_getpgrp2
8250 eval $inlibc
8251
8252 : see if getppid exists
8253 set getppid d_getppid
8254 eval $inlibc
8255
8256 : see if getpriority exists
8257 set getpriority d_getprior
8258 eval $inlibc
8259
8260 : see if prototypes for various getprotoxxx netdb.h functions are available
8261 echo " "
8262 set d_getprotoprotos getprotoent $i_netdb netdb.h
8263 eval $hasproto
8264
8265 : see if getpwent exists
8266 set getpwent d_getpwent
8267 eval $inlibc
8268
8269
8270 : see if getservbyname exists
8271 set getservbyname d_getsbyname
8272 eval $inlibc
8273
8274 : see if getservbyport exists
8275 set getservbyport d_getsbyport
8276 eval $inlibc
8277
8278 : see if getservent exists
8279 set getservent d_getsent
8280 eval $inlibc
8281
8282 : see if prototypes for various getservxxx netdb.h functions are available
8283 echo " "
8284 set d_getservprotos getservent $i_netdb netdb.h
8285 eval $hasproto
8286
8287 : see if getspent exists
8288 set getspent d_getspent
8289 eval $inlibc
8290
8291 : see if getspnam exists
8292 set getspnam d_getspnam
8293 eval $inlibc
8294
8295 : see if gettimeofday or ftime exists
8296 set gettimeofday d_gettimeod
8297 eval $inlibc
8298 case "$d_gettimeod" in
8299 "$undef")
8300         set ftime d_ftime 
8301         eval $inlibc
8302         ;;
8303 *)
8304         val="$undef"; set d_ftime; eval $setvar
8305         ;;
8306 esac
8307 case "$d_gettimeod$d_ftime" in
8308 "$undef$undef")
8309         echo " "
8310         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8311         ;;
8312 esac
8313
8314 : see if this is an grp system
8315 set grp.h i_grp
8316 eval $inhdr
8317
8318 case "$i_grp" in
8319 $define)
8320         xxx=`./findhdr grp.h`
8321         $cppstdin $cppflags $cppminus < $xxx >$$.h
8322
8323         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8324                 val="$define"
8325         else
8326                 val="$undef"
8327         fi
8328         set d_grpasswd
8329         eval $setvar
8330
8331         $rm -f $$.h
8332         ;;
8333 *)
8334         val="$undef";
8335         set d_grpasswd; eval $setvar
8336         ;;
8337 esac
8338
8339 : see if hasmntopt exists
8340 set hasmntopt d_hasmntopt
8341 eval $inlibc
8342
8343 : see if this is a netinet/in.h or sys/in.h system
8344 set netinet/in.h i_niin sys/in.h i_sysin
8345 eval $inhdr
8346
8347 : see if arpa/inet.h has to be included
8348 set arpa/inet.h i_arpainet
8349 eval $inhdr
8350
8351 : see if htonl --and friends-- exists
8352 val=''
8353 set htonl val
8354 eval $inlibc
8355
8356 : Maybe they are macros.
8357 case "$val" in
8358 $undef)
8359         $cat >htonl.c <<EOM
8360 #include <stdio.h>
8361 #include <sys/types.h>
8362 #$i_niin I_NETINET_IN
8363 #$i_sysin I_SYS_IN
8364 #$i_arpainet I_ARPA_INET
8365 #ifdef I_NETINET_IN
8366 #include <netinet/in.h>
8367 #endif
8368 #ifdef I_SYS_IN
8369 #include <sys/in.h>
8370 #endif
8371 #ifdef I_ARPA_INET
8372 #include <arpa/inet.h>
8373 #endif
8374 #ifdef htonl
8375 printf("Defined as a macro.");
8376 #endif
8377 EOM
8378         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8379         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8380                 val="$define"
8381                 echo "But it seems to be defined as a macro." >&4
8382         fi
8383         $rm -f htonl.?
8384         ;;
8385 esac
8386 set d_htonl
8387 eval $setvar
8388
8389 : see which of string.h or strings.h is needed
8390 echo " "
8391 strings=`./findhdr string.h`
8392 if $test "$strings" && $test -r "$strings"; then
8393         echo "Using <string.h> instead of <strings.h>." >&4
8394         val="$define"
8395 else
8396         val="$undef"
8397         strings=`./findhdr strings.h`
8398         if $test "$strings" && $test -r "$strings"; then
8399                 echo "Using <strings.h> instead of <string.h>." >&4
8400         else
8401                 echo "No string header found -- You'll surely have problems." >&4
8402         fi
8403 fi
8404 set i_string
8405 eval $setvar
8406 case "$i_string" in
8407 "$undef") strings=`./findhdr strings.h`;;
8408 *)        strings=`./findhdr string.h`;;
8409 esac
8410
8411 : index or strchr
8412 echo " "
8413 if set index val -f; eval $csym; $val; then
8414         if set strchr val -f d_strchr; eval $csym; $val; then
8415                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8416                         val="$define"
8417                         vali="$undef"
8418                         echo "strchr() found." >&4
8419                 else
8420                         val="$undef"
8421                         vali="$define"
8422                         echo "index() found." >&4
8423                 fi
8424         else
8425                 val="$undef"
8426                 vali="$define"
8427                 echo "index() found." >&4
8428         fi
8429 else
8430         if set strchr val -f d_strchr; eval $csym; $val; then
8431                 val="$define"
8432                 vali="$undef"
8433                 echo "strchr() found." >&4
8434         else
8435                 echo "No index() or strchr() found!" >&4
8436                 val="$undef"
8437                 vali="$undef"
8438         fi
8439 fi
8440 set d_strchr; eval $setvar
8441 val="$vali"
8442 set d_index; eval $setvar
8443
8444 : check whether inet_aton exists
8445 set inet_aton d_inetaton
8446 eval $inlibc
8447
8448 : see if inttypes.h is available
8449 : we want a real compile instead of Inhdr because some systems
8450 : have an inttypes.h which includes non-existent headers
8451 echo " "
8452 $cat >try.c <<EOCP
8453 #include <inttypes.h>
8454 int main() {
8455         static int32_t foo32 = 0x12345678;
8456 }
8457 EOCP
8458 set try
8459 if eval $compile; then
8460         echo "<inttypes.h> found." >&4
8461         val="$define"
8462 else
8463         echo "<inttypes.h> NOT found." >&4
8464         val="$undef"
8465 fi
8466 $rm -f try.c try
8467 set i_inttypes
8468 eval $setvar
8469
8470 : check for int64_t
8471 case "$use64bits" in
8472 "$define" )
8473         echo " "
8474         echo $n "Checking to see if your system supports int64_t...$c" >&4
8475         $cat >try.c <<EOCP
8476 #include <sys/types.h>
8477 #$i_inttypes I_INTTYPES
8478 #ifdef I_INTTYPES
8479 #include <inttypes.h>
8480 #endif
8481 int64_t foo() { int64_t x; x = 7; return x; }
8482 EOCP
8483         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8484                 val="$define"
8485                 echo " Yup, it does." >&4
8486         else
8487                 val="$undef"
8488                 echo " Nope, it doesn't." >&4
8489         fi
8490         $rm -f try.*
8491         ;;
8492 *)      val="$undef"
8493         ;;
8494 esac
8495 set d_int64t
8496 eval $setvar
8497
8498
8499 : Look for isascii
8500 echo " "
8501 $cat >isascii.c <<'EOCP'
8502 #include <stdio.h>
8503 #include <ctype.h>
8504 int main() {
8505         int c = 'A';
8506         if (isascii(c))
8507                 exit(0);
8508         else
8509                 exit(1);
8510 }
8511 EOCP
8512 set isascii
8513 if eval $compile; then
8514         echo "isascii() found." >&4
8515         val="$define"
8516 else
8517         echo "isascii() NOT found." >&4
8518         val="$undef"
8519 fi
8520 set d_isascii
8521 eval $setvar
8522 $rm -f isascii*
8523
8524 : see if killpg exists
8525 set killpg d_killpg
8526 eval $inlibc
8527
8528 : see if lchown exists
8529 echo " "
8530 $cat > try.c <<'EOCP'
8531 /* System header to define __stub macros and hopefully few prototypes,
8532     which can conflict with char lchown(); below.  */
8533 #include <assert.h>
8534 /* Override any gcc2 internal prototype to avoid an error.  */
8535 /* We use char because int might match the return type of a gcc2
8536    builtin and then its argument prototype would still apply.  */
8537 char lchown();
8538 int main() {
8539     /*  The GNU C library defines this for functions which it implements
8540         to always fail with ENOSYS.  Some functions are actually named
8541         something starting with __ and the normal name is an alias.  */
8542 #if defined (__stub_lchown) || defined (__stub___lchown)
8543 choke me
8544 #else
8545 lchown();
8546 #endif
8547 ; return 0; }
8548 EOCP
8549 set try
8550 if eval $compile; then
8551     $echo "lchown() found." >&4
8552     val="$define"
8553 else
8554     $echo "lchown() NOT found." >&4
8555     val="$undef"
8556 fi
8557 set d_lchown
8558 eval $setvar
8559
8560 : see if link exists
8561 set link d_link
8562 eval $inlibc
8563
8564 : see if localeconv exists
8565 set localeconv d_locconv
8566 eval $inlibc
8567
8568 : see if lockf exists
8569 set lockf d_lockf
8570 eval $inlibc
8571
8572 : check for length of double
8573 echo " "
8574 case "$doublesize" in
8575 '')
8576         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8577         $cat >try.c <<'EOCP'
8578 #include <stdio.h>
8579 int main()
8580 {
8581         printf("%d\n", sizeof(double));
8582 }
8583 EOCP
8584         set try
8585         if eval $compile_ok; then
8586                 doublesize=`./try`
8587                 $echo " $doublesize bytes." >&4
8588         else
8589                 dflt='8'
8590                 echo "(I can't seem to compile the test program.  Guessing...)"
8591                 rp="What is the size of a double precision number (in bytes)?"
8592                 . ./myread
8593                 doublesize="$ans"
8594         fi
8595         ;;
8596 esac
8597 $rm -f try.c try
8598
8599 : check for long doubles
8600 echo " "
8601 echo $n "Checking to see if your system supports long doubles...$c" >&4
8602 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8603 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8604         val="$define"
8605         echo " Yup, it does." >&4
8606 else
8607         val="$undef"
8608         echo " Nope, it doesn't." >&4
8609 fi
8610 $rm try.*
8611 set d_longdbl
8612 eval $setvar
8613
8614 : check for length of long double
8615 case "${d_longdbl}${longdblsize}" in
8616 $define)
8617         echo " "
8618         $echo $n "Checking to see how big your long doubles are...$c" >&4
8619         $cat >try.c <<'EOCP'
8620 #include <stdio.h>
8621 int main()
8622 {
8623         printf("%d\n", sizeof(long double));
8624 }
8625 EOCP
8626         set try
8627         if eval $compile; then
8628                 longdblsize=`./try`
8629                 $echo " $longdblsize bytes." >&4
8630         else
8631                 dflt='8'
8632                 echo " "
8633                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8634                 rp="What is the size of a long double (in bytes)?"
8635                 . ./myread
8636                 longdblsize="$ans"
8637         fi
8638         if $test "X$doublesize" = "X$longdblsize"; then
8639                 echo "(That isn't any different from an ordinary double.)"
8640         fi      
8641         ;;
8642 esac
8643 $rm -f try.c try
8644
8645 : check for long long
8646 echo " "
8647 echo $n "Checking to see if your system supports long long...$c" >&4
8648 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8649 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8650         val="$define"
8651         echo " Yup, it does." >&4
8652 else
8653         val="$undef"
8654         echo " Nope, it doesn't." >&4
8655 fi
8656 $rm try.*
8657 set d_longlong
8658 eval $setvar
8659
8660 : check for length of long long
8661 case "${d_longlong}${longlongsize}" in
8662 $define)
8663         echo " "
8664         $echo $n "Checking to see how big your long longs are...$c" >&4
8665         $cat >try.c <<'EOCP'
8666 #include <stdio.h>
8667 int main()
8668 {
8669         printf("%d\n", sizeof(long long));
8670 }
8671 EOCP
8672         set try
8673         if eval $compile_ok; then
8674                 longlongsize=`./try`
8675                 $echo " $longlongsize bytes." >&4
8676         else
8677                 dflt='8'
8678                 echo " "
8679                 echo "(I can't seem to compile the test program.  Guessing...)"
8680                 rp="What is the size of a long long (in bytes)?"
8681                 . ./myread
8682                 longlongsize="$ans"
8683         fi
8684         if $test "X$longsize" = "X$longlongsize"; then
8685                 echo "(That isn't any different from an ordinary long.)"
8686         fi      
8687         ;;
8688 esac
8689 $rm -f try.c try
8690
8691 : see if lstat exists
8692 set lstat d_lstat
8693 eval $inlibc
8694
8695 : see if madvise exists
8696 set madvise d_madvise
8697 eval $inlibc
8698
8699 : see if mblen exists
8700 set mblen d_mblen
8701 eval $inlibc
8702
8703 : see if mbstowcs exists
8704 set mbstowcs d_mbstowcs
8705 eval $inlibc
8706
8707 : see if mbtowc exists
8708 set mbtowc d_mbtowc
8709 eval $inlibc
8710
8711 : see if memchr exists
8712 set memchr d_memchr
8713 eval $inlibc
8714
8715 : see if memcmp exists
8716 set memcmp d_memcmp
8717 eval $inlibc
8718
8719 : see if memcpy exists
8720 set memcpy d_memcpy
8721 eval $inlibc
8722
8723 : see if memmove exists
8724 set memmove d_memmove
8725 eval $inlibc
8726
8727 : see if memset exists
8728 set memset d_memset
8729 eval $inlibc
8730
8731 : see if mkdir exists
8732 set mkdir d_mkdir
8733 eval $inlibc
8734
8735 : see if mkfifo exists
8736 set mkfifo d_mkfifo
8737 eval $inlibc
8738
8739 : see if mktime exists
8740 set mktime d_mktime
8741 eval $inlibc
8742
8743 : see if this is a sys/mman.h system
8744 set sys/mman.h i_sysmman
8745 eval $inhdr
8746
8747 : see if mmap exists
8748 set mmap d_mmap
8749 eval $inlibc
8750 : see what shmat returns
8751 : default to something harmless
8752 mmaptype='void *'
8753 case "$i_sysmman$d_mmap" in
8754 "$define$define")
8755         $cat >mmap.c <<'END'
8756 #include <sys/mman.h>
8757 void *mmap();
8758 END
8759         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8760                 mmaptype='void *'
8761         else
8762                 mmaptype='caddr_t'
8763         fi
8764         echo "and it returns ($mmaptype)." >&4
8765         ;;
8766 esac
8767
8768
8769
8770 : see if mprotect exists
8771 set mprotect d_mprotect
8772 eval $inlibc
8773
8774 : see if msgctl exists
8775 set msgctl d_msgctl
8776 eval $inlibc
8777
8778 : see if msgget exists
8779 set msgget d_msgget
8780 eval $inlibc
8781
8782 : see if msgsnd exists
8783 set msgsnd d_msgsnd
8784 eval $inlibc
8785
8786 : see if msgrcv exists
8787 set msgrcv d_msgrcv
8788 eval $inlibc
8789
8790 : see how much of the 'msg*(2)' library is present.
8791 h_msg=true
8792 echo " "
8793 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8794 *"$undef"*) h_msg=false;;
8795 esac
8796 case "$osname" in
8797 freebsd)
8798     case "`ipcs 2>&1`" in
8799     "SVID messages"*"not configured"*)
8800         echo "Your $osname does not have the msg*(2) configured." >&4
8801         h_msg=false
8802         val="$undef"
8803         set msgctl d_msgctl
8804         eval $setvar
8805         set msgget d_msgget
8806         eval $setvar
8807         set msgsnd d_msgsnd
8808         eval $setvar
8809         set msgrcv d_msgrcv
8810         eval $setvar
8811         ;;
8812     esac
8813     ;;
8814 esac
8815 : we could also check for sys/ipc.h ...
8816 if $h_msg && $test `./findhdr sys/msg.h`; then
8817         echo "You have the full msg*(2) library." >&4
8818         val="$define"
8819 else
8820         echo "You don't have the full msg*(2) library." >&4
8821         val="$undef"
8822 fi
8823 set d_msg
8824 eval $setvar
8825
8826 : see if msync exists
8827 set msync d_msync
8828 eval $inlibc
8829
8830 : see if munmap exists
8831 set munmap d_munmap
8832 eval $inlibc
8833
8834 : see if nice exists
8835 set nice d_nice
8836 eval $inlibc
8837
8838 : see if POSIX threads are available
8839 if test "X$usethreads" = "X$define"; then
8840         set pthread.h i_pthread
8841         eval $inhdr
8842 else
8843         i_pthread="$undef"
8844 fi
8845
8846
8847
8848 : how to create joinable pthreads
8849 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8850         echo " "
8851         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8852         $cat >try.c <<'EOCP'
8853 #include <pthread.h>
8854 int main() {
8855     int detachstate = JOINABLE;
8856 }
8857 EOCP
8858         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8859         if eval $compile; then
8860                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8861                 val="$undef" # Yes, undef.
8862                 set d_old_pthread_create_joinable
8863                 eval $setvar
8864                 val=""
8865                 set old_pthread_create_joinable
8866                 eval $setvar
8867         else
8868                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8869                 if eval $compile; then
8870                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8871                         val="$define"
8872                         set d_old_pthread_create_joinable
8873                         eval $setvar
8874                         val=PTHREAD_CREATE_UNDETACHED
8875                         set old_pthread_create_joinable
8876                         eval $setvar
8877                 else            
8878                         set try -DJOINABLE=__UNDETACHED
8879                         if eval $compile; then
8880                                 echo "You seem to use __UNDETACHED." >&4
8881                                 val="$define"
8882                                 set d_old_pthread_create_joinable
8883                                 eval $setvar
8884                                 val=__UNDETACHED
8885                                 set old_pthread_create_joinable
8886                                 eval $setvar
8887                         else
8888                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8889                                 val="$define"
8890                                 set d_old_pthread_create_joinable
8891                                 eval $setvar
8892                                 val=0
8893                                 set old_pthread_create_joinable
8894                                 eval $setvar
8895                         fi
8896                 fi
8897         fi
8898         $rm -f try try.*
8899 else
8900     d_old_pthread_create_joinable="$undef"
8901     old_pthread_create_joinable=""
8902 fi
8903
8904 : see if pause exists
8905 set pause d_pause
8906 eval $inlibc
8907
8908 : see if pipe exists
8909 set pipe d_pipe
8910 eval $inlibc
8911
8912 : see if poll exists
8913 set poll d_poll
8914 eval $inlibc
8915
8916
8917 : see whether the various POSIXish _yields exist
8918 $cat >try.c <<EOP
8919 #include <pthread.h>
8920 #include <stdio.h>
8921 int main() {
8922 #ifdef SCHED_YIELD
8923         sched_yield();
8924 #else
8925 #ifdef PTHREAD_YIELD
8926         pthread_yield();
8927 #else
8928 #ifdef PTHREAD_YIELD_NULL
8929         pthread_yield(NULL);
8930 #endif
8931 #endif
8932 #endif
8933 }
8934 EOP
8935 : see if sched_yield exists
8936 set try -DSCHED_YIELD
8937 if eval $compile; then
8938     val="$define"
8939     sched_yield='sched_yield()'
8940 else
8941     val="$undef"
8942 fi
8943 case "$usethreads" in
8944 $define)
8945         case "$val" in
8946         $define) echo 'sched_yield() found.' >&4        ;;
8947         *)       echo 'sched_yield() NOT found.' >&4    ;;
8948         esac
8949 esac
8950 set d_sched_yield
8951 eval $setvar
8952
8953 : see if pthread_yield exists
8954 set try -DPTHREAD_YIELD
8955 if eval $compile; then
8956     val="$define"
8957     case "$sched_yield" in
8958     '') sched_yield='pthread_yield()' ;;
8959     esac
8960 else
8961     set try -DPTHREAD_YIELD_NULL
8962     if eval $compile; then
8963         val="$define"
8964         case "$sched_yield" in
8965         '') sched_yield='pthread_yield(NULL)' ;;
8966         esac
8967     else
8968         val="$undef"
8969     fi
8970 fi
8971 case "$usethreads" in
8972 $define)
8973         case "$val" in
8974         $define) echo 'pthread_yield() found.' >&4      ;;
8975         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8976         esac
8977         ;;
8978 esac
8979 set d_pthread_yield
8980 eval $setvar
8981
8982 case "$sched_yield" in
8983 '') sched_yield=undef ;;
8984 esac
8985
8986 $rm -f try try.*
8987
8988 : see if this is a pwd.h system
8989 set pwd.h i_pwd
8990 eval $inhdr
8991
8992 case "$i_pwd" in
8993 $define)
8994         xxx=`./findhdr pwd.h`
8995         $cppstdin $cppflags $cppminus < $xxx >$$.h
8996
8997         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8998                 val="$define"
8999         else
9000                 val="$undef"
9001         fi
9002         set d_pwquota
9003         eval $setvar
9004
9005         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9006                 val="$define"
9007         else
9008                 val="$undef"
9009         fi
9010         set d_pwage
9011         eval $setvar
9012
9013         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9014                 val="$define"
9015         else
9016                 val="$undef"
9017         fi
9018         set d_pwchange
9019         eval $setvar
9020
9021         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9022                 val="$define"
9023         else
9024                 val="$undef"
9025         fi
9026         set d_pwclass
9027         eval $setvar
9028
9029         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9030                 val="$define"
9031         else
9032                 val="$undef"
9033         fi
9034         set d_pwexpire
9035         eval $setvar
9036
9037         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9038                 val="$define"
9039         else
9040                 val="$undef"
9041         fi
9042         set d_pwcomment
9043         eval $setvar
9044
9045         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9046                 val="$define"
9047         else
9048                 val="$undef"
9049         fi
9050         set d_pwgecos
9051         eval $setvar
9052
9053         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9054                 val="$define"
9055         else
9056                 val="$undef"
9057         fi
9058         set d_pwpasswd
9059         eval $setvar
9060
9061         $rm -f $$.h
9062         ;;
9063 *)
9064         val="$undef"; 
9065         set d_pwquota; eval $setvar
9066         set d_pwage; eval $setvar
9067         set d_pwchange; eval $setvar
9068         set d_pwclass; eval $setvar
9069         set d_pwexpire; eval $setvar
9070         set d_pwcomment; eval $setvar
9071         set d_pwgecos; eval $setvar
9072         set d_pwpasswd; eval $setvar
9073         ;;
9074 esac
9075
9076 : see if readdir and friends exist
9077 set readdir d_readdir
9078 eval $inlibc
9079 set seekdir d_seekdir
9080 eval $inlibc
9081 set telldir d_telldir
9082 eval $inlibc
9083 set rewinddir d_rewinddir
9084 eval $inlibc
9085
9086 : see if readlink exists
9087 set readlink d_readlink
9088 eval $inlibc
9089
9090 : see if readv exists
9091 set readv d_readv
9092 eval $inlibc
9093
9094 : see if rename exists
9095 set rename d_rename
9096 eval $inlibc
9097
9098 : see if rmdir exists
9099 set rmdir d_rmdir
9100 eval $inlibc
9101
9102 : see if memory.h is available.
9103 val=''
9104 set memory.h val
9105 eval $inhdr
9106
9107 : See if it conflicts with string.h
9108 case "$val" in
9109 $define)
9110         case "$strings" in
9111         '') ;;
9112         *)
9113                 $cppstdin $cppflags $cppminus < $strings > mem.h
9114                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9115                         echo " "
9116                         echo "We won't be including <memory.h>."
9117                         val="$undef"
9118                 fi
9119                 $rm -f mem.h
9120                 ;;
9121         esac
9122 esac
9123 set i_memory
9124 eval $setvar
9125
9126 : can bcopy handle overlapping blocks?
9127 val="$undef"
9128 case "$d_bcopy" in
9129 "$define")
9130         echo " "
9131         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9132         $cat >try.c <<EOCP
9133 #$i_memory I_MEMORY
9134 #$i_stdlib I_STDLIB
9135 #$i_string I_STRING
9136 #$i_unistd I_UNISTD
9137 EOCP
9138         $cat >>try.c <<'EOCP'
9139 #include <stdio.h>
9140 #ifdef I_MEMORY
9141 #  include <memory.h>
9142 #endif
9143 #ifdef I_STDLIB
9144 #  include <stdlib.h>
9145 #endif
9146 #ifdef I_STRING
9147 #  include <string.h>
9148 #else
9149 #  include <strings.h>
9150 #endif
9151 #ifdef I_UNISTD
9152 #  include <unistd.h>  /* Needed for NetBSD */
9153 #endif
9154 int main()
9155 {
9156 char buf[128], abc[128];
9157 char *b;
9158 int len;
9159 int off;
9160 int align;
9161
9162 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9163
9164 for (align = 7; align >= 0; align--) {
9165         for (len = 36; len; len--) {
9166                 b = buf+align;
9167                 bcopy(abc, b, len);
9168                 for (off = 1; off <= len; off++) {
9169                         bcopy(b, b+off, len);
9170                         bcopy(b+off, b, len);
9171                         if (bcmp(b, abc, len))
9172                                 exit(1);
9173                 }
9174         }
9175 }
9176 exit(0);
9177 }
9178 EOCP
9179         set try
9180         if eval $compile_ok; then
9181                 if ./try 2>/dev/null; then
9182                         echo "Yes, it can."
9183                         val="$define"
9184                 else
9185                         echo "It can't, sorry."
9186                         case "$d_memmove" in
9187                         "$define") echo "But that's Ok since you have memmove()." ;;
9188                         esac
9189                 fi
9190         else
9191                 echo "(I can't compile the test program, so we'll assume not...)"
9192                 case "$d_memmove" in
9193                 "$define") echo "But that's Ok since you have memmove()." ;;
9194                 esac
9195         fi
9196         ;;
9197 esac
9198 $rm -f try.* try core
9199 set d_safebcpy
9200 eval $setvar
9201
9202 : can memcpy handle overlapping blocks?
9203 val="$undef"
9204 case "$d_memcpy" in
9205 "$define")
9206         echo " "
9207         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9208         $cat >try.c <<EOCP
9209 #$i_memory I_MEMORY
9210 #$i_stdlib I_STDLIB
9211 #$i_string I_STRING
9212 #$i_unistd I_UNISTD
9213 EOCP
9214         $cat >>try.c <<'EOCP'
9215 #include <stdio.h>
9216 #ifdef I_MEMORY
9217 #  include <memory.h>
9218 #endif
9219 #ifdef I_STDLIB
9220 #  include <stdlib.h>
9221 #endif
9222 #ifdef I_STRING
9223 #  include <string.h>
9224 #else
9225 #  include <strings.h>
9226 #endif
9227 #ifdef I_UNISTD
9228 #  include <unistd.h>  /* Needed for NetBSD */
9229 #endif
9230 int main()
9231 {
9232 char buf[128], abc[128];
9233 char *b;
9234 int len;
9235 int off;
9236 int align;
9237
9238 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9239    try to store the string in read-only memory. */
9240 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9241
9242 for (align = 7; align >= 0; align--) {
9243         for (len = 36; len; len--) {
9244                 b = buf+align;
9245                 memcpy(b, abc, len);
9246                 for (off = 1; off <= len; off++) {
9247                         memcpy(b+off, b, len);
9248                         memcpy(b, b+off, len);
9249                         if (memcmp(b, abc, len))
9250                                 exit(1);
9251                 }
9252         }
9253 }
9254 exit(0);
9255 }
9256 EOCP
9257         set try
9258         if eval $compile_ok; then
9259                 if ./try 2>/dev/null; then
9260                         echo "Yes, it can."
9261                         val="$define"
9262                 else
9263                         echo "It can't, sorry."
9264                         case "$d_memmove" in
9265                         "$define") echo "But that's Ok since you have memmove()." ;;
9266                         esac
9267                 fi
9268         else
9269                 echo "(I can't compile the test program, so we'll assume not...)"
9270                 case "$d_memmove" in
9271                 "$define") echo "But that's Ok since you have memmove()." ;;
9272                 esac
9273         fi
9274         ;;
9275 esac
9276 $rm -f try.* try core
9277 set d_safemcpy
9278 eval $setvar
9279
9280 : can memcmp be trusted to compare relative magnitude?
9281 val="$undef"
9282 case "$d_memcmp" in
9283 "$define")
9284         echo " "
9285         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9286         $cat >try.c <<EOCP
9287 #$i_memory I_MEMORY
9288 #$i_stdlib I_STDLIB
9289 #$i_string I_STRING
9290 #$i_unistd I_UNISTD
9291 EOCP
9292         $cat >>try.c <<'EOCP'
9293 #include <stdio.h>
9294 #ifdef I_MEMORY
9295 #  include <memory.h>
9296 #endif
9297 #ifdef I_STDLIB
9298 #  include <stdlib.h>
9299 #endif
9300 #ifdef I_STRING
9301 #  include <string.h>
9302 #else
9303 #  include <strings.h>
9304 #endif
9305 #ifdef I_UNISTD
9306 #  include <unistd.h>  /* Needed for NetBSD */
9307 #endif
9308 int main()
9309 {
9310 char a = -1;
9311 char b = 0;
9312 if ((a < b) && memcmp(&a, &b, 1) < 0)
9313         exit(1);
9314 exit(0);
9315 }
9316 EOCP
9317         set try
9318         if eval $compile_ok; then
9319                 if ./try 2>/dev/null; then
9320                         echo "Yes, it can."
9321                         val="$define"
9322                 else
9323                         echo "No, it can't (it uses signed chars)."
9324                 fi
9325         else
9326                 echo "(I can't compile the test program, so we'll assume not...)"
9327         fi
9328         ;;
9329 esac
9330 $rm -f try.* try core
9331 set d_sanemcmp
9332 eval $setvar
9333
9334 : see if select exists
9335 set select d_select
9336 eval $inlibc
9337
9338 : see if semctl exists
9339 set semctl d_semctl
9340 eval $inlibc
9341
9342 : see if semget exists
9343 set semget d_semget
9344 eval $inlibc
9345
9346 : see if semop exists
9347 set semop d_semop
9348 eval $inlibc
9349
9350 : see how much of the 'sem*(2)' library is present.
9351 h_sem=true
9352 echo " "
9353 case "$d_semctl$d_semget$d_semop" in
9354 *"$undef"*) h_sem=false;;
9355 esac
9356 case "$osname" in
9357 freebsd)
9358     case "`ipcs 2>&1`" in
9359     "SVID messages"*"not configured"*)
9360         echo "Your $osname does not have the sem*(2) configured." >&4
9361         h_sem=false
9362         val="$undef"
9363         set semctl d_semctl
9364         eval $setvar
9365         set semget d_semget
9366         eval $setvar
9367         set semop d_semop
9368         eval $setvar
9369         ;;
9370     esac
9371     ;;
9372 esac
9373 : we could also check for sys/ipc.h ...
9374 if $h_sem && $test `./findhdr sys/sem.h`; then
9375         echo "You have the full sem*(2) library." >&4
9376         val="$define"
9377 else
9378         echo "You don't have the full sem*(2) library." >&4
9379         val="$undef"
9380 fi
9381 set d_sem
9382 eval $setvar
9383
9384 : see whether sys/sem.h defines union semun
9385 echo " "
9386 $cat > try.c <<'END'
9387 #include <sys/types.h>
9388 #include <sys/ipc.h>
9389 #include <sys/sem.h>
9390 int main () { union semun semun; semun.buf = 0; }
9391 END
9392 set try
9393 if eval $compile; then
9394     echo "You have union semun in <sys/sem.h>." >&4
9395     val="$define"
9396 else
9397     echo "You do not have union semun in <sys/sem.h>." >&4
9398     val="$undef"
9399 fi
9400 $rm -f try try.c try.h
9401 set d_union_semun
9402 eval $setvar
9403
9404 : see how to do semctl IPC_STAT
9405 case "$d_sem" in
9406 $define)
9407     : see whether semctl IPC_STAT can use union semun
9408     echo " "
9409     $cat > try.h <<END
9410 #ifndef S_IRUSR
9411 #   ifdef S_IREAD
9412 #       define S_IRUSR S_IREAD
9413 #       define S_IWUSR S_IWRITE
9414 #       define S_IXUSR S_IEXEC
9415 #   else
9416 #       define S_IRUSR 0400
9417 #       define S_IWUSR 0200
9418 #       define S_IXUSR 0100
9419 #   endif
9420 #   define S_IRGRP (S_IRUSR>>3)
9421 #   define S_IWGRP (S_IWUSR>>3)
9422 #   define S_IXGRP (S_IXUSR>>3)
9423 #   define S_IROTH (S_IRUSR>>6)
9424 #   define S_IWOTH (S_IWUSR>>6)
9425 #   define S_IXOTH (S_IXUSR>>6)
9426 #endif
9427 #ifndef S_IRWXU
9428 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9429 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9430 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9431 #endif
9432 END
9433
9434     $cat > try.c <<END
9435 #include <sys/types.h>
9436 #include <sys/ipc.h>
9437 #include <sys/sem.h>
9438 #include <sys/stat.h>
9439 #include <stdio.h>
9440 #include <errno.h>
9441 #include "try.h"
9442 #ifndef errno
9443 extern int errno;
9444 #endif
9445 #$d_union_semun HAS_UNION_SEMUN
9446 int main() {
9447     union semun
9448 #ifndef HAS_UNION_SEMUN
9449     {
9450         int val;
9451         struct semid_ds *buf;
9452         unsigned short *array;
9453     }
9454 #endif
9455     arg;
9456     int sem, st;
9457
9458 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9459     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9460     if (sem > -1) {
9461         struct semid_ds argbuf;
9462         arg.buf = &argbuf;
9463 #       ifdef IPC_STAT
9464         st = semctl(sem, 0, IPC_STAT, arg);
9465         if (st == 0)
9466             printf("semun\n");
9467         else
9468 #       endif /* IPC_STAT */
9469             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9470 #       ifdef IPC_RMID
9471         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9472 #       endif /* IPC_RMID */
9473             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9474     } else
9475 #endif /* IPC_PRIVATE && ... */
9476         printf("semget failed: errno = %d\n", errno);
9477   return 0;
9478 }
9479 END
9480     val="$undef"
9481     set try
9482     if eval $compile; then
9483         xxx=`./try`
9484         case "$xxx" in
9485         semun) val="$define" ;;
9486         esac
9487     fi
9488     $rm -f try try.c
9489     set d_semctl_semun
9490     eval $setvar
9491     case "$d_semctl_semun" in
9492     $define)
9493         echo "You can use union semun for semctl IPC_STAT." >&4
9494         also='also'
9495         ;;
9496     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9497         also=''
9498         ;;
9499     esac
9500
9501     : see whether semctl IPC_STAT can use struct semid_ds pointer
9502     $cat > try.c <<'END'
9503 #include <sys/types.h>
9504 #include <sys/ipc.h>
9505 #include <sys/sem.h>
9506 #include <sys/stat.h>
9507 #include "try.h"
9508 #include <stdio.h>
9509 #include <errno.h>
9510 #ifndef errno
9511 extern int errno;
9512 #endif
9513 int main() {
9514     struct semid_ds arg;
9515     int sem, st;
9516
9517 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9518     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9519     if (sem > -1) {
9520 #       ifdef IPC_STAT
9521         st = semctl(sem, 0, IPC_STAT, &arg);
9522         if (st == 0)
9523             printf("semid_ds\n");
9524         else
9525 #       endif /* IPC_STAT */
9526             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9527 #       ifdef IPC_RMID
9528         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9529 #       endif /* IPC_RMID */
9530             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9531     } else
9532 #endif /* IPC_PRIVATE && ... */
9533         printf("semget failed: errno = %d\n", errno);
9534
9535     return 0;
9536 }
9537 END
9538     val="$undef"
9539     set try
9540     if eval $compile; then
9541         xxx=`./try`
9542         case "$xxx" in
9543         semid_ds) val="$define" ;;
9544         esac
9545     fi
9546     $rm -f try try.c
9547     set d_semctl_semid_ds
9548     eval $setvar
9549     case "$d_semctl_semid_ds" in
9550     $define)
9551         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9552         ;;
9553     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9554         ;;
9555     esac
9556     $rm -f try.h
9557     ;;
9558 *)  val="$undef"
9559
9560     # We do not have the full sem*(2) library, so assume we can not
9561     # use either.
9562
9563     set d_semctl_semun
9564     eval $setvar
9565
9566     set d_semctl_semid_ds
9567     eval $setvar
9568     ;;
9569 esac
9570
9571 : see if setegid exists
9572 set setegid d_setegid
9573 eval $inlibc
9574
9575 : see if seteuid exists
9576 set seteuid d_seteuid
9577 eval $inlibc
9578
9579 : see if setgrent exists
9580 set setgrent d_setgrent
9581 eval $inlibc
9582
9583 : see if sethostent exists
9584 set sethostent d_sethent
9585 eval $inlibc
9586
9587 : see if setlinebuf exists
9588 set setlinebuf d_setlinebuf
9589 eval $inlibc
9590
9591 : see if setlocale exists
9592 set setlocale d_setlocale
9593 eval $inlibc
9594
9595 : see if setnetent exists
9596 set setnetent d_setnent
9597 eval $inlibc
9598
9599 : see if setprotoent exists
9600 set setprotoent d_setpent
9601 eval $inlibc
9602
9603 : see if setpgid exists
9604 set setpgid d_setpgid
9605 eval $inlibc
9606
9607 : see if setpgrp2 exists
9608 set setpgrp2 d_setpgrp2
9609 eval $inlibc
9610
9611 : see if setpriority exists
9612 set setpriority d_setprior
9613 eval $inlibc
9614
9615 : see if setpwent exists
9616 set setpwent d_setpwent
9617 eval $inlibc
9618
9619 : see if setregid exists
9620 set setregid d_setregid
9621 eval $inlibc
9622 set setresgid d_setresgid
9623 eval $inlibc
9624
9625 : see if setreuid exists
9626 set setreuid d_setreuid
9627 eval $inlibc
9628 set setresuid d_setresuid
9629 eval $inlibc
9630
9631 : see if setrgid exists
9632 set setrgid d_setrgid
9633 eval $inlibc
9634
9635 : see if setruid exists
9636 set setruid d_setruid
9637 eval $inlibc
9638
9639 : see if setservent exists
9640 set setservent d_setsent
9641 eval $inlibc
9642
9643 : see if setsid exists
9644 set setsid d_setsid
9645 eval $inlibc
9646
9647 : see if setspent exists
9648 set setspent d_setspent
9649 eval $inlibc
9650
9651 : see if setvbuf exists
9652 set setvbuf d_setvbuf
9653 eval $inlibc
9654
9655 : see if sfio.h is available
9656 set sfio.h i_sfio
9657 eval $inhdr
9658
9659
9660 : see if sfio library is available
9661 case "$i_sfio" in
9662 $define)
9663         val=''
9664         set sfreserve val
9665         eval $inlibc
9666         ;;
9667 *)
9668         val="$undef"
9669         ;;
9670 esac
9671 : Ok, but do we want to use it.
9672 case "$val" in
9673 $define)
9674         case "$usesfio" in
9675         true|$define|[yY]*) dflt='y';;
9676         *) dflt='n';;
9677         esac
9678         echo "$package can use the sfio library, but it is experimental."
9679         rp="You seem to have sfio available, do you want to try using it?"
9680         . ./myread
9681         case "$ans" in
9682         y|Y) ;;
9683         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9684                 val="$undef"
9685                 : Remove sfio from list of libraries to use
9686                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9687                 shift
9688                 libs="$*"
9689                 echo "libs = $libs" >&4
9690                 ;;
9691         esac
9692         ;;
9693 *)      case "$usesfio" in
9694         true|$define|[yY]*)
9695                 echo "Sorry, cannot find sfio on this machine" >&4
9696                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9697                 ;;
9698         esac
9699         ;;
9700 esac
9701 set d_sfio
9702 eval $setvar
9703 case "$d_sfio" in
9704 $define) usesfio='true';;
9705 *) usesfio='false';;
9706 esac
9707
9708 : see if shmctl exists
9709 set shmctl d_shmctl
9710 eval $inlibc
9711
9712 : see if shmget exists
9713 set shmget d_shmget
9714 eval $inlibc
9715
9716 : see if shmat exists
9717 set shmat d_shmat
9718 eval $inlibc
9719 : see what shmat returns
9720 case "$d_shmat" in
9721 "$define")
9722         $cat >shmat.c <<'END'
9723 #include <sys/shm.h>
9724 void *shmat();
9725 END
9726         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9727                 shmattype='void *'
9728         else
9729                 shmattype='char *'
9730         fi
9731         echo "and it returns ($shmattype)." >&4
9732         : see if a prototype for shmat is available
9733         xxx=`./findhdr sys/shm.h`
9734         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9735         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9736                 val="$define"
9737         else
9738                 val="$undef"
9739         fi
9740         $rm -f shmat.[co]
9741         ;;
9742 *)
9743         val="$undef"
9744         ;;
9745 esac
9746 set d_shmatprototype
9747 eval $setvar
9748
9749 : see if shmdt exists
9750 set shmdt d_shmdt
9751 eval $inlibc
9752
9753 : see how much of the 'shm*(2)' library is present.
9754 h_shm=true
9755 echo " "
9756 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9757 *"$undef"*) h_shm=false;;
9758 esac
9759 case "$osname" in
9760 freebsd)
9761     case "`ipcs 2>&1`" in
9762     "SVID shared memory"*"not configured"*)
9763         echo "Your $osname does not have the shm*(2) configured." >&4
9764         h_shm=false
9765         val="$undef"
9766         set shmctl d_shmctl
9767         evat $setvar
9768         set shmget d_shmget
9769         evat $setvar
9770         set shmat d_shmat
9771         evat $setvar
9772         set shmdt d_shmdt
9773         evat $setvar
9774         ;;
9775     esac
9776     ;;
9777 esac
9778 : we could also check for sys/ipc.h ...
9779 if $h_shm && $test `./findhdr sys/shm.h`; then
9780         echo "You have the full shm*(2) library." >&4
9781         val="$define"
9782 else
9783         echo "You don't have the full shm*(2) library." >&4
9784         val="$undef"
9785 fi
9786 set d_shm
9787 eval $setvar
9788
9789 echo " "
9790 : see if we have sigaction
9791 if set sigaction val -f d_sigaction; eval $csym; $val; then
9792         echo 'sigaction() found.' >&4
9793         $cat > try.c <<'EOP'
9794 #include <stdio.h>
9795 #include <sys/types.h>
9796 #include <signal.h>
9797 int main()
9798 {
9799     struct sigaction act, oact;
9800 }
9801 EOP
9802         set try
9803         if eval $compile_ok; then
9804                 val="$define"
9805         else
9806                 echo "But you don't seem to have a useable struct sigaction." >&4
9807                 val="$undef"
9808         fi
9809 else
9810         echo 'sigaction NOT found.' >&4
9811         val="$undef"
9812 fi
9813 set d_sigaction; eval $setvar
9814 $rm -f try try$_o try.c
9815
9816 : see if sigsetjmp exists
9817 echo " "
9818 case "$d_sigsetjmp" in
9819 '')
9820         $cat >try.c <<'EOP'
9821 #include <setjmp.h>
9822 sigjmp_buf env;
9823 int set = 1;
9824 int main()
9825 {
9826         if (sigsetjmp(env,1))
9827                 exit(set);
9828         set = 0;
9829         siglongjmp(env, 1);
9830         exit(1);
9831 }
9832 EOP
9833         set try
9834         if eval $compile; then
9835                 if ./try >/dev/null 2>&1; then
9836                         echo "POSIX sigsetjmp found." >&4
9837                         val="$define"
9838                 else
9839                         $cat >&4 <<EOM
9840 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9841 I'll ignore them.
9842 EOM
9843                         val="$undef"
9844                 fi
9845         else
9846                 echo "sigsetjmp not found." >&4
9847                 val="$undef"
9848         fi
9849         ;;
9850 *) val="$d_sigsetjmp"
9851         case "$d_sigsetjmp" in
9852         $define) echo "POSIX sigsetjmp found." >&4;;
9853         $undef) echo "sigsetjmp not found." >&4;;
9854         esac
9855         ;;
9856 esac
9857 set d_sigsetjmp
9858 eval $setvar
9859 $rm -f try.c try
9860
9861 : see if stat knows about block sizes
9862 echo " "
9863 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9864 eval $hasfield
9865
9866 : see if _ptr and _cnt from stdio act std
9867 echo " "
9868 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9869         echo "(Looks like you have stdio.h from Linux.)"
9870         case "$stdio_ptr" in
9871         '') stdio_ptr='((fp)->_IO_read_ptr)'
9872                 ptr_lval=$define
9873                 ;;
9874         *)      ptr_lval=$d_stdio_ptr_lval;;
9875         esac
9876         case "$stdio_cnt" in
9877         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9878                 cnt_lval=$undef
9879                 ;;
9880         *)      cnt_lval=$d_stdio_cnt_lval;;
9881         esac
9882         case "$stdio_base" in
9883         '') stdio_base='((fp)->_IO_read_base)';;
9884         esac
9885         case "$stdio_bufsiz" in
9886         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9887         esac
9888 else
9889         case "$stdio_ptr" in
9890         '') stdio_ptr='((fp)->_ptr)'
9891                 ptr_lval=$define
9892                 ;;
9893         *)      ptr_lval=$d_stdio_ptr_lval;;
9894         esac
9895         case "$stdio_cnt" in
9896         '') stdio_cnt='((fp)->_cnt)'
9897                 cnt_lval=$define
9898                 ;;
9899         *)      cnt_lval=$d_stdio_cnt_lval;;
9900         esac
9901         case "$stdio_base" in
9902         '') stdio_base='((fp)->_base)';;
9903         esac
9904         case "$stdio_bufsiz" in
9905         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9906         esac
9907 fi
9908 : test whether _ptr and _cnt really work
9909 echo "Checking how std your stdio is..." >&4
9910 $cat >try.c <<EOP
9911 #include <stdio.h>
9912 #define FILE_ptr(fp)    $stdio_ptr
9913 #define FILE_cnt(fp)    $stdio_cnt
9914 int main() {
9915         FILE *fp = fopen("try.c", "r");
9916         char c = getc(fp);
9917         if (
9918                 18 <= FILE_cnt(fp) &&
9919                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9920         )
9921                 exit(0);
9922         exit(1);
9923 }
9924 EOP
9925 val="$undef"
9926 set try
9927 if eval $compile; then
9928         if ./try; then
9929                 echo "Your stdio acts pretty std."
9930                 val="$define"
9931         else
9932                 echo "Your stdio isn't very std."
9933         fi
9934 else
9935         echo "Your stdio doesn't appear very std."
9936 fi
9937 $rm -f try.c try
9938 set d_stdstdio
9939 eval $setvar
9940
9941 : Can _ptr be used as an lvalue?
9942 case "$d_stdstdio$ptr_lval" in
9943 $define$define) val=$define ;;
9944 *) val=$undef ;;
9945 esac
9946 set d_stdio_ptr_lval
9947 eval $setvar
9948
9949 : Can _cnt be used as an lvalue?
9950 case "$d_stdstdio$cnt_lval" in
9951 $define$define) val=$define ;;
9952 *) val=$undef ;;
9953 esac
9954 set d_stdio_cnt_lval
9955 eval $setvar
9956
9957 : see if _base is also standard
9958 val="$undef"
9959 case "$d_stdstdio" in
9960 $define)
9961         $cat >try.c <<EOP
9962 #include <stdio.h>
9963 #define FILE_base(fp)   $stdio_base
9964 #define FILE_bufsiz(fp) $stdio_bufsiz
9965 int main() {
9966         FILE *fp = fopen("try.c", "r");
9967         char c = getc(fp);
9968         if (
9969                 19 <= FILE_bufsiz(fp) &&
9970                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9971         )
9972                 exit(0);
9973         exit(1);
9974 }
9975 EOP
9976         set try
9977         if eval $compile; then
9978                 if ./try; then
9979                         echo "And its _base field acts std."
9980                         val="$define"
9981                 else
9982                         echo "But its _base field isn't std."
9983                 fi
9984         else
9985                 echo "However, it seems to be lacking the _base field."
9986         fi
9987         $rm -f try.c try
9988         ;;
9989 esac
9990 set d_stdiobase
9991 eval $setvar
9992
9993 $cat >&4 <<EOM
9994 Checking how to access stdio streams by file descriptor number...
9995 EOM
9996 case "$stdio_stream_array" in
9997 '')     $cat >try.c <<EOCP
9998 #include <stdio.h>
9999 int main() {
10000   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10001     printf("yes\n");
10002 }
10003 EOCP
10004         for s in _iob __iob __sF
10005         do
10006                 set try -DSTDIO_STREAM_ARRAY=$s
10007                 if eval $compile; then
10008                         case "`./try$exe_ext`" in
10009                         yes)    stdio_stream_array=$s; break ;;
10010                         esac
10011                 fi
10012         done
10013         $rm -f try.* try$exe_ext
10014 esac
10015 case "$stdio_stream_array" in
10016 '')     $cat >&4 <<EOM
10017 I can't figure out how to access stdio streams by file descriptor number.
10018 EOM
10019         d_stdio_stream_array="$undef"
10020         ;;
10021 *)      $cat >&4 <<EOM
10022 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10023 EOM
10024         d_stdio_stream_array="$define"
10025         ;;
10026 esac
10027
10028 : see if strcoll exists
10029 set strcoll d_strcoll
10030 eval $inlibc
10031
10032 : check for structure copying
10033 echo " "
10034 echo "Checking to see if your C compiler can copy structs..." >&4
10035 $cat >try.c <<'EOCP'
10036 int main()
10037 {
10038         struct blurfl {
10039                 int dyick;
10040         } foo, bar;
10041
10042         foo = bar;
10043 }
10044 EOCP
10045 if $cc -c try.c >/dev/null 2>&1 ; then
10046         val="$define"
10047         echo "Yup, it can."
10048 else
10049         val="$undef"
10050         echo "Nope, it can't."
10051 fi
10052 set d_strctcpy
10053 eval $setvar
10054 $rm -f try.*
10055
10056 : see if strerror and/or sys_errlist[] exist
10057 echo " "
10058 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10059     if set strerror val -f d_strerror; eval $csym; $val; then
10060                 echo 'strerror() found.' >&4
10061                 d_strerror="$define"
10062                 d_strerrm='strerror(e)'
10063                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10064                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10065                         d_syserrlst="$define"
10066                 else
10067                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10068                         d_syserrlst="$undef"
10069                 fi
10070     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10071                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10072                 echo 'strerror() found in string header.' >&4
10073                 d_strerror="$define"
10074                 d_strerrm='strerror(e)'
10075                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10076                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10077                                 d_syserrlst="$define"
10078                 else
10079                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10080                         d_syserrlst="$undef"
10081                 fi
10082     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10083                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10084                 d_strerror="$undef"
10085                 d_syserrlst="$define"
10086                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10087     else
10088                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10089                 d_strerror="$undef"
10090                 d_syserrlst="$undef"
10091                 d_strerrm='"unknown"'
10092     fi
10093 fi
10094
10095 : see if strtod exists
10096 set strtod d_strtod
10097 eval $inlibc
10098
10099 : see if strtol exists
10100 set strtol d_strtol
10101 eval $inlibc
10102
10103 : see if strtoul exists
10104 set strtoul d_strtoul
10105 eval $inlibc
10106
10107 : see if strxfrm exists
10108 set strxfrm d_strxfrm
10109 eval $inlibc
10110
10111 : see if symlink exists
10112 set symlink d_symlink
10113 eval $inlibc
10114
10115 : see if syscall exists
10116 set syscall d_syscall
10117 eval $inlibc
10118
10119 : see if sysconf exists
10120 set sysconf d_sysconf
10121 eval $inlibc
10122
10123 : see if system exists
10124 set system d_system
10125 eval $inlibc
10126
10127 : see if tcgetpgrp exists
10128 set tcgetpgrp d_tcgetpgrp
10129 eval $inlibc
10130
10131 : see if tcsetpgrp exists
10132 set tcsetpgrp d_tcsetpgrp
10133 eval $inlibc
10134
10135 : see if sys/types.h has to be included
10136 set sys/types.h i_systypes
10137 eval $inhdr
10138
10139 : see if prototype for telldir is available
10140 echo " "
10141 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10142 eval $hasproto
10143
10144 : define an is-a-typedef? function
10145 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10146 case "$inclist" in
10147 "") inclist="sys/types.h";;
10148 esac;
10149 eval "varval=\$$var";
10150 case "$varval" in
10151 "")
10152         $rm -f temp.c;
10153         for inc in $inclist; do
10154                 echo "#include <$inc>" >>temp.c;
10155         done;
10156         echo "#ifdef $type" >> temp.c;
10157         echo "printf(\"We have $type\");" >> temp.c;
10158         echo "#endif" >> temp.c;
10159         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10160         if $contains $type temp.E >/dev/null 2>&1; then
10161                 eval "$var=\$type";
10162         else
10163                 eval "$var=\$def";
10164         fi;
10165         $rm -f temp.?;;
10166 *) eval "$var=\$varval";;
10167 esac'
10168
10169 : define an is-a-typedef? function that prompts if the type is not available.
10170 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10171 case "$inclist" in
10172 "") inclist="sys/types.h";;
10173 esac;
10174 eval "varval=\$$var";
10175 case "$varval" in
10176 "")
10177         $rm -f temp.c;
10178         for inc in $inclist; do
10179                 echo "#include <$inc>" >>temp.c;
10180         done;
10181         echo "#ifdef $type" >> temp.c;
10182         echo "printf(\"We have $type\");" >> temp.c;
10183         echo "#endif" >> temp.c;
10184         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10185         echo " " ;
10186         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10187         if $contains $type temp.E >/dev/null 2>&1; then
10188                 echo "$type found." >&4;
10189                 eval "$var=\$type";
10190         else
10191                 echo "$type NOT found." >&4;
10192                 dflt="$def";
10193                 . ./myread ;
10194                 eval "$var=\$ans";
10195         fi;
10196         $rm -f temp.?;;
10197 *) eval "$var=\$varval";;
10198 esac'
10199
10200 : see if this is a sys/times.h system
10201 set sys/times.h i_systimes
10202 eval $inhdr
10203
10204 : see if times exists
10205 echo " "
10206 if set times val -f d_times; eval $csym; $val; then
10207         echo 'times() found.' >&4
10208         d_times="$define"
10209         inc=''
10210         case "$i_systimes" in
10211         "$define") inc='sys/times.h';;
10212         esac
10213         rp="What is the type returned by times() on this system?"
10214         set clock_t clocktype long stdio.h sys/types.h $inc
10215         eval $typedef_ask
10216 else
10217         echo 'times() NOT found, hope that will do.' >&4
10218         d_times="$undef"
10219         clocktype='int'
10220 fi
10221
10222 : see if truncate exists
10223 set truncate d_truncate
10224 eval $inlibc
10225
10226 : see if tzname[] exists
10227 echo " "
10228 if set tzname val -a d_tzname; eval $csym; $val; then
10229         val="$define"
10230         echo 'tzname[] found.' >&4
10231 else
10232         val="$undef"
10233         echo 'tzname[] NOT found.' >&4
10234 fi
10235 set d_tzname
10236 eval $setvar
10237
10238 : see if umask exists
10239 set umask d_umask
10240 eval $inlibc
10241
10242 : backward compatibility for d_hvfork
10243 if test X$d_hvfork != X; then
10244         d_vfork="$d_hvfork"
10245         d_hvfork=''
10246 fi
10247 : see if there is a vfork
10248 val=''
10249 set vfork val
10250 eval $inlibc
10251
10252 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10253 : perl on Solaris 2.x, and probably elsewhere.
10254 case "$val" in
10255 $define)
10256         echo " "
10257         case "$usevfork" in
10258         false) dflt='n';;
10259         *) dflt='y';;
10260         esac
10261         cat <<'EOM'
10262  
10263 Perl can only use a vfork() that doesn't suffer from strict
10264 restrictions on calling functions or modifying global data in
10265 the child.  For example, glibc-2.1 contains such a vfork()
10266 that is unsuitable.  If your system provides a proper fork()
10267 call, chances are that you do NOT want perl to use vfork().
10268
10269 EOM
10270         rp="Do you still want to use vfork()?"
10271         . ./myread
10272         case "$ans" in
10273         y|Y) ;;
10274         *)
10275                 echo "Ok, we won't use vfork()."
10276                 val="$undef"
10277                 ;;
10278         esac
10279         ;;
10280 esac
10281 set d_vfork
10282 eval $setvar
10283 case "$d_vfork" in
10284 $define) usevfork='true';;
10285 *) usevfork='false';;
10286 esac
10287
10288 : see if this is an sysdir system
10289 set sys/dir.h i_sysdir
10290 eval $inhdr
10291
10292 : see if this is an sysndir system
10293 set sys/ndir.h i_sysndir
10294 eval $inhdr
10295
10296 : see if closedir exists
10297 set closedir d_closedir
10298 eval $inlibc
10299
10300 case "$d_closedir" in
10301 "$define")
10302         echo " "
10303         echo "Checking whether closedir() returns a status..." >&4
10304         cat > closedir.c <<EOM
10305 #$i_dirent I_DIRENT             /**/
10306 #$i_sysdir I_SYS_DIR            /**/
10307 #$i_sysndir I_SYS_NDIR          /**/
10308 #$i_systypes I_SYS_TYPES        /**/
10309
10310 #if defined(I_SYS_TYPES)
10311 #include <sys/types.h>
10312 #endif
10313 #if defined(I_DIRENT)
10314 #include <dirent.h>
10315 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10316 #include <sys/dir.h>
10317 #endif
10318 #else
10319 #ifdef I_SYS_NDIR
10320 #include <sys/ndir.h>
10321 #else
10322 #ifdef I_SYS_DIR
10323 #ifdef hp9000s500
10324 #include <ndir.h>       /* may be wrong in the future */
10325 #else
10326 #include <sys/dir.h>
10327 #endif
10328 #endif
10329 #endif
10330 #endif 
10331 int main() { return closedir(opendir(".")); }
10332 EOM
10333         set closedir
10334         if eval $compile_ok; then
10335                 if ./closedir > /dev/null 2>&1 ; then
10336                         echo "Yes, it does."
10337                         val="$undef"
10338                 else
10339                         echo "No, it doesn't."
10340                         val="$define"
10341                 fi
10342         else
10343                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10344                 val="$define"
10345         fi
10346         ;;
10347 *)
10348         val="$undef";
10349         ;;
10350 esac
10351 set d_void_closedir
10352 eval $setvar
10353 $rm -f closedir*
10354 : check for volatile keyword
10355 echo " "
10356 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10357 $cat >try.c <<'EOCP'
10358 int main()
10359 {
10360         typedef struct _goo_struct goo_struct;
10361         goo_struct * volatile goo = ((goo_struct *)0);
10362         struct _goo_struct {
10363                 long long_int;
10364                 int reg_int;
10365                 char char_var;
10366         };
10367         typedef unsigned short foo_t;
10368         char *volatile foo;
10369         volatile int bar;
10370         volatile foo_t blech;
10371         foo = foo;
10372 }
10373 EOCP
10374 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10375         val="$define"
10376         echo "Yup, it does."
10377 else
10378         val="$undef"
10379         echo "Nope, it doesn't."
10380 fi
10381 set d_volatile
10382 eval $setvar
10383 $rm -f try.*
10384
10385 : see if there is a wait4
10386 set wait4 d_wait4
10387 eval $inlibc
10388
10389 : see if waitpid exists
10390 set waitpid d_waitpid
10391 eval $inlibc
10392
10393 : see if wcstombs exists
10394 set wcstombs d_wcstombs
10395 eval $inlibc
10396
10397 : see if wctomb exists
10398 set wctomb d_wctomb
10399 eval $inlibc
10400
10401 : see if writev exists
10402 set writev d_writev
10403 eval $inlibc
10404
10405 : preserve RCS keywords in files with variable substitution, grrr
10406 Date='$Date'
10407 Id='$Id'
10408 Log='$Log'
10409 RCSfile='$RCSfile'
10410 Revision='$Revision'
10411
10412 case "$crosscompile" in
10413 ''|[nN]*) crosscompile="$undef" ;;
10414 esac
10415
10416 case "$osname" in
10417 next|rhapsody) multiarch="$define" ;;
10418 esac
10419 case "$multiarch" in
10420 ''|[nN]*) multiarch="$undef" ;;
10421 esac
10422
10423 : check for alignment requirements
10424 echo " "
10425 case "$crosscompile$multiarch" in
10426 *$define*)
10427         $cat <<EOM
10428 You seem to be either cross-compiling or doing a multiarchitecture build,
10429 skipping the memory alignment check.
10430
10431 EOM
10432         case "$alignbytes" in
10433         '') alignbytes=8 ;;
10434         esac
10435         ;;
10436 *)
10437         case "$alignbytes" in
10438         '') echo "Checking alignment constraints..." >&4
10439                 $cat >try.c <<'EOCP'
10440 struct foobar {
10441         char foo;
10442         double bar;
10443 } try_algn;
10444 int main()
10445 {
10446         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10447 }
10448 EOCP
10449                 set try
10450                 if eval $compile_ok; then
10451                         dflt=`./try`
10452                 else
10453                         dflt='8'
10454                         echo "(I can't seem to compile the test program...)"
10455                 fi
10456                 ;;
10457         *) dflt="$alignbytes"
10458                 ;;
10459         esac
10460         rp="Doubles must be aligned on a how-many-byte boundary?"
10461         . ./myread
10462         alignbytes="$ans"
10463         $rm -f try.c try
10464         ;;
10465 esac
10466
10467
10468 : check for ordering of bytes in a long
10469 echo " "
10470 case "$crosscompile$multiarch" in
10471 *$define*)
10472         $cat <<EOM
10473 You seem to be either cross-compiling or doing a multiarchitecture build,
10474 skipping the byteorder check.
10475
10476 EOM
10477         byteorder=''
10478         ;;
10479 *)
10480         case "$byteorder" in
10481         '')
10482                 $cat <<'EOM'
10483 In the following, larger digits indicate more significance.  A big-endian
10484 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10485 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10486 machines may have weird orders like 3412.  A Cray will report 87654321. If
10487 the test program works the default is probably right.
10488 I'm now running the test program...
10489 EOM
10490                 $cat >try.c <<'EOCP'
10491 #include <stdio.h>
10492 int main()
10493 {
10494         int i;
10495         union {
10496                 unsigned long l;
10497                 char c[sizeof(long)];
10498         } u;
10499
10500         if (sizeof(long) > 4)
10501                 u.l = (0x08070605L << 32) | 0x04030201L;
10502         else
10503                 u.l = 0x04030201L;
10504         for (i = 0; i < sizeof(long); i++)
10505                 printf("%c", u.c[i]+'0');
10506         printf("\n");
10507         exit(0);
10508 }
10509 EOCP
10510                 xxx_prompt=y
10511                 set try
10512                 if eval $compile && ./try > /dev/null; then
10513                         dflt=`./try`
10514                         case "$dflt" in
10515                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10516                                 echo "(The test program ran ok.)"
10517                                 echo "byteorder=$dflt"
10518                                 xxx_prompt=n
10519                         ;;
10520                         ????|????????) echo "(The test program ran ok.)" ;;
10521                         *) echo "(The test program didn't run right for some reason.)" ;;
10522                         esac
10523                 else
10524                         dflt='4321'
10525                         cat <<'EOM'
10526 (I can't seem to compile the test program.  Guessing big-endian...)
10527 EOM
10528                 fi
10529                 case "$xxx_prompt" in
10530                 y)
10531                         rp="What is the order of bytes in a long?"
10532                         . ./myread
10533                         byteorder="$ans"
10534                         ;;
10535                 *)      byteorder=$dflt
10536                         ;;
10537                 esac
10538                 ;;
10539         esac
10540         $rm -f try.c try
10541         ;;
10542 esac
10543
10544
10545 : how do we catenate cpp tokens here?
10546 echo " "
10547 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10548 $cat >cpp_stuff.c <<'EOCP'
10549 #define RCAT(a,b)a/**/b
10550 #define ACAT(a,b)a ## b
10551 RCAT(Rei,ser)
10552 ACAT(Cir,cus)
10553 EOCP
10554 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10555 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10556         echo "Oh!  Smells like ANSI's been here." >&4
10557         echo "We can catify or stringify, separately or together!"
10558         cpp_stuff=42
10559 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10560         echo "Ah, yes!  The good old days!" >&4
10561         echo "However, in the good old days we don't know how to stringify and"
10562         echo "catify at the same time."
10563         cpp_stuff=1
10564 else
10565         $cat >&4 <<EOM
10566 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10567 to have to edit the values of CAT[2-5] in config.h...
10568 EOM
10569         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10570 fi
10571 $rm -f cpp_stuff.*
10572
10573 : see if this is a db.h system
10574 set db.h i_db
10575 eval $inhdr
10576
10577 case "$i_db" in
10578 $define)
10579         : Check db version.
10580         echo " "
10581         echo "Checking Berkeley DB version ..." >&4
10582         $cat >try.c <<EOCP
10583 #$d_const HASCONST
10584 #ifndef HASCONST
10585 #define const
10586 #endif
10587 #include <sys/types.h>
10588 #include <stdio.h>
10589 #include <db.h>
10590 int main()
10591 {
10592 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10593     int Major, Minor, Patch ;
10594     unsigned long Version ;
10595     (void)db_version(&Major, &Minor, &Patch) ;
10596     printf("You have Berkeley DB Version 2 or greater\n");
10597
10598     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10599                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10600     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10601                 Major, Minor, Patch) ;
10602
10603     /* check that db.h & libdb are compatible */
10604     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10605         printf("db.h and libdb are incompatible\n") ;
10606         exit(3);        
10607     }
10608
10609     printf("db.h and libdb are compatible\n") ;
10610
10611     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10612                 + DB_VERSION_PATCH ;
10613
10614     /* needs to be >= 2.3.4 */
10615     if (Version < 2003004) {
10616     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10617         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10618         exit(2);        
10619     }
10620
10621     exit(0);
10622 #else
10623 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10624     printf("You have Berkeley DB Version 1\n");
10625     exit(0);    /* DB version < 2: the coast is clear. */
10626 #else
10627     exit(1);    /* <db.h> not Berkeley DB? */
10628 #endif
10629 #endif
10630 }
10631 EOCP
10632         set try
10633         if eval $compile && ./try; then
10634                 echo 'Looks OK.' >&4
10635         else
10636                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10637                 i_db=$undef
10638                 case " $libs " in
10639                 *"-ldb "*)
10640                         : Remove db from list of libraries to use
10641                         echo "Removing unusable -ldb from library list" >&4
10642                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10643                         shift
10644                         libs="$*"
10645                         echo "libs = $libs" >&4
10646                         ;;
10647                 esac
10648         fi
10649         $rm -f try.*
10650         ;;
10651 esac
10652
10653 case "$i_db" in
10654 define)
10655         : Check the return type needed for hash 
10656         echo " "
10657         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10658         $cat >try.c <<EOCP
10659 #$d_const HASCONST
10660 #ifndef HASCONST
10661 #define const
10662 #endif
10663 #include <sys/types.h>
10664 #include <db.h>
10665
10666 #ifndef DB_VERSION_MAJOR
10667 u_int32_t hash_cb (ptr, size)
10668 const void *ptr;
10669 size_t size;
10670 {
10671 }
10672 HASHINFO info;
10673 int main()
10674 {
10675         info.hash = hash_cb;
10676 }
10677 #endif
10678 EOCP
10679         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10680                 if $contains warning try.out >>/dev/null 2>&1 ; then
10681                         db_hashtype='int'
10682                 else
10683                         db_hashtype='u_int32_t'
10684                 fi
10685         else
10686                 : XXX Maybe we should just give up here.
10687                 db_hashtype=u_int32_t
10688                 $cat try.out >&4
10689                 echo "Help:  I can't seem to compile the db test program." >&4
10690                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10691         fi
10692         $rm -f try.*
10693         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10694         ;;
10695 *)      db_hashtype=u_int32_t
10696         ;;
10697 esac
10698 case "$i_db" in
10699 define)
10700         : Check the return type needed for prefix 
10701         echo " "
10702         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10703         cat >try.c <<EOCP
10704 #$d_const HASCONST
10705 #ifndef HASCONST
10706 #define const
10707 #endif
10708 #include <sys/types.h>
10709 #include <db.h>
10710
10711 #ifndef DB_VERSION_MAJOR
10712 size_t prefix_cb (key1, key2)
10713 const DBT *key1;
10714 const DBT *key2;
10715 {
10716 }
10717 BTREEINFO info;
10718 int main()
10719 {
10720         info.prefix = prefix_cb;
10721 }
10722 #endif
10723 EOCP
10724         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10725                 if $contains warning try.out >>/dev/null 2>&1 ; then
10726                         db_prefixtype='int'
10727                 else
10728                         db_prefixtype='size_t'
10729                 fi
10730         else
10731                 db_prefixtype='size_t'
10732                 : XXX Maybe we should just give up here.
10733                 $cat try.out >&4
10734                 echo "Help:  I can't seem to compile the db test program." >&4
10735                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10736         fi
10737         $rm -f try.*
10738         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10739         ;;
10740 *)      db_prefixtype='size_t'
10741         ;;
10742 esac
10743
10744 : check for void type
10745 echo " "
10746 echo "Checking to see how well your C compiler groks the void type..." >&4
10747 case "$voidflags" in
10748 '')
10749         $cat >try.c <<'EOCP'
10750 #if TRY & 1
10751 void sub() {
10752 #else
10753 sub() {
10754 #endif
10755         extern void moo();      /* function returning void */
10756         void (*goo)();          /* ptr to func returning void */
10757 #if TRY & 8
10758         void *hue;              /* generic ptr */
10759 #endif
10760 #if TRY & 2
10761         void (*foo[10])();
10762 #endif
10763
10764 #if TRY & 4
10765         if(goo == moo) {
10766                 exit(0);
10767         }
10768 #endif
10769         exit(0);
10770 }
10771 int main() { sub(); }
10772 EOCP
10773         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10774                 voidflags=$defvoidused
10775         echo "Good.  It appears to support void to the level $package wants.">&4
10776                 if $contains warning .out >/dev/null 2>&1; then
10777                         echo "However, you might get some warnings that look like this:"
10778                         $cat .out
10779                 fi
10780         else
10781 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10782                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10783                         echo "It supports 1..."
10784                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10785                                 echo "It also supports 2..."
10786                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10787                                         voidflags=7
10788                                         echo "And it supports 4 but not 8 definitely."
10789                                 else
10790                                         echo "It doesn't support 4..."
10791                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10792                                                 voidflags=11
10793                                                 echo "But it supports 8."
10794                                         else
10795                                                 voidflags=3
10796                                                 echo "Neither does it support 8."
10797                                         fi
10798                                 fi
10799                         else
10800                                 echo "It does not support 2..."
10801                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10802                                         voidflags=13
10803                                         echo "But it supports 4 and 8."
10804                                 else
10805                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10806                                                 voidflags=5
10807                                                 echo "And it supports 4 but has not heard about 8."
10808                                         else
10809                                                 echo "However it supports 8 but not 4."
10810                                         fi
10811                                 fi
10812                         fi
10813                 else
10814                         echo "There is no support at all for void."
10815                         voidflags=0
10816                 fi
10817         fi
10818 esac
10819 case "$voidflags" in
10820 "$defvoidused") ;;
10821 *)      $cat >&4 <<'EOM'
10822   Support flag bits are:
10823     1: basic void declarations.
10824     2: arrays of pointers to functions returning void.
10825     4: operations between pointers to and addresses of void functions.
10826     8: generic void pointers.
10827 EOM
10828         dflt="$voidflags";
10829         rp="Your void support flags add up to what?"
10830         . ./myread
10831         voidflags="$ans"
10832         ;;
10833 esac
10834 $rm -f try.* .out
10835
10836
10837 : How can we generate normalized random numbers ?
10838 echo " "
10839 echo "Looking for a random number function..." >&4
10840 case "$randfunc" in
10841 '')
10842         if set drand48 val -f; eval $csym; $val; then
10843                 dflt="drand48"
10844                 echo "Good, found drand48()." >&4
10845         elif set random val -f; eval $csym; $val; then
10846                 dflt="random"
10847                 echo "OK, found random()." >&4
10848         else
10849                 dflt="rand"
10850                 echo "Yick, looks like I have to use rand()." >&4
10851         fi
10852         echo " "
10853         ;;
10854 *)
10855         dflt="$randfunc"
10856         ;;
10857 esac
10858 cont=true
10859
10860 case "$ccflags" in
10861 *-Dmy_rand=*|*-Dmy_srand=*)
10862         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10863         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10864         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10865         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10866         ;;
10867 esac
10868
10869 while $test "$cont"; do
10870         rp="Use which function to generate random numbers?"
10871         . ./myread
10872         if $test "$ans" = "$dflt"; then
10873                 : null
10874         else
10875                 randbits=''
10876         fi
10877         randfunc="$ans"
10878         if set $ans val -f; eval $csym; $val; then
10879                 cont=''
10880         else
10881                 dflt=y
10882                 rp="I cannot find function $ans. Use that name anyway?"
10883                 . ./myread
10884                 dflt=rand
10885                 case "$ans" in
10886                         [yY]*) cont='';;
10887                 esac
10888         fi
10889         case "$cont" in
10890         '')
10891                 case "$randfunc" in
10892                 drand48)
10893                         drand01="drand48()"
10894                         seedfunc="srand48"
10895                         randbits=48
10896                         randseedtype=long
10897                         ;;
10898                 rand|random)
10899                         case "$randbits" in
10900                         '')
10901 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10902                                 $cat >try.c <<EOCP
10903 #$i_unistd I_UNISTD
10904 #$i_stdlib I_STDLIB
10905 #include <stdio.h>
10906 #ifdef I_UNISTD
10907 #  include <unistd.h>
10908 #endif
10909 #ifdef I_STDLIB
10910 #  include <stdlib.h>
10911 #endif
10912 int main()
10913 {
10914         register int i;
10915         register unsigned long tmp;
10916         register unsigned long max = 0L;
10917
10918         for (i = 1000; i; i--) {
10919                 tmp = (unsigned long) $randfunc();
10920                 if (tmp > max) max = tmp;
10921         }
10922         for (i = 0; max; i++)
10923                 max /= 2;
10924         printf("%d\n",i);
10925 }
10926 EOCP
10927                                 set try
10928                                 if eval $compile_ok; then
10929                                         dflt=`try`
10930                                 else
10931                                         dflt='?'
10932                                         echo "(I can't seem to compile the test program...)"
10933                                 fi
10934                                 ;;
10935                         *)
10936                                 dflt="$randbits"
10937                                 ;;
10938                         esac
10939                         rp="How many bits does your $randfunc() function produce?"
10940                         . ./myread
10941                         randbits="$ans"
10942                         $rm -f try.c try
10943                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10944                         seedfunc="s$randfunc"
10945                         randseedtype=unsigned
10946                         ;;
10947                 *)
10948                         dflt="31"
10949                         rp="How many bits does your $randfunc() function produce?"
10950                         . ./myread
10951                         randbits="$ans"
10952                         seedfunc="s$randfunc"
10953                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10954                         if set $seedfunc val -f; eval $csym; $val; then
10955                                 echo "(Using $seedfunc() to seed random generator)"
10956                         else
10957                                 echo "(Warning: no $seedfunc() to seed random generator)"
10958                                 seedfunc=rand
10959                         fi
10960                         randseedtype=unsigned
10961                         ;;
10962                 esac
10963                 ;;
10964         esac
10965 done
10966
10967 echo " "
10968 echo "Determining whether or not we are on an EBCDIC system..." >&4
10969 $cat >tebcdic.c <<'EOM'
10970 int main()
10971 {
10972   if ('M'==0xd4) return 0;
10973   return 1;
10974 }
10975 EOM
10976
10977 val=$undef
10978 set tebcdic
10979 if eval $compile_ok; then
10980         if ./tebcdic; then
10981                 echo "You have EBCDIC." >&4
10982                 val="$define"
10983         else
10984                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10985         fi
10986 else
10987         echo "I'm unable to compile the test program." >&4
10988         echo "I'll assume ASCII or some ISO Latin." >&4
10989 fi
10990 $rm -f tebcdic.c tebcdic
10991 set ebcdic
10992 eval $setvar
10993
10994 $cat >&4 <<EOM
10995 Checking how to flush all pending stdio output...
10996 EOM
10997 # I only know how to find the first 32 possibly open files on SunOS.
10998 # See also hints/sunos_4_1.sh and util.c  --AD
10999 case "$osname" in
11000 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11001 esac
11002 $cat >>try.c <<EOCP
11003 #include <stdio.h>
11004 #$i_unistd I_UNISTD
11005 #ifdef I_UNISTD
11006 # include <unistd.h>
11007 #endif
11008 #$d_sysconf HAS_SYSCONF
11009 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11010 #ifdef HAS_STDIO_STREAM_ARRAY
11011 # define STDIO_STREAM_ARRAY $stdio_stream_array
11012 #endif
11013 int main() {
11014   FILE* p = fopen("try.out", "w");
11015 #ifdef TRY_FPUTC
11016   fputc('x', p);
11017 #else
11018 # ifdef TRY_FPRINTF
11019   fprintf(p, "x");
11020 # endif
11021 #endif
11022 #ifdef TRY_FFLUSH_NULL
11023   fflush(NULL);
11024 #endif
11025 #ifdef TRY_FFLUSH_ALL
11026   {
11027     long open_max = -1;
11028 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11029     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11030 # else
11031 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11032     open_max = sysconf(_SC_OPEN_MAX);
11033 #  else
11034 #   ifdef FOPEN_MAX
11035     open_max = FOPEN_MAX;
11036 #   else
11037 #    ifdef OPEN_MAX
11038     open_max = OPEN_MAX;
11039 #    else
11040 #     ifdef _NFILE
11041     open_max = _NFILE;
11042 #     endif
11043 #    endif
11044 #   endif
11045 #  endif
11046 # endif 
11047 # ifdef HAS_STDIO_STREAM_ARRAY
11048     if (open_max > 0) {
11049       long i;
11050       for (i = 0; i < open_max; i++)
11051             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11052                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11053                 STDIO_STREAM_ARRAY[i]._flag)
11054                 fflush(&STDIO_STREAM_ARRAY[i]);
11055     }   
11056   }
11057 # endif
11058 #endif
11059   _exit(42);
11060 }
11061 EOCP
11062 : first we have to find out how _not_ to flush
11063 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11064     output=''
11065     set try -DTRY_FPUTC
11066     if eval $compile; then
11067             $rm -f try.out
11068             ./try$exe_ext 2>/dev/null
11069             if $test ! -s try.out -a "X$?" = X42; then
11070                 output=-DTRY_FPUTC
11071             fi
11072     fi
11073     case "$output" in
11074     '')
11075             set try -DTRY_FPRINTF
11076             $rm -f try.out
11077             if eval $compile; then
11078                     $rm -f try.out
11079                     ./try$exe_ext 2>/dev/null
11080                     if $test ! -s try.out -a "X$?" = X42; then
11081                         output=-DTRY_FPRINTF
11082                     fi
11083             fi
11084         ;;
11085     esac
11086 fi
11087 : check for fflush NULL behaviour
11088 case "$fflushNULL" in
11089 '')     set try -DTRY_FFLUSH_NULL $output
11090         if eval $compile; then
11091                 $rm -f try.out
11092                 ./try$exe_ext 2>/dev/null
11093                 code="$?"
11094                 if $test -s try.out -a "X$code" = X42; then
11095                         fflushNULL="`$cat try.out`"
11096                 else
11097                         if $test "X$code" != X42; then
11098                                 $cat >&4 <<EOM
11099 (If this test failed, don't worry, we'll try another method shortly.)
11100 EOM
11101                         fi
11102                 fi
11103         fi
11104         $rm -f core try.core core.try.*
11105         case "$fflushNULL" in
11106         x)      $cat >&4 <<EOM
11107 Your fflush(NULL) works okay.
11108 EOM
11109                 fflushNULL="$define"
11110                 ;;
11111         '')     $cat >&4 <<EOM
11112 Your fflush(NULL) isn't working (contrary to ANSI C).
11113 EOM
11114                 fflushNULL="$undef"
11115                 ;;
11116         *)      $cat >&4 <<EOM
11117 Cannot figure out whether your fflush(NULL) works or not.
11118 I'm assuming it doesn't (contrary to ANSI C).
11119 EOM
11120                 fflushNULL="$undef"
11121                 ;;
11122         esac
11123         ;;
11124 $define|true|[yY]*)
11125         fflushNULL="$define"
11126         ;;
11127 *)
11128         fflushNULL="$undef"
11129         ;;
11130 esac
11131 : check explicit looping only if NULL did not work
11132 case "$fflushNULL" in
11133 "$undef")
11134         : check for fflush all behaviour
11135         case "$fflushall" in
11136         '')     set try -DTRY_FFLUSH_ALL $output
11137                 if eval $compile; then
11138                         $cat >&4 <<EOM
11139 (Now testing the other method--but note that also this may fail.)
11140 EOM
11141                         $rm -f try.out
11142                         ./try$exe_ext 2>/dev/null
11143                         if $test -s try.out -a "X$?" = X42; then
11144                                 fflushall="`$cat try.out`"
11145                         fi
11146                 fi
11147                 $rm -f core try.core core.try.*
11148                 case "$fflushall" in
11149                 x)      $cat >&4 <<EOM
11150 Whew. Flushing explicitly all the stdio streams works.
11151 EOM
11152                         fflushall="$define"
11153                         ;;
11154                 '')     $cat >&4 <<EOM
11155 Sigh. Flushing explicitly all the stdio streams doesn't work.
11156 EOM
11157                         fflushall="$undef"
11158                         ;;
11159                 *)      $cat >&4 <<EOM
11160 Cannot figure out whether flushing stdio streams explicitly works or not.
11161 I'm assuming it doesn't.
11162 EOM
11163                         fflushall="$undef"
11164                         ;;
11165                 esac
11166                 ;;
11167         "$define"|true|[yY]*)
11168                 fflushall="$define"
11169                 ;;
11170         *)
11171                 fflushall="$undef"
11172                 ;;
11173         esac
11174         ;;
11175 *)      fflushall="$undef"      
11176         ;;
11177 esac
11178 case "$fflushNULL$fflushall" in
11179 undefundef)
11180         $cat <<EOM
11181 I cannot figure out how to flush pending stdio output.
11182 EOM
11183         ;;
11184 esac
11185 $rm -f try.* try$exe_ext
11186
11187 : see what type file positions are declared as in the library
11188 rp="What is the type for file position used by fsetpos()?"
11189 set fpos_t fpostype long stdio.h sys/types.h
11190 eval $typedef_ask
11191
11192 : Store the full pathname to the ar program for use in the C program
11193 : Respect a hint or command line value for full_ar.
11194 case "$full_ar" in
11195 '') full_ar=$ar ;;
11196 esac
11197
11198 : Store the full pathname to the sed program for use in the C program
11199 full_sed=$sed
11200
11201 : see what type gids are declared as in the kernel
11202 echo " "
11203 echo "Looking for the type for group ids returned by getgid()."
11204 set gid_t gidtype xxx stdio.h sys/types.h
11205 eval $typedef
11206 case "$gidtype" in
11207 xxx)
11208         xxx=`./findhdr sys/user.h`
11209         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11210         case $1 in
11211         unsigned) dflt="$1 $2" ;;
11212         *) dflt="$1" ;;
11213         esac
11214         ;;
11215 *) dflt="$gidtype";;
11216 esac
11217 case "$gidtype" in
11218 gid_t) echo "gid_t found." ;;
11219 *)      rp="What is the type for group ids returned by getgid()?"
11220         . ./myread
11221         gidtype="$ans"
11222         ;;
11223 esac
11224
11225 : see if getgroups exists
11226 set getgroups d_getgrps
11227 eval $inlibc
11228
11229 : see if setgroups exists
11230 set setgroups d_setgrps
11231 eval $inlibc
11232
11233
11234 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11235 echo " "
11236 case "$d_getgrps$d_setgrps" in
11237 *define*)
11238         case "$groupstype" in
11239         '') dflt="$gidtype" ;;
11240         *)  dflt="$groupstype" ;;
11241         esac
11242         $cat <<EOM
11243 What type of pointer is the second argument to getgroups() and setgroups()?
11244 Usually this is the same as group ids, $gidtype, but not always.
11245
11246 EOM
11247         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11248         . ./myread
11249         groupstype="$ans"
11250         ;;
11251 *)  groupstype="$gidtype";;
11252 esac
11253
11254 : see what type lseek is declared as in the kernel
11255 rp="What is the type used for lseek's offset on this system?"
11256 set off_t lseektype long stdio.h sys/types.h
11257 eval $typedef_ask
11258
11259 echo " "
11260 $echo $n "Checking to see how big your file offsets are...$c" >&4
11261 $cat >try.c <<EOCP
11262 #include <sys/types.h>
11263 #include <stdio.h>
11264 int main()
11265 {
11266         printf("%d\n", sizeof($lseektype));
11267 }
11268 EOCP
11269 set try
11270 if eval $compile_ok; then
11271         lseeksize=`./try`
11272         $echo " $lseeksize bytes." >&4
11273 else
11274         dflt='4'
11275         echo " "
11276         echo "(I can't seem to compile the test program.  Guessing...)"
11277         rp="What is the size of your file offsets (in bytes)?"
11278         . ./myread
11279         lseeksize="$ans"
11280 fi
11281 $rm -f try.c try
11282
11283 echo " "
11284 echo "Checking if your $make program sets \$(MAKE)..." >&4
11285 case "$make_set_make" in
11286 '')
11287         $sed 's/^X //' > testmake.mak << 'EOF'
11288 Xall:
11289 X       @echo 'maketemp="$(MAKE)"'
11290 EOF
11291         case "`$make -f testmake.mak 2>/dev/null`" in
11292         *maketemp=*) make_set_make='#' ;;
11293         *)      make_set_make="MAKE=$make" ;;
11294         esac
11295         $rm -f testmake.mak
11296         ;;
11297 esac
11298 case "$make_set_make" in
11299 '#') echo "Yup, it does.";;
11300 *) echo "Nope, it doesn't.";;
11301 esac
11302
11303 : see what type is used for mode_t
11304 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11305 set mode_t modetype int stdio.h sys/types.h
11306 eval $typedef_ask
11307
11308 : define a fucntion to check prototypes
11309 $cat > protochk <<EOSH
11310 $startsh
11311 cc="$cc"
11312 optimize="$optimize"
11313 ccflags="$ccflags"
11314 prototype="$prototype"
11315 define="$define"
11316 rm=$rm
11317 EOSH
11318
11319 $cat >> protochk <<'EOSH'
11320
11321 $rm -f try.c
11322 foo="$1"
11323 shift
11324 while test $# -ge 2; do
11325         case "$1" in
11326                 $define) echo "#include <$2>" >> try.c ;;
11327                 literal) echo "$2" >> try.c ;;
11328         esac
11329     shift 2
11330 done
11331 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11332 cat >> try.c <<'EOCP'
11333 #ifdef CAN_PROTOTYPE
11334 #define _(args) args
11335 #else
11336 #define _(args) ()
11337 #endif
11338 EOCP
11339 echo "$foo" >> try.c
11340 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11341 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11342 status=$?
11343 $rm -f try.[co]
11344 exit $status
11345 EOSH
11346 chmod +x protochk
11347 $eunicefix protochk
11348
11349 : see what type is used for size_t
11350 rp="What is the type used for the length parameter for string functions?"
11351 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11352 eval $typedef_ask
11353
11354 : check for type of arguments to gethostbyaddr. 
11355 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11356         case "$d_gethbyaddr" in
11357         $define)
11358                 $cat <<EOM
11359
11360 Checking to see what type of arguments are accepted by gethostbyaddr().
11361 EOM
11362                 hdrs="$define sys/types.h
11363                         $d_socket sys/socket.h 
11364                         $i_niin netinet/in.h 
11365                         $i_netdb netdb.h
11366                         $i_unistd unistd.h"
11367                 : The first arg can 'char *' or 'void *'
11368                 : The second arg is some of integral type
11369                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11370                         for yyy in size_t long int; do
11371                                 case "$netdb_host_type" in
11372                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11373                                         if ./protochk "$try" $hdrs; then
11374                                                 echo "Your system accepts $xxx for the first arg."
11375                                                 echo "...and $yyy for the second arg."
11376                                                 netdb_host_type="$xxx"
11377                                                 netdb_hlen_type="$yyy"
11378                                         fi
11379                                         ;;
11380                                 esac
11381                         done
11382                 done
11383                 : In case none of those worked, prompt the user.
11384                 case "$netdb_host_type" in
11385                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11386                         dflt='char *'
11387                         . ./myread
11388                         netdb_host_type=$ans
11389                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11390                         dflt="$sizetype"
11391                         . ./myread
11392                         netdb_hlen_type=$ans
11393                         ;;
11394                 esac
11395                 ;;
11396         *)      : no gethostbyaddr, so pick harmless defaults
11397                 netdb_host_type='char *'
11398                 netdb_hlen_type="$sizetype"
11399                 ;;
11400         esac
11401         # Remove the "const" if needed. -- but then we'll have a 
11402         # prototype clash!
11403         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11404 fi
11405
11406 : check for type of argument to gethostbyname. 
11407 if test "X$netdb_name_type" = X ; then
11408         case "$d_gethbyname" in
11409         $define)
11410                 $cat <<EOM
11411
11412 Checking to see what type of argument is accepted by gethostbyname().
11413 EOM
11414                 hdrs="$define sys/types.h
11415                         $d_socket sys/socket.h 
11416                         $i_niin netinet/in.h 
11417                         $i_netdb netdb.h
11418                         $i_unistd unistd.h"
11419                 for xxx in "const char *" "char *"; do
11420                         case "$netdb_name_type" in
11421                         '')     try="extern struct hostent *gethostbyname($xxx);"
11422                                 if ./protochk "$try" $hdrs; then
11423                                         echo "Your system accepts $xxx."
11424                                         netdb_name_type="$xxx"
11425                                 fi
11426                                 ;;
11427                         esac
11428                 done
11429                 : In case none of those worked, prompt the user.
11430                 case "$netdb_name_type" in
11431                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11432                         dflt='char *'
11433                         . ./myread
11434                         netdb_name_type=$ans
11435                         ;;
11436                 esac
11437                 ;;
11438         *)      : no gethostbyname, so pick harmless default
11439                 netdb_name_type='char *'
11440                 ;;
11441         esac
11442 fi
11443
11444 : check for type of 1st argument to getnetbyaddr. 
11445 if test "X$netdb_net_type" = X ; then
11446         case "$d_getnbyaddr" in
11447         $define)
11448                 $cat <<EOM
11449
11450 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11451 EOM
11452                 hdrs="$define sys/types.h
11453                         $d_socket sys/socket.h 
11454                         $i_niin netinet/in.h 
11455                         $i_netdb netdb.h
11456                         $i_unistd unistd.h"
11457                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11458                         case "$netdb_net_type" in
11459                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11460                                 if ./protochk "$try" $hdrs; then
11461                                         echo "Your system accepts $xxx."
11462                                         netdb_net_type="$xxx"
11463                                 fi
11464                                 ;;
11465                         esac
11466                 done
11467                 : In case none of those worked, prompt the user.
11468                 case "$netdb_net_type" in
11469                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11470                         dflt='long'
11471                         . ./myread
11472                         netdb_net_type=$ans
11473                         ;;
11474                 esac
11475                 ;;
11476         *)      : no getnetbyaddr, so pick harmless default
11477                 netdb_net_type='long'
11478                 ;;
11479         esac
11480 fi
11481 : locate the preferred pager for this system
11482 case "$pager" in
11483 '')
11484         dflt=''
11485         case "$pg" in
11486         /*) dflt=$pg;;
11487         esac
11488         case "$more" in
11489         /*) dflt=$more;;
11490         esac
11491         case "$less" in
11492         /*) dflt=$less;;
11493         esac
11494         case "$dflt" in
11495         '') dflt=/usr/ucb/more;;
11496         esac
11497         ;;
11498 *) dflt="$pager";;
11499 esac
11500 echo " "
11501 fn=f/
11502 rp='What pager is used on your system?'
11503 . ./getfile
11504 pager="$ans"
11505
11506 : see what type pids are declared as in the kernel
11507 rp="What is the type of process ids on this system?"
11508 set pid_t pidtype int stdio.h sys/types.h
11509 eval $typedef_ask
11510
11511 : check for length of pointer
11512 echo " "
11513 case "$ptrsize" in
11514 '')
11515         $echo $n "Checking to see how big your pointers are...$c" >&4
11516         if test "$voidflags" -gt 7; then
11517                 echo '#define VOID_PTR char *' > try.c
11518         else
11519                 echo '#define VOID_PTR void *' > try.c
11520         fi
11521         $cat >>try.c <<'EOCP'
11522 #include <stdio.h>
11523 int main()
11524 {
11525         printf("%d\n", sizeof(VOID_PTR));
11526         exit(0);
11527 }
11528 EOCP
11529         set try
11530         if eval $compile_ok; then
11531                 ptrsize=`./try`
11532                 $echo " $ptrsize bytes." >&4
11533         else
11534                 dflt='4'
11535                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11536                 rp="What is the size of a pointer (in bytes)?"
11537                 . ./myread
11538                 ptrsize="$ans"
11539         fi
11540         ;;
11541 esac
11542 $rm -f try.c try
11543
11544 : see if ar generates random libraries by itself
11545 echo " "
11546 echo "Checking how to generate random libraries on your machine..." >&4
11547 echo 'int bar1() { return bar2(); }' > bar1.c
11548 echo 'int bar2() { return 2; }' > bar2.c
11549 $cat > foo.c <<'EOP'
11550 int main() { printf("%d\n", bar1()); exit(0); }
11551 EOP
11552 $cc $ccflags -c bar1.c >/dev/null 2>&1
11553 $cc $ccflags -c bar2.c >/dev/null 2>&1
11554 $cc $ccflags -c foo.c >/dev/null 2>&1
11555 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11556 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11557         ./foobar >/dev/null 2>&1; then
11558         echo "$ar appears to generate random libraries itself."
11559         orderlib=false
11560         ranlib=":"
11561 elif $ar ts bar$_a >/dev/null 2>&1 &&
11562         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11563         ./foobar >/dev/null 2>&1; then
11564                 echo "a table of contents needs to be added with '$ar ts'."
11565                 orderlib=false
11566                 ranlib="$ar ts"
11567 else
11568         case "$ranlib" in
11569         :) ranlib='';;
11570         '')
11571                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11572                 $test -f $ranlib || ranlib=''
11573                 ;;
11574         esac
11575         if $test -n "$ranlib"; then
11576                 echo "your system has '$ranlib'; we'll use that."
11577                 orderlib=false
11578         else
11579                 echo "your system doesn't seem to support random libraries"
11580                 echo "so we'll use lorder and tsort to order the libraries."
11581                 orderlib=true
11582                 ranlib=":"
11583         fi
11584 fi
11585 $rm -f foo* bar* 
11586
11587 : check for type of arguments to select. 
11588 case "$selecttype" in
11589 '') case "$d_select" in
11590         $define)
11591                 $cat <<EOM
11592 Checking to see what type of arguments are accepted by select().
11593 EOM
11594                 hdrs="$define sys/types.h
11595                         $i_systime sys/time.h 
11596                         $i_sysselct sys/select.h
11597                         $d_socket sys/socket.h"
11598                 : The first arg can be int, unsigned, or size_t
11599                 : The last arg may or may not be 'const'
11600                 val=''
11601                 : void pointer has been seen but using that
11602                 : breaks the selectminbits test
11603                 for xxx in 'fd_set *' 'int *'; do
11604                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11605                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11606                                         case "$val" in
11607                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11608                                                 if ./protochk "$try" $hdrs; then
11609                                                         echo "Your system accepts $xxx."
11610                                                         val="$xxx"
11611                                                 fi
11612                                                 ;;
11613                                         esac
11614                                 done
11615                         done
11616                 done
11617                 case "$val" in
11618                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11619                         case "$d_fd_set" in
11620                                 $define) dflt="fd_set *" ;;
11621                                 *)              dflt="int *" ;;
11622                         esac
11623                         . ./myread
11624                         val=$ans
11625                         ;;
11626                 esac
11627                 selecttype="$val"
11628                 ;;
11629         *)      : no select, so pick a harmless default
11630                 selecttype='int *'
11631                 ;;
11632         esac
11633         ;;
11634 esac
11635
11636 : check for the select 'width'
11637 case "$selectminbits" in
11638 '') case "$d_select" in
11639         $define)
11640                 $cat <<EOM
11641
11642 Checking to see on how many bits at a time your select() operates...
11643 EOM
11644                 $cat >try.c <<EOCP
11645 #include <sys/types.h>
11646 #$i_time I_TIME
11647 #$i_systime I_SYS_TIME
11648 #$i_systimek I_SYS_TIME_KERNEL
11649 #ifdef I_TIME
11650 #   include <time.h>
11651 #endif
11652 #ifdef I_SYS_TIME
11653 #   ifdef I_SYS_TIME_KERNEL
11654 #       define KERNEL
11655 #   endif
11656 #   include <sys/time.h>
11657 #   ifdef I_SYS_TIME_KERNEL
11658 #       undef KERNEL
11659 #   endif
11660 #endif
11661 #$i_sysselct I_SYS_SELECT
11662 #ifdef I_SYS_SELECT
11663 #include <sys/select.h>
11664 #endif
11665 #$d_socket HAS_SOCKET
11666 #ifdef HAS_SOCKET
11667 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11668 #endif
11669 #include <stdio.h>
11670 $selecttype b;
11671 #define S sizeof(*(b))
11672 #define MINBITS 64
11673 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11674 #define NBITS  (NBYTES * 8)
11675 int main() {
11676     char s[NBYTES];
11677     struct timeval t;
11678     int i;
11679     FILE* fp;
11680     int fd;
11681
11682     fclose(stdin);
11683     fp = fopen("try.c", "r");
11684     if (fp == 0)
11685       exit(1);
11686     fd = fileno(fp);
11687     if (fd < 0)
11688       exit(2);
11689     b = ($selecttype)s;
11690     for (i = 0; i < NBITS; i++)
11691         FD_SET(i, b);
11692     t.tv_sec  = 0;
11693     t.tv_usec = 0;
11694     select(fd + 1, b, 0, 0, &t);
11695     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11696     printf("%d\n", i + 1);
11697     return 0;
11698 }
11699 EOCP
11700                 set try
11701                 if eval $compile_ok; then
11702                         selectminbits=`./try`
11703                         case "$selectminbits" in
11704                         '')     cat >&4 <<EOM
11705 Cannot figure out on how many bits at a time your select() operates.
11706 I'll play safe and guess it is 32 bits.
11707 EOM
11708                                 selectminbits=32
11709                                 bits="32 bits"
11710                                 ;;
11711                         1)      bits="1 bit" ;;
11712                         *)      bits="$selectminbits bits" ;;
11713                         esac
11714                         echo "Your select() operates on $bits at a time." >&4
11715                 else
11716                         rp='What is the minimum number of bits your select() operates on?'
11717                         case "$byteorder" in
11718                         1234|12345678)  dflt=32 ;;
11719                         *)              dflt=1  ;;
11720                         esac
11721                         . ./myread
11722                         val=$ans
11723                         selectminbits="$val"
11724                 fi
11725                 $rm -f try.* try
11726                 ;;
11727         *)      : no select, so pick a harmless default
11728                 selectminbits='32'
11729                 ;;
11730         esac
11731         ;;
11732 esac
11733
11734 : Trace out the files included by signal.h, then look for SIGxxx names.
11735 : Remove SIGARRAYSIZE used by HPUX.
11736 : Remove SIGSTKSIZE used by Linux.
11737 : Remove SIGSTKSZ used by Posix.
11738 : Remove SIGTYP void lines used by OS2.
11739 xxx=`echo '#include <signal.h>' |
11740         $cppstdin $cppminus $cppflags 2>/dev/null |
11741         $grep '^[       ]*#.*include' | 
11742         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11743 : Check this list of files to be sure we have parsed the cpp output ok.
11744 : This will also avoid potentially non-existent files, such 
11745 : as ../foo/bar.h
11746 xxxfiles=''
11747 for xx in $xxx /dev/null ; do
11748         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11749 done
11750 : If we have found no files, at least try signal.h
11751 case "$xxxfiles" in
11752 '')     xxxfiles=`./findhdr signal.h` ;;
11753 esac
11754 xxx=`awk '
11755 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11756         print substr($2, 4, 20)
11757 }
11758 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11759         print substr($3, 4, 20)
11760 }' $xxxfiles`
11761 : Append some common names just in case the awk scan failed.
11762 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11763 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11764 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11765 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11766 : generate a few handy files for later
11767 $cat > signal.c <<'EOCP'
11768 #include <sys/types.h>
11769 #include <signal.h>
11770 #include <stdio.h>
11771 int main() {
11772
11773 /* Strange style to avoid deeply-nested #if/#else/#endif */
11774 #ifndef NSIG
11775 #  ifdef _NSIG
11776 #    define NSIG (_NSIG)
11777 #  endif
11778 #endif
11779
11780 #ifndef NSIG
11781 #  ifdef SIGMAX
11782 #    define NSIG (SIGMAX+1)
11783 #  endif
11784 #endif
11785
11786 #ifndef NSIG
11787 #  ifdef SIG_MAX
11788 #    define NSIG (SIG_MAX+1)
11789 #  endif
11790 #endif
11791
11792 #ifndef NSIG
11793 #  ifdef MAXSIG
11794 #    define NSIG (MAXSIG+1)
11795 #  endif
11796 #endif
11797
11798 #ifndef NSIG
11799 #  ifdef MAX_SIG
11800 #    define NSIG (MAX_SIG+1)
11801 #  endif
11802 #endif
11803
11804 #ifndef NSIG
11805 #  ifdef SIGARRAYSIZE
11806 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11807 #  endif
11808 #endif
11809
11810 #ifndef NSIG
11811 #  ifdef _sys_nsig
11812 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11813 #  endif
11814 #endif
11815
11816 /* Default to some arbitrary number that's big enough to get most
11817    of the common signals.
11818 */
11819 #ifndef NSIG
11820 #    define NSIG 50
11821 #endif
11822
11823 printf("NSIG %d\n", NSIG);
11824
11825 #ifndef JUST_NSIG
11826
11827 EOCP
11828
11829 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11830 {
11831         printf "#ifdef SIG"; printf $1; printf "\n"
11832         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11833         printf $1; printf ");\n"
11834         printf "#endif\n"
11835 }
11836 END {
11837         printf "#endif /* JUST_NSIG */\n";
11838         printf "}\n";
11839 }
11840 ' >>signal.c
11841 $cat >signal.awk <<'EOP'
11842 BEGIN { ndups = 0 }
11843 $1 ~ /^NSIG$/ { nsig = $2 }
11844 ($1 !~ /^NSIG$/) && (NF == 2) {
11845     if ($2 > maxsig) { maxsig = $2 }
11846     if (sig_name[$2]) {
11847         dup_name[ndups] = $1
11848         dup_num[ndups] = $2
11849         ndups++ 
11850     }
11851     else {
11852         sig_name[$2] = $1
11853         sig_num[$2] = $2
11854     }
11855 }
11856 END { 
11857     if (nsig == 0) {
11858         nsig = maxsig + 1
11859     }
11860     printf("NSIG %d\n", nsig);
11861     for (n = 1; n < nsig; n++) {
11862         if (sig_name[n]) {
11863             printf("%s %d\n", sig_name[n], sig_num[n])
11864         }
11865         else {
11866             printf("NUM%d %d\n", n, n) 
11867         }
11868     }
11869     for (n = 0; n < ndups; n++) {
11870         printf("%s %d\n", dup_name[n], dup_num[n])
11871     }
11872 }
11873 EOP
11874 $cat >signal_cmd <<EOS
11875 $startsh
11876 if $test -s signal.lst; then
11877     echo "Using your existing signal.lst file"
11878         exit 0
11879 fi
11880 xxx="$xxx"
11881 EOS
11882 $cat >>signal_cmd <<'EOS'
11883
11884 set signal
11885 if eval $compile_ok; then
11886         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11887 else
11888         echo "(I can't seem be able to compile the whole test program)" >&4
11889         echo "(I'll try it in little pieces.)" >&4
11890         set signal -DJUST_NSIG
11891         if eval $compile_ok; then
11892                 ./signal$_exe > signal.nsg
11893                 $cat signal.nsg
11894         else
11895                 echo "I can't seem to figure out how many signals you have." >&4
11896                 echo "Guessing 50." >&4
11897                 echo 'NSIG 50' > signal.nsg
11898         fi
11899         : Now look at all the signal names, one at a time.
11900         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11901                 $cat > signal.c <<EOCP
11902 #include <sys/types.h>
11903 #include <signal.h>
11904 #include <stdio.h>
11905 int main() {
11906 printf("$xx %d\n", SIG${xx});
11907 return 0;
11908 }
11909 EOCP
11910                 set signal
11911                 if eval $compile; then
11912                         echo "SIG${xx} found."
11913                         ./signal$_exe  >> signal.ls1
11914                 else
11915                         echo "SIG${xx} NOT found."
11916                 fi
11917         done
11918         if $test -s signal.ls1; then
11919                 $cat signal.nsg signal.ls1 |
11920                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11921         fi
11922
11923 fi
11924 if $test -s signal.lst; then
11925         :
11926 else
11927         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11928         echo 'kill -l' >signal
11929         set X `csh -f <signal`
11930         $rm -f signal
11931         shift
11932         case $# in
11933         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11934         esac
11935         echo $@ | $tr ' ' $trnl | \
11936             $awk '{ printf "%s %d\n", $1, ++s; }
11937                   END { printf "NSIG %d\n", ++s }' >signal.lst
11938 fi
11939 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11940 EOS
11941 chmod a+x signal_cmd
11942 $eunicefix signal_cmd
11943
11944 : generate list of signal names
11945 echo " "
11946 case "$sig_name_init" in
11947 '') doinit=yes ;;
11948 *)  case "$sig_num_init" in
11949     ''|*,*) doinit=yes ;;
11950     esac ;;
11951 esac
11952 case "$doinit" in
11953 yes)
11954         echo "Generating a list of signal names and numbers..." >&4
11955         . ./signal_cmd
11956         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11957         sig_name=`$awk 'BEGIN { printf "ZERO " }
11958                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11959         sig_num=`$awk  'BEGIN { printf "0 " }
11960                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11961         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11962                              !/^NSIG/   { printf "\"%s\", ", $1 }
11963                              END        { printf "0\n" }' signal.lst`
11964         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11965                              !/^NSIG/   { printf "%d, ", $2}
11966                              END        { printf "0\n"}' signal.lst`
11967         ;;
11968 esac
11969 echo "The following $sig_count signals are available:"
11970 echo " "
11971 echo $sig_name | $awk \
11972 'BEGIN { linelen = 0 }
11973 {
11974         for (i = 1; i <= NF; i++) {
11975                 name = "SIG" $i " "
11976                 linelen = linelen + length(name)
11977                 if (linelen > 70) {
11978                         printf "\n"
11979                         linelen = length(name)
11980                 }
11981                 printf "%s", name
11982         }
11983         printf "\n"
11984 }'
11985 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11986
11987 : see what type is used for signed size_t
11988 set ssize_t ssizetype int stdio.h sys/types.h
11989 eval $typedef
11990 dflt="$ssizetype"
11991 $cat > ssize.c <<EOM
11992 #include <stdio.h>
11993 #include <sys/types.h>
11994 #define Size_t $sizetype
11995 #define SSize_t $dflt
11996 int main()
11997 {
11998         if (sizeof(Size_t) == sizeof(SSize_t))
11999                 printf("$dflt\n");
12000         else if (sizeof(Size_t) == sizeof(int))
12001                 printf("int\n");
12002         else 
12003                 printf("long\n");
12004         exit(0);
12005 }
12006 EOM
12007 echo " "
12008 set ssize
12009 if eval $compile_ok && ./ssize > /dev/null; then
12010         ssizetype=`./ssize`
12011         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12012 else
12013         $cat >&4 <<EOM
12014 Help! I can't compile and run the ssize_t test program: please enlighten me!
12015 (This is probably a misconfiguration in your system or libraries, and
12016 you really ought to fix it.  Still, I'll try anyway.)
12017
12018 I need a type that is the same size as $sizetype, but is guaranteed to
12019 be signed.  Common values are ssize_t, int and long.
12020
12021 EOM
12022         rp="What signed type is the same size as $sizetype?"
12023         . ./myread
12024         ssizetype="$ans"
12025 fi
12026 $rm -f ssize ssize.*
12027
12028 : see what type of char stdio uses.
12029 echo " "
12030 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12031         echo "Your stdio uses unsigned chars." >&4
12032         stdchar="unsigned char"
12033 else
12034         echo "Your stdio uses signed chars." >&4
12035         stdchar="char"
12036 fi
12037
12038 : see if time exists
12039 echo " "
12040 if test "X$d_time" = X -o X"$timetype" = X; then
12041     if set time val -f d_time; eval $csym; $val; then
12042                 echo 'time() found.' >&4
12043                 val="$define"
12044                 rp="What is the type returned by time() on this system?"
12045                 set time_t timetype long stdio.h sys/types.h
12046                 eval $typedef_ask
12047     else
12048                 echo 'time() not found, hope that will do.' >&4
12049                 val="$undef"
12050                 timetype='int';
12051     fi
12052     set d_time
12053     eval $setvar
12054 fi
12055
12056 : see what type uids are declared as in the kernel
12057 echo " "
12058 echo "Looking for the type for user ids returned by getuid()."
12059 set uid_t uidtype xxx stdio.h sys/types.h
12060 eval $typedef
12061 case "$uidtype" in
12062 xxx)
12063         xxx=`./findhdr sys/user.h`
12064         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12065         case $1 in
12066         unsigned) dflt="$1 $2" ;;
12067         *) dflt="$1" ;;
12068         esac
12069         ;;
12070 *) dflt="$uidtype";;
12071 esac
12072 case "$uidtype" in
12073 uid_t)  echo "uid_t found." ;;
12074 *)      rp="What is the type for user ids returned by getuid()?"
12075         . ./myread
12076         uidtype="$ans"
12077         ;;
12078 esac
12079
12080 : see if dbm.h is available
12081 : see if dbmclose exists
12082 set dbmclose d_dbmclose
12083 eval $inlibc
12084
12085 case "$d_dbmclose" in
12086 $define)
12087         set dbm.h i_dbm
12088         eval $inhdr
12089         case "$i_dbm" in
12090         $define)
12091                 val="$undef"
12092                 set i_rpcsvcdbm
12093                 eval $setvar
12094                 ;;
12095         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12096                 eval $inhdr
12097                 ;;
12098         esac
12099         ;;
12100 *)      echo "We won't be including <dbm.h>"
12101         val="$undef"
12102         set i_dbm
12103         eval $setvar
12104         val="$undef"
12105         set i_rpcsvcdbm
12106         eval $setvar
12107         ;;
12108 esac
12109
12110 : see if this is a sys/file.h system
12111 val=''
12112 set sys/file.h val
12113 eval $inhdr
12114
12115 : do we need to include sys/file.h ?
12116 case "$val" in
12117 "$define")
12118         echo " "
12119         if $h_sysfile; then
12120                 val="$define"
12121                 echo "We'll be including <sys/file.h>." >&4
12122         else
12123                 val="$undef"
12124                 echo "We won't be including <sys/file.h>." >&4
12125         fi
12126         ;;
12127 *)
12128         h_sysfile=false
12129         ;;
12130 esac
12131 set i_sysfile
12132 eval $setvar
12133
12134 : see if fcntl.h is there
12135 val=''
12136 set fcntl.h val
12137 eval $inhdr
12138
12139 : see if we can include fcntl.h
12140 case "$val" in
12141 "$define")
12142         echo " "
12143         if $h_fcntl; then
12144                 val="$define"
12145                 echo "We'll be including <fcntl.h>." >&4
12146         else
12147                 val="$undef"
12148                 if $h_sysfile; then
12149         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12150                 else
12151                         echo "We won't be including <fcntl.h>." >&4
12152                 fi
12153         fi
12154         ;;
12155 *)
12156         h_fcntl=false
12157         val="$undef"
12158         ;;
12159 esac
12160 set i_fcntl
12161 eval $setvar
12162
12163 : see if locale.h is available
12164 set locale.h i_locale
12165 eval $inhdr
12166
12167 : see if mach cthreads are available
12168 if test "X$usethreads" = "X$define"; then
12169         set mach/cthreads.h i_machcthr
12170         eval $inhdr
12171 else
12172         i_machcthr="$undef"
12173 fi
12174
12175
12176
12177 : see if this is a math.h system
12178 set math.h i_math
12179 eval $inhdr
12180
12181 : see if this is a mntent.h system
12182 set mntent.h i_mntent
12183 eval $inhdr
12184
12185 : see if ndbm.h is available
12186 set ndbm.h t_ndbm
12187 eval $inhdr
12188 case "$t_ndbm" in
12189 $define)
12190         : see if dbm_open exists
12191         set dbm_open d_dbm_open
12192         eval $inlibc
12193         case "$d_dbm_open" in
12194         $undef)
12195                 t_ndbm="$undef"
12196                 echo "We won't be including <ndbm.h>"
12197                 ;;
12198         esac
12199         ;;
12200 esac
12201 val="$t_ndbm"
12202 set i_ndbm
12203 eval $setvar
12204
12205 : see if net/errno.h is available
12206 val=''
12207 set net/errno.h val
12208 eval $inhdr
12209
12210 : Unfortunately, it causes problems on some systems.  Arrgh.
12211 case "$val" in
12212 $define)
12213         cat > try.c <<'EOM'
12214 #include <stdio.h>
12215 #include <errno.h>
12216 #include <net/errno.h>
12217 int func()
12218 {
12219         return ENOTSOCK;
12220 }
12221 EOM
12222         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12223                 echo "We'll be including <net/errno.h>." >&4
12224         else
12225                 echo "We won't be including <net/errno.h>." >&4
12226                 val="$undef"
12227         fi
12228         $rm -f try.* try
12229         ;;
12230 esac
12231 set i_neterrno
12232 eval $setvar
12233
12234 : see if netinet/tcp.h is available
12235 set netinet/tcp.h i_netinettcp
12236 eval $inhdr
12237
12238 : see if this is a poll.h system
12239 set poll.h i_poll
12240 eval $inhdr
12241
12242 : get C preprocessor symbols handy
12243 echo " "
12244 $echo $n "Hmm... $c"
12245 echo $al | $tr ' ' $trnl >Cppsym.know
12246 $cat <<EOSS >Cppsym
12247 $startsh
12248 case "\$1" in
12249 -l) list=true
12250         shift
12251         ;;
12252 esac
12253 unknown=''
12254 case "\$list\$#" in
12255 1|2)
12256         for sym do
12257                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12258                         exit 0
12259                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12260                         :
12261                 else
12262                         unknown="\$unknown \$sym"
12263                 fi
12264         done
12265         set X \$unknown
12266         shift
12267         ;;
12268 esac
12269 case \$# in
12270 0) exit 1;;
12271 esac
12272 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12273 #ifdef \1\\
12274 exit 0; _ _ _ _\1\\      \1\\
12275 #endif\\
12276 /' >Cppsym\$\$
12277 echo "exit 1; _ _ _" >>Cppsym\$\$
12278 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12279 case "\$list" in
12280 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12281 *)
12282         sh Cppsym2\$\$
12283         status=\$?
12284         ;;
12285 esac
12286 $rm -f Cppsym\$\$ Cppsym2\$\$
12287 exit \$status
12288 EOSS
12289 chmod +x Cppsym
12290 $eunicefix Cppsym
12291 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12292
12293 : now check the C compiler for additional symbols
12294 postprocess_cc_v=''
12295 case "$osname" in
12296 aix) postprocess_cc_v="|$tr , ' '" ;;
12297 esac
12298 $cat >ccsym <<EOS
12299 $startsh
12300 $cat >tmp.c <<EOF
12301 extern int foo;
12302 EOF
12303 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12304 do
12305         case "\$i" in
12306         -D*) echo "\$i" | $sed 's/^-D//';;
12307         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12308         esac
12309 done
12310 $rm -f try.c
12311 EOS
12312 postprocess_cc_v=''
12313 chmod +x ccsym
12314 $eunicefix ccsym
12315 ./ccsym > ccsym1.raw
12316 if $test -s ccsym1.raw; then
12317        $sort ccsym1.raw | $uniq >ccsym.raw
12318 else
12319        mv ccsym1.raw ccsym.raw
12320 fi
12321
12322 $awk '/\=/ { print $0; next }
12323         { print $0"=1" }' ccsym.raw >ccsym.list
12324 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12325 $comm -13 ccsym.true ccsym.list >ccsym.own
12326 $comm -12 ccsym.true ccsym.list >ccsym.com
12327 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12328 also=''
12329 if $test -z ccsym.raw; then
12330         echo "Your C compiler doesn't seem to define any symbols!" >&4
12331         echo " "
12332         echo "However, your C preprocessor defines the following symbols:"
12333         $cat Cppsym.true
12334         ccsymbols=''
12335         cppsymbols=`$cat Cppsym.true`
12336         cppsymbols=`echo $cppsymbols`
12337         cppccsymbols="$cppsymbols"
12338 else
12339         if $test -s ccsym.com; then
12340                 echo "Your C compiler and pre-processor define these symbols:"
12341                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12342                 also='also '
12343                 symbols='ones'
12344                 cppccsymbols=`$cat ccsym.com`
12345                 cppccsymbols=`echo $cppccsymbols`
12346                 $test "$silent" || sleep 1
12347         fi
12348         if $test -s ccsym.cpp; then
12349                 $test "$also" && echo " "
12350                 echo "Your C pre-processor ${also}defines the following symbols:"
12351                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12352                 also='further '
12353                 cppsymbols=`$cat ccsym.cpp`
12354                 cppsymbols=`echo $cppsymbols`
12355                 $test "$silent" || sleep 1
12356         fi
12357         if $test -s ccsym.own; then
12358                 $test "$also" && echo " "
12359                 echo "Your C compiler ${also}defines the following cpp symbols:"
12360                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12361                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12362                 ccsymbols=`$cat ccsym.own`
12363                 ccsymbols=`echo $ccsymbols`
12364                 $test "$silent" || sleep 1
12365         fi
12366 fi
12367 $rm -f ccsym*
12368
12369 : see if this is a termio system
12370 val="$undef"
12371 val2="$undef"
12372 val3="$undef"
12373 if $test `./findhdr termios.h`; then
12374         set tcsetattr i_termios
12375         eval $inlibc
12376         val3="$i_termios"
12377 fi
12378 echo " "
12379 case "$val3" in
12380 "$define") echo "You have POSIX termios.h... good!" >&4;;
12381 *) if ./Cppsym pyr; then
12382                 case "`/bin/universe`" in
12383                 ucb) if $test `./findhdr sgtty.h`; then
12384                                 val2="$define"
12385                                 echo "<sgtty.h> found." >&4
12386                         else
12387                                 echo "System is pyramid with BSD universe."
12388                                 echo "<sgtty.h> not found--you could have problems." >&4
12389                         fi;;
12390                 *) if $test `./findhdr termio.h`; then
12391                                 val="$define"
12392                                 echo "<termio.h> found." >&4
12393                         else
12394                                 echo "System is pyramid with USG universe."
12395                                 echo "<termio.h> not found--you could have problems." >&4
12396                         fi;;
12397                 esac
12398         elif ./usg; then
12399                 if $test `./findhdr termio.h`; then
12400                         echo "<termio.h> found." >&4
12401                         val="$define"
12402                 elif $test `./findhdr sgtty.h`; then
12403                         echo "<sgtty.h> found." >&4
12404                         val2="$define"
12405                 else
12406 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12407                 fi
12408         else
12409                 if $test `./findhdr sgtty.h`; then
12410                         echo "<sgtty.h> found." >&4
12411                         val2="$define"
12412                 elif $test `./findhdr termio.h`; then
12413                         echo "<termio.h> found." >&4
12414                         val="$define"
12415                 else
12416 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12417                 fi
12418         fi;;
12419 esac
12420 set i_termio; eval $setvar
12421 val=$val2; set i_sgtty; eval $setvar
12422 val=$val3; set i_termios; eval $setvar
12423
12424 : see if this is a shadow.h system
12425 set shadow.h i_shadow
12426 eval $inhdr
12427
12428 : see if stdarg is available
12429 echo " "
12430 if $test `./findhdr stdarg.h`; then
12431         echo "<stdarg.h> found." >&4
12432         valstd="$define"
12433 else
12434         echo "<stdarg.h> NOT found." >&4
12435         valstd="$undef"
12436 fi
12437
12438 : see if varags is available
12439 echo " "
12440 if $test `./findhdr varargs.h`; then
12441         echo "<varargs.h> found." >&4
12442 else
12443         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12444 fi
12445
12446 : set up the varargs testing programs
12447 $cat > varargs.c <<EOP
12448 #ifdef I_STDARG
12449 #include <stdarg.h>
12450 #endif
12451 #ifdef I_VARARGS
12452 #include <varargs.h>
12453 #endif
12454
12455 #ifdef I_STDARG
12456 int f(char *p, ...)
12457 #else
12458 int f(va_alist)
12459 va_dcl
12460 #endif
12461 {
12462         va_list ap;
12463 #ifndef I_STDARG
12464         char *p;
12465 #endif
12466 #ifdef I_STDARG
12467         va_start(ap,p);
12468 #else
12469         va_start(ap);
12470         p = va_arg(ap, char *);
12471 #endif
12472         va_end(ap);
12473 }
12474 EOP
12475 $cat > varargs <<EOP
12476 $startsh
12477 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12478         echo "true"
12479 else
12480         echo "false"
12481 fi
12482 $rm -f varargs$_o
12483 EOP
12484 chmod +x varargs
12485
12486 : now check which varargs header should be included
12487 echo " "
12488 i_varhdr=''
12489 case "$valstd" in
12490 "$define")
12491         if `./varargs I_STDARG`; then
12492                 val='stdarg.h'
12493         elif `./varargs I_VARARGS`; then
12494                 val='varargs.h'
12495         fi
12496         ;;
12497 *)
12498         if `./varargs I_VARARGS`; then
12499                 val='varargs.h'
12500         fi
12501         ;;
12502 esac
12503 case "$val" in
12504 '')
12505 echo "I could not find the definition for va_dcl... You have problems..." >&4
12506         val="$undef"; set i_stdarg; eval $setvar
12507         val="$undef"; set i_varargs; eval $setvar
12508         ;;
12509 *) 
12510         set i_varhdr
12511         eval $setvar
12512         case "$i_varhdr" in
12513         stdarg.h)
12514                 val="$define"; set i_stdarg; eval $setvar
12515                 val="$undef"; set i_varargs; eval $setvar
12516                 ;;
12517         varargs.h)
12518                 val="$undef"; set i_stdarg; eval $setvar
12519                 val="$define"; set i_varargs; eval $setvar
12520                 ;;
12521         esac
12522         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12523 esac
12524 $rm -f varargs*
12525
12526 : see if stddef is available
12527 set stddef.h i_stddef
12528 eval $inhdr
12529
12530 : see if sys/access.h is available
12531 set sys/access.h i_sysaccess
12532 eval $inhdr
12533
12534 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12535 set sys/filio.h i_sysfilio
12536 eval $inhdr
12537 echo " "
12538 if $test `./findhdr sys/ioctl.h`; then
12539         val="$define"
12540         echo '<sys/ioctl.h> found.' >&4
12541 else
12542         val="$undef"
12543         if $test $i_sysfilio = "$define"; then
12544             echo '<sys/ioctl.h> NOT found.' >&4
12545         else
12546                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12547                 $test $i_termio = "$define" && xxx="termio.h"
12548                 $test $i_termios = "$define" && xxx="termios.h"
12549 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12550         fi
12551 fi
12552 set i_sysioctl
12553 eval $setvar
12554
12555 : see if sys/resource.h has to be included
12556 set sys/resource.h i_sysresrc
12557 eval $inhdr
12558
12559 : see if sys/security.h is available
12560 set sys/security.h i_syssecrt
12561 eval $inhdr
12562
12563 : see if this is a sys/statvfs.h system
12564 set sys/statvfs.h i_sysstatvfs
12565 eval $inhdr
12566
12567 : see if this is a sys/un.h system
12568 set sys/un.h i_sysun
12569 eval $inhdr
12570
12571 : see if this is a syswait system
12572 set sys/wait.h i_syswait
12573 eval $inhdr
12574
12575 : see if this is an utime system
12576 set utime.h i_utime
12577 eval $inhdr
12578
12579 : see if this is a values.h system
12580 set values.h i_values
12581 eval $inhdr
12582
12583 : see if this is a vfork system
12584 case "$d_vfork" in
12585 "$define")
12586         set vfork.h i_vfork
12587         eval $inhdr
12588         ;;
12589 *)
12590         i_vfork="$undef"
12591         ;;
12592 esac
12593
12594 : see if gdbm.h is available
12595 set gdbm.h t_gdbm
12596 eval $inhdr
12597 case "$t_gdbm" in
12598 $define)
12599         : see if gdbm_open exists
12600         set gdbm_open d_gdbm_open
12601         eval $inlibc
12602         case "$d_gdbm_open" in
12603         $undef)
12604                 t_gdbm="$undef"
12605                 echo "We won't be including <gdbm.h>"
12606                 ;;
12607         esac
12608         ;;
12609 esac
12610 val="$t_gdbm"
12611 set i_gdbm
12612 eval $setvar
12613
12614 echo " "
12615 echo "Looking for extensions..." >&4
12616 tdir=`pwd`
12617 cd $rsrc/ext
12618 : If we are using the old config.sh, known_extensions may contain
12619 : old or inaccurate or duplicate values.
12620 known_extensions=''
12621 nonxs_extensions=''
12622 : We do not use find because it might not be available.
12623 : We do not just use MANIFEST because the user may have dropped
12624 : some additional extensions into the source tree and expect them
12625 : to be built.
12626 for xxx in * ; do
12627         case "$xxx" in
12628         DynaLoader|dynaload) ;;
12629         *)      if $test -f $xxx/$xxx.xs; then
12630                         known_extensions="$known_extensions $xxx"
12631                 elif $test -f $xxx/Makefile.PL; then
12632                         nonxs_extensions="$nonxs_extensions $xxx"
12633                 else
12634                         if $test -d $xxx; then
12635                                 # Look for nested extensions, eg. Devel/Dprof.
12636                                 cd $xxx
12637                                 for yyy in * ; do
12638                                 if $test -f $yyy/$yyy.xs; then
12639                                         known_extensions="$known_extensions $xxx/$yyy"
12640                                 elif $test -f $yyy/Makefile.PL; then
12641                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12642                                 fi
12643                                 done
12644                                 cd ..
12645                         fi
12646                 fi 
12647                 ;;
12648         esac
12649 done
12650 set X $nonxs_extensions
12651 shift
12652 nonxs_extensions="$*"
12653 set X $known_extensions
12654 shift
12655 known_extensions="$*"
12656 cd $tdir
12657
12658 : Now see which are supported on this system.
12659 avail_ext=''
12660 for xxx in $known_extensions ; do
12661         case "$xxx" in
12662         DB_File|db_file)
12663                 case "$i_db" in
12664                 $define) avail_ext="$avail_ext $xxx" ;;
12665                 esac
12666                 ;;
12667         GDBM_File|gdbm_fil)
12668                 case "$i_gdbm" in 
12669                 $define) avail_ext="$avail_ext $xxx" ;;
12670                 esac
12671                 ;;
12672         NDBM_File|ndbm_fil)
12673                 case "$i_ndbm" in
12674                 $define) avail_ext="$avail_ext $xxx" ;;
12675                 esac
12676                 ;;
12677         ODBM_File|odbm_fil) 
12678                 case "${i_dbm}${i_rpcsvcdbm}" in
12679                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12680                 esac
12681                 ;;
12682         POSIX|posix)
12683                 case "$useposix" in
12684                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12685                 esac
12686                 ;;
12687         Opcode|opcode)
12688                 case "$useopcode" in
12689                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12690                 esac
12691                 ;;
12692         Socket|socket)
12693                 case "$d_socket" in 
12694                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12695                 esac
12696                 ;;
12697         Thread|thread)
12698                 case "$usethreads" in 
12699                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12700                 esac
12701                 ;;
12702         IPC/SysV|ipc/sysv)
12703                 : XXX Do we need a useipcsysv variable here
12704                 case "${d_msg}${d_sem}${d_shm}" in 
12705                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12706                 esac
12707                 ;;
12708         *)      avail_ext="$avail_ext $xxx"
12709                 ;;
12710         esac
12711 done
12712
12713 set X $avail_ext
12714 shift
12715 avail_ext="$*"
12716
12717 : Now see which nonxs extensions are supported on this system.
12718 : For now assume all are.
12719 nonxs_ext=''
12720 for xxx in $nonxs_extensions ; do
12721         case "$xxx" in
12722         *)      nonxs_ext="$nonxs_ext $xxx"
12723                 ;;
12724         esac
12725 done
12726
12727 set X $nonxs_ext
12728 shift
12729 nonxs_ext="$*"
12730
12731 case $usedl in
12732 $define)
12733         $cat <<EOM
12734 A number of extensions are supplied with $package.  You may choose to
12735 compile these extensions for dynamic loading (the default), compile
12736 them into the $package executable (static loading), or not include
12737 them at all.  Answer "none" to include no extensions.
12738 Note that DynaLoader is always built and need not be mentioned here.
12739
12740 EOM
12741         case "$dynamic_ext" in
12742         '') dflt="$avail_ext" ;;
12743         *)      dflt="$dynamic_ext"
12744                 # Perhaps we are reusing an old out-of-date config.sh.
12745                 case "$hint" in
12746                 previous)
12747                         if test X"$dynamic_ext" != X"$avail_ext"; then
12748                                 $cat <<EOM
12749 NOTICE:  Your previous config.sh list may be incorrect. 
12750 The extensions now available to you are 
12751         ${avail_ext}
12752 but the default list from your previous config.sh is
12753         ${dynamic_ext} 
12754
12755 EOM
12756                         fi
12757                         ;;
12758                 esac
12759                 ;;
12760         esac
12761         case "$dflt" in
12762         '')     dflt=none;;
12763         esac
12764         rp="What extensions do you wish to load dynamically?"
12765         . ./myread
12766         case "$ans" in
12767         none) dynamic_ext=' ' ;;
12768         *) dynamic_ext="$ans" ;;
12769         esac
12770
12771         case "$static_ext" in
12772         '')
12773                 : Exclude those already listed in dynamic linking
12774                 dflt=''
12775                 for xxx in $avail_ext; do
12776                         case " $dynamic_ext " in
12777                         *" $xxx "*) ;;
12778                         *) dflt="$dflt $xxx" ;;
12779                         esac
12780                 done
12781                 set X $dflt
12782                 shift
12783                 dflt="$*"
12784                 ;;
12785         *)  dflt="$static_ext" 
12786                 ;;
12787         esac
12788
12789         case "$dflt" in
12790         '')     dflt=none;;
12791         esac
12792         rp="What extensions do you wish to load statically?"
12793         . ./myread
12794         case "$ans" in
12795         none) static_ext=' ' ;;
12796         *) static_ext="$ans" ;;
12797         esac
12798         ;;
12799 *)
12800         $cat <<EOM
12801 A number of extensions are supplied with $package.  Answer "none" 
12802 to include no extensions. 
12803 Note that DynaLoader is always built and need not be mentioned here.
12804
12805 EOM
12806         case "$static_ext" in
12807         '') dflt="$avail_ext" ;;
12808         *)      dflt="$static_ext"
12809                 # Perhaps we are reusing an old out-of-date config.sh.
12810                 case "$hint" in
12811                 previous)
12812                         if test X"$static_ext" != X"$avail_ext"; then
12813                                 $cat <<EOM
12814 NOTICE:  Your previous config.sh list may be incorrect. 
12815 The extensions now available to you are 
12816         ${avail_ext}
12817 but the default list from your previous config.sh is
12818         ${static_ext} 
12819
12820 EOM
12821                         fi
12822                         ;;
12823                 esac
12824                 ;;
12825         esac
12826         : Exclude those that are not xs extensions
12827         case "$dflt" in
12828         '')     dflt=none;;
12829         esac
12830         rp="What extensions do you wish to include?"
12831         . ./myread
12832         case "$ans" in
12833         none) static_ext=' ' ;;
12834         *) static_ext="$ans" ;;
12835         esac
12836         ;;
12837 esac
12838
12839 set X $dynamic_ext $static_ext $nonxs_ext
12840 shift
12841 extensions="$*"
12842
12843 : Remove build directory name from cppstdin so it can be used from
12844 : either the present location or the final installed location.
12845 echo " "
12846 : Get out of the UU directory to get correct path name.
12847 cd ..
12848 case "$cppstdin" in
12849 `pwd`/cppstdin)
12850         echo "Stripping down cppstdin path name"
12851         cppstdin=cppstdin
12852         ;;
12853 esac
12854 cd UU
12855
12856 : end of configuration questions
12857 echo " "
12858 echo "End of configuration questions."
12859 echo " "
12860
12861 : back to where it started
12862 if test -d ../UU; then
12863         cd ..
12864 fi
12865
12866 : configuration may be patched via a 'config.over' file
12867 if $test -f config.over; then
12868         echo " "
12869         dflt=y
12870         rp='I see a config.over file.  Do you wish to load it?'
12871         . UU/myread
12872         case "$ans" in
12873         n*) echo "OK, I'll ignore it.";;
12874         *)      . ./config.over
12875                 echo "Configuration override changes have been loaded."
12876                 ;;
12877         esac
12878 fi
12879
12880 : in case they want portability, strip down executable paths
12881 case "$d_portable" in
12882 "$define")
12883         echo " "
12884         echo "Stripping down executable paths..." >&4
12885         for file in $loclist $trylist; do
12886                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12887                         eval $file="\$file"
12888                 fi
12889         done
12890         ;;
12891 esac
12892
12893 : create config.sh file
12894 echo " "
12895 echo "Creating config.sh..." >&4
12896 $spitshell <<EOT >config.sh
12897 $startsh
12898 #
12899 # This file was produced by running the Configure script. It holds all the
12900 # definitions figured out by Configure. Should you modify one of these values,
12901 # do not forget to propagate your changes by running "Configure -der". You may
12902 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12903 #
12904
12905 # Package name      : $package
12906 # Source directory  : $src
12907 # Configuration time: $cf_time
12908 # Configured by     : $cf_by
12909 # Target system     : $myuname
12910
12911 Author='$Author'
12912 Date='$Date'
12913 Header='$Header'
12914 Id='$Id'
12915 Locker='$Locker'
12916 Log='$Log'
12917 Mcc='$Mcc'
12918 RCSfile='$RCSfile'
12919 Revision='$Revision'
12920 Source='$Source'
12921 State='$State'
12922 _a='$_a'
12923 _exe='$_exe'
12924 _o='$_o'
12925 afs='$afs'
12926 alignbytes='$alignbytes'
12927 ansi2knr='$ansi2knr'
12928 aphostname='$aphostname'
12929 apiversion='$apiversion'
12930 ar='$ar'
12931 archlib='$archlib'
12932 archlibexp='$archlibexp'
12933 archname64='$archname64'
12934 archname='$archname'
12935 archobjs='$archobjs'
12936 awk='$awk'
12937 baserev='$baserev'
12938 bash='$bash'
12939 bin='$bin'
12940 binexp='$binexp'
12941 bison='$bison'
12942 byacc='$byacc'
12943 byteorder='$byteorder'
12944 c='$c'
12945 castflags='$castflags'
12946 cat='$cat'
12947 cc='$cc'
12948 cccdlflags='$cccdlflags'
12949 ccdlflags='$ccdlflags'
12950 ccflags='$ccflags'
12951 ccsymbols='$ccsymbols'
12952 cf_by='$cf_by'
12953 cf_email='$cf_email'
12954 cf_time='$cf_time'
12955 chgrp='$chgrp'
12956 chmod='$chmod'
12957 chown='$chown'
12958 clocktype='$clocktype'
12959 comm='$comm'
12960 compress='$compress'
12961 contains='$contains'
12962 cp='$cp'
12963 cpio='$cpio'
12964 cpp='$cpp'
12965 cpp_stuff='$cpp_stuff'
12966 cppccsymbols='$cppccsymbols'
12967 cppflags='$cppflags'
12968 cpplast='$cpplast'
12969 cppminus='$cppminus'
12970 cpprun='$cpprun'
12971 cppstdin='$cppstdin'
12972 cppsymbols='$cppsymbols'
12973 crosscompile='$crosscompile'
12974 cryptlib='$cryptlib'
12975 csh='$csh'
12976 d_Gconvert='$d_Gconvert'
12977 d_access='$d_access'
12978 d_accessx='$d_accessx'
12979 d_alarm='$d_alarm'
12980 d_archlib='$d_archlib'
12981 d_attribut='$d_attribut'
12982 d_bcmp='$d_bcmp'
12983 d_bcopy='$d_bcopy'
12984 d_bsd='$d_bsd'
12985 d_bsdgetpgrp='$d_bsdgetpgrp'
12986 d_bsdsetpgrp='$d_bsdsetpgrp'
12987 d_bzero='$d_bzero'
12988 d_casti32='$d_casti32'
12989 d_castneg='$d_castneg'
12990 d_charvspr='$d_charvspr'
12991 d_chown='$d_chown'
12992 d_chroot='$d_chroot'
12993 d_chsize='$d_chsize'
12994 d_closedir='$d_closedir'
12995 d_cmsghdr_s='$d_cmsghdr_s'
12996 d_const='$d_const'
12997 d_crypt='$d_crypt'
12998 d_csh='$d_csh'
12999 d_cuserid='$d_cuserid'
13000 d_dbl_dig='$d_dbl_dig'
13001 d_dbmclose64='$d_dbmclose64'
13002 d_dbminit64='$d_dbminit64'
13003 d_delete64='$d_delete64'
13004 d_difftime='$d_difftime'
13005 d_dirent64_s='$d_dirent64_s'
13006 d_dirnamlen='$d_dirnamlen'
13007 d_dlerror='$d_dlerror'
13008 d_dlopen='$d_dlopen'
13009 d_dlsymun='$d_dlsymun'
13010 d_dosuid='$d_dosuid'
13011 d_drand48proto='$d_drand48proto'
13012 d_dup2='$d_dup2'
13013 d_eaccess='$d_eaccess'
13014 d_endgrent='$d_endgrent'
13015 d_endhent='$d_endhent'
13016 d_endnent='$d_endnent'
13017 d_endpent='$d_endpent'
13018 d_endpwent='$d_endpwent'
13019 d_endsent='$d_endsent'
13020 d_endspent='$d_endspent'
13021 d_eofnblk='$d_eofnblk'
13022 d_eunice='$d_eunice'
13023 d_fchmod='$d_fchmod'
13024 d_fchown='$d_fchown'
13025 d_fcntl='$d_fcntl'
13026 d_fd_macros='$d_fd_macros'
13027 d_fd_set='$d_fd_set'
13028 d_fds_bits='$d_fds_bits'
13029 d_fetch64='$d_fetch64'
13030 d_fgetpos64='$d_fgetpos64'
13031 d_fgetpos='$d_fgetpos'
13032 d_firstkey64='$d_firstkey64'
13033 d_flexfnam='$d_flexfnam'
13034 d_flock64_s='$d_flock64_s'
13035 d_flock='$d_flock'
13036 d_fopen64='$d_fopen64'
13037 d_fork='$d_fork'
13038 d_fpathconf='$d_fpathconf'
13039 d_freopen64='$d_freopen64'
13040 d_fseek64='$d_fseek64'
13041 d_fseeko64='$d_fseeko64'
13042 d_fseeko='$d_fseeko'
13043 d_fsetpos64='$d_fsetpos64'
13044 d_fsetpos='$d_fsetpos'
13045 d_fstat64='$d_fstat64'
13046 d_fstatfs='$d_fstatfs'
13047 d_fstatvfs='$d_fstatvfs'
13048 d_ftell64='$d_ftell64'
13049 d_ftello64='$d_ftello64'
13050 d_ftello='$d_ftello'
13051 d_ftime='$d_ftime'
13052 d_ftruncate64='$d_ftruncate64'
13053 d_getgrent='$d_getgrent'
13054 d_getgrps='$d_getgrps'
13055 d_gethbyaddr='$d_gethbyaddr'
13056 d_gethbyname='$d_gethbyname'
13057 d_gethent='$d_gethent'
13058 d_gethname='$d_gethname'
13059 d_gethostprotos='$d_gethostprotos'
13060 d_getlogin='$d_getlogin'
13061 d_getmntent='$d_getmntent'
13062 d_getnbyaddr='$d_getnbyaddr'
13063 d_getnbyname='$d_getnbyname'
13064 d_getnent='$d_getnent'
13065 d_getnetprotos='$d_getnetprotos'
13066 d_getpbyname='$d_getpbyname'
13067 d_getpbynumber='$d_getpbynumber'
13068 d_getpent='$d_getpent'
13069 d_getpgid='$d_getpgid'
13070 d_getpgrp2='$d_getpgrp2'
13071 d_getpgrp='$d_getpgrp'
13072 d_getppid='$d_getppid'
13073 d_getprior='$d_getprior'
13074 d_getprotoprotos='$d_getprotoprotos'
13075 d_getpwent='$d_getpwent'
13076 d_getsbyname='$d_getsbyname'
13077 d_getsbyport='$d_getsbyport'
13078 d_getsent='$d_getsent'
13079 d_getservprotos='$d_getservprotos'
13080 d_getspent='$d_getspent'
13081 d_getspnam='$d_getspnam'
13082 d_gettimeod='$d_gettimeod'
13083 d_gnulibc='$d_gnulibc'
13084 d_grpasswd='$d_grpasswd'
13085 d_hasmntopt='$d_hasmntopt'
13086 d_htonl='$d_htonl'
13087 d_index='$d_index'
13088 d_inetaton='$d_inetaton'
13089 d_ino64_t='$d_ino64_t'
13090 d_int64t='$d_int64t'
13091 d_iovec_s='$d_iovec_s'
13092 d_isascii='$d_isascii'
13093 d_killpg='$d_killpg'
13094 d_lchown='$d_lchown'
13095 d_link='$d_link'
13096 d_llseek='$d_llseek'
13097 d_locconv='$d_locconv'
13098 d_lockf64='$d_lockf64'
13099 d_lockf='$d_lockf'
13100 d_longdbl='$d_longdbl'
13101 d_longlong='$d_longlong'
13102 d_lseek64='$d_lseek64'
13103 d_lstat64='$d_lstat64'
13104 d_lstat='$d_lstat'
13105 d_madvise='$d_madvise'
13106 d_mblen='$d_mblen'
13107 d_mbstowcs='$d_mbstowcs'
13108 d_mbtowc='$d_mbtowc'
13109 d_memchr='$d_memchr'
13110 d_memcmp='$d_memcmp'
13111 d_memcpy='$d_memcpy'
13112 d_memmove='$d_memmove'
13113 d_memset='$d_memset'
13114 d_mkdir='$d_mkdir'
13115 d_mkfifo='$d_mkfifo'
13116 d_mktime='$d_mktime'
13117 d_mmap='$d_mmap'
13118 d_mprotect='$d_mprotect'
13119 d_msg='$d_msg'
13120 d_msg_ctrunc='$d_msg_ctrunc'
13121 d_msg_dontroute='$d_msg_dontroute'
13122 d_msg_oob='$d_msg_oob'
13123 d_msg_peek='$d_msg_peek'
13124 d_msg_proxy='$d_msg_proxy'
13125 d_msgctl='$d_msgctl'
13126 d_msgget='$d_msgget'
13127 d_msghdr_s='$d_msghdr_s'
13128 d_msgrcv='$d_msgrcv'
13129 d_msgsnd='$d_msgsnd'
13130 d_msync='$d_msync'
13131 d_munmap='$d_munmap'
13132 d_mymalloc='$d_mymalloc'
13133 d_nextkey64='$d_nextkey64'
13134 d_nice='$d_nice'
13135 d_off64_t='$d_off64_t'
13136 d_offset_t='$d_offset_t'
13137 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13138 d_oldpthreads='$d_oldpthreads'
13139 d_oldsock='$d_oldsock'
13140 d_open3='$d_open3'
13141 d_open64='$d_open64'
13142 d_opendir64='$d_opendir64'
13143 d_pathconf='$d_pathconf'
13144 d_pause='$d_pause'
13145 d_phostname='$d_phostname'
13146 d_pipe='$d_pipe'
13147 d_poll='$d_poll'
13148 d_portable='$d_portable'
13149 d_pthread_yield='$d_pthread_yield'
13150 d_pwage='$d_pwage'
13151 d_pwchange='$d_pwchange'
13152 d_pwclass='$d_pwclass'
13153 d_pwcomment='$d_pwcomment'
13154 d_pwexpire='$d_pwexpire'
13155 d_pwgecos='$d_pwgecos'
13156 d_pwpasswd='$d_pwpasswd'
13157 d_pwquota='$d_pwquota'
13158 d_readdir64='$d_readdir64'
13159 d_readdir='$d_readdir'
13160 d_readlink='$d_readlink'
13161 d_readv='$d_readv'
13162 d_recvmsg='$d_recvmsg'
13163 d_rename='$d_rename'
13164 d_rewinddir='$d_rewinddir'
13165 d_rmdir='$d_rmdir'
13166 d_safebcpy='$d_safebcpy'
13167 d_safemcpy='$d_safemcpy'
13168 d_sanemcmp='$d_sanemcmp'
13169 d_sched_yield='$d_sched_yield'
13170 d_scm_rights='$d_scm_rights'
13171 d_seekdir64='$d_seekdir64'
13172 d_seekdir='$d_seekdir'
13173 d_select='$d_select'
13174 d_sem='$d_sem'
13175 d_semctl='$d_semctl'
13176 d_semctl_semid_ds='$d_semctl_semid_ds'
13177 d_semctl_semun='$d_semctl_semun'
13178 d_semget='$d_semget'
13179 d_semop='$d_semop'
13180 d_sendmsg='$d_sendmsg'
13181 d_setegid='$d_setegid'
13182 d_seteuid='$d_seteuid'
13183 d_setgrent='$d_setgrent'
13184 d_setgrps='$d_setgrps'
13185 d_sethent='$d_sethent'
13186 d_setlinebuf='$d_setlinebuf'
13187 d_setlocale='$d_setlocale'
13188 d_setnent='$d_setnent'
13189 d_setpent='$d_setpent'
13190 d_setpgid='$d_setpgid'
13191 d_setpgrp2='$d_setpgrp2'
13192 d_setpgrp='$d_setpgrp'
13193 d_setprior='$d_setprior'
13194 d_setpwent='$d_setpwent'
13195 d_setregid='$d_setregid'
13196 d_setresgid='$d_setresgid'
13197 d_setresuid='$d_setresuid'
13198 d_setreuid='$d_setreuid'
13199 d_setrgid='$d_setrgid'
13200 d_setruid='$d_setruid'
13201 d_setsent='$d_setsent'
13202 d_setsid='$d_setsid'
13203 d_setspent='$d_setspent'
13204 d_setvbuf='$d_setvbuf'
13205 d_sfio='$d_sfio'
13206 d_shm='$d_shm'
13207 d_shmat='$d_shmat'
13208 d_shmatprototype='$d_shmatprototype'
13209 d_shmctl='$d_shmctl'
13210 d_shmdt='$d_shmdt'
13211 d_shmget='$d_shmget'
13212 d_sigaction='$d_sigaction'
13213 d_sigsetjmp='$d_sigsetjmp'
13214 d_socket='$d_socket'
13215 d_sockpair='$d_sockpair'
13216 d_stat64='$d_stat64'
13217 d_statblks='$d_statblks'
13218 d_statfs='$d_statfs'
13219 d_statfsflags='$d_statfsflags'
13220 d_statvfs='$d_statvfs'
13221 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13222 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13223 d_stdio_stream_array='$d_stdio_stream_array'
13224 d_stdiobase='$d_stdiobase'
13225 d_stdstdio='$d_stdstdio'
13226 d_store64='$d_store64'
13227 d_strchr='$d_strchr'
13228 d_strcoll='$d_strcoll'
13229 d_strctcpy='$d_strctcpy'
13230 d_strerrm='$d_strerrm'
13231 d_strerror='$d_strerror'
13232 d_strtod='$d_strtod'
13233 d_strtol='$d_strtol'
13234 d_strtoul='$d_strtoul'
13235 d_strxfrm='$d_strxfrm'
13236 d_suidsafe='$d_suidsafe'
13237 d_symlink='$d_symlink'
13238 d_syscall='$d_syscall'
13239 d_sysconf='$d_sysconf'
13240 d_sysernlst='$d_sysernlst'
13241 d_syserrlst='$d_syserrlst'
13242 d_system='$d_system'
13243 d_tcgetpgrp='$d_tcgetpgrp'
13244 d_tcsetpgrp='$d_tcsetpgrp'
13245 d_telldir64='$d_telldir64'
13246 d_telldir='$d_telldir'
13247 d_telldirproto='$d_telldirproto'
13248 d_time='$d_time'
13249 d_times='$d_times'
13250 d_tmpfile64='$d_tmpfile64'
13251 d_truncate64='$d_truncate64'
13252 d_truncate='$d_truncate'
13253 d_tzname='$d_tzname'
13254 d_umask='$d_umask'
13255 d_uname='$d_uname'
13256 d_union_semun='$d_union_semun'
13257 d_vfork='$d_vfork'
13258 d_void_closedir='$d_void_closedir'
13259 d_voidsig='$d_voidsig'
13260 d_voidtty='$d_voidtty'
13261 d_volatile='$d_volatile'
13262 d_vprintf='$d_vprintf'
13263 d_wait4='$d_wait4'
13264 d_waitpid='$d_waitpid'
13265 d_wcstombs='$d_wcstombs'
13266 d_wctomb='$d_wctomb'
13267 d_writev='$d_writev'
13268 d_xenix='$d_xenix'
13269 date='$date'
13270 db_hashtype='$db_hashtype'
13271 db_prefixtype='$db_prefixtype'
13272 defvoidused='$defvoidused'
13273 direntrytype='$direntrytype'
13274 dlext='$dlext'
13275 dlsrc='$dlsrc'
13276 doublesize='$doublesize'
13277 drand01='$drand01'
13278 dynamic_ext='$dynamic_ext'
13279 eagain='$eagain'
13280 ebcdic='$ebcdic'
13281 echo='$echo'
13282 egrep='$egrep'
13283 emacs='$emacs'
13284 eunicefix='$eunicefix'
13285 exe_ext='$exe_ext'
13286 expr='$expr'
13287 extensions='$extensions'
13288 fflushNULL='$fflushNULL'
13289 fflushall='$fflushall'
13290 find='$find'
13291 firstmakefile='$firstmakefile'
13292 flex='$flex'
13293 fpostype='$fpostype'
13294 freetype='$freetype'
13295 full_ar='$full_ar'
13296 full_csh='$full_csh'
13297 full_sed='$full_sed'
13298 gccversion='$gccversion'
13299 gidtype='$gidtype'
13300 glibpth='$glibpth'
13301 grep='$grep'
13302 groupcat='$groupcat'
13303 groupstype='$groupstype'
13304 gzip='$gzip'
13305 h_fcntl='$h_fcntl'
13306 h_sysfile='$h_sysfile'
13307 hint='$hint'
13308 hostcat='$hostcat'
13309 huge='$huge'
13310 i_arpainet='$i_arpainet'
13311 i_bsdioctl='$i_bsdioctl'
13312 i_db='$i_db'
13313 i_dbm='$i_dbm'
13314 i_dirent='$i_dirent'
13315 i_dld='$i_dld'
13316 i_dlfcn='$i_dlfcn'
13317 i_fcntl='$i_fcntl'
13318 i_float='$i_float'
13319 i_gdbm='$i_gdbm'
13320 i_grp='$i_grp'
13321 i_inttypes='$i_inttypes'
13322 i_limits='$i_limits'
13323 i_locale='$i_locale'
13324 i_machcthr='$i_machcthr'
13325 i_malloc='$i_malloc'
13326 i_math='$i_math'
13327 i_memory='$i_memory'
13328 i_mntent='$i_mntent'
13329 i_ndbm='$i_ndbm'
13330 i_netdb='$i_netdb'
13331 i_neterrno='$i_neterrno'
13332 i_netinettcp='$i_netinettcp'
13333 i_niin='$i_niin'
13334 i_poll='$i_poll'
13335 i_pthread='$i_pthread'
13336 i_pwd='$i_pwd'
13337 i_rpcsvcdbm='$i_rpcsvcdbm'
13338 i_sfio='$i_sfio'
13339 i_sgtty='$i_sgtty'
13340 i_shadow='$i_shadow'
13341 i_stdarg='$i_stdarg'
13342 i_stddef='$i_stddef'
13343 i_stdlib='$i_stdlib'
13344 i_string='$i_string'
13345 i_sysaccess='$i_sysaccess'
13346 i_sysdir='$i_sysdir'
13347 i_sysfile='$i_sysfile'
13348 i_sysfilio='$i_sysfilio'
13349 i_sysin='$i_sysin'
13350 i_sysioctl='$i_sysioctl'
13351 i_sysmman='$i_sysmman'
13352 i_sysmount='$i_sysmount'
13353 i_sysndir='$i_sysndir'
13354 i_sysparam='$i_sysparam'
13355 i_sysresrc='$i_sysresrc'
13356 i_syssecrt='$i_syssecrt'
13357 i_sysselct='$i_sysselct'
13358 i_syssockio='$i_syssockio'
13359 i_sysstat='$i_sysstat'
13360 i_sysstatvfs='$i_sysstatvfs'
13361 i_systime='$i_systime'
13362 i_systimek='$i_systimek'
13363 i_systimes='$i_systimes'
13364 i_systypes='$i_systypes'
13365 i_sysuio='$i_sysuio'
13366 i_sysun='$i_sysun'
13367 i_syswait='$i_syswait'
13368 i_termio='$i_termio'
13369 i_termios='$i_termios'
13370 i_time='$i_time'
13371 i_unistd='$i_unistd'
13372 i_utime='$i_utime'
13373 i_values='$i_values'
13374 i_varargs='$i_varargs'
13375 i_varhdr='$i_varhdr'
13376 i_vfork='$i_vfork'
13377 ignore_versioned_solibs='$ignore_versioned_solibs'
13378 incpath='$incpath'
13379 inews='$inews'
13380 installarchlib='$installarchlib'
13381 installbin='$installbin'
13382 installman1dir='$installman1dir'
13383 installman3dir='$installman3dir'
13384 installprivlib='$installprivlib'
13385 installscript='$installscript'
13386 installsitearch='$installsitearch'
13387 installsitelib='$installsitelib'
13388 installusrbinperl='$installusrbinperl'
13389 intsize='$intsize'
13390 known_extensions='$known_extensions'
13391 ksh='$ksh'
13392 large='$large'
13393 ld='$ld'
13394 lddlflags='$lddlflags'
13395 ldflags='$ldflags'
13396 less='$less'
13397 lib_ext='$lib_ext'
13398 libc='$libc'
13399 libperl='$libperl'
13400 libpth='$libpth'
13401 libs='$libs'
13402 libswanted='$libswanted'
13403 line='$line'
13404 lint='$lint'
13405 lkflags='$lkflags'
13406 ln='$ln'
13407 lns='$lns'
13408 locincpth='$locincpth'
13409 loclibpth='$loclibpth'
13410 longdblsize='$longdblsize'
13411 longlongsize='$longlongsize'
13412 longsize='$longsize'
13413 lp='$lp'
13414 lpr='$lpr'
13415 ls='$ls'
13416 lseeksize='$lseeksize'
13417 lseektype='$lseektype'
13418 mail='$mail'
13419 mailx='$mailx'
13420 make='$make'
13421 make_set_make='$make_set_make'
13422 mallocobj='$mallocobj'
13423 mallocsrc='$mallocsrc'
13424 malloctype='$malloctype'
13425 man1dir='$man1dir'
13426 man1direxp='$man1direxp'
13427 man1ext='$man1ext'
13428 man3dir='$man3dir'
13429 man3direxp='$man3direxp'
13430 man3ext='$man3ext'
13431 medium='$medium'
13432 mips='$mips'
13433 mips_type='$mips_type'
13434 mkdir='$mkdir'
13435 mmaptype='$mmaptype'
13436 models='$models'
13437 modetype='$modetype'
13438 more='$more'
13439 multiarch='$multiarch'
13440 mv='$mv'
13441 myarchname='$myarchname'
13442 mydomain='$mydomain'
13443 myhostname='$myhostname'
13444 myuname='$myuname'
13445 n='$n'
13446 netdb_hlen_type='$netdb_hlen_type'
13447 netdb_host_type='$netdb_host_type'
13448 netdb_name_type='$netdb_name_type'
13449 netdb_net_type='$netdb_net_type'
13450 nm='$nm'
13451 nm_opt='$nm_opt'
13452 nm_so_opt='$nm_so_opt'
13453 nonxs_ext='$nonxs_ext'
13454 nroff='$nroff'
13455 o_nonblock='$o_nonblock'
13456 obj_ext='$obj_ext'
13457 old_pthread_create_joinable='$old_pthread_create_joinable'
13458 optimize='$optimize'
13459 orderlib='$orderlib'
13460 osname='$osname'
13461 osvers='$osvers'
13462 package='$package'
13463 pager='$pager'
13464 passcat='$passcat'
13465 patchlevel='$patchlevel'
13466 path_sep='$path_sep'
13467 perl='$perl'
13468 perladmin='$perladmin'
13469 perlpath='$perlpath'
13470 pg='$pg'
13471 phostname='$phostname'
13472 pidtype='$pidtype'
13473 plibpth='$plibpth'
13474 pmake='$pmake'
13475 pr='$pr'
13476 prefix='$prefix'
13477 prefixexp='$prefixexp'
13478 privlib='$privlib'
13479 privlibexp='$privlibexp'
13480 prototype='$prototype'
13481 ptrsize='$ptrsize'
13482 randbits='$randbits'
13483 randfunc='$randfunc'
13484 randseedtype='$randseedtype'
13485 ranlib='$ranlib'
13486 rd_nodata='$rd_nodata'
13487 rm='$rm'
13488 rmail='$rmail'
13489 runnm='$runnm'
13490 sched_yield='$sched_yield'
13491 scriptdir='$scriptdir'
13492 scriptdirexp='$scriptdirexp'
13493 sed='$sed'
13494 seedfunc='$seedfunc'
13495 selectminbits='$selectminbits'
13496 selecttype='$selecttype'
13497 sendmail='$sendmail'
13498 sh='$sh'
13499 shar='$shar'
13500 sharpbang='$sharpbang'
13501 shmattype='$shmattype'
13502 shortsize='$shortsize'
13503 shrpenv='$shrpenv'
13504 shsharp='$shsharp'
13505 sig_count='$sig_count'
13506 sig_name='$sig_name'
13507 sig_name_init='$sig_name_init'
13508 sig_num='$sig_num'
13509 sig_num_init='$sig_num_init'
13510 signal_t='$signal_t'
13511 sitearch='$sitearch'
13512 sitearchexp='$sitearchexp'
13513 sitelib='$sitelib'
13514 sitelibexp='$sitelibexp'
13515 sizetype='$sizetype'
13516 sleep='$sleep'
13517 smail='$smail'
13518 small='$small'
13519 so='$so'
13520 sockethdr='$sockethdr'
13521 socketlib='$socketlib'
13522 sort='$sort'
13523 spackage='$spackage'
13524 spitshell='$spitshell'
13525 split='$split'
13526 src='$src'
13527 ssizetype='$ssizetype'
13528 startperl='$startperl'
13529 startsh='$startsh'
13530 static_ext='$static_ext'
13531 stdchar='$stdchar'
13532 stdio_base='$stdio_base'
13533 stdio_bufsiz='$stdio_bufsiz'
13534 stdio_cnt='$stdio_cnt'
13535 stdio_filbuf='$stdio_filbuf'
13536 stdio_ptr='$stdio_ptr'
13537 stdio_stream_array='$stdio_stream_array'
13538 strings='$strings'
13539 submit='$submit'
13540 subversion='$subversion'
13541 sysman='$sysman'
13542 tail='$tail'
13543 tar='$tar'
13544 tbl='$tbl'
13545 tee='$tee'
13546 test='$test'
13547 timeincl='$timeincl'
13548 timetype='$timetype'
13549 touch='$touch'
13550 tr='$tr'
13551 trnl='$trnl'
13552 troff='$troff'
13553 uidtype='$uidtype'
13554 uname='$uname'
13555 uniq='$uniq'
13556 use64bits='$use64bits'
13557 usedl='$usedl'
13558 usemultiplicity='$usemultiplicity'
13559 usemymalloc='$usemymalloc'
13560 usenm='$usenm'
13561 useopcode='$useopcode'
13562 useperlio='$useperlio'
13563 useposix='$useposix'
13564 usesfio='$usesfio'
13565 useshrplib='$useshrplib'
13566 usethreads='$usethreads'
13567 usevfork='$usevfork'
13568 usrinc='$usrinc'
13569 uuname='$uuname'
13570 version='$version'
13571 vi='$vi'
13572 voidflags='$voidflags'
13573 xlibpth='$xlibpth'
13574 zcat='$zcat'
13575 zip='$zip'
13576 EOT
13577
13578 : Add in command line options if available
13579 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13580
13581 : add special variables
13582 $test -f $src/patchlevel.h && \
13583 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13584 echo "CONFIGDOTSH=true" >>config.sh
13585
13586 : propagate old symbols
13587 if $test -f UU/config.sh; then
13588         <UU/config.sh sort | uniq >UU/oldconfig.sh
13589         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13590         sort | uniq -u >UU/oldsyms
13591         set X `cat UU/oldsyms`
13592         shift
13593         case $# in
13594         0) ;;
13595         *)
13596                 cat <<EOM
13597 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13598 EOM
13599                 echo "# Variables propagated from previous config.sh file." >>config.sh
13600                 for sym in `cat UU/oldsyms`; do
13601                         echo "    Propagating $hint variable "'$'"$sym..."
13602                         eval 'tmp="$'"${sym}"'"'
13603                         echo "$tmp" | \
13604                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13605                 done
13606                 ;;
13607         esac
13608 fi
13609
13610 : Finish up by extracting the .SH files
13611 case "$alldone" in
13612 exit)
13613         $rm -rf UU
13614         echo "Done."
13615         exit 0
13616         ;;
13617 cont)
13618         ;;
13619 '')
13620         dflt=''
13621         nostick=true
13622         $cat <<EOM
13623
13624 If you'd like to make any changes to the config.sh file before I begin
13625 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13626
13627 EOM
13628         rp="Press return or use a shell escape to edit config.sh:"
13629         . UU/myread
13630         nostick=''
13631         case "$ans" in
13632         '') ;;
13633         *) : in case they cannot read
13634                 sh 1>&4 -c "$ans";;
13635         esac
13636         ;;
13637 esac
13638
13639 : if this fails, just run all the .SH files by hand
13640 . ./config.sh
13641
13642 echo " "
13643 exec 1>&4
13644 . ./UU/extract
13645
13646 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13647         dflt=y
13648         case "$silent" in
13649         true) ;;
13650         *)
13651                 $cat <<EOM
13652
13653 Now you need to generate make dependencies by running "$make depend".
13654 You might prefer to run it in background: "$make depend > makedepend.out &"
13655 It can take a while, so you might not want to run it right now.
13656
13657 EOM
13658                 ;;
13659         esac
13660         rp="Run $make depend now?"
13661         . UU/myread
13662         case "$ans" in
13663         y*)
13664                 $make depend && echo "Now you must run a $make."
13665                 ;;
13666         *)
13667                 echo "You must run '$make depend' then '$make'."
13668                 ;;
13669         esac
13670 elif test -f [Mm]akefile; then
13671         echo " "
13672         echo "Now you must run a $make."
13673 else
13674         echo "Done."
13675 fi
13676
13677 if $test -f Policy.sh; then
13678     $cat <<EOM
13679
13680 If you compile $package on a different machine or from a different object
13681 directory, copy the Policy.sh file from this object directory to the
13682 new one before you run Configure -- this will help you with most of
13683 the policy defaults.
13684
13685 EOM
13686 fi
13687 if $test -f config.msg; then
13688     echo "Hmm.  I also noted the following information while running:"
13689     echo " "
13690     $cat config.msg >&4
13691     $rm -f config.msg
13692 fi
13693 $rm -f kit*isdone ark*isdone
13694 $rm -rf UU
13695
13696 : End of Configure
13697