a7e7d62ea1bafd70eabe11a145221af1127aa1b3
[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 Jul 25 13:04:13 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_socks=''
632 i_stddef=''
633 i_stdlib=''
634 i_string=''
635 strings=''
636 i_sysaccess=''
637 i_sysdir=''
638 i_sysfile=''
639 d_voidtty=''
640 i_bsdioctl=''
641 i_sysfilio=''
642 i_sysioctl=''
643 i_syssockio=''
644 i_sysmman=''
645 i_sysmount=''
646 i_sysndir=''
647 i_sysparam=''
648 i_sysresrc=''
649 i_syssecrt=''
650 i_sysselct=''
651 i_sysstat=''
652 i_sysstatvfs=''
653 i_systimes=''
654 i_systypes=''
655 d_iovec_s=''
656 i_sysuio=''
657 i_sysun=''
658 i_syswait=''
659 i_sgtty=''
660 i_termio=''
661 i_termios=''
662 i_systime=''
663 i_systimek=''
664 i_time=''
665 timeincl=''
666 i_unistd=''
667 i_utime=''
668 i_values=''
669 i_stdarg=''
670 i_varargs=''
671 i_varhdr=''
672 i_vfork=''
673 installprefix=''
674 installprefixexp=''
675 installstyle=''
676 installusrbinperl=''
677 intsize=''
678 longsize=''
679 shortsize=''
680 d_dirent64_s=''
681 d_flock64_s=''
682 d_fstat64=''
683 d_ftruncate64=''
684 d_ino64_t=''
685 d_llseek=''
686 d_lockf64=''
687 d_lseek64=''
688 d_lstat64=''
689 d_off64_t=''
690 d_offset_t=''
691 d_open64=''
692 d_opendir64=''
693 d_readdir64=''
694 d_seekdir64=''
695 d_stat64=''
696 d_telldir64=''
697 d_truncate64=''
698 libc=''
699 ldlibpthname=''
700 libperl=''
701 shrpenv=''
702 useshrplib=''
703 glibpth=''
704 libpth=''
705 loclibpth=''
706 plibpth=''
707 xlibpth=''
708 ignore_versioned_solibs=''
709 libs=''
710 lns=''
711 lseeksize=''
712 lseektype=''
713 make_set_make=''
714 d_mymalloc=''
715 freetype=''
716 mallocobj=''
717 mallocsrc=''
718 malloctype=''
719 usemymalloc=''
720 installman1dir=''
721 man1dir=''
722 man1direxp=''
723 man1ext=''
724 installman3dir=''
725 man3dir=''
726 man3direxp=''
727 man3ext=''
728 huge=''
729 large=''
730 medium=''
731 models=''
732 small=''
733 split=''
734 modetype=''
735 multiarch=''
736 mydomain=''
737 myhostname=''
738 phostname=''
739 c=''
740 n=''
741 d_eofnblk=''
742 eagain=''
743 o_nonblock=''
744 rd_nodata=''
745 netdb_hlen_type=''
746 netdb_host_type=''
747 netdb_name_type=''
748 netdb_net_type=''
749 groupcat=''
750 hostcat=''
751 passcat=''
752 orderlib=''
753 ranlib=''
754 package=''
755 spackage=''
756 pager=''
757 apiversion=''
758 patchlevel=''
759 subversion=''
760 version=''
761 perladmin=''
762 perlpath=''
763 pidtype=''
764 prefix=''
765 prefixexp=''
766 installprivlib=''
767 privlib=''
768 privlibexp=''
769 prototype=''
770 ptrsize=''
771 drand01=''
772 randbits=''
773 randfunc=''
774 randseedtype=''
775 seedfunc=''
776 installscript=''
777 scriptdir=''
778 scriptdirexp=''
779 selectminbits=''
780 selecttype=''
781 sh=''
782 sig_count=''
783 sig_name=''
784 sig_name_init=''
785 sig_num=''
786 sig_num_init=''
787 installsitearch=''
788 sitearch=''
789 sitearchexp=''
790 installsitelib=''
791 sitelib=''
792 sitelibexp=''
793 siteprefix=''
794 siteprefixexp=''
795 sizetype=''
796 so=''
797 sharpbang=''
798 shsharp=''
799 spitshell=''
800 src=''
801 ssizetype=''
802 startperl=''
803 startsh=''
804 stdchar=''
805 d_fgetpos64=''
806 d_fopen64=''
807 d_freopen64=''
808 d_fseek64=''
809 d_fseeko64=''
810 d_fsetpos64=''
811 d_ftell64=''
812 d_ftello64=''
813 d_tmpfile64=''
814 d_stdio_stream_array=''
815 stdio_stream_array=''
816 sysman=''
817 trnl=''
818 uidtype=''
819 archname64=''
820 use64bits=''
821 usemultiplicity=''
822 nm_opt=''
823 nm_so_opt=''
824 runnm=''
825 usenm=''
826 useperlio=''
827 usesocks=''
828 d_oldpthreads=''
829 usethreads=''
830 incpath=''
831 mips=''
832 mips_type=''
833 usrinc=''
834 defvoidused=''
835 voidflags=''
836 CONFIG=''
837
838 define='define'
839 undef='undef'
840 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
841 rmlist=''
842
843 : We must find out about Eunice early
844 eunicefix=':'
845 if test -f /etc/unixtovms; then
846         eunicefix=/etc/unixtovms
847 fi
848 if test -f /etc/unixtovms.exe; then
849         eunicefix=/etc/unixtovms.exe
850 fi
851
852 i_whoami=''
853 : Possible local include directories to search.
854 : Set locincpth to "" in a hint file to defeat local include searches.
855 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
856 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
857 :
858 : no include file wanted by default
859 inclwanted=''
860
861 : list of known cpp symbols, sorted alphabetically
862 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
863 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
864 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
865 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
866 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
867 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
868 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
869 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
870 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
871 al="$al VMS Xenix286"
872 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
873 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
874 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
875 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
876 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
877 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
878 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
879 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
880 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
881 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
882 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
883 al="$al __SVR4_2__ __UMAXV__"
884 al="$al ____386BSD____ __alpha __alpha__ __amiga"
885 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
886 al="$al __host_mips__"
887 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
888 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
889 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
890 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
891 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
892 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
893 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
894 al="$al __mc88100 __mc88100__ __mips __mips__"
895 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
896 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
897 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
898 al="$al _host_mips _mips _unix"
899 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
900 al="$al apollo ardent att386 att3b"
901 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
902 al="$al cadmus clipper concurrent convex cray ctix"
903 al="$al dmert encore gcos gcx gimpel gould"
904 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
905 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
906 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
907 al="$al i186 i286 i386 i486 i8086"
908 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
909 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
910 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
911 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
912 al="$al mc88000 mc88100 merlin mert mips mvs n16"
913 al="$al ncl_el ncl_mr"
914 al="$al news1500 news1700 news1800 news1900 news3700"
915 al="$al news700 news800 news900 ns16000 ns32000"
916 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
917 al="$al parisc pc532 pdp11 plexus posix pyr"
918 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
919 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
920 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
921 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
922 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
923 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
924 al="$al xenix z8000"
925
926 : Trailing extension.  Override this in a hint file, if needed.
927 _exe=''
928 : Extra object files, if any, needed on this platform.
929 archobjs=''
930 groupstype=''
931 : change the next line if compiling for Xenix/286 on Xenix/386
932 xlibpth='/usr/lib/386 /lib/386'
933
934 : Possible local library directories to search.
935 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
936 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
937
938 : general looking path for locating libraries
939 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
940 glibpth="$glibpth /lib /usr/lib $xlibpth"
941 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
942 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
943
944 : Private path used by Configure to find libraries.  Its value
945 : is prepended to libpth. This variable takes care of special
946 : machines, like the mips.  Usually, it should be empty.
947 plibpth=''
948
949 : default library list
950 libswanted=''
951 : some systems want to use only the non-versioned libso:s
952 ignore_versioned_solibs=''
953 : full support for void wanted by default
954 defvoidused=15
955
956 : set useposix=false in your hint file to disable the POSIX extension.
957 useposix=true
958 : set useopcode=false in your hint file to disable the Opcode extension.
959 useopcode=true
960 : set usemultiplicity on the Configure command line to enable multiplicity.
961 : set usesocks on the Configure command line to enable socks.
962 : set usethreads on the Configure command line to enable threads.
963 : List of libraries we want.
964 : If anyone needs -lnet, put it in a hint file.
965 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
966 libswanted="$libswanted dld ld sun m rt c cposix posix"
967 libswanted="$libswanted ndir dir crypt sec"
968 libswanted="$libswanted ucb bsd BSD PW x"
969 : We probably want to search /usr/shlib before most other libraries.
970 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
971 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
972 glibpth="/usr/shlib $glibpth"
973 : Do not use vfork unless overridden by a hint file.
974 usevfork=false
975
976 : Find the basic shell for Bourne shell scripts
977 case "$sh" in
978 '')
979         case "$SYSTYPE" in
980         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
981         *) xxx='/bin/sh';;
982         esac
983         if test -f "$xxx"; then
984                 sh="$xxx"
985         else
986                 : Build up a list and do a single loop so we can 'break' out.
987                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
988                 for xxx in sh bash ksh pdksh ash; do
989                         for p in $pth; do
990                                 try="$try ${p}/${xxx}"
991                         done
992                 done
993                 for xxx in $try; do
994                         if test -f "$xxx"; then
995                                 sh="$xxx";
996                                 break
997                         elif test -f "$xxx.exe"; then
998                                 sh="$xxx";
999                                 break
1000                         fi
1001                 done
1002         fi
1003         ;;
1004 esac
1005
1006 case "$sh" in
1007 '')     cat <<EOM >&2
1008 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1009
1010 Usually it's in /bin/sh.  How did you even get this far?
1011 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1012 we'll try to straighten this all out.
1013 EOM
1014         exit 1
1015         ;;
1016 esac
1017
1018 : see if sh knows # comments
1019 if `$sh -c '#' >/dev/null 2>&1`; then
1020         shsharp=true
1021         spitshell=cat
1022         xcat=/bin/cat
1023         test -f $xcat || xcat=/usr/bin/cat
1024         echo "#!$xcat" >try
1025         $eunicefix try
1026         chmod +x try
1027         ./try > today
1028         if test -s today; then
1029                 sharpbang='#!'
1030         else
1031                 echo "#! $xcat" > try
1032                 $eunicefix try
1033                 chmod +x try
1034                 ./try > today
1035                 if test -s today; then
1036                         sharpbang='#! '
1037                 else
1038                         sharpbang=': use '
1039                 fi
1040         fi
1041 else
1042         echo " "
1043         echo "Your $sh doesn't grok # comments--I will strip them later on."
1044         shsharp=false
1045         cd ..
1046         echo "exec grep -v '^[  ]*#'" >spitshell
1047         chmod +x spitshell
1048         $eunicefix spitshell
1049         spitshell=`pwd`/spitshell
1050         cd UU
1051         echo "I presume that if # doesn't work, #! won't work either!"
1052         sharpbang=': use '
1053 fi
1054 rm -f try today
1055
1056 : figure out how to guarantee sh startup
1057 case "$startsh" in
1058 '') startsh=${sharpbang}${sh} ;;
1059 *)
1060 esac
1061 cat >try <<EOSS
1062 $startsh
1063 set abc
1064 test "$?abc" != 1
1065 EOSS
1066
1067 chmod +x try
1068 $eunicefix try
1069 if ./try; then
1070         : echo "Yup, it does."
1071 else
1072         echo "Hmm... '$startsh' does not guarantee sh startup..."
1073         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1074 fi
1075 rm -f try
1076
1077
1078 : Save command line options in file UU/cmdline.opt for later use in
1079 : generating config.sh.
1080 cat > cmdline.opt <<EOSH
1081 # Configure command line arguments.
1082 config_arg0='$0'
1083 config_args='$*'
1084 config_argc=$#
1085 EOSH
1086 argn=1
1087 for arg in "$@"; do
1088         cat >>cmdline.opt <<EOSH
1089 config_arg$argn='$arg'
1090 EOSH
1091         argn=`expr $argn + 1`
1092 done
1093
1094 : produce awk script to parse command line options
1095 cat >options.awk <<'EOF'
1096 BEGIN {
1097         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1098
1099         len = length(optstr);
1100         for (i = 1; i <= len; i++) {
1101                 c = substr(optstr, i, 1);
1102                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1103                 if (a == ":") {
1104                         arg[c] = 1;
1105                         i++;
1106                 }
1107                 opt[c] = 1;
1108         }
1109 }
1110 {
1111         expect = 0;
1112         str = $0;
1113         if (substr(str, 1, 1) != "-") {
1114                 printf("'%s'\n", str);
1115                 next;
1116         }
1117         len = length($0);
1118         for (i = 2; i <= len; i++) {
1119                 c = substr(str, i, 1);
1120                 if (!opt[c]) {
1121                         printf("-%s\n", substr(str, i));
1122                         next;
1123                 }
1124                 printf("-%s\n", c);
1125                 if (arg[c]) {
1126                         if (i < len)
1127                                 printf("'%s'\n", substr(str, i + 1));
1128                         else
1129                                 expect = 1;
1130                         next;
1131                 }
1132         }
1133 }
1134 END {
1135         if (expect)
1136                 print "?";
1137 }
1138 EOF
1139
1140 : process the command line options
1141 set X `for arg in "$@"; do echo "X$arg"; done |
1142         sed -e s/X// | awk -f options.awk`
1143 eval "set $*"
1144 shift
1145 rm -f options.awk
1146
1147 : set up default values
1148 fastread=''
1149 reuseval=false
1150 config_sh=''
1151 alldone=''
1152 error=''
1153 silent=''
1154 extractsh=''
1155 override=''
1156 knowitall=''
1157 rm -f optdef.sh
1158 cat >optdef.sh <<EOS
1159 $startsh
1160 EOS
1161
1162
1163 : option parsing
1164 while test $# -gt 0; do
1165         case "$1" in
1166         -d) shift; fastread=yes;;
1167         -e) shift; alldone=cont;;
1168         -f)
1169                 shift
1170                 cd ..
1171                 if test -r "$1"; then
1172                         config_sh="$1"
1173                 else
1174                         echo "$me: cannot read config file $1." >&2
1175                         error=true
1176                 fi
1177                 cd UU
1178                 shift;;
1179         -h) shift; error=true;;
1180         -r) shift; reuseval=true;;
1181         -s) shift; silent=true; realsilent=true;;
1182         -E) shift; alldone=exit;;
1183         -K) shift; knowitall=true;;
1184         -O) shift; override=true;;
1185         -S) shift; silent=true; extractsh=true;;
1186         -D)
1187                 shift
1188                 case "$1" in
1189                 *=)
1190                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1191                         echo "$me: ignoring -D $1" >&2
1192                         ;;
1193                 *=*) echo "$1" | \
1194                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1195                 *) echo "$1='define'" >> optdef.sh;;
1196                 esac
1197                 shift
1198                 ;;
1199         -U)
1200                 shift
1201                 case "$1" in
1202                 *=) echo "$1" >> optdef.sh;;
1203                 *=*)
1204                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1205                         echo "$me: ignoring -U $1" >&2
1206                         ;;
1207                 *) echo "$1='undef'" >> optdef.sh;;
1208                 esac
1209                 shift
1210                 ;;
1211         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1212                 exit 0;;
1213         --) break;;
1214         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1215         *) break;;
1216         esac
1217 done
1218
1219 case "$error" in
1220 true)
1221         cat >&2 <<EOM
1222 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1223                  [-U symbol] [-U symbol=]
1224   -d : use defaults for all answers.
1225   -e : go on without questioning past the production of config.sh.
1226   -f : specify an alternate default configuration file.
1227   -h : print this help message and exit (with an error status).
1228   -r : reuse C symbols value if possible (skips costly nm extraction).
1229   -s : silent mode, only echoes questions and essential information.
1230   -D : define symbol to have some value:
1231          -D symbol         symbol gets the value 'define'
1232          -D symbol=value   symbol gets the value 'value'
1233   -E : stop at the end of questions, after having produced config.sh.
1234   -K : do not use unless you know what you are doing.
1235   -O : let -D and -U override definitions from loaded configuration file.
1236   -S : perform variable substitutions on all .SH files (can mix with -f)
1237   -U : undefine symbol:
1238          -U symbol    symbol gets the value 'undef'
1239          -U symbol=   symbol gets completely empty
1240   -V : print version number and exit (with a zero status).
1241 EOM
1242         exit 1
1243         ;;
1244 esac
1245
1246 : Sanity checks
1247 case "$fastread$alldone" in
1248 yescont|yesexit) ;;
1249 *)
1250         if test ! -t 0; then
1251                 echo "Say 'sh Configure', not 'sh <Configure'"
1252                 exit 1
1253         fi
1254         ;;
1255 esac
1256
1257 exec 4>&1
1258 case "$silent" in
1259 true) exec 1>/dev/null;;
1260 esac
1261
1262 : run the defines and the undefines, if any, but leave the file out there...
1263 touch optdef.sh
1264 . ./optdef.sh
1265
1266 : set package name
1267 package=perl5
1268 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1269 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1270 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1271 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1272 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1273 esac
1274
1275 : Some greps do not return status, grrr.
1276 echo "grimblepritz" >grimble
1277 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1278         contains=contains
1279 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1280         contains=grep
1281 else
1282         contains=contains
1283 fi
1284 rm -f grimble
1285 : the following should work in any shell
1286 case "$contains" in
1287 contains*)
1288         echo " "
1289         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1290         cat >contains <<'EOSS'
1291 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1292 EOSS
1293 chmod +x contains
1294 esac
1295
1296 : Find the path to the source tree
1297 case "$src" in
1298 '') case "$0" in
1299     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1300     *)   src='.';;
1301     esac;;
1302 esac
1303 case "$src" in
1304 '')     src=/
1305         rsrc=/
1306         ;;
1307 /*) rsrc="$src";;
1308 *) rsrc="../$src";;
1309 esac
1310 if test -f $rsrc/Configure && \
1311         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1312 then
1313    : found it, so we are ok.
1314 else
1315         rsrc=''
1316         for src in . .. ../.. ../../.. ../../../..; do
1317                 if test -f ../$src/Configure && \
1318                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1319                 then
1320                         rsrc=../$src
1321                         break
1322                 fi
1323         done
1324 fi
1325 case "$rsrc" in
1326 '')
1327         cat <<EOM >&4
1328
1329 Sorry, I can't seem to locate the source dir for $package.  Please start
1330 Configure with an explicit path -- i.e. /some/path/Configure.
1331
1332 EOM
1333         exit 1
1334         ;;
1335 ../.)   rsrc='..';;
1336 *)
1337         echo " "
1338         echo "Sources for $package found in \"$src\"." >&4
1339         ;;
1340 esac
1341
1342 : script used to extract .SH files with variable substitutions
1343 cat >extract <<'EOS'
1344 CONFIGDOTSH=true
1345 echo "Doing variable substitutions on .SH files..."
1346 if test -f $src/MANIFEST; then
1347         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1348 else
1349         echo "(Looking for .SH files under the source directory.)"
1350         set x `(cd $src; find . -name "*.SH" -print)`
1351 fi
1352 shift
1353 case $# in
1354 0) set x `(cd $src; echo *.SH)`; shift;;
1355 esac
1356 if test ! -f $src/$1; then
1357         shift
1358 fi
1359 mkdir_p='
1360 name=$1;
1361 create="";
1362 while test $name; do
1363         if test ! -d "$name"; then
1364                 create="$name $create";
1365                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1366                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1367         else
1368                 name="";
1369         fi;
1370 done;
1371 for file in $create; do
1372         mkdir $file;
1373 done
1374 '
1375 for file in $*; do
1376         case "$src" in
1377         ".")
1378                 case "$file" in
1379                 */*)
1380                         dir=`expr X$file : 'X\(.*\)/'`
1381                         file=`expr X$file : 'X.*/\(.*\)'`
1382                         (cd $dir && . ./$file)
1383                         ;;
1384                 *)
1385                         . ./$file
1386                         ;;
1387                 esac
1388                 ;;
1389         *)
1390                 case "$file" in
1391                 */*)
1392                         dir=`expr X$file : 'X\(.*\)/'`
1393                         file=`expr X$file : 'X.*/\(.*\)'`
1394                         (set x $dir; shift; eval $mkdir_p)
1395                         sh <$src/$dir/$file
1396                         ;;
1397                 *)
1398                         sh <$src/$file
1399                         ;;
1400                 esac
1401                 ;;
1402         esac
1403 done
1404 if test -f $src/config_h.SH; then
1405         if test ! -f config.h; then
1406         : oops, they left it out of MANIFEST, probably, so do it anyway.
1407         . $src/config_h.SH
1408         fi
1409 fi
1410 EOS
1411
1412 : extract files and exit if asked to do so
1413 case "$extractsh" in
1414 true)
1415         case "$realsilent" in
1416         true) ;;
1417         *) exec 1>&4;;
1418         esac
1419         case "$config_sh" in
1420         '') config_sh='config.sh';;
1421         esac
1422         echo " "
1423         echo "Fetching answers from $config_sh..."
1424         cd ..
1425         . $config_sh
1426         test "$override" && . ./optdef.sh
1427         echo " "
1428         . UU/extract
1429         rm -rf UU
1430         echo "Done."
1431         exit 0
1432         ;;
1433 esac
1434
1435 : Eunice requires " " instead of "", can you believe it
1436 echo " "
1437 : Here we go...
1438 echo "Beginning of configuration questions for $package."
1439
1440 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1441
1442 : first determine how to suppress newline on echo command
1443 echo " "
1444 echo "Checking echo to see how to suppress newlines..."
1445 (echo "hi there\c" ; echo " ") >.echotmp
1446 if $contains c .echotmp >/dev/null 2>&1 ; then
1447         echo "...using -n."
1448         n='-n'
1449         c=''
1450 else
1451         cat <<'EOM'
1452 ...using \c
1453 EOM
1454         n=''
1455         c='\c'
1456 fi
1457 echo $n "The star should be here-->$c"
1458 echo '*'
1459 rm -f .echotmp
1460
1461 : Now test for existence of everything in MANIFEST
1462 echo " "
1463 if test -f $rsrc/MANIFEST; then
1464         echo "First let's make sure your kit is complete.  Checking..." >&4
1465         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1466         rm -f missing
1467         tmppwd=`pwd`
1468         for filelist in x??; do
1469                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1470         done
1471         if test -s missing; then
1472                 cat missing >&4
1473                 cat >&4 <<'EOM'
1474
1475 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1476
1477 You have the option of continuing the configuration process, despite the
1478 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1479 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1480 and contact the author (perlbug@perl.com).
1481
1482 EOM
1483                 echo $n "Continue? [n] $c" >&4
1484                 read ans
1485                 case "$ans" in
1486                 y*)
1487                         echo "Continuing..." >&4
1488                         rm -f missing
1489                         ;;
1490                 *)
1491                         echo "ABORTING..." >&4
1492                         kill $$
1493                         ;;
1494                 esac
1495         else
1496                 echo "Looks good..."
1497         fi
1498 else
1499         echo "There is no MANIFEST file.  I hope your kit is complete !"
1500 fi
1501 rm -f missing x??
1502
1503 echo " "
1504 : Find the appropriate value for a newline for tr
1505 if test -n "$DJGPP"; then
1506        trnl='\012'
1507 fi
1508 if test X"$trnl" = X; then
1509         case "`echo foo|tr '\n' x 2>/dev/null`" in
1510         foox) trnl='\n' ;;
1511         esac
1512 fi
1513 if test X"$trnl" = X; then
1514         case "`echo foo|tr '\012' x 2>/dev/null`" in
1515         foox) trnl='\012' ;;
1516         esac
1517 fi
1518 if test X"$trnl" = X; then
1519         cat <<EOM >&2
1520
1521 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1522
1523 EOM
1524         exit 1
1525 fi
1526
1527 : compute the number of columns on the terminal for proper question formatting
1528 case "$COLUMNS" in
1529 '') COLUMNS='80';;
1530 esac
1531
1532 : set up the echo used in my read
1533 myecho="case \"\$xxxm\" in
1534 '') echo $n \"\$rp $c\" >&4;;
1535 *) case \"\$rp\" in
1536         '') echo $n \"[\$xxxm] $c\";;
1537         *)
1538                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1539                         echo \"\$rp\" >&4
1540                         echo $n \"[\$xxxm] $c\" >&4
1541                 else
1542                         echo $n \"\$rp [\$xxxm] $c\" >&4
1543                 fi
1544                 ;;
1545         esac;;
1546 esac"
1547
1548 : now set up to do reads with possible shell escape and default assignment
1549 cat <<EOSC >myread
1550 $startsh
1551 xxxm=\$dflt
1552 $myecho
1553 ans='!'
1554 case "\$fastread" in
1555 yes) case "\$dflt" in
1556         '') ;;
1557         *) ans='';
1558                 case "\$silent-\$rp" in
1559                 true-) ;;
1560                 *) echo " " >&4;;
1561                 esac;;
1562         esac;;
1563 *) case "\$silent" in
1564         true) case "\$rp" in
1565                 '') ans='';;
1566                 esac;;
1567         esac;;
1568 esac
1569 while expr "X\$ans" : "X!" >/dev/null; do
1570         read answ
1571         set x \$xxxm
1572         shift
1573         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1574         case  "\$answ" in
1575         "!")
1576                 sh 1>&4
1577                 echo " "
1578                 $myecho
1579                 ;;
1580         !*)
1581                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1582                 shift
1583                 sh 1>&4 -c "\$*"
1584                 echo " "
1585                 $myecho
1586                 ;;
1587         "\$ans")
1588                 case "\$ans" in
1589                 \\&*)
1590                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1591                         shift
1592                         case "\$1" in
1593                         -d)
1594                                 fastread=yes
1595                                 echo "(OK, I'll run with -d after this question.)" >&4
1596                                 ;;
1597                         -*)
1598                                 echo "*** Sorry, \$1 not supported yet." >&4
1599                                 ;;
1600                         esac
1601                         $myecho
1602                         ans=!
1603                         ;;
1604                 esac;;
1605         *)
1606                 case "\$aok" in
1607                 y)
1608                         echo "*** Substitution done -- please confirm."
1609                         xxxm="\$ans"
1610                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1611                         xxxm="\$ans"
1612                         ans=!
1613                         ;;
1614                 *)
1615                         echo "*** Error -- try again."
1616                         ans=!
1617                         ;;
1618                 esac
1619                 $myecho
1620                 ;;
1621         esac
1622         case "\$ans\$xxxm\$nostick" in
1623         '')
1624                 ans=!
1625                 $myecho
1626                 ;;
1627         esac
1628 done
1629 case "\$ans" in
1630 '') ans="\$xxxm";;
1631 esac
1632 EOSC
1633
1634 : create .config dir to save info across Configure sessions
1635 test -d ../.config || mkdir ../.config
1636 cat >../.config/README <<EOF
1637 This directory created by Configure to save information that should
1638 persist across sessions for $package.
1639
1640 You may safely delete it if you wish.
1641 EOF
1642
1643 : general instructions
1644 needman=true
1645 firsttime=true
1646 user=`(logname) 2>/dev/null`
1647 case "$user" in
1648 '') user=`whoami 2>&1`;;
1649 esac
1650 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1651         firsttime=false
1652         echo " "
1653         rp='Would you like to see the instructions?'
1654         dflt=n
1655         . ./myread
1656         case "$ans" in
1657         [yY]*) ;;
1658         *) needman=false;;
1659         esac
1660 fi
1661 if $needman; then
1662         cat <<EOH
1663
1664 This installation shell script will examine your system and ask you questions
1665 to determine how the perl5 package should be installed. If you get
1666 stuck on a question, you may use a ! shell escape to start a subshell or
1667 execute a command.  Many of the questions will have default answers in square
1668 brackets; typing carriage return will give you the default.
1669
1670 On some of the questions which ask for file or directory names you are allowed
1671 to use the ~name construct to specify the login directory belonging to "name",
1672 even if you don't have a shell which knows about that.  Questions where this is
1673 allowed will be marked "(~name ok)".
1674
1675 EOH
1676         rp=''
1677         dflt='Type carriage return to continue'
1678         . ./myread
1679         cat <<'EOH'
1680
1681 The prompter used in this script allows you to use shell variables and
1682 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1683 in the default answer, as if the default line was a set of arguments given to a
1684 script shell.  This means you may also use $* to repeat the whole default line,
1685 so you do not have to re-type everything to add something to the default.
1686
1687 Everytime there is a substitution, you will have to confirm.  If there is an
1688 error (e.g. an unmatched backtick), the default answer will remain unchanged
1689 and you will be prompted again.
1690
1691 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1692 the questions and use the computed defaults (or the previous answers if there
1693 was already a config.sh file). Type 'Configure -h' for a list of options.
1694 You may also start interactively and then answer '& -d' at any prompt to turn
1695 on the non-interactive behaviour for the remainder of the execution.
1696
1697 EOH
1698         . ./myread
1699         cat <<EOH
1700
1701 Much effort has been expended to ensure that this shell script will run on any
1702 Unix system.  If despite that it blows up on yours, your best bet is to edit
1703 Configure and run it again.  If you can't run Configure for some reason,
1704 you'll have to generate a config.sh file by hand.  Whatever problems you
1705 have, let me (perlbug@perl.com) know how I blew it.
1706
1707 This installation script affects things in two ways:
1708
1709 1) it may do direct variable substitutions on some of the files included
1710    in this kit.
1711 2) it builds a config.h file for inclusion in C programs.  You may edit
1712    any of these files as the need arises after running this script.
1713
1714 If you make a mistake on a question, there is no easy way to back up to it
1715 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1716 files.  Configure will offer to let you do this before it runs the SH files.
1717
1718 EOH
1719         dflt='Type carriage return to continue'
1720         . ./myread
1721         case "$firsttime" in
1722         true) echo $user >>../.config/instruct;;
1723         esac
1724 fi
1725
1726 : find out where common programs are
1727 echo " "
1728 echo "Locating common programs..." >&4
1729 cat <<EOSC >loc
1730 $startsh
1731 case \$# in
1732 0) exit 1;;
1733 esac
1734 thing=\$1
1735 shift
1736 dflt=\$1
1737 shift
1738 for dir in \$*; do
1739         case "\$thing" in
1740         .)
1741         if test -d \$dir/\$thing; then
1742                 echo \$dir
1743                 exit 0
1744         fi
1745         ;;
1746         *)
1747         for thisthing in \$dir/\$thing; do
1748                 : just loop through to pick last item
1749         done
1750         if test -f \$thisthing; then
1751                 echo \$thisthing
1752                 exit 0
1753         elif test -f \$dir/\$thing.exe; then
1754                 if test -n "$DJGPP"; then
1755                         echo \$dir/\$thing.exe
1756                 else
1757                         : on Eunice apparently
1758                         echo \$dir/\$thing
1759                 fi
1760                 exit 0
1761         fi
1762         ;;
1763         esac
1764 done
1765 echo \$dflt
1766 exit 1
1767 EOSC
1768 chmod +x loc
1769 $eunicefix loc
1770 loclist="
1771 awk
1772 cat
1773 comm
1774 cp
1775 echo
1776 expr
1777 grep
1778 ls
1779 make
1780 mkdir
1781 rm
1782 sed
1783 sort
1784 touch
1785 tr
1786 uniq
1787 "
1788 trylist="
1789 Mcc
1790 ar
1791 byacc
1792 cpp
1793 csh
1794 date
1795 egrep
1796 gzip
1797 less
1798 ln
1799 more
1800 nm
1801 nroff
1802 pg
1803 test
1804 uname
1805 zip
1806 "
1807 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1808 pth="$pth /lib /usr/lib"
1809 for file in $loclist; do
1810         eval xxx=\$$file
1811         case "$xxx" in
1812         /*|?:[\\/]*)
1813                 if test -f "$xxx"; then
1814                         : ok
1815                 else
1816                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1817                         xxx=`./loc $file $file $pth`
1818                 fi
1819                 ;;
1820         '') xxx=`./loc $file $file $pth`;;
1821         *) xxx=`./loc $xxx $xxx $pth`;;
1822         esac
1823         eval $file=$xxx
1824         eval _$file=$xxx
1825         case "$xxx" in
1826         /*)
1827                 echo $file is in $xxx.
1828                 ;;
1829         ?:[\\/]*)
1830                 echo $file is in $xxx.
1831                 ;;
1832         *)
1833                 echo "I don't know where '$file' is, and my life depends on it." >&4
1834                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1835                 exit 1
1836                 ;;
1837         esac
1838 done
1839 echo " "
1840 echo "Don't worry if any of the following aren't found..."
1841 say=offhand
1842 for file in $trylist; do
1843         eval xxx=\$$file
1844         case "$xxx" in
1845         /*|?:[\\/]*)
1846                 if test -f "$xxx"; then
1847                         : ok
1848                 else
1849                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1850                         xxx=`./loc $file $file $pth`
1851                 fi
1852                 ;;
1853         '') xxx=`./loc $file $file $pth`;;
1854         *) xxx=`./loc $xxx $xxx $pth`;;
1855         esac
1856         eval $file=$xxx
1857         eval _$file=$xxx
1858         case "$xxx" in
1859         /*)
1860                 echo $file is in $xxx.
1861                 ;;
1862         ?:[\\/]*)
1863                 echo $file is in $xxx.
1864                 ;;
1865         *)
1866                 echo "I don't see $file out there, $say."
1867                 say=either
1868                 ;;
1869         esac
1870 done
1871 case "$egrep" in
1872 egrep)
1873         echo "Substituting grep for egrep."
1874         egrep=$grep
1875         ;;
1876 esac
1877 case "$ln" in
1878 ln)
1879         echo "Substituting cp for ln."
1880         ln=$cp
1881         ;;
1882 esac
1883 case "$test" in
1884 test)
1885         echo "Hopefully test is built into your sh."
1886         ;;
1887 *)
1888         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1889                 echo "Using the test built into your sh."
1890                 test=test
1891                 _test=test
1892         fi
1893         ;;
1894 esac
1895 case "$echo" in
1896 echo)
1897         echo "Hopefully echo is built into your sh."
1898         ;;
1899 '') ;;
1900 *)
1901         echo " "
1902 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1903         $echo $n "hi there$c" >foo1
1904         echo $n "hi there$c" >foo2
1905         if cmp foo1 foo2 >/dev/null 2>&1; then
1906                 echo "They are compatible.  In fact, they may be identical."
1907         else
1908                 case "$n" in
1909                 '-n') n='' c='\c';;
1910                 *) n='-n' c='';;
1911                 esac
1912                 cat <<FOO
1913 They are not compatible!  You are probably running ksh on a non-USG system.
1914 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1915 have echo built in and we may have to run some Bourne shell scripts.  That
1916 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1917
1918 FOO
1919                 $echo $n "The star should be here-->$c"
1920                 $echo "*"
1921         fi
1922         $rm -f foo1 foo2
1923         ;;
1924 esac
1925
1926 : determine whether symbolic links are supported
1927 echo " "
1928 $touch blurfl
1929 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1930         echo "Symbolic links are supported." >&4
1931         lns="$ln -s"
1932 else
1933         echo "Symbolic links are NOT supported." >&4
1934         lns="$ln"
1935 fi
1936 $rm -f blurfl sym
1937
1938 : see whether [:lower:] and [:upper:] are supported character classes
1939 echo " "
1940 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1941 ABYZ)
1942         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1943         up='[:upper:]'
1944         low='[:lower:]'
1945         ;;
1946 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1947         # (0xc9 and 0xd1), therefore that is a nice testing point.
1948         if test "X$up" = X -o "X$low" = X; then
1949             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1950             ij) up='[A-Z]'
1951                 low='[a-z]'
1952                 ;;
1953             esac
1954         fi
1955         if test "X$up" = X -o "X$low" = X; then
1956             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1957             ij) up='A-Z'
1958                 low='a-z'
1959                 ;;
1960             esac
1961         fi
1962         if test "X$up" = X -o "X$low" = X; then
1963             case "`echo IJ | od -x 2>/dev/null`" in
1964             *C9D1*|*c9d1*)
1965                 echo "Hey, this might be EBCDIC." >&4
1966                 if test "X$up" = X -o "X$low" = X; then
1967                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1968                     ij) up='[A-IJ-RS-Z]'
1969                         low='[a-ij-rs-z]'
1970                         ;;
1971                     esac
1972                 fi
1973                 if test "X$up" = X -o "X$low" = X; then
1974                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1975                     ij) up='A-IJ-RS-Z'
1976                         low='a-ij-rs-z'
1977                         ;;
1978                     esac
1979                 fi
1980                 ;;
1981             esac
1982         fi
1983 esac
1984 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1985 ij)
1986     echo "Using $up and $low to convert case." >&4
1987     ;;
1988 *)
1989     echo "I don't know how to translate letters from upper to lower case." >&4
1990     echo "Your tr is not acting any way I know of." >&4
1991     exit 1
1992     ;;
1993 esac
1994 : set up the translation script tr, must be called with ./tr of course
1995 cat >tr <<EOSC
1996 $startsh
1997 case "\$1\$2" in
1998 '[A-Z][a-z]') exec $tr '$up' '$low';;
1999 '[a-z][A-Z]') exec $tr '$low' '$up';;
2000 esac
2001 exec $tr "\$@"
2002 EOSC
2003 chmod +x tr
2004 $eunicefix tr
2005
2006 : Try to determine whether config.sh was made on this system
2007 case "$config_sh" in
2008 '')
2009 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2010 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2011 # because the A-Z/a-z are not consecutive.
2012 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2013         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2014 newmyuname="$myuname"
2015 dflt=n
2016 case "$knowitall" in
2017 '')
2018         if test -f ../config.sh; then
2019                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2020                         eval "`grep myuname= ../config.sh`"
2021                 fi
2022                 if test "X$myuname" = "X$newmyuname"; then
2023                         dflt=y
2024                 fi
2025         fi
2026         ;;
2027 *) dflt=y;;
2028 esac
2029
2030 : Get old answers from old config file if Configure was run on the
2031 : same system, otherwise use the hints.
2032 hint=default
2033 cd ..
2034 if test -f config.sh; then
2035         echo " "
2036         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2037         . UU/myread
2038         case "$ans" in
2039         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2040         *)  echo "Fetching default answers from your old config.sh file..." >&4
2041                 tmp_n="$n"
2042                 tmp_c="$c"
2043                 tmp_sh="$sh"
2044                 . ./config.sh
2045                 cp config.sh UU
2046                 n="$tmp_n"
2047                 c="$tmp_c"
2048                 : Older versions did not always set $sh.  Catch re-use of such
2049                 : an old config.sh.
2050                 case "$sh" in
2051                 '') sh="$tmp_sh" ;;
2052                 esac
2053                 hint=previous
2054                 ;;
2055         esac
2056 fi
2057 if test ! -f config.sh; then
2058         $cat <<EOM
2059
2060 First time through, eh?  I have some defaults handy for some systems
2061 that need some extra help getting the Configure answers right:
2062
2063 EOM
2064         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2065         dflt=''
2066         : Half the following guesses are probably wrong... If you have better
2067         : tests or hints, please send them to perlbug@perl.com
2068         : The metaconfig authors would also appreciate a copy...
2069         $test -f /irix && osname=irix
2070         $test -f /xenix && osname=sco_xenix
2071         $test -f /dynix && osname=dynix
2072         $test -f /dnix && osname=dnix
2073         $test -f /lynx.os && osname=lynxos
2074         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2075         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2076         $test -f /bin/mips && /bin/mips && osname=mips
2077         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2078                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2079         $test -d /usr/apollo/bin && osname=apollo
2080         $test -f /etc/saf/_sactab && osname=svr4
2081         $test -d /usr/include/minix && osname=minix
2082         if $test -d /MachTen -o -d /MachTen_Folder; then
2083                 osname=machten
2084                 if $test -x /sbin/version; then
2085                         osvers=`/sbin/version | $awk '{print $2}' |
2086                         $sed -e 's/[A-Za-z]$//'`
2087                 elif $test -x /usr/etc/version; then
2088                         osvers=`/usr/etc/version | $awk '{print $2}' |
2089                         $sed -e 's/[A-Za-z]$//'`
2090                 else
2091                         osvers="$2.$3"
2092                 fi
2093         fi
2094        $test -f /sys/posix.dll &&
2095                $test -f /usr/bin/what &&
2096                set X `/usr/bin/what /sys/posix.dll` &&
2097                $test "$3" = UWIN &&
2098                osname=uwin &&
2099                osvers="$5"
2100         if $test -f $uname; then
2101                 set X $myuname
2102                 shift
2103
2104                 case "$5" in
2105                 fps*) osname=fps ;;
2106                 mips*)
2107                         case "$4" in
2108                         umips) osname=umips ;;
2109                         *) osname=mips ;;
2110                         esac;;
2111                 [23]100) osname=mips ;;
2112                 next*) osname=next ;;
2113                 i386*)
2114                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2115                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2116                                 osname='sco'
2117                                 osvers=$tmp
2118                         elif $test -f /etc/kconfig; then
2119                                 osname=isc
2120                                 if test "$lns" = "$ln -s"; then
2121                                         osvers=4
2122                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2123                                         osvers=3
2124                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2125                                         osvers=2
2126                                 fi
2127                         fi
2128                         tmp=''
2129                         ;;
2130                 pc*)
2131                         if test -n "$DJGPP"; then
2132                                 osname=dos
2133                                 osvers=djgpp
2134                         fi
2135                         ;;
2136                 esac
2137
2138                 case "$1" in
2139                 aix) osname=aix
2140                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2141                         case "$tmp" in
2142                         'not found') osvers="$4"."$3" ;;
2143                         '<3240'|'<>3240') osvers=3.2.0 ;;
2144                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2145                         '=3250'|'>3250') osvers=3.2.5 ;;
2146                         *) osvers=$tmp;;
2147                         esac
2148                         ;;
2149                 *dc.osx) osname=dcosx
2150                         osvers="$3"
2151                         ;;
2152                 dnix) osname=dnix
2153                         osvers="$3"
2154                         ;;
2155                 domainos) osname=apollo
2156                         osvers="$3"
2157                         ;;
2158                 dgux) osname=dgux 
2159                         osvers="$3"
2160                         ;;
2161                 dynixptx*) osname=dynixptx
2162                         osvers=`echo "$4"|sed 's/^v//'`
2163                         ;;
2164                 freebsd) osname=freebsd 
2165                         osvers="$3" ;;
2166                 genix) osname=genix ;;
2167                 hp*) osname=hpux 
2168                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2169                         ;;
2170                 irix*) osname=irix
2171                         case "$3" in
2172                         4*) osvers=4 ;;
2173                         5*) osvers=5 ;;
2174                         *)      osvers="$3" ;;
2175                         esac
2176                         ;;
2177                 linux) osname=linux
2178                         case "$3" in
2179                         *)      osvers="$3" ;;
2180                         esac
2181                         ;;
2182                 MiNT) osname=mint
2183                         ;;
2184                 netbsd*) osname=netbsd
2185                         osvers="$3"
2186                         ;;
2187                 news-os) osvers="$3"
2188                         case "$3" in
2189                         4*) osname=newsos4 ;;
2190                         *) osname=newsos ;;
2191                         esac
2192                         ;;
2193                 bsd386) osname=bsd386
2194                         osvers=`$uname -r`
2195                         ;;
2196                 POSIX-BC | posix-bc ) osname=posix-bc
2197                         osvers="$3"
2198                         ;;
2199                 powerux | power_ux | powermax_os | powermaxos | \
2200                 powerunix | power_unix) osname=powerux
2201                         osvers="$3"
2202                         ;;
2203                 next*) osname=next ;;
2204                 solaris) osname=solaris
2205                         case "$3" in
2206                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2207                         *)      osvers="$3" ;;
2208                         esac
2209                         ;;
2210                 sunos) osname=sunos
2211                         case "$3" in
2212                         5*) osname=solaris
2213                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2214                         *)      osvers="$3" ;;
2215                         esac
2216                         ;;
2217                 titanos) osname=titanos
2218                         case "$3" in
2219                         1*) osvers=1 ;;
2220                         2*) osvers=2 ;;
2221                         3*) osvers=3 ;;
2222                         4*) osvers=4 ;;
2223                         *)      osvers="$3" ;;
2224                         esac
2225                         ;;
2226                 ultrix) osname=ultrix
2227                         osvers="$3"
2228                         ;;
2229                 osf1|mls+)      case "$5" in
2230                                 alpha)
2231                                         osname=dec_osf
2232                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2233                                         ;;
2234                         hp*)    osname=hp_osf1  ;;
2235                         mips)   osname=mips_osf1 ;;
2236                         esac
2237                         ;;
2238                 uts) osname=uts 
2239                         osvers="$3"
2240                         ;;
2241                 qnx) osname=qnx
2242                         osvers="$4"
2243                         ;;
2244                 $2) case "$osname" in
2245                         *isc*) ;;
2246                         *freebsd*) ;;
2247                         svr*)
2248                                 : svr4.x or possibly later
2249                                 case "svr$3" in 
2250                                 ${osname}*)
2251                                         osname=svr$3
2252                                         osvers=$4
2253                                         ;;
2254                                 esac
2255                                 case "$osname" in
2256                                 svr4.0)
2257                                         : Check for ESIX
2258                                         if test -f /stand/boot ; then
2259                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2260                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2261                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2262                                                         if test -n "$isesix"; then
2263                                                                 osname=esix4
2264                                                         fi
2265                                                 fi
2266                                         fi
2267                                         ;;
2268                                 esac
2269                                 ;;
2270                         *)      if test -f /etc/systemid; then
2271                                         osname=sco
2272                                         set `echo $3 | $sed 's/\./ /g'` $4
2273                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2274                                                 osvers=$1.$2.$3
2275                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2276                                                 osvers=$1.$2
2277                                         elif $test -f $src/hints/sco_$1.sh; then
2278                                                 osvers=$1
2279                                         fi
2280                                 else
2281                                         case "$osname" in
2282                                         '') : Still unknown.  Probably a generic Sys V.
2283                                                 osname="sysv"
2284                                                 osvers="$3"
2285                                                 ;;
2286                                         esac
2287                                 fi
2288                                 ;;
2289                         esac
2290                         ;;
2291                 *)      case "$osname" in
2292                         '') : Still unknown.  Probably a generic BSD.
2293                                 osname="$1"
2294                                 osvers="$3"
2295                                 ;;
2296                         esac
2297                         ;;
2298                 esac
2299         else
2300                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2301                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2302                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2303                                 osname=news_os
2304                         fi
2305                         $rm -f UU/kernel.what
2306                 elif test -d c:/.; then
2307                         set X $myuname
2308                         osname=os2
2309                         osvers="$5"
2310                 fi
2311         fi
2312         
2313         : Now look for a hint file osname_osvers, unless one has been
2314         : specified already.
2315         case "$hintfile" in
2316         ''|' ')
2317                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2318                 : Also try without trailing minor version numbers.
2319                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2320                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2321                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2322                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2323                 case "$file" in
2324                 '') dflt=none ;;
2325                 *)  case "$osvers" in
2326                         '') dflt=$file
2327                                 ;;
2328                         *)  if $test -f $src/hints/$file.sh ; then
2329                                         dflt=$file
2330                                 elif $test -f $src/hints/$xfile.sh ; then
2331                                         dflt=$xfile
2332                                 elif $test -f $src/hints/$xxfile.sh ; then
2333                                         dflt=$xxfile
2334                                 elif $test -f $src/hints/$xxxfile.sh ; then
2335                                         dflt=$xxxfile
2336                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2337                                         dflt=$xxxxfile
2338                                 elif $test -f "$src/hints/${osname}.sh" ; then
2339                                         dflt="${osname}"
2340                                 else
2341                                         dflt=none
2342                                 fi
2343                                 ;;
2344                         esac
2345                         ;;
2346                 esac
2347                 if $test -f Policy.sh ; then
2348                         case "$dflt" in
2349                         *Policy*) ;;
2350                         none) dflt="Policy" ;;
2351                         *) dflt="Policy $dflt" ;;
2352                         esac
2353                 fi
2354                 ;;
2355         *)
2356                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2357                 ;;
2358         esac
2359
2360         if $test -f Policy.sh ; then
2361                 $cat <<EOM
2362
2363 There's also a Policy hint file available, which should make the
2364 site-specific (policy) questions easier to answer.
2365 EOM
2366
2367         fi
2368
2369         $cat <<EOM
2370
2371 You may give one or more space-separated answers, or "none" if appropriate.
2372 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2373 is a good thing.  DO NOT give a wrong version.
2374
2375 EOM
2376
2377         rp="Which of these apply, if any?"
2378         . UU/myread
2379         tans=$ans
2380         for file in $tans; do
2381                 if $test X$file = XPolicy -a -f Policy.sh; then
2382                         . Policy.sh
2383                         $cat Policy.sh >> UU/config.sh
2384                 elif $test -f $src/hints/$file.sh; then
2385                         . $src/hints/$file.sh
2386                         $cat $src/hints/$file.sh >> UU/config.sh
2387                 elif $test X$tans = X -o X$tans = Xnone ; then
2388                         : nothing
2389                 else
2390                         : Give one chance to correct a possible typo.
2391                         echo "$file.sh does not exist"
2392                         dflt=$file
2393                         rp="hint to use instead?"
2394                         . UU/myread
2395                         for file in $ans; do
2396                                 if $test -f "$src/hints/$file.sh"; then
2397                                         . $src/hints/$file.sh
2398                                         $cat $src/hints/$file.sh >> UU/config.sh
2399                                 elif $test X$ans = X -o X$ans = Xnone ; then
2400                                         : nothing
2401                                 else
2402                                         echo "$file.sh does not exist -- ignored."
2403                                 fi
2404                         done
2405                 fi
2406         done
2407
2408         hint=recommended
2409         : Remember our hint file for later.
2410         if $test -f "$src/hints/$file.sh" ; then
2411                 hintfile="$file"
2412         else
2413                 hintfile=''
2414         fi
2415 fi
2416 cd UU
2417 ;;
2418 *)
2419         echo " "
2420         echo "Fetching default answers from $config_sh..." >&4
2421         tmp_n="$n"
2422         tmp_c="$c"
2423         cd ..
2424         cp $config_sh config.sh 2>/dev/null
2425         chmod +w config.sh
2426         . ./config.sh
2427         cd UU
2428         cp ../config.sh .
2429         n="$tmp_n"
2430         c="$tmp_c"
2431         hint=previous
2432         ;;
2433 esac
2434 test "$override" && . ./optdef.sh
2435 myuname="$newmyuname"
2436
2437 : Restore computed paths
2438 for file in $loclist $trylist; do
2439         eval $file="\$_$file"
2440 done
2441
2442 cat << EOM
2443
2444 Configure uses the operating system name and version to set some defaults.
2445 The default value is probably right if the name rings a bell. Otherwise,
2446 since spelling matters for me, either accept the default or answer "none"
2447 to leave it blank.
2448
2449 EOM
2450 case "$osname" in
2451         ''|' ')
2452                 case "$hintfile" in
2453                 ''|' '|none) dflt=none ;;
2454                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2455                 esac
2456                 ;;
2457         *) dflt="$osname" ;;
2458 esac
2459 rp="Operating system name?"
2460 . ./myread
2461 case "$ans" in
2462 none)  osname='' ;;
2463 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2464 esac
2465 echo " "
2466 case "$osvers" in
2467         ''|' ')
2468                 case "$hintfile" in
2469                 ''|' '|none) dflt=none ;;
2470                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2471                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2472                         case "$dflt" in
2473                         ''|' ') dflt=none ;;
2474                         esac
2475                         ;;
2476                 esac
2477                 ;;
2478         *) dflt="$osvers" ;;
2479 esac
2480 rp="Operating system version?"
2481 . ./myread
2482 case "$ans" in
2483 none)  osvers='' ;;
2484 *) osvers="$ans" ;;
2485 esac
2486
2487 : who configured the system
2488 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2489 cf_by=`(logname) 2>/dev/null`
2490 case "$cf_by" in
2491 "")
2492         cf_by=`(whoami) 2>/dev/null`
2493         case "$cf_by" in
2494         "") cf_by=unknown ;;
2495         esac ;;
2496 esac
2497
2498 : set up the script used to warn in case of inconsistency
2499 cat <<EOS >whoa
2500 $startsh
2501 EOS
2502 cat <<'EOSC' >>whoa
2503 dflt=y
2504 echo " "
2505 echo "*** WHOA THERE!!! ***" >&4
2506 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2507 rp="    Keep the $hint value?"
2508 . ./myread
2509 case "$ans" in
2510 y) td=$was; tu=$was;;
2511 esac
2512 EOSC
2513
2514 : function used to set $1 to $val
2515 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2516 case "$val$was" in
2517 $define$undef) . ./whoa; eval "$var=\$td";;
2518 $undef$define) . ./whoa; eval "$var=\$tu";;
2519 *) eval "$var=$val";;
2520 esac'
2521
2522 cat <<EOM
2523
2524 Perl can be built to take advantage of threads, on some systems.
2525 To do so, Configure must be run with -Dusethreads.
2526
2527 Note that threading is a highly experimental feature, and
2528 some known race conditions still remain.  If you choose to try
2529 it, be very sure to not actually deploy it for production
2530 purposes.  README.threads has more details, and is required
2531 reading if you enable threads.
2532 EOM
2533 case "$usethreads" in
2534 $define|true|[yY]*)     dflt='y';;
2535 *) dflt='n';;
2536 esac
2537 rp='Build a threading Perl?'
2538 . ./myread
2539 case "$ans" in
2540 y|Y)    val="$define" ;;     
2541 *)      val="$undef" ;;
2542 esac
2543 set usethreads
2544 eval $setvar 
2545
2546 case "$d_oldpthreads" in
2547 '')     : Configure tests would be welcome here.  For now, assume undef.
2548         val="$undef" ;;
2549 *)      val="$d_oldpthreads" ;;
2550 esac
2551 set d_oldpthreads
2552 eval $setvar
2553
2554
2555 case "$usethreads" in
2556 "$define"|true|[yY]*)
2557 : Look for a hint-file generated 'call-back-unit'.  If the
2558 : user has specified that a threading perl is to be built,
2559 : we may need to set or change some other defaults.
2560         if $test -f usethreads.cbu; then
2561                 . ./usethreads.cbu
2562         fi
2563         case "$osname" in
2564         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2565                 # Known thread-capable platforms.
2566                 ;;
2567         *)
2568                 cat >&4 <<EOM
2569 $osname is not known to support threads.
2570 Please let perlbug@perl.com know how to do that.
2571
2572 Cannot continue, aborting.
2573 EOM
2574                 exit 1
2575         ;;
2576         esac # $osname
2577     ;;
2578 esac # $usethreads
2579
2580 cat <<EOM
2581
2582 Perl can be built so that multiple Perl interpreters can coexist
2583 within the same Perl executable.  To do so, Configure must be run with
2584 -Dusemultiplicity.
2585
2586 Normally you do not need this and you should answer no.
2587
2588 EOM
2589 case "$usemultiplicity" in
2590 $define|true|[yY]*)     dflt='y';;
2591 *) dflt='n';;
2592 esac
2593 rp='Build Perl for multiplicity?'
2594 . ./myread
2595 case "$ans" in
2596 y|Y)    val="$define" ;;     
2597 *)      val="$undef" ;;
2598 esac
2599 set usemultiplicity
2600 eval $setvar 
2601
2602 cat <<EOM
2603
2604 Perl can be built to take advantage of explicit 64-bit interfaces,
2605 on some systems.  To do so, Configure must be run with -Duse64bits.
2606
2607 If this doesn't make any sense to you, just accept the default 'n'.
2608 EOM
2609 case "$use64bits" in
2610 $define|true|[yY]*)     dflt='y';;
2611 *) dflt='n';;
2612 esac
2613 rp='Try to use explicit 64-bit interfaces, if available?'
2614 . ./myread
2615 case "$ans" in
2616 y|Y) 
2617         val="$define"
2618         ;;     
2619 *)      
2620         val="$undef"
2621         ;;
2622 esac
2623 set use64bits
2624 eval $setvar
2625
2626 case "$archname64" in
2627 '') archname64='' ;;    # not a typo
2628 esac
2629
2630 case "$use64bits" in
2631 "$define"|true|[yY]*)
2632 : Look for a hint-file generated 'call-back-unit'.  If the
2633 : user has specified that a 64 bit perl is to be built,
2634 : we may need to set or change some other defaults.
2635         if $test -f use64bits.cbu; then
2636                 . ./use64bits.cbu
2637         fi
2638         case "$osname" in
2639         aix|dec_osf|hpux|irix|solaris|unicos)
2640                 # Known 64-bit capable platforms.
2641                 ;;
2642         *)
2643                 cat >&4 <<EOM
2644 $osname is not known to support 64-bit interfaces.
2645 Please let perlbug@perl.com know how to do that.
2646
2647 Cannot continue, aborting.
2648 EOM
2649                 exit 1
2650                 ;;
2651         esac
2652         ;;
2653 esac
2654
2655 : determine the architecture name
2656 echo " "
2657 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2658         tarch=`arch`"-$osname"
2659 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2660         if uname -m > tmparch 2>&1 ; then
2661                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2662                         -e 's/$/'"-$osname/" tmparch`
2663         else
2664                 tarch="$osname"
2665         fi
2666         $rm -f tmparch
2667 else
2668         tarch="$osname"
2669 fi
2670 case "$myarchname" in
2671 ''|"$tarch") ;;
2672 *)
2673         echo "(Your architecture name used to be $myarchname.)"
2674         archname=''
2675         ;;
2676 esac
2677 myarchname="$tarch"
2678 case "$archname" in
2679 '') dflt="$tarch";;
2680 *) dflt="$archname";;
2681 esac
2682 rp='What is your architecture name'
2683 . ./myread
2684 archname="$ans"
2685 case "$usethreads" in
2686 $define)
2687         echo "Threads selected." >&4
2688         case "$archname" in
2689         *-thread*) echo "...and architecture name already has -thread." >&4
2690                 ;;
2691         *)      archname="$archname-thread"
2692                 echo "...setting architecture name to $archname." >&4
2693                 ;;
2694         esac
2695         ;;
2696 esac
2697 case "$usemultiplicity" in
2698 $define)
2699         echo "Multiplicity selected." >&4
2700         case "$archname" in
2701         *-multi*) echo "...and architecture name already has -multi." >&4
2702                 ;;
2703         *)      archname="$archname-multi"
2704                 echo "...setting architecture name to $archname." >&4
2705                 ;;
2706         esac
2707         ;;
2708 esac
2709 case "$use64bits" in
2710 $define)
2711         echo "Explicit 64-bitness selected." >&4
2712         case "$archname64" in
2713         '')
2714                 ;;
2715         *)
2716                 case "$archname" in
2717                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2718                         ;;
2719                 *)      archname="$archname-$archname64"
2720                         echo "...setting architecture name to $archname." >&4
2721                         ;;
2722                 esac
2723                 ;;
2724         esac
2725 esac
2726
2727 : decide how portable to be.  Allow command line overrides.
2728 case "$d_portable" in
2729 "$undef") ;;
2730 *)      d_portable="$define" ;;
2731 esac
2732
2733 : set up shell script to do ~ expansion
2734 cat >filexp <<EOSS
2735 $startsh
2736 : expand filename
2737 case "\$1" in
2738  ~/*|~)
2739         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2740         ;;
2741  ~*)
2742         if $test -f /bin/csh; then
2743                 /bin/csh -f -c "glob \$1"
2744                 failed=\$?
2745                 echo ""
2746                 exit \$failed
2747         else
2748                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2749                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2750                 if $test ! -d "\$dir"; then
2751                         me=\`basename \$0\`
2752                         echo "\$me: can't locate home directory for: \$name" >&2
2753                         exit 1
2754                 fi
2755                 case "\$1" in
2756                 */*)
2757                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2758                         ;;
2759                 *)
2760                         echo \$dir
2761                         ;;
2762                 esac
2763         fi
2764         ;;
2765 *)
2766         echo \$1
2767         ;;
2768 esac
2769 EOSS
2770 chmod +x filexp
2771 $eunicefix filexp
2772
2773 : now set up to get a file name
2774 cat <<EOS >getfile
2775 $startsh
2776 EOS
2777 cat <<'EOSC' >>getfile
2778 tilde=''
2779 fullpath=''
2780 already=''
2781 skip=''
2782 none_ok=''
2783 exp_file=''
2784 nopath_ok=''
2785 orig_rp="$rp"
2786 orig_dflt="$dflt"
2787
2788 case "$fn" in
2789 *\(*)
2790         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2791         fn=`echo $fn | sed 's/(.*)//'`
2792         ;;
2793 esac
2794
2795 case "$fn" in
2796 *:*)
2797         loc_file=`expr $fn : '.*:\(.*\)'`
2798         fn=`expr $fn : '\(.*\):.*'`
2799         ;;
2800 esac
2801
2802 case "$fn" in
2803 *~*) tilde=true;;
2804 esac
2805 case "$fn" in
2806 */*) fullpath=true;;
2807 esac
2808 case "$fn" in
2809 *+*) skip=true;;
2810 esac
2811 case "$fn" in
2812 *n*) none_ok=true;;
2813 esac
2814 case "$fn" in
2815 *e*) exp_file=true;;
2816 esac
2817 case "$fn" in
2818 *p*) nopath_ok=true;;
2819 esac
2820
2821 case "$fn" in
2822 *f*) type='File';;
2823 *d*) type='Directory';;
2824 *l*) type='Locate';;
2825 esac
2826
2827 what="$type"
2828 case "$what" in
2829 Locate) what='File';;
2830 esac
2831
2832 case "$exp_file" in
2833 '')
2834         case "$d_portable" in
2835         "$define") ;;
2836         *) exp_file=true;;
2837         esac
2838         ;;
2839 esac
2840
2841 cd ..
2842 while test "$type"; do
2843         redo=''
2844         rp="$orig_rp"
2845         dflt="$orig_dflt"
2846         case "$tilde" in
2847         true) rp="$rp (~name ok)";;
2848         esac
2849         . UU/myread
2850         if test -f UU/getfile.ok && \
2851                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2852         then
2853                 value="$ans"
2854                 ansexp="$ans"
2855                 break
2856         fi
2857         case "$ans" in
2858         none)
2859                 value=''
2860                 ansexp=''
2861                 case "$none_ok" in
2862                 true) type='';;
2863                 esac
2864                 ;;
2865         *)
2866                 case "$tilde" in
2867                 '') value="$ans"
2868                         ansexp="$ans";;
2869                 *)
2870                         value=`UU/filexp $ans`
2871                         case $? in
2872                         0)
2873                                 if test "$ans" != "$value"; then
2874                                         echo "(That expands to $value on this system.)"
2875                                 fi
2876                                 ;;
2877                         *) value="$ans";;
2878                         esac
2879                         ansexp="$value"
2880                         case "$exp_file" in
2881                         '') value="$ans";;
2882                         esac
2883                         ;;
2884                 esac
2885                 case "$fullpath" in
2886                 true)
2887                         case "$ansexp" in
2888                         /*) value="$ansexp" ;;
2889                         *)
2890                                 redo=true
2891                                 case "$already" in
2892                                 true)
2893                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2894                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2895                                         ;;
2896                                 *)
2897                                 echo "Please give a full path name, starting with slash." >&4
2898                                         case "$tilde" in
2899                                         true)
2900                                 echo "Note that using ~name is ok provided it expands well." >&4
2901                                                 already=true
2902                                                 ;;
2903                                         esac
2904                                 esac
2905                                 ;;
2906                         esac
2907                         ;;
2908                 esac
2909                 case "$redo" in
2910                 '')
2911                         case "$type" in
2912                         File)
2913                                 if test -f "$ansexp"; then
2914                                         type=''
2915                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2916                                 then
2917                                         echo "($value is not a plain file, but that's ok.)"
2918                                         type=''
2919                                 fi
2920                                 ;;
2921                         Directory)
2922                                 if test -d "$ansexp"; then
2923                                         type=''
2924                                 fi
2925                                 ;;
2926                         Locate)
2927                                 if test -d "$ansexp"; then
2928                                         echo "(Looking for $loc_file in directory $value.)"
2929                                         value="$value/$loc_file"
2930                                         ansexp="$ansexp/$loc_file"
2931                                 fi
2932                                 if test -f "$ansexp"; then
2933                                         type=''
2934                                 fi
2935                                 case "$nopath_ok" in
2936                                 true)   case "$value" in
2937                                         */*) ;;
2938                                         *)      echo "Assuming $value will be in people's path."
2939                                                 type=''
2940                                                 ;;
2941                                         esac
2942                                         ;;
2943                                 esac
2944                                 ;;
2945                         esac
2946
2947                         case "$skip" in
2948                         true) type='';
2949                         esac
2950
2951                         case "$type" in
2952                         '') ;;
2953                         *)
2954                                 if test "$fastread" = yes; then
2955                                         dflt=y
2956                                 else
2957                                         dflt=n
2958                                 fi
2959                                 rp="$what $value doesn't exist.  Use that name anyway?"
2960                                 . UU/myread
2961                                 dflt=''
2962                                 case "$ans" in
2963                                 y*) type='';;
2964                                 *) echo " ";;
2965                                 esac
2966                                 ;;
2967                         esac
2968                         ;;
2969                 esac
2970                 ;;
2971         esac
2972 done
2973 cd UU
2974 ans="$value"
2975 rp="$orig_rp"
2976 dflt="$orig_dflt"
2977 rm -f getfile.ok
2978 EOSC
2979
2980 : determine root of directory hierarchy where package will be installed.
2981 case "$prefix" in
2982 '')
2983         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2984         ;;
2985 *)
2986         dflt="$prefix"
2987         ;;
2988 esac
2989 $cat <<EOM
2990
2991 By default, $package will be installed in $dflt/bin, manual pages
2992 under $dflt/man, etc..., i.e. with $dflt as prefix for all
2993 installation directories. Typically this is something like /usr/local.
2994 If you wish to have binaries under /usr/bin but other parts of the
2995 installation under /usr/local, that's ok: you will be prompted
2996 separately for each of the installation directories, the prefix being
2997 only used to set the defaults.
2998
2999 EOM
3000 fn=d~
3001 rp='Installation prefix to use?'
3002 . ./getfile
3003 oldprefix=''
3004 case "$prefix" in
3005 '') ;;
3006 *)
3007         case "$ans" in
3008         "$prefix") ;;
3009         *) oldprefix="$prefix";;
3010         esac
3011         ;;
3012 esac
3013 prefix="$ans"
3014 prefixexp="$ansexp"
3015
3016 : is AFS running?
3017 echo " "
3018 case "$afs" in
3019 $define|true)   afs=true ;;
3020 $undef|false)   afs=false ;;
3021 *)      if test -d /afs; then
3022                 afs=true
3023         else
3024                 afs=false
3025         fi
3026         ;;
3027 esac
3028 if $afs; then
3029         echo "AFS may be running... I'll be extra cautious then..." >&4
3030 else
3031         echo "AFS does not seem to be running..." >&4
3032 fi
3033
3034 : determine installation prefix for where package is to be installed.
3035 if $afs; then 
3036 $cat <<EOM
3037
3038 Since you are running AFS, I need to distinguish the directory in which
3039 files will reside from the directory in which they are installed (and from
3040 which they are presumably copied to the former directory by occult means).
3041
3042 EOM
3043         case "$installprefix" in
3044         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3045         *) dflt="$installprefix";;
3046         esac
3047 else
3048 $cat <<EOM
3049
3050 In some special cases, particularly when building $package for distribution,
3051 it is convenient to distinguish between the directory in which files should 
3052 be installed from the directory ($prefix) in which they 
3053 will eventually reside.  For most users, these two directories are the same.
3054
3055 EOM
3056         case "$installprefix" in
3057         '') dflt=$prefix ;;
3058         *) dflt=$installprefix;;
3059         esac
3060 fi
3061 fn=d~
3062 rp='What installation prefix should I use for installing files?'
3063 . ./getfile
3064 installprefix="$ans"
3065 installprefixexp="$ansexp"
3066
3067 : set the prefixit variable, to compute a suitable default value
3068 prefixit='case "$3" in
3069 ""|none)
3070         case "$oldprefix" in
3071         "") eval "$1=\"\$$2\"";;
3072         *)
3073                 case "$3" in
3074                 "") eval "$1=";;
3075                 none)
3076                         eval "tp=\"\$$2\"";
3077                         case "$tp" in
3078                         ""|" ") eval "$1=\"\$$2\"";;
3079                         *) eval "$1=";;
3080                         esac;;
3081                 esac;;
3082         esac;;
3083 *)
3084         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3085         case "$tp" in
3086         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3087         /*-$oldprefix/*|\~*-$oldprefix/*)
3088                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3089         *) eval "$1=\"\$$2\"";;
3090         esac;;
3091 esac'
3092
3093 : set the base revision
3094 baserev=5.0
3095
3096 : get the patchlevel
3097 echo " "
3098 echo "Getting the current patchlevel..." >&4
3099 if $test -r $rsrc/patchlevel.h;then
3100         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3101         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3102 else
3103         patchlevel=0
3104         subversion=0
3105 fi
3106 $echo $n "(You have $package" $c
3107 case "$package" in
3108 "*$baserev")    ;;
3109 *)              $echo $n " $baserev" $c ;;
3110 esac
3111 $echo $n " patchlevel $patchlevel" $c
3112 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3113 echo ".)"
3114
3115 if test 0 -eq "$subversion"; then
3116         version=`LC_ALL=C; export LC_ALL; \
3117                  echo $baserev $patchlevel | \
3118                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3119 else
3120         version=`LC_ALL=C; export LC_ALL; \
3121                  echo $baserev $patchlevel $subversion | \
3122                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3123 fi
3124 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3125 if test "$subversion" -lt 50; then
3126         apiversion=`LC_ALL=C; export LC_ALL; \
3127                  LANGUAGE=C; export LANGUAGE; \
3128                  echo $baserev $patchlevel | \
3129                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3130 else
3131         apiversion="$version"
3132 fi
3133
3134 : determine installation style
3135 : For now, try to deduce it from prefix unless it is already set.
3136 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3137 case "$installstyle" in
3138 '')     case "$prefix" in
3139                 *perl*) dflt='lib';;
3140                 *) dflt='lib/perl5' ;;
3141         esac
3142         ;;
3143 *)      dflt='lib/perl5' ;;
3144 esac
3145 : Probably not worth prompting for this since we prompt for all
3146 : the directories individually, and the prompt would be too long and
3147 : confusing anyway.
3148 installstyle=$dflt
3149
3150 : determine where private library files go
3151 : Usual default is /usr/local/lib/perl5/$version.
3152 : Also allow things like /opt/perl/lib/$version, since 
3153 : /opt/perl/lib/perl5... would be redundant.
3154 : The default "style" setting is made in installstyle.U
3155 case "$installstyle" in
3156 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3157 *)       set dflt privlib lib/$version ;;
3158 esac
3159 eval $prefixit
3160 $cat <<EOM
3161
3162 There are some auxiliary files for $package that need to be put into a
3163 private library directory that is accessible by everyone.
3164
3165 EOM
3166 fn=d~+
3167 rp='Pathname where the private library files will reside?'
3168 . ./getfile
3169 privlib="$ans"
3170 privlibexp="$ansexp"
3171 : Change installation prefix, if necessary.
3172 if $test X"$prefix" != X"$installprefix"; then
3173         installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'`
3174 fi
3175
3176 : set the prefixup variable, to restore leading tilda escape
3177 prefixup='case "$prefixexp" in
3178 "$prefix") ;;
3179 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3180 esac'
3181
3182 : determine where public architecture dependent libraries go
3183 set archlib archlib
3184 eval $prefixit
3185 : privlib default is /usr/local/lib/$package/$version
3186 : archlib default is /usr/local/lib/$package/$version/$archname
3187 : privlib may have an optional trailing /share.
3188 tdflt=`echo $privlib | $sed 's,/share$,,'`
3189 tdflt=$tdflt/$archname
3190 case "$archlib" in
3191 '')     dflt=$tdflt
3192         ;;
3193 *)      dflt="$archlib"
3194     ;;
3195 esac
3196 $cat <<EOM
3197
3198 $spackage contains architecture-dependent library files.  If you are
3199 sharing libraries in a heterogeneous environment, you might store
3200 these files in a separate location.  Otherwise, you can just include
3201 them with the rest of the public library files.
3202
3203 EOM
3204 fn=d+~
3205 rp='Where do you want to put the public architecture-dependent libraries?'
3206 . ./getfile
3207 archlib="$ans"
3208 archlibexp="$ansexp"
3209 if $test X"$archlib" = X"$privlib"; then
3210         d_archlib="$undef"
3211 else
3212         d_archlib="$define"
3213 fi
3214 : Change installation prefix, if necessary.
3215 if $test X"$prefix" != X"$installprefix"; then
3216         installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'`
3217 fi
3218
3219 : make some quick guesses about what we are up against
3220 echo " "
3221 $echo $n "Hmm...  $c"
3222 echo exit 1 >bsd
3223 echo exit 1 >usg
3224 echo exit 1 >v7
3225 echo exit 1 >osf1
3226 echo exit 1 >eunice
3227 echo exit 1 >xenix
3228 echo exit 1 >venix
3229 echo exit 1 >os2
3230 d_bsd="$undef"
3231 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3232 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3233 then
3234         echo "Looks kind of like an OSF/1 system, but we'll see..."
3235         echo exit 0 >osf1
3236 elif test `echo abc | tr a-z A-Z` = Abc ; then
3237         xxx=`./loc addbib blurfl $pth`
3238         if $test -f $xxx; then
3239         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3240                 echo exit 0 >bsd
3241                 echo exit 0 >usg
3242         else
3243                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3244                         echo "Looks kind of like an extended USG system, but we'll see..."
3245                 else
3246                         echo "Looks kind of like a USG system, but we'll see..."
3247                 fi
3248                 echo exit 0 >usg
3249         fi
3250 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3251         echo "Looks kind of like a BSD system, but we'll see..."
3252         d_bsd="$define"
3253         echo exit 0 >bsd
3254 else
3255         echo "Looks kind of like a Version 7 system, but we'll see..."
3256         echo exit 0 >v7
3257 fi
3258 case "$eunicefix" in
3259 *unixtovms*)
3260         $cat <<'EOI'
3261 There is, however, a strange, musty smell in the air that reminds me of
3262 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3263 EOI
3264         echo exit 0 >eunice
3265         d_eunice="$define"
3266 : it so happens the Eunice I know will not run shell scripts in Unix format
3267         ;;
3268 *)
3269         echo " "
3270         echo "Congratulations.  You aren't running Eunice."
3271         d_eunice="$undef"
3272         ;;
3273 esac
3274 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3275 case "$p_" in
3276 :) ;;
3277 *)
3278         $cat <<'EOI'
3279 I have the feeling something is not exactly right, however...don't tell me...
3280 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3281 EOI
3282         echo exit 0 >os2
3283         ;;
3284 esac
3285 if test -f /xenix; then
3286         echo "Actually, this looks more like a XENIX system..."
3287         echo exit 0 >xenix
3288         d_xenix="$define"
3289 else
3290         echo " "
3291         echo "It's not Xenix..."
3292         d_xenix="$undef"
3293 fi
3294 chmod +x xenix
3295 $eunicefix xenix
3296 if test -f /venix; then
3297         echo "Actually, this looks more like a VENIX system..."
3298         echo exit 0 >venix
3299 else
3300         echo " "
3301         if ./xenix; then
3302                 : null
3303         else
3304                 echo "Nor is it Venix..."
3305         fi
3306 fi
3307 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3308 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3309 $rm -f foo
3310
3311 : see if setuid scripts can be secure
3312 $cat <<EOM
3313
3314 Some kernels have a bug that prevents setuid #! scripts from being
3315 secure.  Some sites have disabled setuid #! scripts because of this.
3316
3317 First let's decide if your kernel supports secure setuid #! scripts.
3318 (If setuid #! scripts would be secure but have been disabled anyway,
3319 don't say that they are secure if asked.)
3320
3321 EOM
3322
3323 val="$undef"
3324 if $test -d /dev/fd; then
3325         echo "#!$ls" >reflect
3326         chmod +x,u+s reflect
3327         ./reflect >flect 2>&1
3328         if $contains "/dev/fd" flect >/dev/null; then
3329                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3330                 val="$define"
3331         else
3332                 $cat <<EOM
3333 If you are not sure if they are secure, I can check but I'll need a
3334 username and password different from the one you are using right now.
3335 If you don't have such a username or don't want me to test, simply
3336 enter 'none'.
3337
3338 EOM
3339                 rp='Other username to test security of setuid scripts with?'
3340                 dflt='none'
3341                 . ./myread
3342                 case "$ans" in
3343                 n|none)
3344                         case "$d_suidsafe" in
3345                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3346                                 dflt=n;;
3347                         "$undef")
3348                                 echo "Well, the $hint value is *not* secure." >&4
3349                                 dflt=n;;
3350                         *)      echo "Well, the $hint value *is* secure." >&4
3351                                 dflt=y;;
3352                         esac
3353                         ;;
3354                 *)
3355                         $rm -f reflect flect
3356                         echo "#!$ls" >reflect
3357                         chmod +x,u+s reflect
3358                         echo >flect
3359                         chmod a+w flect
3360                         echo '"su" will (probably) prompt you for '"$ans's password."
3361                         su $ans -c './reflect >flect'
3362                         if $contains "/dev/fd" flect >/dev/null; then
3363                                 echo "Okay, it looks like setuid scripts are secure." >&4
3364                                 dflt=y
3365                         else
3366                                 echo "I don't think setuid scripts are secure." >&4
3367                                 dflt=n
3368                         fi
3369                         ;;
3370                 esac
3371                 rp='Does your kernel have *secure* setuid scripts?'
3372                 . ./myread
3373                 case "$ans" in
3374                 [yY]*)  val="$define";;
3375                 *)      val="$undef";;
3376                 esac
3377         fi
3378 else
3379         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3380         echo "(That's for file descriptors, not floppy disks.)"
3381         val="$undef"
3382 fi
3383 set d_suidsafe
3384 eval $setvar
3385
3386 $rm -f reflect flect
3387
3388 : now see if they want to do setuid emulation
3389 echo " "
3390 val="$undef"
3391 case "$d_suidsafe" in
3392 "$define")
3393         val="$undef"
3394         echo "No need to emulate SUID scripts since they are secure here." >& 4
3395         ;;
3396 *)
3397         $cat <<EOM
3398 Some systems have disabled setuid scripts, especially systems where
3399 setuid scripts cannot be secure.  On systems where setuid scripts have
3400 been disabled, the setuid/setgid bits on scripts are currently
3401 useless.  It is possible for $package to detect those bits and emulate
3402 setuid/setgid in a secure fashion.  This emulation will only work if
3403 setuid scripts have been disabled in your kernel.
3404
3405 EOM
3406         case "$d_dosuid" in
3407         "$define") dflt=y ;;
3408         *) dflt=n ;;
3409         esac
3410         rp="Do you want to do setuid/setgid emulation?"
3411         . ./myread
3412         case "$ans" in
3413         [yY]*)  val="$define";;
3414         *)      val="$undef";;
3415         esac
3416         ;;
3417 esac
3418 set d_dosuid
3419 eval $setvar
3420
3421 : determine where manual pages are on this system
3422 echo " "
3423 case "$sysman" in
3424 '') 
3425         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3426         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3427         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3428         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3429         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3430         sysman=`./loc . /usr/man/man1 $syspath`
3431         ;;
3432 esac
3433 if $test -d "$sysman"; then
3434         echo "System manual is in $sysman." >&4
3435 else
3436         echo "Could not find manual pages in source form." >&4
3437 fi
3438
3439 : see what memory models we can support
3440 case "$models" in
3441 '')
3442         $cat >pdp11.c <<'EOP'
3443 int main() {
3444 #ifdef pdp11
3445         exit(0);
3446 #else
3447         exit(1);
3448 #endif
3449 }
3450 EOP
3451         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3452         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3453                 dflt='unsplit split'
3454         else
3455                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3456                 case "$tans" in
3457                 X) dflt='none';;
3458                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3459                                 dflt='small'
3460                         else
3461                                 dflt=''
3462                         fi
3463                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3464                                 dflt="$dflt medium"
3465                         fi
3466                         if $test -d /lib/large || $test -d /usr/lib/large; then
3467                                 dflt="$dflt large"
3468                         fi
3469                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3470                                 dflt="$dflt huge"
3471                         fi
3472                 esac
3473         fi;;
3474 *) dflt="$models";;
3475 esac
3476 $cat <<EOM
3477  
3478 Some systems have different model sizes.  On most systems they are called
3479 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3480 split.  If your system doesn't support different memory models, say "none".
3481 If you wish to force everything to one memory model, say "none" here and
3482 put the appropriate flags later when it asks you for other cc and ld flags.
3483 Venix systems may wish to put "none" and let the compiler figure things out.
3484 (In the following question multiple model names should be space separated.)
3485
3486 The default for most systems is "none".
3487
3488 EOM
3489 rp="Which memory models are supported?"
3490 . ./myread
3491 models="$ans"
3492
3493 case "$models" in
3494 none)
3495         small=''
3496         medium=''
3497         large=''
3498         huge=''
3499         unsplit=''
3500         split=''
3501         ;;
3502 *split)
3503         case "$split" in
3504         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3505                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3506                         dflt='-i'
3507                 else
3508                         dflt='none'
3509                 fi;;
3510         *) dflt="$split";;
3511         esac
3512         rp="What flag indicates separate I and D space?"
3513         . ./myread
3514         tans="$ans"
3515         case "$tans" in
3516         none) tans='';;
3517         esac
3518         split="$tans"
3519         unsplit='';;
3520 *large*|*small*|*medium*|*huge*)
3521         case "$models" in
3522         *large*)
3523                 case "$large" in
3524                 '') dflt='-Ml';;
3525                 *) dflt="$large";;
3526                 esac
3527         rp="What flag indicates large model?"
3528         . ./myread
3529         tans="$ans"
3530         case "$tans" in
3531         none) tans='';
3532         esac
3533         large="$tans";;
3534         *) large='';;
3535         esac
3536         case "$models" in
3537         *huge*) case "$huge" in
3538                 '') dflt='-Mh';;
3539                 *) dflt="$huge";;
3540                 esac
3541                 rp="What flag indicates huge model?"
3542                 . ./myread
3543                 tans="$ans"
3544                 case "$tans" in
3545                 none) tans='';
3546                 esac
3547                 huge="$tans";;
3548         *) huge="$large";;
3549         esac
3550         case "$models" in
3551         *medium*) case "$medium" in
3552                 '') dflt='-Mm';;
3553                 *) dflt="$medium";;
3554                 esac
3555                 rp="What flag indicates medium model?"
3556                 . ./myread
3557                 tans="$ans"
3558                 case "$tans" in
3559                 none) tans='';
3560                 esac
3561                 medium="$tans";;
3562         *) medium="$large";;
3563         esac
3564         case "$models" in
3565         *small*) case "$small" in
3566                 '') dflt='none';;
3567                 *) dflt="$small";;
3568                 esac
3569                 rp="What flag indicates small model?"
3570                 . ./myread
3571                 tans="$ans"
3572                 case "$tans" in
3573                 none) tans='';
3574                 esac
3575                 small="$tans";;
3576         *) small='';;
3577         esac
3578         ;;
3579 *)
3580         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3581         ;;
3582 esac
3583 $rm -f pdp11.* pdp11
3584
3585 : see if we need a special compiler
3586 echo " "
3587 if ./usg; then
3588         case "$cc" in
3589         '') case "$Mcc" in
3590                 /*) dflt='Mcc';;
3591                 *) case "$large" in
3592                         -M*) dflt='cc';;
3593                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3594                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3595                                                 dflt='cc'
3596                                         else
3597                                                 dflt='cc -M'
3598                                         fi
3599                                 else
3600                                         dflt='cc'
3601                                 fi;;
3602                         esac;;
3603                 esac;;
3604         *)  dflt="$cc";;
3605         esac
3606         case "$dflt" in
3607         *M*)    $cat <<'EOM'
3608 On some older systems the default C compiler will not resolve multiple global
3609 references that happen to have the same name.  On some such systems the "Mcc"
3610 command may be used to force these to be resolved.  On other systems a "cc -M"
3611 command is required.  (Note that the -M flag on other systems indicates a
3612 memory model to use!) If you have the Gnu C compiler, you might wish to use
3613 that instead.
3614
3615 EOM
3616         ;;
3617         esac
3618         rp="Use which C compiler?"
3619         . ./myread
3620         cc="$ans"
3621 else
3622         case "$cc" in
3623         '') dflt=cc;;
3624         *) dflt="$cc";;
3625         esac
3626         rp="Use which C compiler?"
3627         . ./myread
3628         cc="$ans"
3629 fi
3630 : Look for a hint-file generated 'call-back-unit'.  Now that the
3631 : user has specified the compiler, we may need to set or change some
3632 : other defaults.
3633 if $test -f cc.cbu; then
3634     . ./cc.cbu
3635 fi
3636 echo " "
3637 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3638 $cat >gccvers.c <<EOM
3639 #include <stdio.h>
3640 int main() {
3641 #ifdef __GNUC__
3642 #ifdef __VERSION__
3643         printf("%s\n", __VERSION__);
3644 #else
3645         printf("%s\n", "1");
3646 #endif
3647 #endif
3648         exit(0);
3649 }
3650 EOM
3651 if $cc -o gccvers gccvers.c; then
3652         gccversion=`./gccvers`
3653         case "$gccversion" in
3654         '') echo "You are not using GNU cc." ;;
3655         *)  echo "You are using GNU cc $gccversion." ;;
3656         esac
3657 else
3658         echo " "
3659         echo "*** WHOA THERE!!! ***" >&4
3660         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3661         case "$knowitall" in
3662         '')
3663         echo "    You'd better start hunting for one and let me know about it." >&4
3664                 exit 1
3665                 ;;
3666         esac
3667 fi
3668 $rm -f gccvers*
3669 case "$gccversion" in
3670 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3671 esac
3672
3673 : What should the include directory be ?
3674 echo " "
3675 $echo $n "Hmm...  $c"
3676 dflt='/usr/include'
3677 incpath=''
3678 mips_type=''
3679 if $test -f /bin/mips && /bin/mips; then
3680         echo "Looks like a MIPS system..."
3681         $cat >usr.c <<'EOCP'
3682 #ifdef SYSTYPE_BSD43
3683 /bsd43
3684 #endif
3685 EOCP
3686         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3687                 dflt='/bsd43/usr/include'
3688                 incpath='/bsd43'
3689                 mips_type='BSD 4.3'
3690         else
3691                 mips_type='System V'
3692         fi
3693         $rm -f usr.c usr.out
3694         echo "and you're compiling with the $mips_type compiler and libraries."
3695         xxx_prompt=y
3696         echo "exit 0" >mips
3697 else
3698         echo "Doesn't look like a MIPS system."
3699         xxx_prompt=n
3700         echo "exit 1" >mips
3701 fi
3702 chmod +x mips
3703 $eunicefix mips
3704 case "$usrinc" in
3705 '') ;;
3706 *) dflt="$usrinc";;
3707 esac
3708 case "$xxx_prompt" in
3709 y)      fn=d/
3710         echo " "
3711         rp='Where are the include files you want to use?'
3712         . ./getfile
3713         usrinc="$ans"
3714         ;;
3715 *)      usrinc="$dflt"
3716         ;;
3717 esac
3718
3719 : see how we invoke the C preprocessor
3720 echo " "
3721 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3722 cat <<'EOT' >testcpp.c
3723 #define ABC abc
3724 #define XYZ xyz
3725 ABC.XYZ
3726 EOT
3727 cd ..
3728 if test ! -f cppstdin; then
3729         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3730 else
3731         echo "Keeping your $hint cppstdin wrapper."
3732 fi
3733 chmod 755 cppstdin
3734 wrapper=`pwd`/cppstdin
3735 ok='false'
3736 cd UU
3737
3738 if $test "X$cppstdin" != "X" && \
3739         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3740         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3741 then
3742         echo "You used to use $cppstdin $cppminus so we'll use that again."
3743         case "$cpprun" in
3744         '') echo "But let's see if we can live without a wrapper..." ;;
3745         *)
3746                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3747                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3748                 then
3749                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3750                         ok='true'
3751                 else
3752                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3753                 fi
3754                 ;;
3755         esac
3756 else
3757         case "$cppstdin" in
3758         '') ;;
3759         *)
3760                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3761                 ;;
3762         esac
3763 fi
3764
3765 if $ok; then
3766         : nothing
3767 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3768         $cc -E <testcpp.c >testcpp.out 2>&1; \
3769         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3770         echo "Yup, it does."
3771         x_cpp="$cc -E"
3772         x_minus='';
3773 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3774         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3775         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3776         echo "Yup, it does."
3777         x_cpp="$cc -E"
3778         x_minus='-';
3779 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3780         $cc -P <testcpp.c >testcpp.out 2>&1; \
3781         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3782         echo "Yipee, that works!"
3783         x_cpp="$cc -P"
3784         x_minus='';
3785 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3786         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3787         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3788         echo "At long last!"
3789         x_cpp="$cc -P"
3790         x_minus='-';
3791 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3792         $cpp <testcpp.c >testcpp.out 2>&1; \
3793         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3794         echo "It works!"
3795         x_cpp="$cpp"
3796         x_minus='';
3797 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3798         $cpp - <testcpp.c >testcpp.out 2>&1; \
3799         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3800         echo "Hooray, it works!  I was beginning to wonder."
3801         x_cpp="$cpp"
3802         x_minus='-';
3803 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3804         $wrapper <testcpp.c >testcpp.out 2>&1; \
3805         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3806         x_cpp="$wrapper"
3807         x_minus=''
3808         echo "Eureka!"
3809 else
3810         dflt=''
3811         rp="No dice.  I can't find a C preprocessor.  Name one:"
3812         . ./myread
3813         x_cpp="$ans"
3814         x_minus=''
3815         $x_cpp <testcpp.c >testcpp.out 2>&1
3816         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3817                 echo "OK, that will do." >&4
3818         else
3819 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3820                 exit 1
3821         fi
3822 fi
3823
3824 case "$ok" in
3825 false)
3826         cppstdin="$x_cpp"
3827         cppminus="$x_minus"
3828         cpprun="$x_cpp"
3829         cpplast="$x_minus"
3830         set X $x_cpp
3831         shift
3832         case "$1" in
3833         "$cpp")
3834                 echo "Perhaps can we force $cc -E using a wrapper..."
3835                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3836                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3837                 then
3838                         echo "Yup, we can."
3839                         cppstdin="$wrapper"
3840                         cppminus='';
3841                 else
3842                         echo "Nope, we'll have to live without it..."
3843                 fi
3844                 ;;
3845         esac
3846         case "$cpprun" in
3847         "$wrapper")
3848                 cpprun=''
3849                 cpplast=''
3850                 ;;
3851         esac
3852         ;;
3853 esac
3854
3855 case "$cppstdin" in
3856 "$wrapper"|'cppstdin') ;;
3857 *) $rm -f $wrapper;;
3858 esac
3859 $rm -f testcpp.c testcpp.out
3860
3861 : Set private lib path
3862 case "$plibpth" in
3863 '') if ./mips; then
3864                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3865         fi;;
3866 esac
3867 case "$libpth" in
3868 ' ') dlist='';;
3869 '') dlist="$loclibpth $plibpth $glibpth";;
3870 *) dlist="$libpth";;
3871 esac
3872
3873 : Now check and see which directories actually exist, avoiding duplicates
3874 libpth=''
3875 for xxx in $dlist
3876 do
3877     if $test -d $xxx; then
3878                 case " $libpth " in
3879                 *" $xxx "*) ;;
3880                 *) libpth="$libpth $xxx";;
3881                 esac
3882     fi
3883 done
3884 $cat <<'EOM'
3885
3886 Some systems have incompatible or broken versions of libraries.  Among
3887 the directories listed in the question below, please remove any you
3888 know not to be holding relevant libraries, and add any that are needed.
3889 Say "none" for none.
3890
3891 EOM
3892 case "$libpth" in
3893 '') dflt='none';;
3894 *)
3895         set X $libpth
3896         shift
3897         dflt=${1+"$@"}
3898         ;;
3899 esac
3900 rp="Directories to use for library searches?"
3901 . ./myread
3902 case "$ans" in
3903 none) libpth=' ';;
3904 *) libpth="$ans";;
3905 esac
3906
3907 : compute shared library extension
3908 case "$so" in
3909 '')
3910         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3911                 dflt='sl'
3912         else
3913                 dflt='so'
3914         fi
3915         ;;
3916 *) dflt="$so";;
3917 esac
3918 $cat <<EOM
3919
3920 On some systems, shared libraries may be available.  Answer 'none' if
3921 you want to suppress searching of shared libraries for the remaining
3922 of this configuration.
3923
3924 EOM
3925 rp='What is the file extension used for shared libraries?'
3926 . ./myread
3927 so="$ans"
3928
3929 : Define several unixisms.
3930 : Hints files or command line option can be used to override them.
3931 : The convoluted testing is in case hints files set either the old
3932 : or the new name.
3933 case "$_exe" in
3934 '')     case "$exe_ext" in
3935     '') ;;
3936         *)      _exe="$exe_ext" ;;
3937         esac
3938         ;;
3939 esac
3940 case "$_a" in
3941 '')     case "$lib_ext" in
3942     '') _a='.a';;
3943         *)      _a="$lib_ext" ;;
3944         esac
3945         ;;
3946 esac
3947 case "$_o" in
3948 '') case "$obj_ext" in
3949         '')     _o='.o';;
3950         *)      _o="$obj_ext";;
3951         esac
3952         ;;
3953 esac
3954 case "$p_" in
3955 '') case "$path_sep" in
3956         '')     p_=':';;
3957         *)      p_="$path_sep";;
3958         esac
3959         ;;
3960 esac
3961 exe_ext=$_exe
3962 lib_ext=$_a
3963 obj_ext=$_o
3964 path_sep=$p_
3965
3966 : Which makefile gets called first.  This is used by make depend.
3967 case "$firstmakefile" in
3968 '') firstmakefile='makefile';;
3969 esac
3970
3971 cat <<EOM
3972
3973 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3974 Configure must be run with -Dusesocks.
3975
3976 Normally you do not need this and you should answer no.
3977
3978 EOM
3979 case "$usesocks" in
3980 $define|true|[yY]*)     dflt='y';;
3981 *) dflt='n';;
3982 esac
3983 rp='Build Perl for SOCKS?'
3984 . ./myread
3985 case "$ans" in
3986 y|Y)    val="$define" ;;     
3987 *)      val="$undef" ;;
3988 esac
3989 set usesocks
3990 eval $setvar
3991
3992 : Looking for optional libraries
3993 echo " "
3994 echo "Checking for optional libraries..." >&4
3995 case "$libs" in
3996 ' '|'') dflt='';;
3997 *) dflt="$libs";;
3998 esac
3999 case "$libswanted" in
4000 '') libswanted='c_s';;
4001 esac
4002 case "$usesocks" in
4003 $define)
4004         libswanted="$libswanted socks5 socks5_sh"
4005         ;;
4006 esac
4007 for thislib in $libswanted; do
4008         
4009         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4010                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4011                 echo "Found -l$thislib (shared)."
4012                 case " $dflt " in
4013                 *"-l$thislib "*);;
4014                 *) dflt="$dflt -l$thislib";;
4015                 esac
4016         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4017                 echo "Found -l$thislib (shared)."
4018                 case " $dflt " in
4019                 *"-l$thislib "*);;
4020                 *) dflt="$dflt -l$thislib";;
4021                 esac
4022         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4023                 echo "Found -l$thislib."
4024                 case " $dflt " in
4025                 *"-l$thislib "*);;
4026                 *) dflt="$dflt -l$thislib";;
4027                 esac
4028         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4029                 echo "Found -l$thislib."
4030                 case " $dflt " in
4031                 *"-l$thislib "*);;
4032                 *) dflt="$dflt -l$thislib";;
4033                 esac
4034         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4035                 echo "Found -l${thislib}_s."
4036                 case " $dflt " in
4037                 *"-l$thislib "*);;
4038                 *) dflt="$dflt -l${thislib}_s";;
4039                 esac
4040         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4041                 echo "Found -l$thislib."
4042                 case " $dflt " in
4043                 *"-l$thislib "*);;
4044                 *) dflt="$dflt -l$thislib";;
4045                 esac
4046         else
4047                 echo "No -l$thislib."
4048         fi
4049 done
4050 set X $dflt
4051 shift
4052 dflt="$*"
4053 case "$libs" in
4054 '') dflt="$dflt";;
4055 *) dflt="$libs";;
4056 esac
4057 case "$dflt" in
4058 ' '|'') dflt='none';;
4059 esac
4060
4061 $cat <<EOM
4062
4063 In order to compile $package on your machine, a number of libraries
4064 are usually needed.  Include any other special libraries here as well.
4065 Say "none" for none.  The default list is almost always right.
4066 EOM
4067
4068 echo " "
4069 rp="What libraries to use?"
4070 . ./myread
4071 case "$ans" in
4072 none) libs=' ';;
4073 *) libs="$ans";;
4074 esac
4075
4076 : determine optimize, if desired, or use for debug flag also
4077 case "$optimize" in
4078 ' '|$undef) dflt='none';;
4079 '') dflt='-O';;
4080 *) dflt="$optimize";;
4081 esac
4082 $cat <<EOH
4083
4084 Some C compilers have problems with their optimizers.  By default, $package
4085 compiles with the -O flag to use the optimizer.  Alternately, you might want
4086 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4087 systems).  Either flag can be specified here.  To use neither flag, specify
4088 the word "none".
4089
4090 EOH
4091 rp="What optimizer/debugger flag should be used?"
4092 . ./myread
4093 optimize="$ans"
4094 case "$optimize" in
4095 'none') optimize=" ";;
4096 esac
4097
4098 dflt=''
4099 : We will not override a previous value, but we might want to
4100 : augment a hint file
4101 case "$hint" in
4102 none|recommended)
4103         case "$gccversion" in
4104         1*) dflt='-fpcc-struct-return' ;;
4105         esac
4106         case "$optimize" in
4107         *-g*) dflt="$dflt -DDEBUGGING";;
4108         esac
4109         case "$gccversion" in
4110         2*) if test -d /etc/conf/kconfig.d &&
4111                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4112                 then
4113                         dflt="$dflt -posix"
4114                 fi
4115                 ;;
4116         esac
4117         ;;
4118 esac
4119
4120 case "$mips_type" in
4121 *BSD*|'') inclwanted="$locincpth $usrinc";;
4122 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4123 esac
4124 for thisincl in $inclwanted; do
4125         if $test -d $thisincl; then
4126                 if $test x$thisincl != x$usrinc; then
4127                         case "$dflt" in
4128                         *$thisincl*);;
4129                         *) dflt="$dflt -I$thisincl";;
4130                         esac
4131                 fi
4132         fi
4133 done
4134
4135 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4136         xxx=true;
4137 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4138         xxx=true;
4139 else
4140         xxx=false;
4141 fi;
4142 if $xxx; then
4143         case "$dflt" in
4144         *$2*);;
4145         *) dflt="$dflt -D$2";;
4146         esac;
4147 fi'
4148
4149 set signal.h LANGUAGE_C; eval $inctest
4150
4151 case "$usesocks" in
4152 $define)
4153         ccflags="$ccflags -DSOCKS"
4154         ;;
4155 esac
4156
4157 case "$hint" in
4158 none|recommended) dflt="$ccflags $dflt" ;;
4159 *) dflt="$ccflags";;
4160 esac
4161
4162 case "$dflt" in
4163 ''|' ') dflt=none;;
4164 esac
4165 $cat <<EOH
4166
4167 Your C compiler may want other flags.  For this question you should include
4168 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4169 but you should NOT include libraries or ld flags like -lwhatever.  If you
4170 want $package to honor its debug switch, you should include -DDEBUGGING here.
4171 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4172
4173 To use no flags, specify the word "none".
4174
4175 EOH
4176 set X $dflt
4177 shift
4178 dflt=${1+"$@"}
4179 rp="Any additional cc flags?"
4180 . ./myread
4181 case "$ans" in
4182 none) ccflags='';;
4183 *) ccflags="$ans";;
4184 esac
4185
4186 : the following weeds options from ccflags that are of no interest to cpp
4187 cppflags="$ccflags"
4188 case "$gccversion" in
4189 1*) cppflags="$cppflags -D__GNUC__"
4190 esac
4191 case "$mips_type" in
4192 '');;
4193 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4194 esac
4195 case "$cppflags" in
4196 '');;
4197 *)
4198         echo " "
4199         echo "Let me guess what the preprocessor flags are..." >&4
4200         set X $cppflags
4201         shift
4202         cppflags=''
4203         $cat >cpp.c <<'EOM'
4204 #define BLURFL foo
4205
4206 BLURFL xx LFRULB
4207 EOM
4208         previous=''
4209         for flag in $*
4210         do
4211                 case "$flag" in
4212                 -*) ftry="$flag";;
4213                 *) ftry="$previous $flag";;
4214                 esac
4215                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4216                         >cpp1.out 2>/dev/null && \
4217                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4218                         >cpp2.out 2>/dev/null && \
4219                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4220                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4221                 then
4222                         cppflags="$cppflags $ftry"
4223                         previous=''
4224                 else
4225                         previous="$flag"
4226                 fi
4227         done
4228         set X $cppflags
4229         shift
4230         cppflags=${1+"$@"}
4231         case "$cppflags" in
4232         *-*)  echo "They appear to be: $cppflags";;
4233         esac
4234         $rm -f cpp.c cpp?.out
4235         ;;
4236 esac
4237
4238 : flags used in final linking phase
4239 case "$ldflags" in
4240 '') if ./venix; then
4241                 dflt='-i -z'
4242         else
4243                 dflt=''
4244         fi
4245         case "$ccflags" in
4246         *-posix*) dflt="$dflt -posix" ;;
4247         esac
4248         ;;
4249 *) dflt="$ldflags";;
4250 esac
4251
4252 : Try to guess additional flags to pick up local libraries.
4253 for thislibdir in $libpth; do
4254         case " $loclibpth " in
4255         *" $thislibdir "*)
4256                 case "$dflt " in 
4257                 *"-L$thislibdir "*) ;;
4258                 *)  dflt="$dflt -L$thislibdir" ;;
4259                 esac
4260                 ;;
4261         esac
4262 done
4263
4264 case "$dflt" in
4265 '') dflt='none' ;;
4266 esac
4267
4268 $cat <<EOH
4269
4270 Your C linker may need flags.  For this question you should
4271 include -L/whatever and any other flags used by the C linker, but you
4272 should NOT include libraries like -lwhatever.
4273
4274 Make sure you include the appropriate -L/path flags if your C linker
4275 does not normally search all of the directories you specified above,
4276 namely
4277         $libpth
4278 To use no flags, specify the word "none".
4279
4280 EOH
4281
4282 rp="Any additional ld flags (NOT including libraries)?"
4283 . ./myread
4284 case "$ans" in
4285 none) ldflags='';;
4286 *) ldflags="$ans";;
4287 esac
4288 rmlist="$rmlist pdp11"
4289
4290 : coherency check
4291 echo " "
4292 echo "Checking your choice of C compiler and flags for coherency..." >&4
4293 $cat > try.c <<'EOF'
4294 #include <stdio.h>
4295 int main() { printf("Ok\n"); exit(0); }
4296 EOF
4297 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4298 shift
4299 $cat >try.msg <<'EOM'
4300 I've tried to compile and run the following simple program:
4301
4302 EOM
4303 $cat try.c >> try.msg
4304
4305 $cat >> try.msg <<EOM
4306
4307 I used the command:
4308
4309         $*
4310         ./try
4311
4312 and I got the following output:
4313
4314 EOM
4315 dflt=y
4316 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4317         if sh -c './try' >>try.msg 2>&1; then
4318                 xxx=`./try`
4319                 case "$xxx" in
4320                 "Ok") dflt=n ;;
4321                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4322                         case " $libs " in
4323                         *" -lsfio "*)
4324                                 cat >> try.msg <<'EOQS'
4325 If $libs contains -lsfio, and sfio is mis-configured, then it
4326 sometimes (apparently) runs and exits with a 0 status, but with no
4327 output!  It may have to do with sfio's use of _exit vs. exit.
4328
4329 EOQS
4330                                 rp="You have a big problem.  Shall I abort Configure"
4331                                 dflt=y
4332                                 ;;
4333                         esac
4334                         ;;
4335                 esac
4336         else
4337                 echo "The program compiled OK, but exited with status $?." >>try.msg
4338                 rp="You have a problem.  Shall I abort Configure"
4339                 dflt=y
4340         fi
4341 else
4342         echo "I can't compile the test program." >>try.msg
4343         rp="You have a BIG problem.  Shall I abort Configure"
4344         dflt=y
4345 fi
4346 case "$dflt" in
4347 y)
4348         $cat try.msg >&4
4349         case "$knowitall" in
4350         '')
4351                 echo "(The supplied flags or libraries might be incorrect.)"
4352                 ;;
4353         *) dflt=n;;
4354         esac
4355         echo " "
4356         . ./myread
4357         case "$ans" in
4358         n*|N*) ;;
4359         *)      echo "Ok.  Stopping Configure." >&4
4360                 exit 1
4361                 ;;
4362         esac
4363         ;;
4364 n) echo "OK, that should do.";;
4365 esac
4366 $rm -f try try.* core
4367
4368 : determine filename position in cpp output
4369 echo " "
4370 echo "Computing filename position in cpp output for #include directives..." >&4
4371 echo '#include <stdio.h>' > foo.c
4372 $cat >fieldn <<EOF
4373 $startsh
4374 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4375 $grep '^[       ]*#.*stdio\.h' | \
4376 while read cline; do
4377         pos=1
4378         set \$cline
4379         while $test \$# -gt 0; do
4380                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4381                         echo "\$pos"
4382                         exit 0
4383                 fi
4384                 shift
4385                 pos=\`expr \$pos + 1\`
4386         done
4387 done
4388 EOF
4389 chmod +x fieldn
4390 fieldn=`./fieldn`
4391 $rm -f foo.c fieldn
4392 case $fieldn in
4393 '') pos='???';;
4394 1) pos=first;;
4395 2) pos=second;;
4396 3) pos=third;;
4397 *) pos="${fieldn}th";;
4398 esac
4399 echo "Your cpp writes the filename in the $pos field of the line."
4400
4401 : locate header file
4402 $cat >findhdr <<EOF
4403 $startsh
4404 wanted=\$1
4405 name=''
4406 for usrincdir in $usrinc
4407 do
4408         if test -f \$usrincdir/\$wanted; then
4409                 echo "\$usrincdir/\$wanted"
4410                 exit 0
4411         fi
4412 done
4413 awkprg='{ print \$$fieldn }'
4414 echo "#include <\$wanted>" > foo\$\$.c
4415 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4416 $grep "^[       ]*#.*\$wanted" | \
4417 while read cline; do
4418         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4419         case "\$name" in
4420         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4421         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4422         *) exit 2;;
4423         esac;
4424 done;
4425 #
4426 # status = 0: grep returned 0 lines, case statement not executed
4427 # status = 1: headerfile found
4428 # status = 2: while loop executed, no headerfile found
4429 #
4430 status=\$?
4431 $rm -f foo\$\$.c;
4432 if test \$status -eq 1; then
4433         exit 0;
4434 fi
4435 exit 1
4436 EOF
4437 chmod +x findhdr
4438
4439 : define an alternate in-header-list? function
4440 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4441 cont=true; xxf="echo \"<\$1> found.\" >&4";
4442 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4443 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4444 esac;
4445 case $# in 4) instead=instead;; *) instead="at last";; esac;
4446 while $test "$cont"; do
4447         xxx=`./findhdr $1`
4448         var=$2; eval "was=\$$2";
4449         if $test "$xxx" && $test -r "$xxx";
4450         then eval $xxf;
4451         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4452                 cont="";
4453         else eval $xxnf;
4454         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4455         set $yyy; shift; shift; yyy=$@;
4456         case $# in 0) cont="";;
4457         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4458                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4459         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4460                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4461         esac;
4462 done;
4463 while $test "$yyy";
4464 do set $yyy; var=$2; eval "was=\$$2";
4465         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4466         set $yyy; shift; shift; yyy=$@;
4467 done'
4468
4469 : see if this is a malloc.h system
4470 set malloc.h i_malloc
4471 eval $inhdr
4472
4473 : see if stdlib is available
4474 set stdlib.h i_stdlib
4475 eval $inhdr
4476
4477 : determine which malloc to compile in
4478 echo " "
4479 case "$usemymalloc" in
4480 ''|[yY]*|true|$define)  dflt='y' ;;
4481 *)      dflt='n' ;;
4482 esac
4483 rp="Do you wish to attempt to use the malloc that comes with $package?"
4484 . ./myread
4485 usemymalloc="$ans"
4486 case "$ans" in
4487 y*|true)
4488         usemymalloc='y'
4489         mallocsrc='malloc.c'
4490         mallocobj="malloc$_o"
4491         d_mymalloc="$define"
4492         case "$libs" in
4493         *-lmalloc*)
4494                 : Remove malloc from list of libraries to use
4495                 echo "Removing unneeded -lmalloc from library list" >&4
4496                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4497                 shift
4498                 libs="$*"
4499                 echo "libs = $libs" >&4
4500                 ;;
4501         esac
4502         ;;
4503 *)
4504         usemymalloc='n'
4505         mallocsrc=''
4506         mallocobj=''
4507         d_mymalloc="$undef"
4508         ;;
4509 esac
4510
4511 : compute the return types of malloc and free
4512 echo " "
4513 $cat >malloc.c <<END
4514 #$i_malloc I_MALLOC
4515 #$i_stdlib I_STDLIB
4516 #include <stdio.h>
4517 #include <sys/types.h>
4518 #ifdef I_MALLOC
4519 #include <malloc.h>
4520 #endif
4521 #ifdef I_STDLIB
4522 #include <stdlib.h>
4523 #endif
4524 #ifdef TRY_MALLOC
4525 void *malloc();
4526 #endif
4527 #ifdef TRY_FREE
4528 void free();
4529 #endif
4530 END
4531 case "$malloctype" in
4532 '')
4533         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4534                 malloctype='void *'
4535         else
4536                 malloctype='char *'
4537         fi
4538         ;;
4539 esac
4540 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4541
4542 case "$freetype" in
4543 '')
4544         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4545                 freetype='void'
4546         else
4547                 freetype='int'
4548         fi
4549         ;;
4550 esac
4551 echo "Your system uses $freetype free(), it would seem." >&4
4552 $rm -f malloc.[co]
4553 : Cruising for prototypes
4554 echo " "
4555 echo "Checking out function prototypes..." >&4
4556 $cat >prototype.c <<'EOCP'
4557 int main(int argc, char *argv[]) {
4558         exit(0);}
4559 EOCP
4560 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4561         echo "Your C compiler appears to support function prototypes."
4562         val="$define"
4563 else
4564         echo "Your C compiler doesn't seem to understand function prototypes."
4565         val="$undef"
4566 fi
4567 set prototype
4568 eval $setvar
4569 $rm -f prototype*
4570
4571 case "$prototype" in
4572 "$define") ;;
4573 *)      ansi2knr='ansi2knr'
4574         echo " "
4575         cat <<EOM >&4
4576
4577 $me:  FATAL ERROR:
4578 This version of $package can only be compiled by a compiler that 
4579 understands function prototypes.  Unfortunately, your C compiler 
4580         $cc $ccflags
4581 doesn't seem to understand them.  Sorry about that.
4582
4583 If GNU cc is available for your system, perhaps you could try that instead.  
4584
4585 Eventually, we hope to support building Perl with pre-ANSI compilers.
4586 If you would like to help in that effort, please contact <perlbug@perl.org>.
4587
4588 Aborting Configure now.
4589 EOM
4590         exit 2
4591         ;;
4592 esac
4593
4594 : determine where public executables go
4595 echo " "
4596 set dflt bin bin
4597 eval $prefixit
4598 fn=d~
4599 rp='Pathname where the public executables will reside?'
4600 . ./getfile
4601 if $test "X$ansexp" != "X$binexp"; then
4602         installbin=''
4603 fi
4604 bin="$ans"
4605 binexp="$ansexp"
4606 : Change installation prefix, if necessary.
4607 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4608 if $test X"$prefix" != X"$installprefix"; then
4609         installbin=`echo binexp | sed 's#^$prefix#$installprefix#'`
4610 fi
4611
4612 : determine whether to install perl also as /usr/bin/perl
4613
4614 echo " "
4615 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4616         $cat <<EOM
4617 Many scripts expect to perl to be installed as /usr/bin/perl.
4618 I can install the perl you are about to compile also as /usr/bin/perl
4619 (in addition to $installbin/perl).
4620 EOM
4621         case "$installusrbinperl" in
4622         "$undef"|[nN]*) dflt='n';;
4623         *)              dflt='y';;
4624         esac
4625         rp="Do you want to install perl as /usr/bin/perl?"
4626         . ./myread
4627         case "$ans" in
4628         [yY]*)  val="$define";;
4629         *)      val="$undef" ;;
4630         esac
4631 else
4632         val="$undef"
4633 fi
4634 set installusrbinperl
4635 eval $setvar
4636
4637 : define a shorthand compile call
4638 compile='
4639 mc_file=$1;
4640 shift;
4641 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4642 : define a shorthand compile call for compilations that should be ok.
4643 compile_ok='
4644 mc_file=$1;
4645 shift;
4646 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4647
4648 echo " "
4649 echo "Checking for GNU C Library..." >&4
4650 cat >gnulibc.c <<EOM
4651 #include <stdio.h>
4652 int main()
4653 {
4654 #ifdef __GLIBC__
4655     exit(0);
4656 #else
4657     exit(1);
4658 #endif
4659 }
4660 EOM
4661 set gnulibc
4662 if eval $compile_ok && ./gnulibc; then
4663         val="$define"
4664         echo "You are using the GNU C Library"
4665 else
4666         val="$undef"
4667         echo "You are not using the GNU C Library"
4668 fi
4669 $rm -f gnulibc*
4670 set d_gnulibc
4671 eval $setvar
4672
4673 : see if nm is to be used to determine whether a symbol is defined or not
4674 case "$usenm" in
4675 '')
4676         dflt=''
4677         case "$d_gnulibc" in
4678         "$define")
4679                 echo " "
4680                 echo "nm probably won't work on the GNU C Library." >&4
4681                 dflt=n
4682                 ;;
4683         esac
4684         case "$dflt" in
4685         '') 
4686                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4687                         echo " "
4688                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4689                         echo "'nm' won't be sufficient on this sytem." >&4
4690                         dflt=n
4691                 fi
4692                 ;;
4693         esac
4694         case "$dflt" in
4695         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4696                 if $test $dflt -gt 20; then
4697                         dflt=y
4698                 else
4699                         dflt=n
4700                 fi
4701                 ;;
4702         esac
4703         ;;
4704 *)
4705         case "$usenm" in
4706         true|$define) dflt=y;;
4707         *) dflt=n;;
4708         esac
4709         ;;
4710 esac
4711 $cat <<EOM
4712
4713 I can use $nm to extract the symbols from your C libraries. This
4714 is a time consuming task which may generate huge output on the disk (up
4715 to 3 megabytes) but that should make the symbols extraction faster. The
4716 alternative is to skip the 'nm' extraction part and to compile a small
4717 test program instead to determine whether each symbol is present. If
4718 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4719 this may be the best solution.
4720
4721 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4722
4723 EOM
4724 rp="Shall I use $nm to extract C symbols from the libraries?"
4725 . ./myread
4726 case "$ans" in
4727 [Nn]*) usenm=false;;
4728 *) usenm=true;;
4729 esac
4730
4731 runnm=$usenm
4732 case "$reuseval" in
4733 true) runnm=false;;
4734 esac
4735
4736 : nm options which may be necessary
4737 case "$nm_opt" in
4738 '') if $test -f /mach_boot; then
4739                 nm_opt=''       # Mach
4740         elif $test -d /usr/ccs/lib; then
4741                 nm_opt='-p'     # Solaris (and SunOS?)
4742         elif $test -f /dgux; then
4743                 nm_opt='-p'     # DG-UX
4744         elif $test -f /lib64/rld; then
4745                 nm_opt='-p'     # 64-bit Irix
4746         else
4747                 nm_opt=''
4748         fi;;
4749 esac
4750
4751 : nm options which may be necessary for shared libraries but illegal
4752 : for archive libraries.  Thank you, Linux.
4753 case "$nm_so_opt" in
4754 '')     case "$myuname" in
4755         *linux*)
4756                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4757                         nm_so_opt='--dynamic'
4758                 fi
4759                 ;;
4760         esac
4761         ;;
4762 esac
4763
4764 case "$runnm" in
4765 true)
4766 : get list of predefined functions in a handy place
4767 echo " "
4768 case "$libc" in
4769 '') libc=unknown
4770         case "$libs" in
4771         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4772         esac
4773         ;;
4774 esac
4775 libnames='';
4776 case "$libs" in
4777 '') ;;
4778 *)  for thislib in $libs; do
4779         case "$thislib" in
4780         -lc|-lc_s)
4781                 : Handle C library specially below.
4782                 ;;
4783         -l*)
4784                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4785                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4786                         :
4787                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4788                         :
4789                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4790                         :
4791                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4792                         :
4793                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4794                         :
4795                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4796                         :
4797                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4798                         :
4799                 else
4800                         try=''
4801                 fi
4802                 libnames="$libnames $try"
4803                 ;;
4804         *) libnames="$libnames $thislib" ;;
4805         esac
4806         done
4807         ;;
4808 esac
4809 xxx=normal
4810 case "$libc" in
4811 unknown)
4812         set /lib/libc.$so
4813         for xxx in $libpth; do
4814                 $test -r $1 || set $xxx/libc.$so
4815                 : The messy sed command sorts on library version numbers.
4816                 $test -r $1 || \
4817                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4818                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4819                                 h
4820                                 s/[0-9][0-9]*/0000&/g
4821                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4822                                 G
4823                                 s/\n/ /' | \
4824                          sort | $sed -e 's/^.* //'`
4825                 eval set \$$#
4826         done
4827         $test -r $1 || set /usr/ccs/lib/libc.$so
4828         $test -r $1 || set /lib/libsys_s$_a
4829         ;;
4830 *)
4831         set blurfl
4832         ;;
4833 esac
4834 if $test -r "$1"; then
4835         echo "Your (shared) C library seems to be in $1."
4836         libc="$1"
4837 elif $test -r /lib/libc && $test -r /lib/clib; then
4838         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4839         xxx=apollo
4840         libc='/lib/clib /lib/libc'
4841         if $test -r /lib/syslib; then
4842                 echo "(Your math library is in /lib/syslib.)"
4843                 libc="$libc /lib/syslib"
4844         fi
4845 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4846         echo "Your C library seems to be in $libc, as you said before."
4847 elif $test -r $incpath/usr/lib/libc$_a; then
4848         libc=$incpath/usr/lib/libc$_a;
4849         echo "Your C library seems to be in $libc.  That's fine."
4850 elif $test -r /lib/libc$_a; then
4851         libc=/lib/libc$_a;
4852         echo "Your C library seems to be in $libc.  You're normal."
4853 else
4854         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4855                 :
4856         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4857                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4858         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4859                 :
4860         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4861                 :
4862         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4863                 :
4864         else
4865                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4866         fi
4867         if $test -r "$tans"; then
4868                 echo "Your C library seems to be in $tans, of all places."
4869                 libc=$tans
4870         else
4871                 libc='blurfl'
4872         fi
4873 fi
4874 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4875         dflt="$libc"
4876         cat <<EOM
4877
4878 If the guess above is wrong (which it might be if you're using a strange
4879 compiler, or your machine supports multiple models), you can override it here.
4880
4881 EOM
4882 else
4883         dflt=''
4884         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4885         cat >&4 <<EOM
4886 I can't seem to find your C library.  I've looked in the following places:
4887
4888 EOM
4889         $sed 's/^/      /' libpath
4890         cat <<EOM
4891
4892 None of these seems to contain your C library. I need to get its name...
4893
4894 EOM
4895 fi
4896 fn=f
4897 rp='Where is your C library?'
4898 . ./getfile
4899 libc="$ans"
4900
4901 echo " "
4902 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4903 set X `cat libnames`
4904 shift
4905 xxx=files
4906 case $# in 1) xxx=file; esac
4907 echo "Extracting names from the following $xxx for later perusal:" >&4
4908 echo " "
4909 $sed 's/^/      /' libnames >&4
4910 echo " "
4911 $echo $n "This may take a while...$c" >&4
4912
4913 for file in $*; do
4914         case $file in
4915         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4916         *) $nm $nm_opt $file 2>/dev/null;;
4917         esac
4918 done >libc.tmp
4919
4920 $echo $n ".$c"
4921 $grep fprintf libc.tmp > libc.ptf
4922 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4923 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4924 xxx='[ADTSIW]'
4925 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4926         eval $xscan;\
4927         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4928                 eval $xrun
4929 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4930         eval $xscan;\
4931         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4932                 eval $xrun
4933 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4934         eval $xscan;\
4935         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4936                 eval $xrun
4937 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4938         eval $xscan;\
4939         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4940                 eval $xrun
4941 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4942         eval $xscan;\
4943         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4944                 eval $xrun
4945 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4946         eval $xscan;\
4947         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4948                 eval $xrun
4949 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4950                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4951         eval $xscan;\
4952         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4953                 eval $xrun
4954 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4955         eval $xscan;\
4956         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4957                 eval $xrun
4958 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4959         eval $xscan;\
4960         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4961                 eval $xrun
4962 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4963         eval $xscan;\
4964         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4965                 eval $xrun
4966 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4967         eval $xscan;\
4968         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4969                 eval $xrun
4970 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4971         eval $xscan;\
4972         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4973                 eval $xrun
4974 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4975         eval $xscan;\
4976         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4977                 eval $xrun
4978 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4979         eval $xscan;\
4980         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4981                 eval $xrun
4982 else
4983         $nm -p $* 2>/dev/null >libc.tmp
4984         $grep fprintf libc.tmp > libc.ptf
4985         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4986                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4987         then
4988                 nm_opt='-p'
4989                 eval $xrun
4990         else
4991                 echo " "
4992                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4993                 com=''
4994                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4995                         for thisname in $libnames $libc; do
4996                                 $ar t $thisname >>libc.tmp
4997                         done
4998                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4999                         echo "Ok." >&4
5000                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5001                         # Repeat libc to extract forwarders to DLL entries too
5002                         for thisname in $libnames $libc; do
5003                                 $ar tv $thisname >>libc.tmp
5004                                 # Revision 50 of EMX has bug in $ar.
5005                                 # it will not extract forwarders to DLL entries
5006                                 # Use emximp which will extract exactly them.
5007                                 emximp -o tmp.imp $thisname \
5008                                     2>/dev/null && \
5009                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5010                                     < tmp.imp >>libc.tmp
5011                                 $rm tmp.imp
5012                         done
5013                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5014                         echo "Ok." >&4
5015                 else
5016                         echo "$ar didn't seem to work right." >&4
5017                         echo "Maybe this is a Cray...trying bld instead..." >&4
5018                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5019                         then
5020                                 for thisname in $libnames; do
5021                                         bld t $libnames | \
5022                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5023                                         $ar t $thisname >>libc.tmp
5024                                 done
5025                                 echo "Ok." >&4
5026                         else
5027                                 echo "That didn't work either.  Giving up." >&4
5028                                 exit 1
5029                         fi
5030                 fi
5031         fi
5032 fi
5033 nm_extract="$com"
5034 if $test -f /lib/syscalls.exp; then
5035         echo " "
5036         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5037         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5038 fi
5039 ;;
5040 esac
5041 $rm -f libnames libpath
5042
5043 : see if dld is available
5044 set dld.h i_dld
5045 eval $inhdr
5046
5047 : is a C symbol defined?
5048 csym='tlook=$1;
5049 case "$3" in
5050 -v) tf=libc.tmp; tc=""; tdc="";;
5051 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5052 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5053 esac;
5054 tx=yes;
5055 case "$reuseval-$4" in
5056 true-) ;;
5057 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5058 esac;
5059 case "$tx" in
5060 yes)
5061         case "$runnm" in
5062         true)
5063                 if $contains $tlook $tf >/dev/null 2>&1;
5064                 then tval=true;
5065                 else tval=false;
5066                 fi;;
5067         *)
5068                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5069                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5070                 then tval=true;
5071                 else tval=false;
5072                 fi;
5073                 $rm -f t t.c;;
5074         esac;;
5075 *)
5076         case "$tval" in
5077         $define) tval=true;;
5078         *) tval=false;;
5079         esac;;
5080 esac;
5081 eval "$2=$tval"'
5082
5083 : define an is-in-libc? function
5084 inlibc='echo " "; td=$define; tu=$undef;
5085 sym=$1; var=$2; eval "was=\$$2";
5086 tx=yes;
5087 case "$reuseval$was" in
5088 true) ;;
5089 true*) tx=no;;
5090 esac;
5091 case "$tx" in
5092 yes)
5093         set $sym tres -f;
5094         eval $csym;
5095         case "$tres" in
5096         true)
5097                 echo "$sym() found." >&4;
5098                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5099         *)
5100                 echo "$sym() NOT found." >&4;
5101                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5102         esac;;
5103 *)
5104         case "$was" in
5105         $define) echo "$sym() found." >&4;;
5106         *) echo "$sym() NOT found." >&4;;
5107         esac;;
5108 esac'
5109
5110 : see if dlopen exists
5111 xxx_runnm="$runnm"
5112 runnm=false
5113 set dlopen d_dlopen
5114 eval $inlibc
5115 runnm="$xxx_runnm"
5116
5117 : determine which dynamic loading, if any, to compile in
5118 echo " "
5119 dldir="ext/DynaLoader"
5120 case "$usedl" in
5121 $define|y|true)
5122         dflt='y'
5123         usedl="$define"
5124         ;;
5125 $undef|n|false)
5126         dflt='n'
5127         usedl="$undef"
5128         ;;
5129 *) 
5130         dflt='n'
5131         case "$d_dlopen" in
5132             $define) dflt='y' ;;
5133         esac
5134         case "$i_dld" in
5135             $define) dflt='y' ;;
5136         esac
5137         : Does a dl_xxx.xs file exist for this operating system
5138         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5139         ;;
5140 esac
5141 rp="Do you wish to use dynamic loading?"
5142 . ./myread
5143 usedl="$ans"
5144 case "$ans" in
5145 y*) usedl="$define"
5146         case "$dlsrc" in
5147         '')
5148                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5149                         dflt="$dldir/dl_${osname}.xs"
5150                 elif $test "$d_dlopen" = "$define" ; then
5151                         dflt="$dldir/dl_dlopen.xs"
5152                 elif $test "$i_dld" = "$define" ; then
5153                         dflt="$dldir/dl_dld.xs"
5154                 else
5155                         dflt=''
5156                 fi
5157                 ;;
5158         *)      dflt="$dldir/$dlsrc"
5159                 ;;
5160         esac
5161     echo "The following dynamic loading files are available:"
5162         : Can not go over to $dldir because getfile has path hard-coded in.
5163         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5164         rp="Source file to use for dynamic loading"
5165         fn="fne"
5166         # XXX This getfile call will fail the existence check if you try 
5167         # building away from $src (this is not supported yet).
5168         . ./getfile
5169         usedl="$define"
5170         : emulate basename
5171         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5172
5173         $cat << EOM
5174
5175 Some systems may require passing special flags to $cc -c to
5176 compile modules that will be used to create a shared library.
5177 To use no flags, say "none".
5178
5179 EOM
5180     case "$cccdlflags" in
5181     '') case "$gccversion" in
5182                 '') case "$osname" in
5183                         hpux)   dflt='+z' ;;
5184                         next)   dflt='none' ;;
5185                         irix*)  dflt='-KPIC' ;;
5186                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5187                         sunos)  dflt='-pic' ;;
5188                         *)      dflt='none' ;;
5189                     esac
5190                         ;;
5191                 *)  case "$osname" in
5192                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5193                         *)      dflt='-fpic' ;;
5194                     esac ;;
5195             esac ;;
5196         ' ') dflt='none' ;;
5197     *)  dflt="$cccdlflags" ;;
5198     esac
5199     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5200     . ./myread
5201     case "$ans" in
5202     none) cccdlflags=' ' ;;
5203     *) cccdlflags="$ans" ;;
5204     esac
5205
5206     cat << EOM
5207
5208 Some systems use ld to create libraries that can be dynamically loaded,
5209 while other systems (such as those using ELF) use $cc.
5210
5211 EOM
5212         case "$ld" in
5213         '')     $cat >try.c <<'EOM'
5214 /* Test for whether ELF binaries are produced */
5215 #include <fcntl.h>
5216 #include <stdlib.h>
5217 int main() {
5218         char b[4];
5219         int i = open("a.out",O_RDONLY);
5220         if(i == -1) 
5221                 exit(1); /* fail */
5222         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5223                 exit(0); /* succeed (yes, it's ELF) */
5224         else
5225                 exit(1); /* fail */
5226 }
5227 EOM
5228                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5229                         cat <<EOM
5230 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5231 EOM
5232                         dflt="$cc"
5233                 else
5234                         echo "I'll use ld to build dynamic libraries."
5235                         dflt='ld'
5236                 fi
5237                 rm -f try.c a.out
5238                 ;;
5239         *)      dflt="$ld"
5240                 ;;
5241         esac
5242
5243     rp="What command should be used to create dynamic libraries?"
5244     . ./myread
5245         ld="$ans"
5246
5247     cat << EOM
5248
5249 Some systems may require passing special flags to $ld to create a
5250 library that can be dynamically loaded.  If your ld flags include
5251 -L/other/path options to locate libraries outside your loader's normal
5252 search path, you may need to specify those -L options here as well.  To
5253 use no flags, say "none".
5254
5255 EOM
5256     case "$lddlflags" in
5257     '') case "$osname" in
5258                         beos) dflt='-nostart' ;;
5259                         hpux)  dflt='-b' ;;
5260                         linux|irix*)    dflt='-shared' ;;
5261                         next)  dflt='none' ;;
5262                         solaris) dflt='-G' ;;
5263                         sunos) dflt='-assert nodefinitions' ;;
5264                         svr4*|esix*) dflt="-G $ldflags" ;;
5265                 *)     dflt='none' ;;
5266                         esac
5267                         ;;
5268     *) dflt="$lddlflags" ;;
5269     esac
5270
5271         : Try to guess additional flags to pick up local libraries.
5272         : Be careful not to append to a plain 'none'
5273         case "$dflt" in
5274         none) dflt='' ;;
5275         esac
5276         for thisflag in $ldflags; do
5277                 case "$thisflag" in
5278                 -L*)
5279                         case " $dflt " in
5280                         *" $thisflag "*) ;;
5281                         *) dflt="$dflt $thisflag" ;;
5282                         esac
5283                         ;;
5284                 esac
5285         done
5286
5287         case "$dflt" in
5288         ''|' ') dflt='none' ;;
5289         esac
5290
5291     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5292     . ./myread
5293     case "$ans" in
5294     none) lddlflags=' ' ;;
5295     *) lddlflags="$ans" ;;
5296     esac
5297
5298         cat <<EOM
5299
5300 Some systems may require passing special flags to $cc to indicate that
5301 the resulting executable will use dynamic linking.  To use no flags,
5302 say "none".
5303
5304 EOM
5305     case "$ccdlflags" in
5306     '') case "$osname" in
5307                 hpux)   dflt='-Wl,-E' ;;
5308                 linux)  dflt='-rdynamic' ;;
5309                 next)   dflt='none' ;;
5310                 sunos)  dflt='none' ;;
5311                 *)      dflt='none' ;;
5312             esac ;;
5313     ' ')  dflt='none' ;;
5314     *)  dflt="$ccdlflags" ;;
5315     esac
5316     rp="Any special flags to pass to $cc to use dynamic loading?"
5317     . ./myread
5318     case "$ans" in
5319     none) ccdlflags=' ' ;;
5320     *) ccdlflags="$ans" ;;
5321     esac
5322     ;;
5323 *)  usedl="$undef"
5324         ld='ld'
5325     dlsrc='dl_none.xs'
5326     lddlflags=''
5327     ccdlflags=''
5328     ;;
5329 esac
5330
5331 also=''
5332 case "$usedl" in
5333 $undef)
5334         # No dynamic loading being used, so don't bother even to prompt.
5335         useshrplib='false'
5336         ;;
5337 *)      case "$useshrplib" in
5338         '')     case "$osname" in
5339                 svr4*|dgux|dynixptx|esix|powerux|beos)
5340                         dflt=y
5341                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5342                         ;;
5343                 next*)
5344                         case "$osvers" in
5345                         4*)     dflt=y
5346                                 also='Building a shared libperl is needed for MAB support.'
5347                                 ;;
5348                         *)      dflt=n
5349                                 ;;
5350                         esac
5351                         ;;
5352                 *)      dflt=n
5353                         ;;
5354                 esac
5355                 ;;
5356         $define|true|[Yy]*)
5357                 dflt=y
5358                 ;;
5359         *)      dflt=n
5360                 ;;
5361         esac
5362         $cat << EOM
5363
5364 The perl executable is normally obtained by linking perlmain.c with
5365 libperl${_a}, any static extensions (usually just DynaLoader), and
5366 any other libraries needed on this system (such as -lm, etc.).  Since
5367 your system supports dynamic loading, it is probably possible to build
5368 a shared libperl.$so.  If you will have more than one executable linked
5369 to libperl.$so, this will significantly reduce the size of each
5370 executable, but it may have a noticeable affect on performance.  The
5371 default is probably sensible for your system.
5372 $also
5373
5374 EOM
5375         rp="Build a shared libperl.$so (y/n)"
5376         . ./myread
5377         case "$ans" in
5378         true|$define|[Yy]*)
5379                 useshrplib='true'  ;;
5380         *)      useshrplib='false' ;;
5381         esac
5382         ;;
5383 esac
5384
5385 case "$useshrplib" in
5386 true)
5387         case "$libperl" in
5388         '')
5389                 # Figure out a good name for libperl.so.  Since it gets stored in
5390                 # a version-specific architecture-dependent library, the version
5391                 # number isn't really that important, except for making cc/ld happy.
5392                 #
5393                 # A name such as libperl.so.3.1
5394                 majmin="libperl.$so.$patchlevel.$subversion"
5395                 # A name such as libperl.so.301
5396                 majonly=`echo $patchlevel $subversion |
5397                         $awk '{printf "%d%02d", $1, $2}'`
5398                 majonly=libperl.$so.$majonly
5399                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5400                 # rely on figuring it out from the naming of libc.
5401                 case "${osname}${osvers}" in
5402                 next4*)
5403                         dflt=libperl.5.$so
5404                         # XXX How handle the --version stuff for MAB?
5405                         ;;
5406                 linux*)  # ld won't link with a bare -lperl otherwise.
5407                         dflt=libperl.$so
5408                         ;;
5409                 *)      # Try to guess based on whether libc has major.minor.
5410                         case "$libc" in
5411                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5412                         *libc.$so.[0-9]*) dflt=$majonly ;;
5413                         *)      dflt=libperl.$so ;;
5414                         esac
5415                         ;;
5416                 esac
5417                 ;;
5418         *)      dflt=$libperl
5419                 ;;
5420         esac
5421         cat << EOM
5422
5423 I need to select a good name for the shared libperl.  If your system uses
5424 library names with major and minor numbers, then you might want something
5425 like $majmin.  Alternatively, if your system uses a single version
5426 number for shared libraries, then you might want to use $majonly.
5427 Or, your system might be quite happy with a simple libperl.$so.
5428
5429 Since the shared libperl will get installed into a version-specific
5430 architecture-dependent directory, the version number of the shared perl
5431 library probably isn't important, so the default should be o.k.
5432
5433 EOM
5434         rp='What name do you want to give to the shared libperl?'
5435         . ./myread
5436         libperl=$ans
5437         echo "Ok, I'll use $libperl"
5438         ;;
5439 *)
5440         libperl="libperl${_a}"
5441         ;;
5442 esac
5443
5444 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5445 case "$shrpdir" in
5446 '') ;;
5447 *)      $cat >&4 <<EOM
5448 WARNING:  Use of the shrpdir variable for the installation location of
5449 the shared $libperl is not supported.  It was never documented and
5450 will not work in this version.  Let me (perlbug@perl.com)
5451 know of any problems this may cause.
5452
5453 EOM
5454         case "$shrpdir" in
5455         "$archlibexp/CORE")
5456                 $cat >&4 <<EOM
5457 But your current setting of $shrpdir is
5458 the default anyway, so it's harmless.
5459 EOM
5460                 ;;
5461         *)
5462                 $cat >&4 <<EOM
5463 Further, your current attempted setting of $shrpdir
5464 conflicts with the value of $archlibexp/CORE
5465 that installperl will use.
5466 EOM
5467                 ;;
5468         esac
5469         ;;
5470 esac
5471
5472 # How will the perl executable find the installed shared $libperl?
5473 # Add $xxx to ccdlflags.
5474 # If we can't figure out a command-line option, use $shrpenv to
5475 # set env LD_RUN_PATH.  The main perl makefile uses this.
5476 shrpdir=$archlibexp/CORE
5477 xxx=''
5478 tmp_shrpenv=''
5479 if "$useshrplib"; then
5480     case "$osname" in 
5481         aix)
5482                 # We'll set it in Makefile.SH...
5483                 ;;
5484         solaris|netbsd)
5485                 xxx="-R $shrpdir"
5486                 ;;
5487         freebsd)
5488                 xxx="-Wl,-R$shrpdir"
5489                 ;;
5490         linux|irix*|dec_osf)
5491                 xxx="-Wl,-rpath,$shrpdir"
5492                 ;;
5493         next)
5494                 # next doesn't like the default...
5495                 ;;
5496         beos)
5497                 # beos doesn't like the default, either.
5498                 ;;
5499         hpux*)
5500                 # hpux doesn't like the default, either.
5501                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5502                 ;;
5503         *)
5504                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5505                 ;;
5506         esac
5507         case "$xxx" in
5508         '') ;;
5509         *)      
5510                 # Only add $xxx if it isn't already in ccdlflags.
5511                 case " $ccdlflags " in
5512                 *" $xxx "*)     ;;
5513                 *)      ccdlflags="$ccdlflags $xxx"
5514                         cat <<EOM >&4
5515
5516 Adding $xxx to the flags
5517 passed to $ld so that the perl executable will find the 
5518 installed shared $libperl.
5519
5520 EOM
5521                         ;;
5522                 esac
5523                 ;;
5524         esac
5525 fi
5526 # Fix ccdlflags in AIX for building external extensions.
5527 # (For building Perl itself bare -bE:perl.exp is needed,
5528 #  Makefile.SH takes care of this.)
5529 case "$osname" in
5530 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5531 esac
5532 # Respect a hint or command-line value.
5533 case "$shrpenv" in
5534 '') shrpenv="$tmp_shrpenv" ;;
5535 esac
5536 case "$ldlibpthname" in
5537 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5538 none)   ldlibpthname='' ;;
5539 esac
5540
5541 : determine where manual pages go
5542 set man1dir man1dir none
5543 eval $prefixit
5544 $cat <<EOM
5545
5546 $spackage has manual pages available in source form.
5547 EOM
5548 case "$nroff" in
5549 nroff)
5550         echo "However, you don't have nroff, so they're probably useless to you."
5551         case "$man1dir" in
5552         '') man1dir="none";;
5553         esac;;
5554 esac
5555 echo "If you don't want the manual sources installed, answer 'none'."
5556 case "$man1dir" in
5557 ' ') dflt=none
5558         ;;
5559 '')
5560         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5561         lookpath="$lookpath $prefixexp/man/p_man/man1"
5562         lookpath="$lookpath $prefixexp/man/u_man/man1"
5563         lookpath="$lookpath $prefixexp/man/man.1"
5564         case "$sysman" in
5565         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5566         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5567         esac
5568         set dflt
5569         eval $prefixup
5570         ;;
5571 *)  dflt="$man1dir"
5572         ;;
5573 esac
5574 echo " "
5575 fn=dn+~
5576 rp="Where do the main $spackage manual pages (source) go?"
5577 . ./getfile
5578 if $test "X$man1direxp" != "X$ansexp"; then
5579         installman1dir=''
5580 fi
5581 man1dir="$ans"
5582 man1direxp="$ansexp"
5583 case "$man1dir" in
5584 '')     man1dir=' '
5585         installman1dir='';;
5586 esac
5587
5588 : Change installation prefix, if necessary.
5589 if $test X"$prefix" != X"$installprefix"; then
5590         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5591 fi
5592
5593 : What suffix to use on installed man pages
5594
5595 case "$man1dir" in
5596 ' ')
5597         man1ext='0'
5598         ;;
5599 *)
5600         rp="What suffix should be used for the main $spackage man pages?"
5601         case "$man1ext" in
5602         '')     case "$man1dir" in
5603                 *1)  dflt=1 ;;
5604                 *1p) dflt=1p ;;
5605                 *1pm) dflt=1pm ;;
5606                 *l) dflt=l;;
5607                 *n) dflt=n;;
5608                 *o) dflt=o;;
5609                 *p) dflt=p;;
5610                 *C) dflt=C;;
5611                 *L) dflt=L;;
5612                 *L1) dflt=L1;;
5613                 *) dflt=1;;
5614                 esac
5615                 ;;
5616         *)      dflt="$man1ext";;
5617         esac
5618         . ./myread
5619         man1ext="$ans"
5620         ;;
5621 esac
5622
5623 : see if we can have long filenames
5624 echo " "
5625 rmlist="$rmlist /tmp/cf$$"
5626 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5627 first=123456789abcdef
5628 second=/tmp/cf$$/$first
5629 $rm -f $first $second
5630 if (echo hi >$first) 2>/dev/null; then
5631         if $test -f 123456789abcde; then
5632                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5633                 val="$undef"
5634         else
5635                 if (echo hi >$second) 2>/dev/null; then
5636                         if $test -f /tmp/cf$$/123456789abcde; then
5637                                 $cat <<'EOM'
5638 That's peculiar... You can have filenames longer than 14 characters, but only
5639 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5640 I shall consider your system cannot support long filenames at all.
5641 EOM
5642                                 val="$undef"
5643                         else
5644                                 echo 'You can have filenames longer than 14 characters.' >&4
5645                                 val="$define"
5646                         fi
5647                 else
5648                         $cat <<'EOM'
5649 How confusing! Some of your filesystems are sane enough to allow filenames
5650 longer than 14 characters but some others like /tmp can't even think about them.
5651 So, for now on, I shall assume your kernel does not allow them at all.
5652 EOM
5653                         val="$undef"
5654                 fi
5655         fi
5656 else
5657         $cat <<'EOM'
5658 You can't have filenames longer than 14 chars.  You can't even think about them!
5659 EOM
5660         val="$undef"
5661 fi 
5662 set d_flexfnam
5663 eval $setvar
5664 $rm -rf /tmp/cf$$ 123456789abcde*
5665
5666 : determine where library module manual pages go
5667 set man3dir man3dir none
5668 eval $prefixit
5669 $cat <<EOM
5670
5671 $spackage has manual pages for many of the library modules.
5672 EOM
5673
5674 case "$nroff" in
5675 nroff)
5676         $cat <<'EOM'
5677 However, you don't have nroff, so they're probably useless to you.
5678 EOM
5679         case "$man3dir" in
5680         '') man3dir="none";;
5681         esac;;
5682 esac
5683
5684 case "$d_flexfnam" in
5685 undef)
5686         $cat <<'EOM'
5687 However, your system can't handle the long file names like File::Basename.3. 
5688 EOM
5689         case "$man3dir" in
5690         '') man3dir="none";;
5691         esac;;
5692 esac
5693
5694 echo "If you don't want the manual sources installed, answer 'none'."
5695 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5696 case "$man3dir" in
5697 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5698         if $test -d "$privlib/man/man3"; then
5699                 cat <<EOM >&4
5700
5701 WARNING:  Previous versions of perl installed man3 pages into
5702 $privlib/man/man3.  This version will suggest a 
5703 new default of $dflt.  
5704 EOM
5705                 tdflt=$dflt
5706                 dflt='n'
5707                 rp='Do you wish to preserve the old behavior?(y/n)'
5708                 . ./myread
5709                 case "$ans" in
5710                 y*) dflt="$privlib/man/man3" ;;
5711                 *)  dflt=$tdflt ;;
5712                 esac
5713     fi
5714         ;;
5715 ' ') dflt=none;;
5716 *)      dflt="$man3dir" ;;
5717 esac
5718 echo " "
5719 fn=dn+~
5720 rp="Where do the $package library man pages (source) go?"
5721 . ./getfile
5722 man3dir="$ans"
5723 man3direxp="$ansexp"
5724 case "$man1dir" in
5725 '')     man3dir=' '
5726         installman3dir='';;
5727 esac
5728
5729 : Change installation prefix, if necessary.
5730 if $test X"$prefix" != X"$installprefix"; then
5731         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5732 fi
5733
5734 : What suffix to use on installed man pages
5735 case "$man3dir" in
5736 ' ')
5737         man3ext='0'
5738         ;;
5739 *)
5740         rp="What suffix should be used for the $package library man pages?"
5741         case "$man3ext" in
5742         '')     case "$man3dir" in
5743                 *3)  dflt=3 ;;
5744                 *3p) dflt=3p ;;
5745                 *3pm) dflt=3pm ;;
5746                 *l) dflt=l;;
5747                 *n) dflt=n;;
5748                 *o) dflt=o;;
5749                 *p) dflt=p;;
5750                 *C) dflt=C;;
5751                 *L) dflt=L;;
5752                 *L3) dflt=L3;;
5753                 *) dflt=3;;
5754                 esac
5755                 ;;
5756         *)      dflt="$man3ext";;
5757         esac
5758         . ./myread
5759         man3ext="$ans"
5760         ;;
5761 esac
5762
5763 : see if we have to deal with yellow pages, now NIS.
5764 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5765         if $test -f /usr/etc/nibindd; then
5766                 echo " "
5767                 echo "I'm fairly confident you're on a NeXT."
5768                 echo " "
5769                 rp='Do you get the hosts file via NetInfo?'
5770                 dflt=y
5771                 case "$hostcat" in
5772                 nidump*) ;;
5773                 '') ;;
5774                 *) dflt=n;;
5775                 esac
5776                 . ./myread
5777                 case "$ans" in
5778                 y*) hostcat='nidump hosts .';;
5779                 *)      case "$hostcat" in
5780                         nidump*) hostcat='';;
5781                         esac
5782                         ;;
5783                 esac
5784         fi
5785         case "$hostcat" in
5786         nidump*) ;;
5787         *)
5788                 case "$hostcat" in
5789                 *ypcat*) dflt=y;;
5790                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5791                                 dflt=y
5792                         else
5793                                 dflt=n
5794                         fi;;
5795                 *) dflt=n;;
5796                 esac
5797                 echo " "
5798                 rp='Are you getting the hosts file via yellow pages?'
5799                 . ./myread
5800                 case "$ans" in
5801                 y*) hostcat='ypcat hosts';;
5802                 *) hostcat='cat /etc/hosts';;
5803                 esac
5804                 ;;
5805         esac
5806 fi
5807 case "$hostcat" in
5808 '') hostcat='cat /etc/hosts';;
5809 esac
5810 case "$groupcat" in
5811 '') groupcat='cat /etc/group';;
5812 esac
5813 case "$passcat" in
5814 '') passcat='cat /etc/passwd';;
5815 esac
5816
5817 : now get the host name
5818 echo " "
5819 echo "Figuring out host name..." >&4
5820 case "$myhostname" in
5821 '') cont=true
5822         echo 'Maybe "hostname" will work...'
5823         if tans=`sh -c hostname 2>&1` ; then
5824                 myhostname=$tans
5825                 phostname=hostname
5826                 cont=''
5827         fi
5828         ;;
5829 *) cont='';;
5830 esac
5831 if $test "$cont"; then
5832         if ./xenix; then
5833                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5834                 if tans=`cat /etc/systemid 2>&1` ; then
5835                         myhostname=$tans
5836                         phostname='cat /etc/systemid'
5837                         echo "Whadyaknow.  Xenix always was a bit strange..."
5838                         cont=''
5839                 fi
5840         elif $test -r /etc/systemid; then
5841                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5842         fi
5843 fi
5844 if $test "$cont"; then
5845         echo 'No, maybe "uuname -l" will work...'
5846         if tans=`sh -c 'uuname -l' 2>&1` ; then
5847                 myhostname=$tans
5848                 phostname='uuname -l'
5849         else
5850                 echo 'Strange.  Maybe "uname -n" will work...'
5851                 if tans=`sh -c 'uname -n' 2>&1` ; then
5852                         myhostname=$tans
5853                         phostname='uname -n'
5854                 else
5855                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5856                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5857                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5858                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5859                         else
5860                                 case "$myhostname" in
5861                                 '') echo "Does this machine have an identity crisis or something?"
5862                                         phostname='';;
5863                                 *)
5864                                         echo "Well, you said $myhostname before..."
5865                                         phostname='echo $myhostname';;
5866                                 esac
5867                         fi
5868                 fi
5869         fi
5870 fi
5871 : you do not want to know about this
5872 set $myhostname
5873 myhostname=$1
5874
5875 : verify guess
5876 if $test "$myhostname" ; then
5877         dflt=y
5878         rp='Your host name appears to be "'$myhostname'".'" Right?"
5879         . ./myread
5880         case "$ans" in
5881         y*) ;;
5882         *) myhostname='';;
5883         esac
5884 fi
5885
5886 : bad guess or no guess
5887 while $test "X$myhostname" = X ; do
5888         dflt=''
5889         rp="Please type the (one word) name of your host:"
5890         . ./myread
5891         myhostname="$ans"
5892 done
5893
5894 : translate upper to lower if necessary
5895 case "$myhostname" in
5896 *[A-Z]*)
5897         echo "(Normalizing case in your host name)"
5898         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5899         ;;
5900 esac
5901
5902 case "$myhostname" in
5903 *.*)
5904         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5905         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5906         echo "(Trimming domain name from host name--host name is now $myhostname)"
5907         ;;
5908 *) case "$mydomain" in
5909         '')
5910                 {
5911                         test "X$hostcat" = "Xypcat hosts" &&
5912                         ypmatch "$myhostname" hosts 2>/dev/null |\
5913                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5914                         $test -s hosts
5915                 } || {
5916                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5917                                         /[       ]$myhostname[  . ]/p" > hosts
5918                 }
5919                 tmp_re="[       . ]"
5920                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5921                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5922                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5923                         hosts | $sort | $uniq | \
5924                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5925                 case `$echo X$dflt` in
5926                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5927                         dflt=.
5928                         ;;
5929                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5930                         ;;
5931                 esac
5932                 case "$dflt" in
5933                 .)
5934                         tans=`./loc resolv.conf X /etc /usr/etc`
5935                         if $test -f "$tans"; then
5936                                 echo "(Attempting domain name extraction from $tans)"
5937                                 dflt=.`$sed -n -e 's/   / /g' \
5938                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5939                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5940                                 case "$dflt" in
5941                                 .) dflt=.`$sed -n -e 's/        / /g' \
5942                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5943                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5944                                         ;;
5945                                 esac
5946                         fi
5947                         ;;
5948                 esac
5949                 case "$dflt" in
5950                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5951                         dflt=.`sh -c domainname 2>/dev/null`
5952                         case "$dflt" in
5953                         '') dflt='.';;
5954                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5955                         esac
5956                         ;;
5957                 esac
5958                 case "$dflt" in
5959                 .) echo "(Lost all hope -- silly guess then)"
5960                         dflt='.uucp'
5961                         ;;
5962                 esac
5963                 $rm -f hosts
5964                 ;;
5965         *) dflt="$mydomain";;
5966         esac;;
5967 esac
5968 echo " "
5969 rp="What is your domain name?"
5970 . ./myread
5971 tans="$ans"
5972 case "$ans" in
5973 '') ;;
5974 .*) ;;
5975 *) tans=".$tans";;
5976 esac
5977 mydomain="$tans"
5978
5979 : translate upper to lower if necessary
5980 case "$mydomain" in
5981 *[A-Z]*)
5982         echo "(Normalizing case in your domain name)"
5983         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5984         ;;
5985 esac
5986
5987 : a little sanity check here
5988 case "$phostname" in
5989 '') ;;
5990 *)
5991         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5992         $myhostname$mydomain|$myhostname) ;;
5993         *)
5994                 case "$phostname" in
5995                 sed*)
5996                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5997                         ;;
5998                 *)
5999                         echo "(That doesn't agree with your $phostname command, by the way.)"
6000                         ;;
6001                 esac
6002         ;;
6003         esac
6004         ;;
6005 esac
6006
6007 $cat <<EOM
6008
6009 I need to get your e-mail address in Internet format if possible, i.e.
6010 something like user@host.domain. Please answer accurately since I have
6011 no easy means to double check it. The default value provided below
6012 is most probably close to the reality but may not be valid from outside
6013 your organization...
6014
6015 EOM
6016 cont=x
6017 while test "$cont"; do
6018         case "$cf_email" in
6019         '') dflt="$cf_by@$myhostname$mydomain";;
6020         *) dflt="$cf_email";;
6021         esac
6022         rp='What is your e-mail address?'
6023         . ./myread
6024         cf_email="$ans"
6025         case "$cf_email" in
6026         *@*.*) cont='' ;;
6027         *)
6028                 rp='Address does not look like an Internet one.  Use it anyway?'
6029                 case "$fastread" in
6030                 yes) dflt=y ;;
6031                 *) dflt=n ;;
6032                 esac
6033                 . ./myread
6034                 case "$ans" in
6035                 y*) cont='' ;;
6036                 *) echo " " ;;
6037                 esac
6038                 ;;
6039         esac
6040 done
6041
6042 $cat <<EOM
6043
6044 If you or somebody else will be maintaining perl at your site, please
6045 fill in the correct e-mail address here so that they may be contacted
6046 if necessary. Currently, the "perlbug" program included with perl
6047 will send mail to this address in addition to perlbug@perl.com. You may
6048 enter "none" for no administrator.
6049
6050 EOM
6051 case "$perladmin" in
6052 '') dflt="$cf_email";;
6053 *) dflt="$perladmin";;
6054 esac
6055 rp='Perl administrator e-mail address'
6056 . ./myread
6057 perladmin="$ans"
6058
6059 : figure out how to guarantee perl startup
6060 case "$startperl" in
6061 '')
6062         case "$sharpbang" in
6063         *!)
6064                 $cat <<EOH
6065
6066 I can use the #! construct to start perl on your system. This will
6067 make startup of perl scripts faster, but may cause problems if you
6068 want to share those scripts and perl is not in a standard place
6069 ($binexp/perl) on all your platforms. The alternative is to force
6070 a shell by starting the script with a single ':' character.
6071
6072 EOH
6073                 dflt="$binexp/perl"
6074                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6075                 . ./myread
6076                 case "$ans" in
6077                 none)   startperl=": # use perl";;
6078                 *)      startperl="#!$ans"
6079                         if $test 30 -lt `echo "$ans" | wc -c`; then
6080                                 $cat >&4 <<EOM
6081
6082 WARNING:  Some systems limit the #! command to 32 characters.
6083 If you experience difficulty running Perl scripts with #!, try
6084 installing Perl in a directory with a shorter pathname.
6085
6086 EOM
6087                         fi ;;
6088                 esac
6089                 ;;
6090         *) startperl=": # use perl"
6091                 ;;
6092         esac
6093         ;;
6094 esac
6095 echo "I'll use $startperl to start perl scripts."
6096
6097 : figure best path for perl in scripts
6098 case "$perlpath" in
6099 '')
6100         perlpath="$binexp/perl"
6101         case "$startperl" in
6102         *!*) ;;
6103         *)
6104                 $cat <<EOH
6105
6106 I will use the "eval 'exec'" idiom to start Perl on your system.
6107 I can use the full path of your Perl binary for this purpose, but
6108 doing so may cause problems if you want to share those scripts and
6109 Perl is not always in a standard place ($binexp/perl).
6110
6111 EOH
6112                 dflt="$binexp/perl"
6113                 rp="What path shall I use in \"eval 'exec'\"?"
6114                 . ./myread
6115                 perlpath="$ans"
6116                 ;;
6117         esac
6118         ;;
6119 esac
6120 case "$startperl" in
6121 *!*)    ;;
6122 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6123 esac
6124
6125 : determine where public executable scripts go
6126 set scriptdir scriptdir
6127 eval $prefixit
6128 case "$scriptdir" in
6129 '')
6130         dflt="$bin"
6131         : guess some guesses
6132         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6133         $test -d /usr/share/bin     && dflt=/usr/share/bin
6134         $test -d /usr/local/script  && dflt=/usr/local/script
6135         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6136         $test -d $prefixexp/script  && dflt=$prefixexp/script
6137         set dflt
6138         eval $prefixup
6139         ;;
6140 *)  dflt="$scriptdir"
6141         ;;
6142 esac
6143 $cat <<EOM
6144  
6145 Some installations have a separate directory just for executable scripts so
6146 that they can mount it across multiple architectures but keep the scripts in
6147 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6148 Or you might just lump your scripts in with all your other executables.
6149  
6150 EOM
6151 fn=d~
6152 rp='Where do you keep publicly executable scripts?'
6153 . ./getfile
6154 if $test "X$ansexp" != "X$scriptdirexp"; then
6155         installscript=''
6156 fi
6157 scriptdir="$ans"
6158 scriptdirexp="$ansexp"
6159 : Change installation prefix, if necessary.
6160 if $test X"$prefix" != X"$installprefix"; then
6161         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6162 else
6163         installscript="$scriptdirexp"
6164 fi
6165
6166 $cat <<EOM
6167
6168 After $package is installed, you may wish to install various
6169 add-on modules and utilities.  Typically, these add-ons will
6170 be installed under $prefix with the rest
6171 of this package.  However, you may wish to install such add-ons
6172 elsewhere under a different prefix.
6173
6174 If you do not wish to put everything under a single prefix, that's
6175 ok.  You will be prompted for the individual locations; this siteprefix
6176 is only used to suggest the defaults.
6177
6178 The default should be fine for most people.
6179
6180 EOM
6181 fn=d~+
6182 rp='Installation prefix to use for add-on modules and utilities?'
6183 : XXX Here might be another good place for an installstyle setting.
6184 case "$siteprefix" in
6185 '') dflt=$prefix ;;
6186 *)  dflt=$siteprefix ;;
6187 esac
6188 . ./getfile
6189 oldsiteprefix=''
6190 case "$siteprefix" in
6191 '') ;;
6192 *)
6193         case "$ans" in
6194         "$prefix") ;;
6195         *) oldsiteprefix="$prefix";;
6196         esac
6197         ;;
6198 esac
6199 siteprefix="$ans"
6200 siteprefixexp="$ansexp"
6201
6202 : determine where site specific libraries go.
6203 : Usual default is /usr/local/lib/perl5/site_perl
6204 : The default "style" setting is made in installstyle.U
6205 : XXX No longer works with Prefixit stuff.
6206 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6207 case "$installstyle" in
6208 *lib/perl5*) dflt=$siteprefix/lib/site_$prog/ ;;
6209 *)       dflt=$siteprefix/lib/site_$prog ;;
6210 esac
6211 $cat <<EOM
6212
6213 The installation process will create a directory for
6214 site-specific extensions and modules.  Most users find it convenient
6215 to place all site-specific files in this directory rather than in the
6216 main distribution directory.
6217
6218 EOM
6219 fn=d~+
6220 rp='Pathname for the site-specific library files?'
6221 . ./getfile
6222 sitelib="$ans"
6223 sitelibexp="$ansexp"
6224 : Change installation prefix, if necessary.
6225 if $test X"$prefix" != X"$installprefix"; then
6226         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6227 fi
6228
6229 : determine where site specific architecture-dependent libraries go.
6230 : sitelib  default is /usr/local/lib/perl5/site_perl/
6231 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6232 : sitelib may have an optional trailing /share.
6233 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6234 tdflt="$tdflt/$apiversion/$archname"
6235 set sitearch sitearch none
6236 eval $prefixit
6237 case "$sitearch" in
6238 '')     dflt="$tdflt" ;;
6239 *)      dflt="$sitearch" ;;
6240 esac
6241 $cat <<EOM
6242
6243 The installation process will also create a directory for
6244 architecture-dependent site-specific extensions and modules.
6245
6246 EOM
6247 fn=nd~+
6248 rp='Pathname for the site-specific architecture-dependent library files?'
6249 . ./getfile
6250 sitearch="$ans"
6251 sitearchexp="$ansexp"
6252 : Change installation prefix, if necessary.
6253 if $test X"$prefix" != X"$installprefix"; then
6254         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
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, or UTF." >&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 echo " "
10995 $cat >&4 <<EOM
10996 Checking how to flush all pending stdio output...
10997 EOM
10998 # I only know how to find the first 32 possibly open files on SunOS.
10999 # See also hints/sunos_4_1.sh and util.c  --AD
11000 case "$osname" in
11001 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11002 esac
11003 $cat >>try.c <<EOCP
11004 #include <stdio.h>
11005 #$i_unistd I_UNISTD
11006 #ifdef I_UNISTD
11007 # include <unistd.h>
11008 #endif
11009 #$d_sysconf HAS_SYSCONF
11010 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11011 #ifdef HAS_STDIO_STREAM_ARRAY
11012 # define STDIO_STREAM_ARRAY $stdio_stream_array
11013 #endif
11014 int main() {
11015   FILE* p = fopen("try.out", "w");
11016 #ifdef TRY_FPUTC
11017   fputc('x', p);
11018 #else
11019 # ifdef TRY_FPRINTF
11020   fprintf(p, "x");
11021 # endif
11022 #endif
11023 #ifdef TRY_FFLUSH_NULL
11024   fflush(NULL);
11025 #endif
11026 #ifdef TRY_FFLUSH_ALL
11027   {
11028     long open_max = -1;
11029 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11030     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11031 # else
11032 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11033     open_max = sysconf(_SC_OPEN_MAX);
11034 #  else
11035 #   ifdef FOPEN_MAX
11036     open_max = FOPEN_MAX;
11037 #   else
11038 #    ifdef OPEN_MAX
11039     open_max = OPEN_MAX;
11040 #    else
11041 #     ifdef _NFILE
11042     open_max = _NFILE;
11043 #     endif
11044 #    endif
11045 #   endif
11046 #  endif
11047 # endif 
11048 # ifdef HAS_STDIO_STREAM_ARRAY
11049     if (open_max > 0) {
11050       long i;
11051       for (i = 0; i < open_max; i++)
11052             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11053                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11054                 STDIO_STREAM_ARRAY[i]._flag)
11055                 fflush(&STDIO_STREAM_ARRAY[i]);
11056     }   
11057   }
11058 # endif
11059 #endif
11060   _exit(42);
11061 }
11062 EOCP
11063 : first we have to find out how _not_ to flush
11064 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11065     output=''
11066     set try -DTRY_FPUTC
11067     if eval $compile; then
11068             $rm -f try.out
11069             ./try$exe_ext 2>/dev/null
11070             if $test ! -s try.out -a "X$?" = X42; then
11071                 output=-DTRY_FPUTC
11072             fi
11073     fi
11074     case "$output" in
11075     '')
11076             set try -DTRY_FPRINTF
11077             $rm -f try.out
11078             if eval $compile; then
11079                     $rm -f try.out
11080                     ./try$exe_ext 2>/dev/null
11081                     if $test ! -s try.out -a "X$?" = X42; then
11082                         output=-DTRY_FPRINTF
11083                     fi
11084             fi
11085         ;;
11086     esac
11087 fi
11088 : check for fflush NULL behaviour
11089 case "$fflushNULL" in
11090 '')     set try -DTRY_FFLUSH_NULL $output
11091         if eval $compile; then
11092                 $rm -f try.out
11093                 ./try$exe_ext 2>/dev/null
11094                 code="$?"
11095                 if $test -s try.out -a "X$code" = X42; then
11096                         fflushNULL="`$cat try.out`"
11097                 else
11098                         if $test "X$code" != X42; then
11099                                 $cat >&4 <<EOM
11100 (If this test failed, don't worry, we'll try another method shortly.)
11101 EOM
11102                         fi
11103                 fi
11104         fi
11105         $rm -f core try.core core.try.*
11106         case "$fflushNULL" in
11107         x)      $cat >&4 <<EOM
11108 Your fflush(NULL) works okay.
11109 EOM
11110                 fflushNULL="$define"
11111                 ;;
11112         '')     $cat >&4 <<EOM
11113 Your fflush(NULL) isn't working (contrary to ANSI C).
11114 EOM
11115                 fflushNULL="$undef"
11116                 ;;
11117         *)      $cat >&4 <<EOM
11118 Cannot figure out whether your fflush(NULL) works or not.
11119 I'm assuming it doesn't (contrary to ANSI C).
11120 EOM
11121                 fflushNULL="$undef"
11122                 ;;
11123         esac
11124         ;;
11125 $define|true|[yY]*)
11126         fflushNULL="$define"
11127         ;;
11128 *)
11129         fflushNULL="$undef"
11130         ;;
11131 esac
11132 : check explicit looping only if NULL did not work
11133 case "$fflushNULL" in
11134 "$undef")
11135         : check for fflush all behaviour
11136         case "$fflushall" in
11137         '')     set try -DTRY_FFLUSH_ALL $output
11138                 if eval $compile; then
11139                         $cat >&4 <<EOM
11140 (Now testing the other method--but note that also this may fail.)
11141 EOM
11142                         $rm -f try.out
11143                         ./try$exe_ext 2>/dev/null
11144                         if $test -s try.out -a "X$?" = X42; then
11145                                 fflushall="`$cat try.out`"
11146                         fi
11147                 fi
11148                 $rm -f core try.core core.try.*
11149                 case "$fflushall" in
11150                 x)      $cat >&4 <<EOM
11151 Whew. Flushing explicitly all the stdio streams works.
11152 EOM
11153                         fflushall="$define"
11154                         ;;
11155                 '')     $cat >&4 <<EOM
11156 Sigh. Flushing explicitly all the stdio streams doesn't work.
11157 EOM
11158                         fflushall="$undef"
11159                         ;;
11160                 *)      $cat >&4 <<EOM
11161 Cannot figure out whether flushing stdio streams explicitly works or not.
11162 I'm assuming it doesn't.
11163 EOM
11164                         fflushall="$undef"
11165                         ;;
11166                 esac
11167                 ;;
11168         "$define"|true|[yY]*)
11169                 fflushall="$define"
11170                 ;;
11171         *)
11172                 fflushall="$undef"
11173                 ;;
11174         esac
11175         ;;
11176 *)      fflushall="$undef"      
11177         ;;
11178 esac
11179 case "$fflushNULL$fflushall" in
11180 undefundef)
11181         $cat <<EOM
11182 I cannot figure out how to flush pending stdio output.
11183 EOM
11184         ;;
11185 esac
11186 $rm -f try.* try$exe_ext
11187
11188 : see what type file positions are declared as in the library
11189 rp="What is the type for file position used by fsetpos()?"
11190 set fpos_t fpostype long stdio.h sys/types.h
11191 eval $typedef_ask
11192
11193 : Store the full pathname to the ar program for use in the C program
11194 : Respect a hint or command line value for full_ar.
11195 case "$full_ar" in
11196 '') full_ar=$ar ;;
11197 esac
11198
11199 : Store the full pathname to the sed program for use in the C program
11200 full_sed=$sed
11201
11202 : see what type gids are declared as in the kernel
11203 echo " "
11204 echo "Looking for the type for group ids returned by getgid()."
11205 set gid_t gidtype xxx stdio.h sys/types.h
11206 eval $typedef
11207 case "$gidtype" in
11208 xxx)
11209         xxx=`./findhdr sys/user.h`
11210         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11211         case $1 in
11212         unsigned) dflt="$1 $2" ;;
11213         *) dflt="$1" ;;
11214         esac
11215         ;;
11216 *) dflt="$gidtype";;
11217 esac
11218 case "$gidtype" in
11219 gid_t) echo "gid_t found." ;;
11220 *)      rp="What is the type for group ids returned by getgid()?"
11221         . ./myread
11222         gidtype="$ans"
11223         ;;
11224 esac
11225
11226 : see if getgroups exists
11227 set getgroups d_getgrps
11228 eval $inlibc
11229
11230 : see if setgroups exists
11231 set setgroups d_setgrps
11232 eval $inlibc
11233
11234
11235 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11236 echo " "
11237 case "$d_getgrps$d_setgrps" in
11238 *define*)
11239         case "$groupstype" in
11240         '') dflt="$gidtype" ;;
11241         *)  dflt="$groupstype" ;;
11242         esac
11243         $cat <<EOM
11244 What type of pointer is the second argument to getgroups() and setgroups()?
11245 Usually this is the same as group ids, $gidtype, but not always.
11246
11247 EOM
11248         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11249         . ./myread
11250         groupstype="$ans"
11251         ;;
11252 *)  groupstype="$gidtype";;
11253 esac
11254
11255 : see what type lseek is declared as in the kernel
11256 rp="What is the type used for lseek's offset on this system?"
11257 set off_t lseektype long stdio.h sys/types.h
11258 eval $typedef_ask
11259
11260 echo " "
11261 $echo $n "Checking to see how big your file offsets are...$c" >&4
11262 $cat >try.c <<EOCP
11263 #include <sys/types.h>
11264 #include <stdio.h>
11265 int main()
11266 {
11267         printf("%d\n", sizeof($lseektype));
11268 }
11269 EOCP
11270 set try
11271 if eval $compile_ok; then
11272         lseeksize=`./try`
11273         $echo " $lseeksize bytes." >&4
11274 else
11275         dflt='4'
11276         echo " "
11277         echo "(I can't seem to compile the test program.  Guessing...)"
11278         rp="What is the size of your file offsets (in bytes)?"
11279         . ./myread
11280         lseeksize="$ans"
11281 fi
11282 $rm -f try.c try
11283
11284 echo " "
11285 echo "Checking if your $make program sets \$(MAKE)..." >&4
11286 case "$make_set_make" in
11287 '')
11288         $sed 's/^X //' > testmake.mak << 'EOF'
11289 Xall:
11290 X       @echo 'maketemp="$(MAKE)"'
11291 EOF
11292         case "`$make -f testmake.mak 2>/dev/null`" in
11293         *maketemp=*) make_set_make='#' ;;
11294         *)      make_set_make="MAKE=$make" ;;
11295         esac
11296         $rm -f testmake.mak
11297         ;;
11298 esac
11299 case "$make_set_make" in
11300 '#') echo "Yup, it does.";;
11301 *) echo "Nope, it doesn't.";;
11302 esac
11303
11304 : see what type is used for mode_t
11305 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11306 set mode_t modetype int stdio.h sys/types.h
11307 eval $typedef_ask
11308
11309 : define a fucntion to check prototypes
11310 $cat > protochk <<EOSH
11311 $startsh
11312 cc="$cc"
11313 optimize="$optimize"
11314 ccflags="$ccflags"
11315 prototype="$prototype"
11316 define="$define"
11317 rm=$rm
11318 EOSH
11319
11320 $cat >> protochk <<'EOSH'
11321
11322 $rm -f try.c
11323 foo="$1"
11324 shift
11325 while test $# -ge 2; do
11326         case "$1" in
11327                 $define) echo "#include <$2>" >> try.c ;;
11328                 literal) echo "$2" >> try.c ;;
11329         esac
11330     shift 2
11331 done
11332 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11333 cat >> try.c <<'EOCP'
11334 #ifdef CAN_PROTOTYPE
11335 #define _(args) args
11336 #else
11337 #define _(args) ()
11338 #endif
11339 EOCP
11340 echo "$foo" >> try.c
11341 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11342 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11343 status=$?
11344 $rm -f try.[co]
11345 exit $status
11346 EOSH
11347 chmod +x protochk
11348 $eunicefix protochk
11349
11350 : see what type is used for size_t
11351 rp="What is the type used for the length parameter for string functions?"
11352 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11353 eval $typedef_ask
11354
11355 : check for type of arguments to gethostbyaddr. 
11356 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11357         case "$d_gethbyaddr" in
11358         $define)
11359                 $cat <<EOM
11360
11361 Checking to see what type of arguments are accepted by gethostbyaddr().
11362 EOM
11363                 hdrs="$define sys/types.h
11364                         $d_socket sys/socket.h 
11365                         $i_niin netinet/in.h 
11366                         $i_netdb netdb.h
11367                         $i_unistd unistd.h"
11368                 : The first arg can 'char *' or 'void *'
11369                 : The second arg is some of integral type
11370                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11371                         for yyy in size_t long int; do
11372                                 case "$netdb_host_type" in
11373                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11374                                         if ./protochk "$try" $hdrs; then
11375                                                 echo "Your system accepts $xxx for the first arg."
11376                                                 echo "...and $yyy for the second arg."
11377                                                 netdb_host_type="$xxx"
11378                                                 netdb_hlen_type="$yyy"
11379                                         fi
11380                                         ;;
11381                                 esac
11382                         done
11383                 done
11384                 : In case none of those worked, prompt the user.
11385                 case "$netdb_host_type" in
11386                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11387                         dflt='char *'
11388                         . ./myread
11389                         netdb_host_type=$ans
11390                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11391                         dflt="$sizetype"
11392                         . ./myread
11393                         netdb_hlen_type=$ans
11394                         ;;
11395                 esac
11396                 ;;
11397         *)      : no gethostbyaddr, so pick harmless defaults
11398                 netdb_host_type='char *'
11399                 netdb_hlen_type="$sizetype"
11400                 ;;
11401         esac
11402         # Remove the "const" if needed. -- but then we'll have a 
11403         # prototype clash!
11404         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11405 fi
11406
11407 : check for type of argument to gethostbyname. 
11408 if test "X$netdb_name_type" = X ; then
11409         case "$d_gethbyname" in
11410         $define)
11411                 $cat <<EOM
11412
11413 Checking to see what type of argument is accepted by gethostbyname().
11414 EOM
11415                 hdrs="$define sys/types.h
11416                         $d_socket sys/socket.h 
11417                         $i_niin netinet/in.h 
11418                         $i_netdb netdb.h
11419                         $i_unistd unistd.h"
11420                 for xxx in "const char *" "char *"; do
11421                         case "$netdb_name_type" in
11422                         '')     try="extern struct hostent *gethostbyname($xxx);"
11423                                 if ./protochk "$try" $hdrs; then
11424                                         echo "Your system accepts $xxx."
11425                                         netdb_name_type="$xxx"
11426                                 fi
11427                                 ;;
11428                         esac
11429                 done
11430                 : In case none of those worked, prompt the user.
11431                 case "$netdb_name_type" in
11432                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11433                         dflt='char *'
11434                         . ./myread
11435                         netdb_name_type=$ans
11436                         ;;
11437                 esac
11438                 ;;
11439         *)      : no gethostbyname, so pick harmless default
11440                 netdb_name_type='char *'
11441                 ;;
11442         esac
11443 fi
11444
11445 : check for type of 1st argument to getnetbyaddr. 
11446 if test "X$netdb_net_type" = X ; then
11447         case "$d_getnbyaddr" in
11448         $define)
11449                 $cat <<EOM
11450
11451 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11452 EOM
11453                 hdrs="$define sys/types.h
11454                         $d_socket sys/socket.h 
11455                         $i_niin netinet/in.h 
11456                         $i_netdb netdb.h
11457                         $i_unistd unistd.h"
11458                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11459                         case "$netdb_net_type" in
11460                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11461                                 if ./protochk "$try" $hdrs; then
11462                                         echo "Your system accepts $xxx."
11463                                         netdb_net_type="$xxx"
11464                                 fi
11465                                 ;;
11466                         esac
11467                 done
11468                 : In case none of those worked, prompt the user.
11469                 case "$netdb_net_type" in
11470                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11471                         dflt='long'
11472                         . ./myread
11473                         netdb_net_type=$ans
11474                         ;;
11475                 esac
11476                 ;;
11477         *)      : no getnetbyaddr, so pick harmless default
11478                 netdb_net_type='long'
11479                 ;;
11480         esac
11481 fi
11482 : locate the preferred pager for this system
11483 case "$pager" in
11484 '')
11485         dflt=''
11486         case "$pg" in
11487         /*) dflt=$pg;;
11488         esac
11489         case "$more" in
11490         /*) dflt=$more;;
11491         esac
11492         case "$less" in
11493         /*) dflt=$less;;
11494         esac
11495         case "$dflt" in
11496         '') dflt=/usr/ucb/more;;
11497         esac
11498         ;;
11499 *) dflt="$pager";;
11500 esac
11501 echo " "
11502 fn=f/
11503 rp='What pager is used on your system?'
11504 . ./getfile
11505 pager="$ans"
11506
11507 : see what type pids are declared as in the kernel
11508 rp="What is the type of process ids on this system?"
11509 set pid_t pidtype int stdio.h sys/types.h
11510 eval $typedef_ask
11511
11512 : check for length of pointer
11513 echo " "
11514 case "$ptrsize" in
11515 '')
11516         $echo $n "Checking to see how big your pointers are...$c" >&4
11517         if test "$voidflags" -gt 7; then
11518                 echo '#define VOID_PTR char *' > try.c
11519         else
11520                 echo '#define VOID_PTR void *' > try.c
11521         fi
11522         $cat >>try.c <<'EOCP'
11523 #include <stdio.h>
11524 int main()
11525 {
11526         printf("%d\n", sizeof(VOID_PTR));
11527         exit(0);
11528 }
11529 EOCP
11530         set try
11531         if eval $compile_ok; then
11532                 ptrsize=`./try`
11533                 $echo " $ptrsize bytes." >&4
11534         else
11535                 dflt='4'
11536                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11537                 rp="What is the size of a pointer (in bytes)?"
11538                 . ./myread
11539                 ptrsize="$ans"
11540         fi
11541         ;;
11542 esac
11543 $rm -f try.c try
11544
11545 : see if ar generates random libraries by itself
11546 echo " "
11547 echo "Checking how to generate random libraries on your machine..." >&4
11548 echo 'int bar1() { return bar2(); }' > bar1.c
11549 echo 'int bar2() { return 2; }' > bar2.c
11550 $cat > foo.c <<'EOP'
11551 int main() { printf("%d\n", bar1()); exit(0); }
11552 EOP
11553 $cc $ccflags -c bar1.c >/dev/null 2>&1
11554 $cc $ccflags -c bar2.c >/dev/null 2>&1
11555 $cc $ccflags -c foo.c >/dev/null 2>&1
11556 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11557 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11558         ./foobar >/dev/null 2>&1; then
11559         echo "$ar appears to generate random libraries itself."
11560         orderlib=false
11561         ranlib=":"
11562 elif $ar ts bar$_a >/dev/null 2>&1 &&
11563         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11564         ./foobar >/dev/null 2>&1; then
11565                 echo "a table of contents needs to be added with '$ar ts'."
11566                 orderlib=false
11567                 ranlib="$ar ts"
11568 else
11569         case "$ranlib" in
11570         :) ranlib='';;
11571         '')
11572                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11573                 $test -f $ranlib || ranlib=''
11574                 ;;
11575         esac
11576         if $test -n "$ranlib"; then
11577                 echo "your system has '$ranlib'; we'll use that."
11578                 orderlib=false
11579         else
11580                 echo "your system doesn't seem to support random libraries"
11581                 echo "so we'll use lorder and tsort to order the libraries."
11582                 orderlib=true
11583                 ranlib=":"
11584         fi
11585 fi
11586 $rm -f foo* bar* 
11587
11588 : check for type of arguments to select. 
11589 case "$selecttype" in
11590 '') case "$d_select" in
11591         $define)
11592                 $cat <<EOM
11593 Checking to see what type of arguments are accepted by select().
11594 EOM
11595                 hdrs="$define sys/types.h
11596                         $i_systime sys/time.h 
11597                         $i_sysselct sys/select.h
11598                         $d_socket sys/socket.h"
11599                 : The first arg can be int, unsigned, or size_t
11600                 : The last arg may or may not be 'const'
11601                 val=''
11602                 : void pointer has been seen but using that
11603                 : breaks the selectminbits test
11604                 for xxx in 'fd_set *' 'int *'; do
11605                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11606                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11607                                         case "$val" in
11608                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11609                                                 if ./protochk "$try" $hdrs; then
11610                                                         echo "Your system accepts $xxx."
11611                                                         val="$xxx"
11612                                                 fi
11613                                                 ;;
11614                                         esac
11615                                 done
11616                         done
11617                 done
11618                 case "$val" in
11619                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11620                         case "$d_fd_set" in
11621                                 $define) dflt="fd_set *" ;;
11622                                 *)              dflt="int *" ;;
11623                         esac
11624                         . ./myread
11625                         val=$ans
11626                         ;;
11627                 esac
11628                 selecttype="$val"
11629                 ;;
11630         *)      : no select, so pick a harmless default
11631                 selecttype='int *'
11632                 ;;
11633         esac
11634         ;;
11635 esac
11636
11637 : check for the select 'width'
11638 case "$selectminbits" in
11639 '') case "$d_select" in
11640         $define)
11641                 $cat <<EOM
11642
11643 Checking to see on how many bits at a time your select() operates...
11644 EOM
11645                 $cat >try.c <<EOCP
11646 #include <sys/types.h>
11647 #$i_time I_TIME
11648 #$i_systime I_SYS_TIME
11649 #$i_systimek I_SYS_TIME_KERNEL
11650 #ifdef I_TIME
11651 #   include <time.h>
11652 #endif
11653 #ifdef I_SYS_TIME
11654 #   ifdef I_SYS_TIME_KERNEL
11655 #       define KERNEL
11656 #   endif
11657 #   include <sys/time.h>
11658 #   ifdef I_SYS_TIME_KERNEL
11659 #       undef KERNEL
11660 #   endif
11661 #endif
11662 #$i_sysselct I_SYS_SELECT
11663 #ifdef I_SYS_SELECT
11664 #include <sys/select.h>
11665 #endif
11666 #$d_socket HAS_SOCKET
11667 #ifdef HAS_SOCKET
11668 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11669 #endif
11670 #include <stdio.h>
11671 $selecttype b;
11672 #define S sizeof(*(b))
11673 #define MINBITS 64
11674 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11675 #define NBITS  (NBYTES * 8)
11676 int main() {
11677     char s[NBYTES];
11678     struct timeval t;
11679     int i;
11680     FILE* fp;
11681     int fd;
11682
11683     fclose(stdin);
11684     fp = fopen("try.c", "r");
11685     if (fp == 0)
11686       exit(1);
11687     fd = fileno(fp);
11688     if (fd < 0)
11689       exit(2);
11690     b = ($selecttype)s;
11691     for (i = 0; i < NBITS; i++)
11692         FD_SET(i, b);
11693     t.tv_sec  = 0;
11694     t.tv_usec = 0;
11695     select(fd + 1, b, 0, 0, &t);
11696     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11697     printf("%d\n", i + 1);
11698     return 0;
11699 }
11700 EOCP
11701                 set try
11702                 if eval $compile_ok; then
11703                         selectminbits=`./try`
11704                         case "$selectminbits" in
11705                         '')     cat >&4 <<EOM
11706 Cannot figure out on how many bits at a time your select() operates.
11707 I'll play safe and guess it is 32 bits.
11708 EOM
11709                                 selectminbits=32
11710                                 bits="32 bits"
11711                                 ;;
11712                         1)      bits="1 bit" ;;
11713                         *)      bits="$selectminbits bits" ;;
11714                         esac
11715                         echo "Your select() operates on $bits at a time." >&4
11716                 else
11717                         rp='What is the minimum number of bits your select() operates on?'
11718                         case "$byteorder" in
11719                         1234|12345678)  dflt=32 ;;
11720                         *)              dflt=1  ;;
11721                         esac
11722                         . ./myread
11723                         val=$ans
11724                         selectminbits="$val"
11725                 fi
11726                 $rm -f try.* try
11727                 ;;
11728         *)      : no select, so pick a harmless default
11729                 selectminbits='32'
11730                 ;;
11731         esac
11732         ;;
11733 esac
11734
11735 : Trace out the files included by signal.h, then look for SIGxxx names.
11736 : Remove SIGARRAYSIZE used by HPUX.
11737 : Remove SIGSTKSIZE used by Linux.
11738 : Remove SIGSTKSZ used by Posix.
11739 : Remove SIGTYP void lines used by OS2.
11740 xxx=`echo '#include <signal.h>' |
11741         $cppstdin $cppminus $cppflags 2>/dev/null |
11742         $grep '^[       ]*#.*include' | 
11743         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11744 : Check this list of files to be sure we have parsed the cpp output ok.
11745 : This will also avoid potentially non-existent files, such 
11746 : as ../foo/bar.h
11747 xxxfiles=''
11748 for xx in $xxx /dev/null ; do
11749         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11750 done
11751 : If we have found no files, at least try signal.h
11752 case "$xxxfiles" in
11753 '')     xxxfiles=`./findhdr signal.h` ;;
11754 esac
11755 xxx=`awk '
11756 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11757         print substr($2, 4, 20)
11758 }
11759 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11760         print substr($3, 4, 20)
11761 }' $xxxfiles`
11762 : Append some common names just in case the awk scan failed.
11763 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11764 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11765 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11766 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11767 : generate a few handy files for later
11768 $cat > signal.c <<'EOCP'
11769 #include <sys/types.h>
11770 #include <signal.h>
11771 #include <stdio.h>
11772 int main() {
11773
11774 /* Strange style to avoid deeply-nested #if/#else/#endif */
11775 #ifndef NSIG
11776 #  ifdef _NSIG
11777 #    define NSIG (_NSIG)
11778 #  endif
11779 #endif
11780
11781 #ifndef NSIG
11782 #  ifdef SIGMAX
11783 #    define NSIG (SIGMAX+1)
11784 #  endif
11785 #endif
11786
11787 #ifndef NSIG
11788 #  ifdef SIG_MAX
11789 #    define NSIG (SIG_MAX+1)
11790 #  endif
11791 #endif
11792
11793 #ifndef NSIG
11794 #  ifdef MAXSIG
11795 #    define NSIG (MAXSIG+1)
11796 #  endif
11797 #endif
11798
11799 #ifndef NSIG
11800 #  ifdef MAX_SIG
11801 #    define NSIG (MAX_SIG+1)
11802 #  endif
11803 #endif
11804
11805 #ifndef NSIG
11806 #  ifdef SIGARRAYSIZE
11807 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11808 #  endif
11809 #endif
11810
11811 #ifndef NSIG
11812 #  ifdef _sys_nsig
11813 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11814 #  endif
11815 #endif
11816
11817 /* Default to some arbitrary number that's big enough to get most
11818    of the common signals.
11819 */
11820 #ifndef NSIG
11821 #    define NSIG 50
11822 #endif
11823
11824 printf("NSIG %d\n", NSIG);
11825
11826 #ifndef JUST_NSIG
11827
11828 EOCP
11829
11830 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11831 {
11832         printf "#ifdef SIG"; printf $1; printf "\n"
11833         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11834         printf $1; printf ");\n"
11835         printf "#endif\n"
11836 }
11837 END {
11838         printf "#endif /* JUST_NSIG */\n";
11839         printf "}\n";
11840 }
11841 ' >>signal.c
11842 $cat >signal.awk <<'EOP'
11843 BEGIN { ndups = 0 }
11844 $1 ~ /^NSIG$/ { nsig = $2 }
11845 ($1 !~ /^NSIG$/) && (NF == 2) {
11846     if ($2 > maxsig) { maxsig = $2 }
11847     if (sig_name[$2]) {
11848         dup_name[ndups] = $1
11849         dup_num[ndups] = $2
11850         ndups++ 
11851     }
11852     else {
11853         sig_name[$2] = $1
11854         sig_num[$2] = $2
11855     }
11856 }
11857 END { 
11858     if (nsig == 0) {
11859         nsig = maxsig + 1
11860     }
11861     printf("NSIG %d\n", nsig);
11862     for (n = 1; n < nsig; n++) {
11863         if (sig_name[n]) {
11864             printf("%s %d\n", sig_name[n], sig_num[n])
11865         }
11866         else {
11867             printf("NUM%d %d\n", n, n) 
11868         }
11869     }
11870     for (n = 0; n < ndups; n++) {
11871         printf("%s %d\n", dup_name[n], dup_num[n])
11872     }
11873 }
11874 EOP
11875 $cat >signal_cmd <<EOS
11876 $startsh
11877 if $test -s signal.lst; then
11878     echo "Using your existing signal.lst file"
11879         exit 0
11880 fi
11881 xxx="$xxx"
11882 EOS
11883 $cat >>signal_cmd <<'EOS'
11884
11885 set signal
11886 if eval $compile_ok; then
11887         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11888 else
11889         echo "(I can't seem be able to compile the whole test program)" >&4
11890         echo "(I'll try it in little pieces.)" >&4
11891         set signal -DJUST_NSIG
11892         if eval $compile_ok; then
11893                 ./signal$_exe > signal.nsg
11894                 $cat signal.nsg
11895         else
11896                 echo "I can't seem to figure out how many signals you have." >&4
11897                 echo "Guessing 50." >&4
11898                 echo 'NSIG 50' > signal.nsg
11899         fi
11900         : Now look at all the signal names, one at a time.
11901         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11902                 $cat > signal.c <<EOCP
11903 #include <sys/types.h>
11904 #include <signal.h>
11905 #include <stdio.h>
11906 int main() {
11907 printf("$xx %d\n", SIG${xx});
11908 return 0;
11909 }
11910 EOCP
11911                 set signal
11912                 if eval $compile; then
11913                         echo "SIG${xx} found."
11914                         ./signal$_exe  >> signal.ls1
11915                 else
11916                         echo "SIG${xx} NOT found."
11917                 fi
11918         done
11919         if $test -s signal.ls1; then
11920                 $cat signal.nsg signal.ls1 |
11921                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11922         fi
11923
11924 fi
11925 if $test -s signal.lst; then
11926         :
11927 else
11928         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11929         echo 'kill -l' >signal
11930         set X `csh -f <signal`
11931         $rm -f signal
11932         shift
11933         case $# in
11934         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11935         esac
11936         echo $@ | $tr ' ' $trnl | \
11937             $awk '{ printf "%s %d\n", $1, ++s; }
11938                   END { printf "NSIG %d\n", ++s }' >signal.lst
11939 fi
11940 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11941 EOS
11942 chmod a+x signal_cmd
11943 $eunicefix signal_cmd
11944
11945 : generate list of signal names
11946 echo " "
11947 case "$sig_name_init" in
11948 '') doinit=yes ;;
11949 *)  case "$sig_num_init" in
11950     ''|*,*) doinit=yes ;;
11951     esac ;;
11952 esac
11953 case "$doinit" in
11954 yes)
11955         echo "Generating a list of signal names and numbers..." >&4
11956         . ./signal_cmd
11957         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11958         sig_name=`$awk 'BEGIN { printf "ZERO " }
11959                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11960         sig_num=`$awk  'BEGIN { printf "0 " }
11961                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11962         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11963                              !/^NSIG/   { printf "\"%s\", ", $1 }
11964                              END        { printf "0\n" }' signal.lst`
11965         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11966                              !/^NSIG/   { printf "%d, ", $2}
11967                              END        { printf "0\n"}' signal.lst`
11968         ;;
11969 esac
11970 echo "The following $sig_count signals are available:"
11971 echo " "
11972 echo $sig_name | $awk \
11973 'BEGIN { linelen = 0 }
11974 {
11975         for (i = 1; i <= NF; i++) {
11976                 name = "SIG" $i " "
11977                 linelen = linelen + length(name)
11978                 if (linelen > 70) {
11979                         printf "\n"
11980                         linelen = length(name)
11981                 }
11982                 printf "%s", name
11983         }
11984         printf "\n"
11985 }'
11986 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11987
11988 : see what type is used for signed size_t
11989 set ssize_t ssizetype int stdio.h sys/types.h
11990 eval $typedef
11991 dflt="$ssizetype"
11992 $cat > ssize.c <<EOM
11993 #include <stdio.h>
11994 #include <sys/types.h>
11995 #define Size_t $sizetype
11996 #define SSize_t $dflt
11997 int main()
11998 {
11999         if (sizeof(Size_t) == sizeof(SSize_t))
12000                 printf("$dflt\n");
12001         else if (sizeof(Size_t) == sizeof(int))
12002                 printf("int\n");
12003         else 
12004                 printf("long\n");
12005         exit(0);
12006 }
12007 EOM
12008 echo " "
12009 set ssize
12010 if eval $compile_ok && ./ssize > /dev/null; then
12011         ssizetype=`./ssize`
12012         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12013 else
12014         $cat >&4 <<EOM
12015 Help! I can't compile and run the ssize_t test program: please enlighten me!
12016 (This is probably a misconfiguration in your system or libraries, and
12017 you really ought to fix it.  Still, I'll try anyway.)
12018
12019 I need a type that is the same size as $sizetype, but is guaranteed to
12020 be signed.  Common values are ssize_t, int and long.
12021
12022 EOM
12023         rp="What signed type is the same size as $sizetype?"
12024         . ./myread
12025         ssizetype="$ans"
12026 fi
12027 $rm -f ssize ssize.*
12028
12029 : see what type of char stdio uses.
12030 echo " "
12031 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12032         echo "Your stdio uses unsigned chars." >&4
12033         stdchar="unsigned char"
12034 else
12035         echo "Your stdio uses signed chars." >&4
12036         stdchar="char"
12037 fi
12038
12039 : see if time exists
12040 echo " "
12041 if test "X$d_time" = X -o X"$timetype" = X; then
12042     if set time val -f d_time; eval $csym; $val; then
12043                 echo 'time() found.' >&4
12044                 val="$define"
12045                 rp="What is the type returned by time() on this system?"
12046                 set time_t timetype long stdio.h sys/types.h
12047                 eval $typedef_ask
12048     else
12049                 echo 'time() not found, hope that will do.' >&4
12050                 val="$undef"
12051                 timetype='int';
12052     fi
12053     set d_time
12054     eval $setvar
12055 fi
12056
12057 : see what type uids are declared as in the kernel
12058 echo " "
12059 echo "Looking for the type for user ids returned by getuid()."
12060 set uid_t uidtype xxx stdio.h sys/types.h
12061 eval $typedef
12062 case "$uidtype" in
12063 xxx)
12064         xxx=`./findhdr sys/user.h`
12065         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12066         case $1 in
12067         unsigned) dflt="$1 $2" ;;
12068         *) dflt="$1" ;;
12069         esac
12070         ;;
12071 *) dflt="$uidtype";;
12072 esac
12073 case "$uidtype" in
12074 uid_t)  echo "uid_t found." ;;
12075 *)      rp="What is the type for user ids returned by getuid()?"
12076         . ./myread
12077         uidtype="$ans"
12078         ;;
12079 esac
12080
12081 : see if dbm.h is available
12082 : see if dbmclose exists
12083 set dbmclose d_dbmclose
12084 eval $inlibc
12085
12086 case "$d_dbmclose" in
12087 $define)
12088         set dbm.h i_dbm
12089         eval $inhdr
12090         case "$i_dbm" in
12091         $define)
12092                 val="$undef"
12093                 set i_rpcsvcdbm
12094                 eval $setvar
12095                 ;;
12096         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12097                 eval $inhdr
12098                 ;;
12099         esac
12100         ;;
12101 *)      echo "We won't be including <dbm.h>"
12102         val="$undef"
12103         set i_dbm
12104         eval $setvar
12105         val="$undef"
12106         set i_rpcsvcdbm
12107         eval $setvar
12108         ;;
12109 esac
12110
12111 : see if this is a sys/file.h system
12112 val=''
12113 set sys/file.h val
12114 eval $inhdr
12115
12116 : do we need to include sys/file.h ?
12117 case "$val" in
12118 "$define")
12119         echo " "
12120         if $h_sysfile; then
12121                 val="$define"
12122                 echo "We'll be including <sys/file.h>." >&4
12123         else
12124                 val="$undef"
12125                 echo "We won't be including <sys/file.h>." >&4
12126         fi
12127         ;;
12128 *)
12129         h_sysfile=false
12130         ;;
12131 esac
12132 set i_sysfile
12133 eval $setvar
12134
12135 : see if fcntl.h is there
12136 val=''
12137 set fcntl.h val
12138 eval $inhdr
12139
12140 : see if we can include fcntl.h
12141 case "$val" in
12142 "$define")
12143         echo " "
12144         if $h_fcntl; then
12145                 val="$define"
12146                 echo "We'll be including <fcntl.h>." >&4
12147         else
12148                 val="$undef"
12149                 if $h_sysfile; then
12150         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12151                 else
12152                         echo "We won't be including <fcntl.h>." >&4
12153                 fi
12154         fi
12155         ;;
12156 *)
12157         h_fcntl=false
12158         val="$undef"
12159         ;;
12160 esac
12161 set i_fcntl
12162 eval $setvar
12163
12164 : see if locale.h is available
12165 set locale.h i_locale
12166 eval $inhdr
12167
12168 : see if mach cthreads are available
12169 if test "X$usethreads" = "X$define"; then
12170         set mach/cthreads.h i_machcthr
12171         eval $inhdr
12172 else
12173         i_machcthr="$undef"
12174 fi
12175
12176
12177
12178 : see if this is a math.h system
12179 set math.h i_math
12180 eval $inhdr
12181
12182 : see if this is a mntent.h system
12183 set mntent.h i_mntent
12184 eval $inhdr
12185
12186 : see if ndbm.h is available
12187 set ndbm.h t_ndbm
12188 eval $inhdr
12189 case "$t_ndbm" in
12190 $define)
12191         : see if dbm_open exists
12192         set dbm_open d_dbm_open
12193         eval $inlibc
12194         case "$d_dbm_open" in
12195         $undef)
12196                 t_ndbm="$undef"
12197                 echo "We won't be including <ndbm.h>"
12198                 ;;
12199         esac
12200         ;;
12201 esac
12202 val="$t_ndbm"
12203 set i_ndbm
12204 eval $setvar
12205
12206 : see if net/errno.h is available
12207 val=''
12208 set net/errno.h val
12209 eval $inhdr
12210
12211 : Unfortunately, it causes problems on some systems.  Arrgh.
12212 case "$val" in
12213 $define)
12214         cat > try.c <<'EOM'
12215 #include <stdio.h>
12216 #include <errno.h>
12217 #include <net/errno.h>
12218 int func()
12219 {
12220         return ENOTSOCK;
12221 }
12222 EOM
12223         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12224                 echo "We'll be including <net/errno.h>." >&4
12225         else
12226                 echo "We won't be including <net/errno.h>." >&4
12227                 val="$undef"
12228         fi
12229         $rm -f try.* try
12230         ;;
12231 esac
12232 set i_neterrno
12233 eval $setvar
12234
12235 : see if netinet/tcp.h is available
12236 set netinet/tcp.h i_netinettcp
12237 eval $inhdr
12238
12239 : see if this is a poll.h system
12240 set poll.h i_poll
12241 eval $inhdr
12242
12243 : get C preprocessor symbols handy
12244 echo " "
12245 $echo $n "Hmm... $c"
12246 echo $al | $tr ' ' $trnl >Cppsym.know
12247 $cat <<EOSS >Cppsym
12248 $startsh
12249 case "\$1" in
12250 -l) list=true
12251         shift
12252         ;;
12253 esac
12254 unknown=''
12255 case "\$list\$#" in
12256 1|2)
12257         for sym do
12258                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12259                         exit 0
12260                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12261                         :
12262                 else
12263                         unknown="\$unknown \$sym"
12264                 fi
12265         done
12266         set X \$unknown
12267         shift
12268         ;;
12269 esac
12270 case \$# in
12271 0) exit 1;;
12272 esac
12273 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12274 #ifdef \1\\
12275 exit 0; _ _ _ _\1\\      \1\\
12276 #endif\\
12277 /' >Cppsym\$\$
12278 echo "exit 1; _ _ _" >>Cppsym\$\$
12279 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12280 case "\$list" in
12281 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12282 *)
12283         sh Cppsym2\$\$
12284         status=\$?
12285         ;;
12286 esac
12287 $rm -f Cppsym\$\$ Cppsym2\$\$
12288 exit \$status
12289 EOSS
12290 chmod +x Cppsym
12291 $eunicefix Cppsym
12292 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12293
12294 : now check the C compiler for additional symbols
12295 postprocess_cc_v=''
12296 case "$osname" in
12297 aix) postprocess_cc_v="|$tr , ' '" ;;
12298 esac
12299 $cat >ccsym <<EOS
12300 $startsh
12301 $cat >tmp.c <<EOF
12302 extern int foo;
12303 EOF
12304 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12305 do
12306         case "\$i" in
12307         -D*) echo "\$i" | $sed 's/^-D//';;
12308         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12309         esac
12310 done
12311 $rm -f try.c
12312 EOS
12313 postprocess_cc_v=''
12314 chmod +x ccsym
12315 $eunicefix ccsym
12316 ./ccsym > ccsym1.raw
12317 if $test -s ccsym1.raw; then
12318        $sort ccsym1.raw | $uniq >ccsym.raw
12319 else
12320        mv ccsym1.raw ccsym.raw
12321 fi
12322
12323 $awk '/\=/ { print $0; next }
12324         { print $0"=1" }' ccsym.raw >ccsym.list
12325 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12326 $comm -13 ccsym.true ccsym.list >ccsym.own
12327 $comm -12 ccsym.true ccsym.list >ccsym.com
12328 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12329 also=''
12330 if $test -z ccsym.raw; then
12331         echo "Your C compiler doesn't seem to define any symbols!" >&4
12332         echo " "
12333         echo "However, your C preprocessor defines the following symbols:"
12334         $cat Cppsym.true
12335         ccsymbols=''
12336         cppsymbols=`$cat Cppsym.true`
12337         cppsymbols=`echo $cppsymbols`
12338         cppccsymbols="$cppsymbols"
12339 else
12340         if $test -s ccsym.com; then
12341                 echo "Your C compiler and pre-processor define these symbols:"
12342                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12343                 also='also '
12344                 symbols='ones'
12345                 cppccsymbols=`$cat ccsym.com`
12346                 cppccsymbols=`echo $cppccsymbols`
12347                 $test "$silent" || sleep 1
12348         fi
12349         if $test -s ccsym.cpp; then
12350                 $test "$also" && echo " "
12351                 echo "Your C pre-processor ${also}defines the following symbols:"
12352                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12353                 also='further '
12354                 cppsymbols=`$cat ccsym.cpp`
12355                 cppsymbols=`echo $cppsymbols`
12356                 $test "$silent" || sleep 1
12357         fi
12358         if $test -s ccsym.own; then
12359                 $test "$also" && echo " "
12360                 echo "Your C compiler ${also}defines the following cpp symbols:"
12361                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12362                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12363                 ccsymbols=`$cat ccsym.own`
12364                 ccsymbols=`echo $ccsymbols`
12365                 $test "$silent" || sleep 1
12366         fi
12367 fi
12368 $rm -f ccsym*
12369
12370 : see if this is a termio system
12371 val="$undef"
12372 val2="$undef"
12373 val3="$undef"
12374 if $test `./findhdr termios.h`; then
12375         set tcsetattr i_termios
12376         eval $inlibc
12377         val3="$i_termios"
12378 fi
12379 echo " "
12380 case "$val3" in
12381 "$define") echo "You have POSIX termios.h... good!" >&4;;
12382 *) if ./Cppsym pyr; then
12383                 case "`/bin/universe`" in
12384                 ucb) if $test `./findhdr sgtty.h`; then
12385                                 val2="$define"
12386                                 echo "<sgtty.h> found." >&4
12387                         else
12388                                 echo "System is pyramid with BSD universe."
12389                                 echo "<sgtty.h> not found--you could have problems." >&4
12390                         fi;;
12391                 *) if $test `./findhdr termio.h`; then
12392                                 val="$define"
12393                                 echo "<termio.h> found." >&4
12394                         else
12395                                 echo "System is pyramid with USG universe."
12396                                 echo "<termio.h> not found--you could have problems." >&4
12397                         fi;;
12398                 esac
12399         elif ./usg; then
12400                 if $test `./findhdr termio.h`; then
12401                         echo "<termio.h> found." >&4
12402                         val="$define"
12403                 elif $test `./findhdr sgtty.h`; then
12404                         echo "<sgtty.h> found." >&4
12405                         val2="$define"
12406                 else
12407 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12408                 fi
12409         else
12410                 if $test `./findhdr sgtty.h`; then
12411                         echo "<sgtty.h> found." >&4
12412                         val2="$define"
12413                 elif $test `./findhdr termio.h`; then
12414                         echo "<termio.h> found." >&4
12415                         val="$define"
12416                 else
12417 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12418                 fi
12419         fi;;
12420 esac
12421 set i_termio; eval $setvar
12422 val=$val2; set i_sgtty; eval $setvar
12423 val=$val3; set i_termios; eval $setvar
12424
12425 : see if this is a shadow.h system
12426 set shadow.h i_shadow
12427 eval $inhdr
12428
12429 : see if this is a socks.h system
12430 set socks.h i_socks
12431 eval $inhdr
12432
12433 : see if stdarg is available
12434 echo " "
12435 if $test `./findhdr stdarg.h`; then
12436         echo "<stdarg.h> found." >&4
12437         valstd="$define"
12438 else
12439         echo "<stdarg.h> NOT found." >&4
12440         valstd="$undef"
12441 fi
12442
12443 : see if varags is available
12444 echo " "
12445 if $test `./findhdr varargs.h`; then
12446         echo "<varargs.h> found." >&4
12447 else
12448         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12449 fi
12450
12451 : set up the varargs testing programs
12452 $cat > varargs.c <<EOP
12453 #ifdef I_STDARG
12454 #include <stdarg.h>
12455 #endif
12456 #ifdef I_VARARGS
12457 #include <varargs.h>
12458 #endif
12459
12460 #ifdef I_STDARG
12461 int f(char *p, ...)
12462 #else
12463 int f(va_alist)
12464 va_dcl
12465 #endif
12466 {
12467         va_list ap;
12468 #ifndef I_STDARG
12469         char *p;
12470 #endif
12471 #ifdef I_STDARG
12472         va_start(ap,p);
12473 #else
12474         va_start(ap);
12475         p = va_arg(ap, char *);
12476 #endif
12477         va_end(ap);
12478 }
12479 EOP
12480 $cat > varargs <<EOP
12481 $startsh
12482 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12483         echo "true"
12484 else
12485         echo "false"
12486 fi
12487 $rm -f varargs$_o
12488 EOP
12489 chmod +x varargs
12490
12491 : now check which varargs header should be included
12492 echo " "
12493 i_varhdr=''
12494 case "$valstd" in
12495 "$define")
12496         if `./varargs I_STDARG`; then
12497                 val='stdarg.h'
12498         elif `./varargs I_VARARGS`; then
12499                 val='varargs.h'
12500         fi
12501         ;;
12502 *)
12503         if `./varargs I_VARARGS`; then
12504                 val='varargs.h'
12505         fi
12506         ;;
12507 esac
12508 case "$val" in
12509 '')
12510 echo "I could not find the definition for va_dcl... You have problems..." >&4
12511         val="$undef"; set i_stdarg; eval $setvar
12512         val="$undef"; set i_varargs; eval $setvar
12513         ;;
12514 *) 
12515         set i_varhdr
12516         eval $setvar
12517         case "$i_varhdr" in
12518         stdarg.h)
12519                 val="$define"; set i_stdarg; eval $setvar
12520                 val="$undef"; set i_varargs; eval $setvar
12521                 ;;
12522         varargs.h)
12523                 val="$undef"; set i_stdarg; eval $setvar
12524                 val="$define"; set i_varargs; eval $setvar
12525                 ;;
12526         esac
12527         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12528 esac
12529 $rm -f varargs*
12530
12531 : see if stddef is available
12532 set stddef.h i_stddef
12533 eval $inhdr
12534
12535 : see if sys/access.h is available
12536 set sys/access.h i_sysaccess
12537 eval $inhdr
12538
12539 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12540 set sys/filio.h i_sysfilio
12541 eval $inhdr
12542 echo " "
12543 if $test `./findhdr sys/ioctl.h`; then
12544         val="$define"
12545         echo '<sys/ioctl.h> found.' >&4
12546 else
12547         val="$undef"
12548         if $test $i_sysfilio = "$define"; then
12549             echo '<sys/ioctl.h> NOT found.' >&4
12550         else
12551                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12552                 $test $i_termio = "$define" && xxx="termio.h"
12553                 $test $i_termios = "$define" && xxx="termios.h"
12554 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12555         fi
12556 fi
12557 set i_sysioctl
12558 eval $setvar
12559
12560 : see if sys/resource.h has to be included
12561 set sys/resource.h i_sysresrc
12562 eval $inhdr
12563
12564 : see if sys/security.h is available
12565 set sys/security.h i_syssecrt
12566 eval $inhdr
12567
12568 : see if this is a sys/statvfs.h system
12569 set sys/statvfs.h i_sysstatvfs
12570 eval $inhdr
12571
12572 : see if this is a sys/un.h system
12573 set sys/un.h i_sysun
12574 eval $inhdr
12575
12576 : see if this is a syswait system
12577 set sys/wait.h i_syswait
12578 eval $inhdr
12579
12580 : see if this is an utime system
12581 set utime.h i_utime
12582 eval $inhdr
12583
12584 : see if this is a values.h system
12585 set values.h i_values
12586 eval $inhdr
12587
12588 : see if this is a vfork system
12589 case "$d_vfork" in
12590 "$define")
12591         set vfork.h i_vfork
12592         eval $inhdr
12593         ;;
12594 *)
12595         i_vfork="$undef"
12596         ;;
12597 esac
12598
12599 : see if gdbm.h is available
12600 set gdbm.h t_gdbm
12601 eval $inhdr
12602 case "$t_gdbm" in
12603 $define)
12604         : see if gdbm_open exists
12605         set gdbm_open d_gdbm_open
12606         eval $inlibc
12607         case "$d_gdbm_open" in
12608         $undef)
12609                 t_gdbm="$undef"
12610                 echo "We won't be including <gdbm.h>"
12611                 ;;
12612         esac
12613         ;;
12614 esac
12615 val="$t_gdbm"
12616 set i_gdbm
12617 eval $setvar
12618
12619 echo " "
12620 echo "Looking for extensions..." >&4
12621 : If we are using the old config.sh, known_extensions may contain
12622 : old or inaccurate or duplicate values.
12623 known_extensions=''
12624 nonxs_extensions=''
12625 : We do not use find because it might not be available.
12626 : We do not just use MANIFEST because the user may have dropped
12627 : some additional extensions into the source tree and expect them
12628 : to be built.
12629
12630 : Function to recursively find available extensions, ignoring DynaLoader
12631 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12632 find_extensions='
12633     for xxx in *; do
12634        case "$xxx" in
12635            DynaLoader|dynaload) ;;
12636            *)
12637            if $test -f $xxx/$xxx.xs; then
12638                known_extensions="$known_extensions $1$xxx";
12639            elif $test -f $xxx/Makefile.PL; then
12640                nonxs_extensions="$nonxs_extensions $1$xxx";
12641            else
12642                if $test -d $xxx -a $# -lt 10; then
12643                    set $1$xxx/ $*;
12644                    cd $xxx;
12645                    eval $find_extensions;
12646                    cd ..;
12647                    shift;
12648                fi
12649            fi
12650            ;;
12651        esac
12652     done'
12653 tdir=`pwd`
12654 cd $rsrc/ext
12655 set
12656 shift
12657 eval $find_extensions
12658 set X $nonxs_extensions
12659 shift
12660 nonxs_extensions="$*"
12661 set X $known_extensions
12662 shift
12663 known_extensions="$*"
12664 cd $tdir
12665
12666 : Now see which are supported on this system.
12667 avail_ext=''
12668 for xxx in $known_extensions ; do
12669         case "$xxx" in
12670         DB_File|db_file)
12671                 case "$i_db" in
12672                 $define) avail_ext="$avail_ext $xxx" ;;
12673                 esac
12674                 ;;
12675         GDBM_File|gdbm_fil)
12676                 case "$i_gdbm" in 
12677                 $define) avail_ext="$avail_ext $xxx" ;;
12678                 esac
12679                 ;;
12680         NDBM_File|ndbm_fil)
12681                 case "$i_ndbm" in
12682                 $define) avail_ext="$avail_ext $xxx" ;;
12683                 esac
12684                 ;;
12685         ODBM_File|odbm_fil) 
12686                 case "${i_dbm}${i_rpcsvcdbm}" in
12687                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12688                 esac
12689                 ;;
12690         POSIX|posix)
12691                 case "$useposix" in
12692                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12693                 esac
12694                 ;;
12695         Opcode|opcode)
12696                 case "$useopcode" in
12697                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12698                 esac
12699                 ;;
12700         Socket|socket)
12701                 case "$d_socket" in 
12702                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12703                 esac
12704                 ;;
12705         Thread|thread)
12706                 case "$usethreads" in 
12707                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12708                 esac
12709                 ;;
12710         IPC/SysV|ipc/sysv)
12711                 : XXX Do we need a useipcsysv variable here
12712                 case "${d_msg}${d_sem}${d_shm}" in 
12713                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12714                 esac
12715                 ;;
12716         *)      avail_ext="$avail_ext $xxx"
12717                 ;;
12718         esac
12719 done
12720
12721 set X $avail_ext
12722 shift
12723 avail_ext="$*"
12724
12725 : Now see which nonxs extensions are supported on this system.
12726 : For now assume all are.
12727 nonxs_ext=''
12728 for xxx in $nonxs_extensions ; do
12729         case "$xxx" in
12730         *)      nonxs_ext="$nonxs_ext $xxx"
12731                 ;;
12732         esac
12733 done
12734
12735 set X $nonxs_ext
12736 shift
12737 nonxs_ext="$*"
12738
12739 case $usedl in
12740 $define)
12741         $cat <<EOM
12742 A number of extensions are supplied with $package.  You may choose to
12743 compile these extensions for dynamic loading (the default), compile
12744 them into the $package executable (static loading), or not include
12745 them at all.  Answer "none" to include no extensions.
12746 Note that DynaLoader is always built and need not be mentioned here.
12747
12748 EOM
12749         case "$dynamic_ext" in
12750         '') dflt="$avail_ext" ;;
12751         *)      dflt="$dynamic_ext"
12752                 # Perhaps we are reusing an old out-of-date config.sh.
12753                 case "$hint" in
12754                 previous)
12755                         if test X"$dynamic_ext" != X"$avail_ext"; then
12756                                 $cat <<EOM
12757 NOTICE:  Your previous config.sh list may be incorrect. 
12758 The extensions now available to you are 
12759         ${avail_ext}
12760 but the default list from your previous config.sh is
12761         ${dynamic_ext} 
12762
12763 EOM
12764                         fi
12765                         ;;
12766                 esac
12767                 ;;
12768         esac
12769         case "$dflt" in
12770         '')     dflt=none;;
12771         esac
12772         rp="What extensions do you wish to load dynamically?"
12773         . ./myread
12774         case "$ans" in
12775         none) dynamic_ext=' ' ;;
12776         *) dynamic_ext="$ans" ;;
12777         esac
12778
12779         case "$static_ext" in
12780         '')
12781                 : Exclude those already listed in dynamic linking
12782                 dflt=''
12783                 for xxx in $avail_ext; do
12784                         case " $dynamic_ext " in
12785                         *" $xxx "*) ;;
12786                         *) dflt="$dflt $xxx" ;;
12787                         esac
12788                 done
12789                 set X $dflt
12790                 shift
12791                 dflt="$*"
12792                 ;;
12793         *)  dflt="$static_ext" 
12794                 ;;
12795         esac
12796
12797         case "$dflt" in
12798         '')     dflt=none;;
12799         esac
12800         rp="What extensions do you wish to load statically?"
12801         . ./myread
12802         case "$ans" in
12803         none) static_ext=' ' ;;
12804         *) static_ext="$ans" ;;
12805         esac
12806         ;;
12807 *)
12808         $cat <<EOM
12809 A number of extensions are supplied with $package.  Answer "none" 
12810 to include no extensions. 
12811 Note that DynaLoader is always built and need not be mentioned here.
12812
12813 EOM
12814         case "$static_ext" in
12815         '') dflt="$avail_ext" ;;
12816         *)      dflt="$static_ext"
12817                 # Perhaps we are reusing an old out-of-date config.sh.
12818                 case "$hint" in
12819                 previous)
12820                         if test X"$static_ext" != X"$avail_ext"; then
12821                                 $cat <<EOM
12822 NOTICE:  Your previous config.sh list may be incorrect. 
12823 The extensions now available to you are 
12824         ${avail_ext}
12825 but the default list from your previous config.sh is
12826         ${static_ext} 
12827
12828 EOM
12829                         fi
12830                         ;;
12831                 esac
12832                 ;;
12833         esac
12834         : Exclude those that are not xs extensions
12835         case "$dflt" in
12836         '')     dflt=none;;
12837         esac
12838         rp="What extensions do you wish to include?"
12839         . ./myread
12840         case "$ans" in
12841         none) static_ext=' ' ;;
12842         *) static_ext="$ans" ;;
12843         esac
12844         ;;
12845 esac
12846
12847 set X $dynamic_ext $static_ext $nonxs_ext
12848 shift
12849 extensions="$*"
12850
12851 : Remove build directory name from cppstdin so it can be used from
12852 : either the present location or the final installed location.
12853 echo " "
12854 : Get out of the UU directory to get correct path name.
12855 cd ..
12856 case "$cppstdin" in
12857 `pwd`/cppstdin)
12858         echo "Stripping down cppstdin path name"
12859         cppstdin=cppstdin
12860         ;;
12861 esac
12862 cd UU
12863
12864 : end of configuration questions
12865 echo " "
12866 echo "End of configuration questions."
12867 echo " "
12868
12869 : back to where it started
12870 if test -d ../UU; then
12871         cd ..
12872 fi
12873
12874 : configuration may be patched via a 'config.over' file
12875 if $test -f config.over; then
12876         echo " "
12877         dflt=y
12878         rp='I see a config.over file.  Do you wish to load it?'
12879         . UU/myread
12880         case "$ans" in
12881         n*) echo "OK, I'll ignore it.";;
12882         *)      . ./config.over
12883                 echo "Configuration override changes have been loaded."
12884                 ;;
12885         esac
12886 fi
12887
12888 : in case they want portability, strip down executable paths
12889 case "$d_portable" in
12890 "$define")
12891         echo " "
12892         echo "Stripping down executable paths..." >&4
12893         for file in $loclist $trylist; do
12894                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12895                         eval $file="\$file"
12896                 fi
12897         done
12898         ;;
12899 esac
12900
12901 : create config.sh file
12902 echo " "
12903 echo "Creating config.sh..." >&4
12904 $spitshell <<EOT >config.sh
12905 $startsh
12906 #
12907 # This file was produced by running the Configure script. It holds all the
12908 # definitions figured out by Configure. Should you modify one of these values,
12909 # do not forget to propagate your changes by running "Configure -der". You may
12910 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12911 #
12912
12913 # Package name      : $package
12914 # Source directory  : $src
12915 # Configuration time: $cf_time
12916 # Configured by     : $cf_by
12917 # Target system     : $myuname
12918
12919 Author='$Author'
12920 Date='$Date'
12921 Header='$Header'
12922 Id='$Id'
12923 Locker='$Locker'
12924 Log='$Log'
12925 Mcc='$Mcc'
12926 RCSfile='$RCSfile'
12927 Revision='$Revision'
12928 Source='$Source'
12929 State='$State'
12930 _a='$_a'
12931 _exe='$_exe'
12932 _o='$_o'
12933 afs='$afs'
12934 alignbytes='$alignbytes'
12935 ansi2knr='$ansi2knr'
12936 aphostname='$aphostname'
12937 apiversion='$apiversion'
12938 ar='$ar'
12939 archlib='$archlib'
12940 archlibexp='$archlibexp'
12941 archname64='$archname64'
12942 archname='$archname'
12943 archobjs='$archobjs'
12944 awk='$awk'
12945 baserev='$baserev'
12946 bash='$bash'
12947 bin='$bin'
12948 binexp='$binexp'
12949 bison='$bison'
12950 byacc='$byacc'
12951 byteorder='$byteorder'
12952 c='$c'
12953 castflags='$castflags'
12954 cat='$cat'
12955 cc='$cc'
12956 cccdlflags='$cccdlflags'
12957 ccdlflags='$ccdlflags'
12958 ccflags='$ccflags'
12959 ccsymbols='$ccsymbols'
12960 cf_by='$cf_by'
12961 cf_email='$cf_email'
12962 cf_time='$cf_time'
12963 chgrp='$chgrp'
12964 chmod='$chmod'
12965 chown='$chown'
12966 clocktype='$clocktype'
12967 comm='$comm'
12968 compress='$compress'
12969 contains='$contains'
12970 cp='$cp'
12971 cpio='$cpio'
12972 cpp='$cpp'
12973 cpp_stuff='$cpp_stuff'
12974 cppccsymbols='$cppccsymbols'
12975 cppflags='$cppflags'
12976 cpplast='$cpplast'
12977 cppminus='$cppminus'
12978 cpprun='$cpprun'
12979 cppstdin='$cppstdin'
12980 cppsymbols='$cppsymbols'
12981 crosscompile='$crosscompile'
12982 cryptlib='$cryptlib'
12983 csh='$csh'
12984 d_Gconvert='$d_Gconvert'
12985 d_access='$d_access'
12986 d_accessx='$d_accessx'
12987 d_alarm='$d_alarm'
12988 d_archlib='$d_archlib'
12989 d_attribut='$d_attribut'
12990 d_bcmp='$d_bcmp'
12991 d_bcopy='$d_bcopy'
12992 d_bsd='$d_bsd'
12993 d_bsdgetpgrp='$d_bsdgetpgrp'
12994 d_bsdsetpgrp='$d_bsdsetpgrp'
12995 d_bzero='$d_bzero'
12996 d_casti32='$d_casti32'
12997 d_castneg='$d_castneg'
12998 d_charvspr='$d_charvspr'
12999 d_chown='$d_chown'
13000 d_chroot='$d_chroot'
13001 d_chsize='$d_chsize'
13002 d_closedir='$d_closedir'
13003 d_cmsghdr_s='$d_cmsghdr_s'
13004 d_const='$d_const'
13005 d_crypt='$d_crypt'
13006 d_csh='$d_csh'
13007 d_cuserid='$d_cuserid'
13008 d_dbl_dig='$d_dbl_dig'
13009 d_dbmclose64='$d_dbmclose64'
13010 d_dbminit64='$d_dbminit64'
13011 d_delete64='$d_delete64'
13012 d_difftime='$d_difftime'
13013 d_dirent64_s='$d_dirent64_s'
13014 d_dirnamlen='$d_dirnamlen'
13015 d_dlerror='$d_dlerror'
13016 d_dlopen='$d_dlopen'
13017 d_dlsymun='$d_dlsymun'
13018 d_dosuid='$d_dosuid'
13019 d_drand48proto='$d_drand48proto'
13020 d_dup2='$d_dup2'
13021 d_eaccess='$d_eaccess'
13022 d_endgrent='$d_endgrent'
13023 d_endhent='$d_endhent'
13024 d_endnent='$d_endnent'
13025 d_endpent='$d_endpent'
13026 d_endpwent='$d_endpwent'
13027 d_endsent='$d_endsent'
13028 d_endspent='$d_endspent'
13029 d_eofnblk='$d_eofnblk'
13030 d_eunice='$d_eunice'
13031 d_fchmod='$d_fchmod'
13032 d_fchown='$d_fchown'
13033 d_fcntl='$d_fcntl'
13034 d_fd_macros='$d_fd_macros'
13035 d_fd_set='$d_fd_set'
13036 d_fds_bits='$d_fds_bits'
13037 d_fetch64='$d_fetch64'
13038 d_fgetpos64='$d_fgetpos64'
13039 d_fgetpos='$d_fgetpos'
13040 d_firstkey64='$d_firstkey64'
13041 d_flexfnam='$d_flexfnam'
13042 d_flock64_s='$d_flock64_s'
13043 d_flock='$d_flock'
13044 d_fopen64='$d_fopen64'
13045 d_fork='$d_fork'
13046 d_fpathconf='$d_fpathconf'
13047 d_freopen64='$d_freopen64'
13048 d_fseek64='$d_fseek64'
13049 d_fseeko64='$d_fseeko64'
13050 d_fseeko='$d_fseeko'
13051 d_fsetpos64='$d_fsetpos64'
13052 d_fsetpos='$d_fsetpos'
13053 d_fstat64='$d_fstat64'
13054 d_fstatfs='$d_fstatfs'
13055 d_fstatvfs='$d_fstatvfs'
13056 d_ftell64='$d_ftell64'
13057 d_ftello64='$d_ftello64'
13058 d_ftello='$d_ftello'
13059 d_ftime='$d_ftime'
13060 d_ftruncate64='$d_ftruncate64'
13061 d_getgrent='$d_getgrent'
13062 d_getgrps='$d_getgrps'
13063 d_gethbyaddr='$d_gethbyaddr'
13064 d_gethbyname='$d_gethbyname'
13065 d_gethent='$d_gethent'
13066 d_gethname='$d_gethname'
13067 d_gethostprotos='$d_gethostprotos'
13068 d_getlogin='$d_getlogin'
13069 d_getmntent='$d_getmntent'
13070 d_getnbyaddr='$d_getnbyaddr'
13071 d_getnbyname='$d_getnbyname'
13072 d_getnent='$d_getnent'
13073 d_getnetprotos='$d_getnetprotos'
13074 d_getpbyname='$d_getpbyname'
13075 d_getpbynumber='$d_getpbynumber'
13076 d_getpent='$d_getpent'
13077 d_getpgid='$d_getpgid'
13078 d_getpgrp2='$d_getpgrp2'
13079 d_getpgrp='$d_getpgrp'
13080 d_getppid='$d_getppid'
13081 d_getprior='$d_getprior'
13082 d_getprotoprotos='$d_getprotoprotos'
13083 d_getpwent='$d_getpwent'
13084 d_getsbyname='$d_getsbyname'
13085 d_getsbyport='$d_getsbyport'
13086 d_getsent='$d_getsent'
13087 d_getservprotos='$d_getservprotos'
13088 d_getspent='$d_getspent'
13089 d_getspnam='$d_getspnam'
13090 d_gettimeod='$d_gettimeod'
13091 d_gnulibc='$d_gnulibc'
13092 d_grpasswd='$d_grpasswd'
13093 d_hasmntopt='$d_hasmntopt'
13094 d_htonl='$d_htonl'
13095 d_index='$d_index'
13096 d_inetaton='$d_inetaton'
13097 d_ino64_t='$d_ino64_t'
13098 d_int64t='$d_int64t'
13099 d_iovec_s='$d_iovec_s'
13100 d_isascii='$d_isascii'
13101 d_killpg='$d_killpg'
13102 d_lchown='$d_lchown'
13103 d_link='$d_link'
13104 d_llseek='$d_llseek'
13105 d_locconv='$d_locconv'
13106 d_lockf64='$d_lockf64'
13107 d_lockf='$d_lockf'
13108 d_longdbl='$d_longdbl'
13109 d_longlong='$d_longlong'
13110 d_lseek64='$d_lseek64'
13111 d_lstat64='$d_lstat64'
13112 d_lstat='$d_lstat'
13113 d_madvise='$d_madvise'
13114 d_mblen='$d_mblen'
13115 d_mbstowcs='$d_mbstowcs'
13116 d_mbtowc='$d_mbtowc'
13117 d_memchr='$d_memchr'
13118 d_memcmp='$d_memcmp'
13119 d_memcpy='$d_memcpy'
13120 d_memmove='$d_memmove'
13121 d_memset='$d_memset'
13122 d_mkdir='$d_mkdir'
13123 d_mkfifo='$d_mkfifo'
13124 d_mktime='$d_mktime'
13125 d_mmap='$d_mmap'
13126 d_mprotect='$d_mprotect'
13127 d_msg='$d_msg'
13128 d_msg_ctrunc='$d_msg_ctrunc'
13129 d_msg_dontroute='$d_msg_dontroute'
13130 d_msg_oob='$d_msg_oob'
13131 d_msg_peek='$d_msg_peek'
13132 d_msg_proxy='$d_msg_proxy'
13133 d_msgctl='$d_msgctl'
13134 d_msgget='$d_msgget'
13135 d_msghdr_s='$d_msghdr_s'
13136 d_msgrcv='$d_msgrcv'
13137 d_msgsnd='$d_msgsnd'
13138 d_msync='$d_msync'
13139 d_munmap='$d_munmap'
13140 d_mymalloc='$d_mymalloc'
13141 d_nextkey64='$d_nextkey64'
13142 d_nice='$d_nice'
13143 d_off64_t='$d_off64_t'
13144 d_offset_t='$d_offset_t'
13145 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13146 d_oldpthreads='$d_oldpthreads'
13147 d_oldsock='$d_oldsock'
13148 d_open3='$d_open3'
13149 d_open64='$d_open64'
13150 d_opendir64='$d_opendir64'
13151 d_pathconf='$d_pathconf'
13152 d_pause='$d_pause'
13153 d_phostname='$d_phostname'
13154 d_pipe='$d_pipe'
13155 d_poll='$d_poll'
13156 d_portable='$d_portable'
13157 d_pthread_yield='$d_pthread_yield'
13158 d_pwage='$d_pwage'
13159 d_pwchange='$d_pwchange'
13160 d_pwclass='$d_pwclass'
13161 d_pwcomment='$d_pwcomment'
13162 d_pwexpire='$d_pwexpire'
13163 d_pwgecos='$d_pwgecos'
13164 d_pwpasswd='$d_pwpasswd'
13165 d_pwquota='$d_pwquota'
13166 d_readdir64='$d_readdir64'
13167 d_readdir='$d_readdir'
13168 d_readlink='$d_readlink'
13169 d_readv='$d_readv'
13170 d_recvmsg='$d_recvmsg'
13171 d_rename='$d_rename'
13172 d_rewinddir='$d_rewinddir'
13173 d_rmdir='$d_rmdir'
13174 d_safebcpy='$d_safebcpy'
13175 d_safemcpy='$d_safemcpy'
13176 d_sanemcmp='$d_sanemcmp'
13177 d_sched_yield='$d_sched_yield'
13178 d_scm_rights='$d_scm_rights'
13179 d_seekdir64='$d_seekdir64'
13180 d_seekdir='$d_seekdir'
13181 d_select='$d_select'
13182 d_sem='$d_sem'
13183 d_semctl='$d_semctl'
13184 d_semctl_semid_ds='$d_semctl_semid_ds'
13185 d_semctl_semun='$d_semctl_semun'
13186 d_semget='$d_semget'
13187 d_semop='$d_semop'
13188 d_sendmsg='$d_sendmsg'
13189 d_setegid='$d_setegid'
13190 d_seteuid='$d_seteuid'
13191 d_setgrent='$d_setgrent'
13192 d_setgrps='$d_setgrps'
13193 d_sethent='$d_sethent'
13194 d_setlinebuf='$d_setlinebuf'
13195 d_setlocale='$d_setlocale'
13196 d_setnent='$d_setnent'
13197 d_setpent='$d_setpent'
13198 d_setpgid='$d_setpgid'
13199 d_setpgrp2='$d_setpgrp2'
13200 d_setpgrp='$d_setpgrp'
13201 d_setprior='$d_setprior'
13202 d_setpwent='$d_setpwent'
13203 d_setregid='$d_setregid'
13204 d_setresgid='$d_setresgid'
13205 d_setresuid='$d_setresuid'
13206 d_setreuid='$d_setreuid'
13207 d_setrgid='$d_setrgid'
13208 d_setruid='$d_setruid'
13209 d_setsent='$d_setsent'
13210 d_setsid='$d_setsid'
13211 d_setspent='$d_setspent'
13212 d_setvbuf='$d_setvbuf'
13213 d_sfio='$d_sfio'
13214 d_shm='$d_shm'
13215 d_shmat='$d_shmat'
13216 d_shmatprototype='$d_shmatprototype'
13217 d_shmctl='$d_shmctl'
13218 d_shmdt='$d_shmdt'
13219 d_shmget='$d_shmget'
13220 d_sigaction='$d_sigaction'
13221 d_sigsetjmp='$d_sigsetjmp'
13222 d_socket='$d_socket'
13223 d_sockpair='$d_sockpair'
13224 d_stat64='$d_stat64'
13225 d_statblks='$d_statblks'
13226 d_statfs='$d_statfs'
13227 d_statfsflags='$d_statfsflags'
13228 d_statvfs='$d_statvfs'
13229 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13230 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13231 d_stdio_stream_array='$d_stdio_stream_array'
13232 d_stdiobase='$d_stdiobase'
13233 d_stdstdio='$d_stdstdio'
13234 d_store64='$d_store64'
13235 d_strchr='$d_strchr'
13236 d_strcoll='$d_strcoll'
13237 d_strctcpy='$d_strctcpy'
13238 d_strerrm='$d_strerrm'
13239 d_strerror='$d_strerror'
13240 d_strtod='$d_strtod'
13241 d_strtol='$d_strtol'
13242 d_strtoul='$d_strtoul'
13243 d_strxfrm='$d_strxfrm'
13244 d_suidsafe='$d_suidsafe'
13245 d_symlink='$d_symlink'
13246 d_syscall='$d_syscall'
13247 d_sysconf='$d_sysconf'
13248 d_sysernlst='$d_sysernlst'
13249 d_syserrlst='$d_syserrlst'
13250 d_system='$d_system'
13251 d_tcgetpgrp='$d_tcgetpgrp'
13252 d_tcsetpgrp='$d_tcsetpgrp'
13253 d_telldir64='$d_telldir64'
13254 d_telldir='$d_telldir'
13255 d_telldirproto='$d_telldirproto'
13256 d_time='$d_time'
13257 d_times='$d_times'
13258 d_tmpfile64='$d_tmpfile64'
13259 d_truncate64='$d_truncate64'
13260 d_truncate='$d_truncate'
13261 d_tzname='$d_tzname'
13262 d_umask='$d_umask'
13263 d_uname='$d_uname'
13264 d_union_semun='$d_union_semun'
13265 d_vfork='$d_vfork'
13266 d_void_closedir='$d_void_closedir'
13267 d_voidsig='$d_voidsig'
13268 d_voidtty='$d_voidtty'
13269 d_volatile='$d_volatile'
13270 d_vprintf='$d_vprintf'
13271 d_wait4='$d_wait4'
13272 d_waitpid='$d_waitpid'
13273 d_wcstombs='$d_wcstombs'
13274 d_wctomb='$d_wctomb'
13275 d_writev='$d_writev'
13276 d_xenix='$d_xenix'
13277 date='$date'
13278 db_hashtype='$db_hashtype'
13279 db_prefixtype='$db_prefixtype'
13280 defvoidused='$defvoidused'
13281 direntrytype='$direntrytype'
13282 dlext='$dlext'
13283 dlsrc='$dlsrc'
13284 doublesize='$doublesize'
13285 drand01='$drand01'
13286 dynamic_ext='$dynamic_ext'
13287 eagain='$eagain'
13288 ebcdic='$ebcdic'
13289 echo='$echo'
13290 egrep='$egrep'
13291 emacs='$emacs'
13292 eunicefix='$eunicefix'
13293 exe_ext='$exe_ext'
13294 expr='$expr'
13295 extensions='$extensions'
13296 fflushNULL='$fflushNULL'
13297 fflushall='$fflushall'
13298 find='$find'
13299 firstmakefile='$firstmakefile'
13300 flex='$flex'
13301 fpostype='$fpostype'
13302 freetype='$freetype'
13303 full_ar='$full_ar'
13304 full_csh='$full_csh'
13305 full_sed='$full_sed'
13306 gccversion='$gccversion'
13307 gidtype='$gidtype'
13308 glibpth='$glibpth'
13309 grep='$grep'
13310 groupcat='$groupcat'
13311 groupstype='$groupstype'
13312 gzip='$gzip'
13313 h_fcntl='$h_fcntl'
13314 h_sysfile='$h_sysfile'
13315 hint='$hint'
13316 hostcat='$hostcat'
13317 huge='$huge'
13318 i_arpainet='$i_arpainet'
13319 i_bsdioctl='$i_bsdioctl'
13320 i_db='$i_db'
13321 i_dbm='$i_dbm'
13322 i_dirent='$i_dirent'
13323 i_dld='$i_dld'
13324 i_dlfcn='$i_dlfcn'
13325 i_fcntl='$i_fcntl'
13326 i_float='$i_float'
13327 i_gdbm='$i_gdbm'
13328 i_grp='$i_grp'
13329 i_inttypes='$i_inttypes'
13330 i_limits='$i_limits'
13331 i_locale='$i_locale'
13332 i_machcthr='$i_machcthr'
13333 i_malloc='$i_malloc'
13334 i_math='$i_math'
13335 i_memory='$i_memory'
13336 i_mntent='$i_mntent'
13337 i_ndbm='$i_ndbm'
13338 i_netdb='$i_netdb'
13339 i_neterrno='$i_neterrno'
13340 i_netinettcp='$i_netinettcp'
13341 i_niin='$i_niin'
13342 i_poll='$i_poll'
13343 i_pthread='$i_pthread'
13344 i_pwd='$i_pwd'
13345 i_rpcsvcdbm='$i_rpcsvcdbm'
13346 i_sfio='$i_sfio'
13347 i_sgtty='$i_sgtty'
13348 i_shadow='$i_shadow'
13349 i_socks='$i_socks'
13350 i_stdarg='$i_stdarg'
13351 i_stddef='$i_stddef'
13352 i_stdlib='$i_stdlib'
13353 i_string='$i_string'
13354 i_sysaccess='$i_sysaccess'
13355 i_sysdir='$i_sysdir'
13356 i_sysfile='$i_sysfile'
13357 i_sysfilio='$i_sysfilio'
13358 i_sysin='$i_sysin'
13359 i_sysioctl='$i_sysioctl'
13360 i_sysmman='$i_sysmman'
13361 i_sysmount='$i_sysmount'
13362 i_sysndir='$i_sysndir'
13363 i_sysparam='$i_sysparam'
13364 i_sysresrc='$i_sysresrc'
13365 i_syssecrt='$i_syssecrt'
13366 i_sysselct='$i_sysselct'
13367 i_syssockio='$i_syssockio'
13368 i_sysstat='$i_sysstat'
13369 i_sysstatvfs='$i_sysstatvfs'
13370 i_systime='$i_systime'
13371 i_systimek='$i_systimek'
13372 i_systimes='$i_systimes'
13373 i_systypes='$i_systypes'
13374 i_sysuio='$i_sysuio'
13375 i_sysun='$i_sysun'
13376 i_syswait='$i_syswait'
13377 i_termio='$i_termio'
13378 i_termios='$i_termios'
13379 i_time='$i_time'
13380 i_unistd='$i_unistd'
13381 i_utime='$i_utime'
13382 i_values='$i_values'
13383 i_varargs='$i_varargs'
13384 i_varhdr='$i_varhdr'
13385 i_vfork='$i_vfork'
13386 ignore_versioned_solibs='$ignore_versioned_solibs'
13387 incpath='$incpath'
13388 inews='$inews'
13389 installarchlib='$installarchlib'
13390 installbin='$installbin'
13391 installman1dir='$installman1dir'
13392 installman3dir='$installman3dir'
13393 installprefix='$installprefix'
13394 installprefixexp='$installprefixexp'
13395 installprivlib='$installprivlib'
13396 installscript='$installscript'
13397 installsitearch='$installsitearch'
13398 installsitelib='$installsitelib'
13399 installstyle='$installstyle'
13400 installusrbinperl='$installusrbinperl'
13401 intsize='$intsize'
13402 known_extensions='$known_extensions'
13403 ksh='$ksh'
13404 large='$large'
13405 ld='$ld'
13406 lddlflags='$lddlflags'
13407 ldflags='$ldflags'
13408 ldlibpthname='$ldlibpthname'
13409 less='$less'
13410 lib_ext='$lib_ext'
13411 libc='$libc'
13412 libperl='$libperl'
13413 libpth='$libpth'
13414 libs='$libs'
13415 libswanted='$libswanted'
13416 line='$line'
13417 lint='$lint'
13418 lkflags='$lkflags'
13419 ln='$ln'
13420 lns='$lns'
13421 locincpth='$locincpth'
13422 loclibpth='$loclibpth'
13423 longdblsize='$longdblsize'
13424 longlongsize='$longlongsize'
13425 longsize='$longsize'
13426 lp='$lp'
13427 lpr='$lpr'
13428 ls='$ls'
13429 lseeksize='$lseeksize'
13430 lseektype='$lseektype'
13431 mail='$mail'
13432 mailx='$mailx'
13433 make='$make'
13434 make_set_make='$make_set_make'
13435 mallocobj='$mallocobj'
13436 mallocsrc='$mallocsrc'
13437 malloctype='$malloctype'
13438 man1dir='$man1dir'
13439 man1direxp='$man1direxp'
13440 man1ext='$man1ext'
13441 man3dir='$man3dir'
13442 man3direxp='$man3direxp'
13443 man3ext='$man3ext'
13444 medium='$medium'
13445 mips='$mips'
13446 mips_type='$mips_type'
13447 mkdir='$mkdir'
13448 mmaptype='$mmaptype'
13449 models='$models'
13450 modetype='$modetype'
13451 more='$more'
13452 multiarch='$multiarch'
13453 mv='$mv'
13454 myarchname='$myarchname'
13455 mydomain='$mydomain'
13456 myhostname='$myhostname'
13457 myuname='$myuname'
13458 n='$n'
13459 netdb_hlen_type='$netdb_hlen_type'
13460 netdb_host_type='$netdb_host_type'
13461 netdb_name_type='$netdb_name_type'
13462 netdb_net_type='$netdb_net_type'
13463 nm='$nm'
13464 nm_opt='$nm_opt'
13465 nm_so_opt='$nm_so_opt'
13466 nonxs_ext='$nonxs_ext'
13467 nroff='$nroff'
13468 o_nonblock='$o_nonblock'
13469 obj_ext='$obj_ext'
13470 old_pthread_create_joinable='$old_pthread_create_joinable'
13471 optimize='$optimize'
13472 orderlib='$orderlib'
13473 osname='$osname'
13474 osvers='$osvers'
13475 package='$package'
13476 pager='$pager'
13477 passcat='$passcat'
13478 patchlevel='$patchlevel'
13479 path_sep='$path_sep'
13480 perl='$perl'
13481 perladmin='$perladmin'
13482 perlpath='$perlpath'
13483 pg='$pg'
13484 phostname='$phostname'
13485 pidtype='$pidtype'
13486 plibpth='$plibpth'
13487 pmake='$pmake'
13488 pr='$pr'
13489 prefix='$prefix'
13490 prefixexp='$prefixexp'
13491 privlib='$privlib'
13492 privlibexp='$privlibexp'
13493 prototype='$prototype'
13494 ptrsize='$ptrsize'
13495 randbits='$randbits'
13496 randfunc='$randfunc'
13497 randseedtype='$randseedtype'
13498 ranlib='$ranlib'
13499 rd_nodata='$rd_nodata'
13500 rm='$rm'
13501 rmail='$rmail'
13502 runnm='$runnm'
13503 sched_yield='$sched_yield'
13504 scriptdir='$scriptdir'
13505 scriptdirexp='$scriptdirexp'
13506 sed='$sed'
13507 seedfunc='$seedfunc'
13508 selectminbits='$selectminbits'
13509 selecttype='$selecttype'
13510 sendmail='$sendmail'
13511 sh='$sh'
13512 shar='$shar'
13513 sharpbang='$sharpbang'
13514 shmattype='$shmattype'
13515 shortsize='$shortsize'
13516 shrpenv='$shrpenv'
13517 shsharp='$shsharp'
13518 sig_count='$sig_count'
13519 sig_name='$sig_name'
13520 sig_name_init='$sig_name_init'
13521 sig_num='$sig_num'
13522 sig_num_init='$sig_num_init'
13523 signal_t='$signal_t'
13524 sitearch='$sitearch'
13525 sitearchexp='$sitearchexp'
13526 sitelib='$sitelib'
13527 sitelibexp='$sitelibexp'
13528 siteprefix='$siteprefix'
13529 siteprefixexp='$siteprefixexp'
13530 sizetype='$sizetype'
13531 sleep='$sleep'
13532 smail='$smail'
13533 small='$small'
13534 so='$so'
13535 sockethdr='$sockethdr'
13536 socketlib='$socketlib'
13537 sort='$sort'
13538 spackage='$spackage'
13539 spitshell='$spitshell'
13540 split='$split'
13541 src='$src'
13542 ssizetype='$ssizetype'
13543 startperl='$startperl'
13544 startsh='$startsh'
13545 static_ext='$static_ext'
13546 stdchar='$stdchar'
13547 stdio_base='$stdio_base'
13548 stdio_bufsiz='$stdio_bufsiz'
13549 stdio_cnt='$stdio_cnt'
13550 stdio_filbuf='$stdio_filbuf'
13551 stdio_ptr='$stdio_ptr'
13552 stdio_stream_array='$stdio_stream_array'
13553 strings='$strings'
13554 submit='$submit'
13555 subversion='$subversion'
13556 sysman='$sysman'
13557 tail='$tail'
13558 tar='$tar'
13559 tbl='$tbl'
13560 tee='$tee'
13561 test='$test'
13562 timeincl='$timeincl'
13563 timetype='$timetype'
13564 touch='$touch'
13565 tr='$tr'
13566 trnl='$trnl'
13567 troff='$troff'
13568 uidtype='$uidtype'
13569 uname='$uname'
13570 uniq='$uniq'
13571 use64bits='$use64bits'
13572 usedl='$usedl'
13573 usemultiplicity='$usemultiplicity'
13574 usemymalloc='$usemymalloc'
13575 usenm='$usenm'
13576 useopcode='$useopcode'
13577 useperlio='$useperlio'
13578 useposix='$useposix'
13579 usesfio='$usesfio'
13580 useshrplib='$useshrplib'
13581 usesocks='$usesocks'
13582 usethreads='$usethreads'
13583 usevfork='$usevfork'
13584 usrinc='$usrinc'
13585 uuname='$uuname'
13586 version='$version'
13587 vi='$vi'
13588 voidflags='$voidflags'
13589 xlibpth='$xlibpth'
13590 zcat='$zcat'
13591 zip='$zip'
13592 EOT
13593
13594 : Add in command line options if available
13595 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13596
13597 : add special variables
13598 $test -f $src/patchlevel.h && \
13599 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13600 echo "CONFIGDOTSH=true" >>config.sh
13601
13602 : propagate old symbols
13603 if $test -f UU/config.sh; then
13604         <UU/config.sh sort | uniq >UU/oldconfig.sh
13605         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13606         sort | uniq -u >UU/oldsyms
13607         set X `cat UU/oldsyms`
13608         shift
13609         case $# in
13610         0) ;;
13611         *)
13612                 cat <<EOM
13613 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13614 EOM
13615                 echo "# Variables propagated from previous config.sh file." >>config.sh
13616                 for sym in `cat UU/oldsyms`; do
13617                         echo "    Propagating $hint variable "'$'"$sym..."
13618                         eval 'tmp="$'"${sym}"'"'
13619                         echo "$tmp" | \
13620                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13621                 done
13622                 ;;
13623         esac
13624 fi
13625
13626 : Finish up by extracting the .SH files
13627 case "$alldone" in
13628 exit)
13629         $rm -rf UU
13630         echo "Done."
13631         exit 0
13632         ;;
13633 cont)
13634         ;;
13635 '')
13636         dflt=''
13637         nostick=true
13638         $cat <<EOM
13639
13640 If you'd like to make any changes to the config.sh file before I begin
13641 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13642
13643 EOM
13644         rp="Press return or use a shell escape to edit config.sh:"
13645         . UU/myread
13646         nostick=''
13647         case "$ans" in
13648         '') ;;
13649         *) : in case they cannot read
13650                 sh 1>&4 -c "$ans";;
13651         esac
13652         ;;
13653 esac
13654
13655 : if this fails, just run all the .SH files by hand
13656 . ./config.sh
13657
13658 echo " "
13659 exec 1>&4
13660 . ./UU/extract
13661
13662 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13663         dflt=y
13664         case "$silent" in
13665         true) ;;
13666         *)
13667                 $cat <<EOM
13668
13669 Now you need to generate make dependencies by running "$make depend".
13670 You might prefer to run it in background: "$make depend > makedepend.out &"
13671 It can take a while, so you might not want to run it right now.
13672
13673 EOM
13674                 ;;
13675         esac
13676         rp="Run $make depend now?"
13677         . UU/myread
13678         case "$ans" in
13679         y*)
13680                 $make depend && echo "Now you must run a $make."
13681                 ;;
13682         *)
13683                 echo "You must run '$make depend' then '$make'."
13684                 ;;
13685         esac
13686 elif test -f [Mm]akefile; then
13687         echo " "
13688         echo "Now you must run a $make."
13689 else
13690         echo "Done."
13691 fi
13692
13693 if $test -f Policy.sh; then
13694     $cat <<EOM
13695
13696 If you compile $package on a different machine or from a different object
13697 directory, copy the Policy.sh file from this object directory to the
13698 new one before you run Configure -- this will help you with most of
13699 the policy defaults.
13700
13701 EOM
13702 fi
13703 if $test -f config.msg; then
13704     echo "Hmm.  I also noted the following information while running:"
13705     echo " "
13706     $cat config.msg >&4
13707     $rm -f config.msg
13708 fi
13709 $rm -f kit*isdone ark*isdone
13710 $rm -rf UU
13711
13712 : End of Configure
13713