OS/2 socket fixes.
[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 Sat May 29 13:37:18 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_stddef=''
632 i_stdlib=''
633 i_string=''
634 strings=''
635 i_sysaccess=''
636 i_sysdir=''
637 i_sysfile=''
638 d_voidtty=''
639 i_bsdioctl=''
640 i_sysfilio=''
641 i_sysioctl=''
642 i_syssockio=''
643 i_sysmman=''
644 i_sysmount=''
645 i_sysndir=''
646 i_sysparam=''
647 i_sysresrc=''
648 i_syssecrt=''
649 i_sysselct=''
650 i_sysstat=''
651 i_sysstatvfs=''
652 i_systimes=''
653 i_systypes=''
654 d_iovec_s=''
655 i_sysuio=''
656 i_sysun=''
657 i_syswait=''
658 i_sgtty=''
659 i_termio=''
660 i_termios=''
661 i_systime=''
662 i_systimek=''
663 i_time=''
664 timeincl=''
665 i_unistd=''
666 i_utime=''
667 i_values=''
668 i_stdarg=''
669 i_varargs=''
670 i_varhdr=''
671 i_vfork=''
672 installusrbinperl=''
673 intsize=''
674 longsize=''
675 shortsize=''
676 d_dirent64_s=''
677 d_flock64_s=''
678 d_fstat64=''
679 d_ftruncate64=''
680 d_ino64_t=''
681 d_llseek=''
682 d_lockf64=''
683 d_lseek64=''
684 d_lstat64=''
685 d_off64_t=''
686 d_offset_t=''
687 d_open64=''
688 d_opendir64=''
689 d_readdir64=''
690 d_seekdir64=''
691 d_stat64=''
692 d_telldir64=''
693 d_truncate64=''
694 libc=''
695 libperl=''
696 shrpenv=''
697 useshrplib=''
698 glibpth=''
699 libpth=''
700 loclibpth=''
701 plibpth=''
702 xlibpth=''
703 ignore_versioned_solibs=''
704 libs=''
705 lns=''
706 lseeksize=''
707 lseektype=''
708 make_set_make=''
709 d_mymalloc=''
710 freetype=''
711 mallocobj=''
712 mallocsrc=''
713 malloctype=''
714 usemymalloc=''
715 installman1dir=''
716 man1dir=''
717 man1direxp=''
718 man1ext=''
719 installman3dir=''
720 man3dir=''
721 man3direxp=''
722 man3ext=''
723 huge=''
724 large=''
725 medium=''
726 models=''
727 small=''
728 split=''
729 modetype=''
730 multiarch=''
731 mydomain=''
732 myhostname=''
733 phostname=''
734 c=''
735 n=''
736 d_eofnblk=''
737 eagain=''
738 o_nonblock=''
739 rd_nodata=''
740 netdb_hlen_type=''
741 netdb_host_type=''
742 netdb_name_type=''
743 netdb_net_type=''
744 groupcat=''
745 hostcat=''
746 passcat=''
747 orderlib=''
748 ranlib=''
749 package=''
750 spackage=''
751 pager=''
752 apiversion=''
753 patchlevel=''
754 subversion=''
755 version=''
756 perladmin=''
757 perlpath=''
758 pidtype=''
759 prefix=''
760 prefixexp=''
761 installprivlib=''
762 privlib=''
763 privlibexp=''
764 prototype=''
765 ptrsize=''
766 drand01=''
767 randbits=''
768 randfunc=''
769 randseedtype=''
770 seedfunc=''
771 installscript=''
772 scriptdir=''
773 scriptdirexp=''
774 selectminbits=''
775 selecttype=''
776 sh=''
777 sig_count=''
778 sig_name=''
779 sig_name_init=''
780 sig_num=''
781 sig_num_init=''
782 installsitearch=''
783 sitearch=''
784 sitearchexp=''
785 installsitelib=''
786 sitelib=''
787 sitelibexp=''
788 sizetype=''
789 so=''
790 sharpbang=''
791 shsharp=''
792 spitshell=''
793 src=''
794 ssizetype=''
795 startperl=''
796 startsh=''
797 stdchar=''
798 d_fgetpos64=''
799 d_fopen64=''
800 d_freopen64=''
801 d_fseek64=''
802 d_fseeko64=''
803 d_fsetpos64=''
804 d_ftell64=''
805 d_ftello64=''
806 d_tmpfile64=''
807 d_stdio_stream_array=''
808 stdio_stream_array=''
809 sysman=''
810 trnl=''
811 uidtype=''
812 archname64=''
813 use64bits=''
814 usemultiplicity=''
815 nm_opt=''
816 nm_so_opt=''
817 runnm=''
818 usenm=''
819 useperlio=''
820 d_oldpthreads=''
821 usethreads=''
822 incpath=''
823 mips=''
824 mips_type=''
825 usrinc=''
826 defvoidused=''
827 voidflags=''
828 CONFIG=''
829
830 define='define'
831 undef='undef'
832 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
833 rmlist=''
834
835 : We must find out about Eunice early
836 eunicefix=':'
837 if test -f /etc/unixtovms; then
838         eunicefix=/etc/unixtovms
839 fi
840 if test -f /etc/unixtovms.exe; then
841         eunicefix=/etc/unixtovms.exe
842 fi
843
844 i_whoami=''
845 : Possible local include directories to search.
846 : Set locincpth to "" in a hint file to defeat local include searches.
847 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
848 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
849 :
850 : no include file wanted by default
851 inclwanted=''
852
853 : list of known cpp symbols, sorted alphabetically
854 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
855 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
856 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
857 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
858 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
859 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
860 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
861 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
862 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
863 al="$al VMS Xenix286"
864 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
865 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
866 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
867 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
868 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
869 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
870 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
871 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
872 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
873 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
874 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
875 al="$al __SVR4_2__ __UMAXV__"
876 al="$al ____386BSD____ __alpha __alpha__ __amiga"
877 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
878 al="$al __host_mips__"
879 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
880 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
881 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
882 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
883 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
884 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
885 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
886 al="$al __mc88100 __mc88100__ __mips __mips__"
887 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
888 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
889 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
890 al="$al _host_mips _mips _unix"
891 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
892 al="$al apollo ardent att386 att3b"
893 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
894 al="$al cadmus clipper concurrent convex cray ctix"
895 al="$al dmert encore gcos gcx gimpel gould"
896 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
897 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
898 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
899 al="$al i186 i286 i386 i486 i8086"
900 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
901 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
902 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
903 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
904 al="$al mc88000 mc88100 merlin mert mips mvs n16"
905 al="$al ncl_el ncl_mr"
906 al="$al news1500 news1700 news1800 news1900 news3700"
907 al="$al news700 news800 news900 ns16000 ns32000"
908 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
909 al="$al parisc pc532 pdp11 plexus posix pyr"
910 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
911 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
912 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
913 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
914 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
915 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
916 al="$al xenix z8000"
917
918 : Trailing extension.  Override this in a hint file, if needed.
919 _exe=''
920 : Extra object files, if any, needed on this platform.
921 archobjs=''
922 groupstype=''
923 : change the next line if compiling for Xenix/286 on Xenix/386
924 xlibpth='/usr/lib/386 /lib/386'
925
926 : Possible local library directories to search.
927 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
928 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
929
930 : general looking path for locating libraries
931 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
932 glibpth="$glibpth /lib /usr/lib $xlibpth"
933 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
934 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
935
936 : Private path used by Configure to find libraries.  Its value
937 : is prepended to libpth. This variable takes care of special
938 : machines, like the mips.  Usually, it should be empty.
939 plibpth=''
940
941 : default library list
942 libswanted=''
943 : some systems want to use only the non-versioned libso:s
944 ignore_versioned_solibs=''
945 : full support for void wanted by default
946 defvoidused=15
947
948 : set useposix=false in your hint file to disable the POSIX extension.
949 useposix=true
950 : set useopcode=false in your hint file to disable the Opcode extension.
951 useopcode=true
952 : set usemultiplicity on the Configure command line to enable multiplicity.
953 : set usethreads on the Configure command line to enable threads.
954 : List of libraries we want.
955 : If anyone needs -lnet, put it in a hint file.
956 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
957 libswanted="$libswanted dld ld sun m rt c cposix posix"
958 libswanted="$libswanted ndir dir crypt sec"
959 libswanted="$libswanted ucb bsd BSD PW x"
960 : We probably want to search /usr/shlib before most other libraries.
961 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
962 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
963 glibpth="/usr/shlib $glibpth"
964 : Do not use vfork unless overridden by a hint file.
965 usevfork=false
966
967 : Find the basic shell for Bourne shell scripts
968 case "$sh" in
969 '')
970         case "$SYSTYPE" in
971         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
972         *) xxx='/bin/sh';;
973         esac
974         if test -f "$xxx"; then
975                 sh="$xxx"
976         else
977                 : Build up a list and do a single loop so we can 'break' out.
978                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
979                 for xxx in sh bash ksh pdksh ash; do
980                         for p in $pth; do
981                                 try="$try ${p}/${xxx}"
982                         done
983                 done
984                 for xxx in $try; do
985                         if test -f "$xxx"; then
986                                 sh="$xxx";
987                                 break
988                         elif test -f "$xxx.exe"; then
989                                 sh="$xxx";
990                                 break
991                         fi
992                 done
993         fi
994         ;;
995 esac
996
997 case "$sh" in
998 '')     cat <<EOM >&2
999 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1000
1001 Usually it's in /bin/sh.  How did you even get this far?
1002 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1003 we'll try to straighten this all out.
1004 EOM
1005         exit 1
1006         ;;
1007 esac
1008
1009 : see if sh knows # comments
1010 if `$sh -c '#' >/dev/null 2>&1`; then
1011         shsharp=true
1012         spitshell=cat
1013         xcat=/bin/cat
1014         test -f $xcat || xcat=/usr/bin/cat
1015         echo "#!$xcat" >try
1016         $eunicefix try
1017         chmod +x try
1018         ./try > today
1019         if test -s today; then
1020                 sharpbang='#!'
1021         else
1022                 echo "#! $xcat" > try
1023                 $eunicefix try
1024                 chmod +x try
1025                 ./try > today
1026                 if test -s today; then
1027                         sharpbang='#! '
1028                 else
1029                         sharpbang=': use '
1030                 fi
1031         fi
1032 else
1033         echo " "
1034         echo "Your $sh doesn't grok # comments--I will strip them later on."
1035         shsharp=false
1036         cd ..
1037         echo "exec grep -v '^[  ]*#'" >spitshell
1038         chmod +x spitshell
1039         $eunicefix spitshell
1040         spitshell=`pwd`/spitshell
1041         cd UU
1042         echo "I presume that if # doesn't work, #! won't work either!"
1043         sharpbang=': use '
1044 fi
1045 rm -f try today
1046
1047 : figure out how to guarantee sh startup
1048 case "$startsh" in
1049 '') startsh=${sharpbang}${sh} ;;
1050 *)
1051 esac
1052 cat >try <<EOSS
1053 $startsh
1054 set abc
1055 test "$?abc" != 1
1056 EOSS
1057
1058 chmod +x try
1059 $eunicefix try
1060 if ./try; then
1061         : echo "Yup, it does."
1062 else
1063         echo "Hmm... '$startsh' does not guarantee sh startup..."
1064         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1065 fi
1066 rm -f try
1067
1068
1069 : Save command line options in file UU/cmdline.opt for later use in
1070 : generating config.sh.
1071 cat > cmdline.opt <<EOSH
1072 # Configure command line arguments.
1073 config_arg0='$0'
1074 config_args='$*'
1075 config_argc=$#
1076 EOSH
1077 argn=1
1078 for arg in "$@"; do
1079         cat >>cmdline.opt <<EOSH
1080 config_arg$argn='$arg'
1081 EOSH
1082         argn=`expr $argn + 1`
1083 done
1084
1085 : produce awk script to parse command line options
1086 cat >options.awk <<'EOF'
1087 BEGIN {
1088         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1089
1090         len = length(optstr);
1091         for (i = 1; i <= len; i++) {
1092                 c = substr(optstr, i, 1);
1093                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1094                 if (a == ":") {
1095                         arg[c] = 1;
1096                         i++;
1097                 }
1098                 opt[c] = 1;
1099         }
1100 }
1101 {
1102         expect = 0;
1103         str = $0;
1104         if (substr(str, 1, 1) != "-") {
1105                 printf("'%s'\n", str);
1106                 next;
1107         }
1108         len = length($0);
1109         for (i = 2; i <= len; i++) {
1110                 c = substr(str, i, 1);
1111                 if (!opt[c]) {
1112                         printf("-%s\n", substr(str, i));
1113                         next;
1114                 }
1115                 printf("-%s\n", c);
1116                 if (arg[c]) {
1117                         if (i < len)
1118                                 printf("'%s'\n", substr(str, i + 1));
1119                         else
1120                                 expect = 1;
1121                         next;
1122                 }
1123         }
1124 }
1125 END {
1126         if (expect)
1127                 print "?";
1128 }
1129 EOF
1130
1131 : process the command line options
1132 set X `for arg in "$@"; do echo "X$arg"; done |
1133         sed -e s/X// | awk -f options.awk`
1134 eval "set $*"
1135 shift
1136 rm -f options.awk
1137
1138 : set up default values
1139 fastread=''
1140 reuseval=false
1141 config_sh=''
1142 alldone=''
1143 error=''
1144 silent=''
1145 extractsh=''
1146 override=''
1147 knowitall=''
1148 rm -f optdef.sh
1149 cat >optdef.sh <<EOS
1150 $startsh
1151 EOS
1152
1153
1154 : option parsing
1155 while test $# -gt 0; do
1156         case "$1" in
1157         -d) shift; fastread=yes;;
1158         -e) shift; alldone=cont;;
1159         -f)
1160                 shift
1161                 cd ..
1162                 if test -r "$1"; then
1163                         config_sh="$1"
1164                 else
1165                         echo "$me: cannot read config file $1." >&2
1166                         error=true
1167                 fi
1168                 cd UU
1169                 shift;;
1170         -h) shift; error=true;;
1171         -r) shift; reuseval=true;;
1172         -s) shift; silent=true; realsilent=true;;
1173         -E) shift; alldone=exit;;
1174         -K) shift; knowitall=true;;
1175         -O) shift; override=true;;
1176         -S) shift; silent=true; extractsh=true;;
1177         -D)
1178                 shift
1179                 case "$1" in
1180                 *=)
1181                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1182                         echo "$me: ignoring -D $1" >&2
1183                         ;;
1184                 *=*) echo "$1" | \
1185                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1186                 *) echo "$1='define'" >> optdef.sh;;
1187                 esac
1188                 shift
1189                 ;;
1190         -U)
1191                 shift
1192                 case "$1" in
1193                 *=) echo "$1" >> optdef.sh;;
1194                 *=*)
1195                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1196                         echo "$me: ignoring -U $1" >&2
1197                         ;;
1198                 *) echo "$1='undef'" >> optdef.sh;;
1199                 esac
1200                 shift
1201                 ;;
1202         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1203                 exit 0;;
1204         --) break;;
1205         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1206         *) break;;
1207         esac
1208 done
1209
1210 case "$error" in
1211 true)
1212         cat >&2 <<EOM
1213 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1214                  [-U symbol] [-U symbol=]
1215   -d : use defaults for all answers.
1216   -e : go on without questioning past the production of config.sh.
1217   -f : specify an alternate default configuration file.
1218   -h : print this help message and exit (with an error status).
1219   -r : reuse C symbols value if possible (skips costly nm extraction).
1220   -s : silent mode, only echoes questions and essential information.
1221   -D : define symbol to have some value:
1222          -D symbol         symbol gets the value 'define'
1223          -D symbol=value   symbol gets the value 'value'
1224   -E : stop at the end of questions, after having produced config.sh.
1225   -K : do not use unless you know what you are doing.
1226   -O : let -D and -U override definitions from loaded configuration file.
1227   -S : perform variable substitutions on all .SH files (can mix with -f)
1228   -U : undefine symbol:
1229          -U symbol    symbol gets the value 'undef'
1230          -U symbol=   symbol gets completely empty
1231   -V : print version number and exit (with a zero status).
1232 EOM
1233         exit 1
1234         ;;
1235 esac
1236
1237 : Sanity checks
1238 case "$fastread$alldone" in
1239 yescont|yesexit) ;;
1240 *)
1241         if test ! -t 0; then
1242                 echo "Say 'sh Configure', not 'sh <Configure'"
1243                 exit 1
1244         fi
1245         ;;
1246 esac
1247
1248 exec 4>&1
1249 case "$silent" in
1250 true) exec 1>/dev/null;;
1251 esac
1252
1253 : run the defines and the undefines, if any, but leave the file out there...
1254 touch optdef.sh
1255 . ./optdef.sh
1256
1257 : set package name
1258 package=perl5
1259 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1260 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1261 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1262 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1263 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1264 esac
1265
1266 : Some greps do not return status, grrr.
1267 echo "grimblepritz" >grimble
1268 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1269         contains=contains
1270 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1271         contains=grep
1272 else
1273         contains=contains
1274 fi
1275 rm -f grimble
1276 : the following should work in any shell
1277 case "$contains" in
1278 contains*)
1279         echo " "
1280         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1281         cat >contains <<'EOSS'
1282 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1283 EOSS
1284 chmod +x contains
1285 esac
1286
1287 : Find the path to the source tree
1288 case "$src" in
1289 '') case "$0" in
1290     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1291     *)   src='.';;
1292     esac;;
1293 esac
1294 case "$src" in
1295 '')     src=/
1296         rsrc=/
1297         ;;
1298 /*) rsrc="$src";;
1299 *) rsrc="../$src";;
1300 esac
1301 if test -f $rsrc/Configure && \
1302         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1303 then
1304    : found it, so we are ok.
1305 else
1306         rsrc=''
1307         for src in . .. ../.. ../../.. ../../../..; do
1308                 if test -f ../$src/Configure && \
1309                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1310                 then
1311                         rsrc=../$src
1312                         break
1313                 fi
1314         done
1315 fi
1316 case "$rsrc" in
1317 '')
1318         cat <<EOM >&4
1319
1320 Sorry, I can't seem to locate the source dir for $package.  Please start
1321 Configure with an explicit path -- i.e. /some/path/Configure.
1322
1323 EOM
1324         exit 1
1325         ;;
1326 ../.)   rsrc='..';;
1327 *)
1328         echo " "
1329         echo "Sources for $package found in \"$src\"." >&4
1330         ;;
1331 esac
1332
1333 : script used to extract .SH files with variable substitutions
1334 cat >extract <<'EOS'
1335 CONFIGDOTSH=true
1336 echo "Doing variable substitutions on .SH files..."
1337 if test -f $src/MANIFEST; then
1338         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1339 else
1340         echo "(Looking for .SH files under the source directory.)"
1341         set x `(cd $src; find . -name "*.SH" -print)`
1342 fi
1343 shift
1344 case $# in
1345 0) set x `(cd $src; echo *.SH)`; shift;;
1346 esac
1347 if test ! -f $src/$1; then
1348         shift
1349 fi
1350 mkdir_p='
1351 name=$1;
1352 create="";
1353 while test $name; do
1354         if test ! -d "$name"; then
1355                 create="$name $create";
1356                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1357                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1358         else
1359                 name="";
1360         fi;
1361 done;
1362 for file in $create; do
1363         mkdir $file;
1364 done
1365 '
1366 for file in $*; do
1367         case "$src" in
1368         ".")
1369                 case "$file" in
1370                 */*)
1371                         dir=`expr X$file : 'X\(.*\)/'`
1372                         file=`expr X$file : 'X.*/\(.*\)'`
1373                         (cd $dir && . ./$file)
1374                         ;;
1375                 *)
1376                         . ./$file
1377                         ;;
1378                 esac
1379                 ;;
1380         *)
1381                 case "$file" in
1382                 */*)
1383                         dir=`expr X$file : 'X\(.*\)/'`
1384                         file=`expr X$file : 'X.*/\(.*\)'`
1385                         (set x $dir; shift; eval $mkdir_p)
1386                         sh <$src/$dir/$file
1387                         ;;
1388                 *)
1389                         sh <$src/$file
1390                         ;;
1391                 esac
1392                 ;;
1393         esac
1394 done
1395 if test -f $src/config_h.SH; then
1396         if test ! -f config.h; then
1397         : oops, they left it out of MANIFEST, probably, so do it anyway.
1398         . $src/config_h.SH
1399         fi
1400 fi
1401 EOS
1402
1403 : extract files and exit if asked to do so
1404 case "$extractsh" in
1405 true)
1406         case "$realsilent" in
1407         true) ;;
1408         *) exec 1>&4;;
1409         esac
1410         case "$config_sh" in
1411         '') config_sh='config.sh';;
1412         esac
1413         echo " "
1414         echo "Fetching answers from $config_sh..."
1415         cd ..
1416         . $config_sh
1417         test "$override" && . ./optdef.sh
1418         echo " "
1419         . UU/extract
1420         rm -rf UU
1421         echo "Done."
1422         exit 0
1423         ;;
1424 esac
1425
1426 : Eunice requires " " instead of "", can you believe it
1427 echo " "
1428 : Here we go...
1429 echo "Beginning of configuration questions for $package."
1430
1431 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1432
1433 : first determine how to suppress newline on echo command
1434 echo " "
1435 echo "Checking echo to see how to suppress newlines..."
1436 (echo "hi there\c" ; echo " ") >.echotmp
1437 if $contains c .echotmp >/dev/null 2>&1 ; then
1438         echo "...using -n."
1439         n='-n'
1440         c=''
1441 else
1442         cat <<'EOM'
1443 ...using \c
1444 EOM
1445         n=''
1446         c='\c'
1447 fi
1448 echo $n "The star should be here-->$c"
1449 echo '*'
1450 rm -f .echotmp
1451
1452 : Now test for existence of everything in MANIFEST
1453 echo " "
1454 if test -f $rsrc/MANIFEST; then
1455         echo "First let's make sure your kit is complete.  Checking..." >&4
1456         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1457         rm -f missing
1458         tmppwd=`pwd`
1459         for filelist in x??; do
1460                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1461         done
1462         if test -s missing; then
1463                 cat missing >&4
1464                 cat >&4 <<'EOM'
1465
1466 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1467
1468 You have the option of continuing the configuration process, despite the
1469 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1470 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1471 and contact the author (perlbug@perl.com).
1472
1473 EOM
1474                 echo $n "Continue? [n] $c" >&4
1475                 read ans
1476                 case "$ans" in
1477                 y*)
1478                         echo "Continuing..." >&4
1479                         rm -f missing
1480                         ;;
1481                 *)
1482                         echo "ABORTING..." >&4
1483                         kill $$
1484                         ;;
1485                 esac
1486         else
1487                 echo "Looks good..."
1488         fi
1489 else
1490         echo "There is no MANIFEST file.  I hope your kit is complete !"
1491 fi
1492 rm -f missing x??
1493
1494 echo " "
1495 : Find the appropriate value for a newline for tr
1496 if test -n "$DJGPP"; then
1497        trnl='\012'
1498 fi
1499 if test X"$trnl" = X; then
1500         case "`echo foo|tr '\n' x 2>/dev/null`" in
1501         foox) trnl='\n' ;;
1502         esac
1503 fi
1504 if test X"$trnl" = X; then
1505         case "`echo foo|tr '\012' x 2>/dev/null`" in
1506         foox) trnl='\012' ;;
1507         esac
1508 fi
1509 if test X"$trnl" = X; then
1510         cat <<EOM >&2
1511
1512 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1513
1514 EOM
1515         exit 1
1516 fi
1517
1518 : compute the number of columns on the terminal for proper question formatting
1519 case "$COLUMNS" in
1520 '') COLUMNS='80';;
1521 esac
1522
1523 : set up the echo used in my read
1524 myecho="case \"\$xxxm\" in
1525 '') echo $n \"\$rp $c\" >&4;;
1526 *) case \"\$rp\" in
1527         '') echo $n \"[\$xxxm] $c\";;
1528         *)
1529                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1530                         echo \"\$rp\" >&4
1531                         echo $n \"[\$xxxm] $c\" >&4
1532                 else
1533                         echo $n \"\$rp [\$xxxm] $c\" >&4
1534                 fi
1535                 ;;
1536         esac;;
1537 esac"
1538
1539 : now set up to do reads with possible shell escape and default assignment
1540 cat <<EOSC >myread
1541 $startsh
1542 xxxm=\$dflt
1543 $myecho
1544 ans='!'
1545 case "\$fastread" in
1546 yes) case "\$dflt" in
1547         '') ;;
1548         *) ans='';
1549                 case "\$silent-\$rp" in
1550                 true-) ;;
1551                 *) echo " " >&4;;
1552                 esac;;
1553         esac;;
1554 *) case "\$silent" in
1555         true) case "\$rp" in
1556                 '') ans='';;
1557                 esac;;
1558         esac;;
1559 esac
1560 while expr "X\$ans" : "X!" >/dev/null; do
1561         read answ
1562         set x \$xxxm
1563         shift
1564         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1565         case  "\$answ" in
1566         "!")
1567                 sh 1>&4
1568                 echo " "
1569                 $myecho
1570                 ;;
1571         !*)
1572                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1573                 shift
1574                 sh 1>&4 -c "\$*"
1575                 echo " "
1576                 $myecho
1577                 ;;
1578         "\$ans")
1579                 case "\$ans" in
1580                 \\&*)
1581                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1582                         shift
1583                         case "\$1" in
1584                         -d)
1585                                 fastread=yes
1586                                 echo "(OK, I'll run with -d after this question.)" >&4
1587                                 ;;
1588                         -*)
1589                                 echo "*** Sorry, \$1 not supported yet." >&4
1590                                 ;;
1591                         esac
1592                         $myecho
1593                         ans=!
1594                         ;;
1595                 esac;;
1596         *)
1597                 case "\$aok" in
1598                 y)
1599                         echo "*** Substitution done -- please confirm."
1600                         xxxm="\$ans"
1601                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1602                         xxxm="\$ans"
1603                         ans=!
1604                         ;;
1605                 *)
1606                         echo "*** Error -- try again."
1607                         ans=!
1608                         ;;
1609                 esac
1610                 $myecho
1611                 ;;
1612         esac
1613         case "\$ans\$xxxm\$nostick" in
1614         '')
1615                 ans=!
1616                 $myecho
1617                 ;;
1618         esac
1619 done
1620 case "\$ans" in
1621 '') ans="\$xxxm";;
1622 esac
1623 EOSC
1624
1625 : create .config dir to save info across Configure sessions
1626 test -d ../.config || mkdir ../.config
1627 cat >../.config/README <<EOF
1628 This directory created by Configure to save information that should
1629 persist across sessions for $package.
1630
1631 You may safely delete it if you wish.
1632 EOF
1633
1634 : general instructions
1635 needman=true
1636 firsttime=true
1637 user=`(logname) 2>/dev/null`
1638 case "$user" in
1639 '') user=`whoami 2>&1`;;
1640 esac
1641 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1642         firsttime=false
1643         echo " "
1644         rp='Would you like to see the instructions?'
1645         dflt=n
1646         . ./myread
1647         case "$ans" in
1648         [yY]*) ;;
1649         *) needman=false;;
1650         esac
1651 fi
1652 if $needman; then
1653         cat <<EOH
1654
1655 This installation shell script will examine your system and ask you questions
1656 to determine how the perl5 package should be installed. If you get
1657 stuck on a question, you may use a ! shell escape to start a subshell or
1658 execute a command.  Many of the questions will have default answers in square
1659 brackets; typing carriage return will give you the default.
1660
1661 On some of the questions which ask for file or directory names you are allowed
1662 to use the ~name construct to specify the login directory belonging to "name",
1663 even if you don't have a shell which knows about that.  Questions where this is
1664 allowed will be marked "(~name ok)".
1665
1666 EOH
1667         rp=''
1668         dflt='Type carriage return to continue'
1669         . ./myread
1670         cat <<'EOH'
1671
1672 The prompter used in this script allows you to use shell variables and
1673 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1674 in the default answer, as if the default line was a set of arguments given to a
1675 script shell.  This means you may also use $* to repeat the whole default line,
1676 so you do not have to re-type everything to add something to the default.
1677
1678 Everytime there is a substitution, you will have to confirm.  If there is an
1679 error (e.g. an unmatched backtick), the default answer will remain unchanged
1680 and you will be prompted again.
1681
1682 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1683 the questions and use the computed defaults (or the previous answers if there
1684 was already a config.sh file). Type 'Configure -h' for a list of options.
1685 You may also start interactively and then answer '& -d' at any prompt to turn
1686 on the non-interactive behaviour for the remainder of the execution.
1687
1688 EOH
1689         . ./myread
1690         cat <<EOH
1691
1692 Much effort has been expended to ensure that this shell script will run on any
1693 Unix system.  If despite that it blows up on yours, your best bet is to edit
1694 Configure and run it again.  If you can't run Configure for some reason,
1695 you'll have to generate a config.sh file by hand.  Whatever problems you
1696 have, let me (perlbug@perl.com) know how I blew it.
1697
1698 This installation script affects things in two ways:
1699
1700 1) it may do direct variable substitutions on some of the files included
1701    in this kit.
1702 2) it builds a config.h file for inclusion in C programs.  You may edit
1703    any of these files as the need arises after running this script.
1704
1705 If you make a mistake on a question, there is no easy way to back up to it
1706 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1707 files.  Configure will offer to let you do this before it runs the SH files.
1708
1709 EOH
1710         dflt='Type carriage return to continue'
1711         . ./myread
1712         case "$firsttime" in
1713         true) echo $user >>../.config/instruct;;
1714         esac
1715 fi
1716
1717 : find out where common programs are
1718 echo " "
1719 echo "Locating common programs..." >&4
1720 cat <<EOSC >loc
1721 $startsh
1722 case \$# in
1723 0) exit 1;;
1724 esac
1725 thing=\$1
1726 shift
1727 dflt=\$1
1728 shift
1729 for dir in \$*; do
1730         case "\$thing" in
1731         .)
1732         if test -d \$dir/\$thing; then
1733                 echo \$dir
1734                 exit 0
1735         fi
1736         ;;
1737         *)
1738         for thisthing in \$dir/\$thing; do
1739                 : just loop through to pick last item
1740         done
1741         if test -f \$thisthing; then
1742                 echo \$thisthing
1743                 exit 0
1744         elif test -f \$dir/\$thing.exe; then
1745                 if test -n "$DJGPP"; then
1746                         echo \$dir/\$thing.exe
1747                 else
1748                         : on Eunice apparently
1749                         echo \$dir/\$thing
1750                 fi
1751                 exit 0
1752         fi
1753         ;;
1754         esac
1755 done
1756 echo \$dflt
1757 exit 1
1758 EOSC
1759 chmod +x loc
1760 $eunicefix loc
1761 loclist="
1762 awk
1763 cat
1764 comm
1765 cp
1766 echo
1767 expr
1768 grep
1769 ls
1770 make
1771 mkdir
1772 rm
1773 sed
1774 sort
1775 touch
1776 tr
1777 uniq
1778 "
1779 trylist="
1780 Mcc
1781 ar
1782 byacc
1783 cpp
1784 csh
1785 date
1786 egrep
1787 gzip
1788 less
1789 ln
1790 more
1791 nm
1792 nroff
1793 pg
1794 test
1795 uname
1796 zip
1797 "
1798 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1799 pth="$pth /lib /usr/lib"
1800 for file in $loclist; do
1801         eval xxx=\$$file
1802         case "$xxx" in
1803         /*|?:[\\/]*)
1804                 if test -f "$xxx"; then
1805                         : ok
1806                 else
1807                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1808                         xxx=`./loc $file $file $pth`
1809                 fi
1810                 ;;
1811         '') xxx=`./loc $file $file $pth`;;
1812         *) xxx=`./loc $xxx $xxx $pth`;;
1813         esac
1814         eval $file=$xxx
1815         eval _$file=$xxx
1816         case "$xxx" in
1817         /*)
1818                 echo $file is in $xxx.
1819                 ;;
1820         ?:[\\/]*)
1821                 echo $file is in $xxx.
1822                 ;;
1823         *)
1824                 echo "I don't know where '$file' is, and my life depends on it." >&4
1825                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1826                 exit 1
1827                 ;;
1828         esac
1829 done
1830 echo " "
1831 echo "Don't worry if any of the following aren't found..."
1832 say=offhand
1833 for file in $trylist; do
1834         eval xxx=\$$file
1835         case "$xxx" in
1836         /*|?:[\\/]*)
1837                 if test -f "$xxx"; then
1838                         : ok
1839                 else
1840                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1841                         xxx=`./loc $file $file $pth`
1842                 fi
1843                 ;;
1844         '') xxx=`./loc $file $file $pth`;;
1845         *) xxx=`./loc $xxx $xxx $pth`;;
1846         esac
1847         eval $file=$xxx
1848         eval _$file=$xxx
1849         case "$xxx" in
1850         /*)
1851                 echo $file is in $xxx.
1852                 ;;
1853         ?:[\\/]*)
1854                 echo $file is in $xxx.
1855                 ;;
1856         *)
1857                 echo "I don't see $file out there, $say."
1858                 say=either
1859                 ;;
1860         esac
1861 done
1862 case "$egrep" in
1863 egrep)
1864         echo "Substituting grep for egrep."
1865         egrep=$grep
1866         ;;
1867 esac
1868 case "$ln" in
1869 ln)
1870         echo "Substituting cp for ln."
1871         ln=$cp
1872         ;;
1873 esac
1874 case "$test" in
1875 test)
1876         echo "Hopefully test is built into your sh."
1877         ;;
1878 *)
1879         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1880                 echo "Using the test built into your sh."
1881                 test=test
1882                 _test=test
1883         fi
1884         ;;
1885 esac
1886 case "$echo" in
1887 echo)
1888         echo "Hopefully echo is built into your sh."
1889         ;;
1890 '') ;;
1891 *)
1892         echo " "
1893 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1894         $echo $n "hi there$c" >foo1
1895         echo $n "hi there$c" >foo2
1896         if cmp foo1 foo2 >/dev/null 2>&1; then
1897                 echo "They are compatible.  In fact, they may be identical."
1898         else
1899                 case "$n" in
1900                 '-n') n='' c='\c';;
1901                 *) n='-n' c='';;
1902                 esac
1903                 cat <<FOO
1904 They are not compatible!  You are probably running ksh on a non-USG system.
1905 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1906 have echo built in and we may have to run some Bourne shell scripts.  That
1907 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1908
1909 FOO
1910                 $echo $n "The star should be here-->$c"
1911                 $echo "*"
1912         fi
1913         $rm -f foo1 foo2
1914         ;;
1915 esac
1916
1917 : determine whether symbolic links are supported
1918 echo " "
1919 $touch blurfl
1920 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1921         echo "Symbolic links are supported." >&4
1922         lns="$ln -s"
1923 else
1924         echo "Symbolic links are NOT supported." >&4
1925         lns="$ln"
1926 fi
1927 $rm -f blurfl sym
1928
1929 : see whether [:lower:] and [:upper:] are supported character classes
1930 echo " "
1931 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1932 ABYZ)
1933         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1934         up='[:upper:]'
1935         low='[:lower:]'
1936         ;;
1937 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1938         # (0xc9 and 0xd1), therefore that is a nice testing point.
1939         if test "X$up" = X -o "X$low" = X; then
1940             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1941             ij) up='[A-Z]'
1942                 low='[a-z]'
1943                 ;;
1944             esac
1945         fi
1946         if test "X$up" = X -o "X$low" = X; then
1947             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1948             ij) up='A-Z'
1949                 low='a-z'
1950                 ;;
1951             esac
1952         fi
1953         if test "X$up" = X -o "X$low" = X; then
1954             case "`echo IJ | od -x 2>/dev/null`" in
1955             *C9D1*|*c9d1*)
1956                 echo "Hey, this might be EBCDIC." >&4
1957                 if test "X$up" = X -o "X$low" = X; then
1958                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1959                     ij) up='[A-IJ-RS-Z]'
1960                         low='[a-ij-rs-z]'
1961                         ;;
1962                     esac
1963                 fi
1964                 if test "X$up" = X -o "X$low" = X; then
1965                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1966                     ij) up='A-IJ-RS-Z'
1967                         low='a-ij-rs-z'
1968                         ;;
1969                     esac
1970                 fi
1971                 ;;
1972             esac
1973         fi
1974 esac
1975 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1976 ij)
1977     echo "Using $up and $low to convert case." >&4
1978     ;;
1979 *)
1980     echo "I don't know how to translate letters from upper to lower case." >&4
1981     echo "Your tr is not acting any way I know of." >&4
1982     exit 1
1983     ;;
1984 esac
1985 : set up the translation script tr, must be called with ./tr of course
1986 cat >tr <<EOSC
1987 $startsh
1988 case "\$1\$2" in
1989 '[A-Z][a-z]') exec $tr '$up' '$low';;
1990 '[a-z][A-Z]') exec $tr '$low' '$up';;
1991 esac
1992 exec $tr "\$@"
1993 EOSC
1994 chmod +x tr
1995 $eunicefix tr
1996
1997 : Try to determine whether config.sh was made on this system
1998 case "$config_sh" in
1999 '')
2000 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2001 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2002 # because the A-Z/a-z are not consecutive.
2003 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2004         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2005 newmyuname="$myuname"
2006 dflt=n
2007 case "$knowitall" in
2008 '')
2009         if test -f ../config.sh; then
2010                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2011                         eval "`grep myuname= ../config.sh`"
2012                 fi
2013                 if test "X$myuname" = "X$newmyuname"; then
2014                         dflt=y
2015                 fi
2016         fi
2017         ;;
2018 *) dflt=y;;
2019 esac
2020
2021 : Get old answers from old config file if Configure was run on the
2022 : same system, otherwise use the hints.
2023 hint=default
2024 cd ..
2025 if test -f config.sh; then
2026         echo " "
2027         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2028         . UU/myread
2029         case "$ans" in
2030         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2031         *)  echo "Fetching default answers from your old config.sh file..." >&4
2032                 tmp_n="$n"
2033                 tmp_c="$c"
2034                 tmp_sh="$sh"
2035                 . ./config.sh
2036                 cp config.sh UU
2037                 n="$tmp_n"
2038                 c="$tmp_c"
2039                 : Older versions did not always set $sh.  Catch re-use of such
2040                 : an old config.sh.
2041                 case "$sh" in
2042                 '') sh="$tmp_sh" ;;
2043                 esac
2044                 hint=previous
2045                 ;;
2046         esac
2047 fi
2048 if test ! -f config.sh; then
2049         $cat <<EOM
2050
2051 First time through, eh?  I have some defaults handy for some systems
2052 that need some extra help getting the Configure answers right:
2053
2054 EOM
2055         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2056         dflt=''
2057         : Half the following guesses are probably wrong... If you have better
2058         : tests or hints, please send them to perlbug@perl.com
2059         : The metaconfig authors would also appreciate a copy...
2060         $test -f /irix && osname=irix
2061         $test -f /xenix && osname=sco_xenix
2062         $test -f /dynix && osname=dynix
2063         $test -f /dnix && osname=dnix
2064         $test -f /lynx.os && osname=lynxos
2065         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2066         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2067         $test -f /bin/mips && /bin/mips && osname=mips
2068         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2069                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2070         $test -d /usr/apollo/bin && osname=apollo
2071         $test -f /etc/saf/_sactab && osname=svr4
2072         $test -d /usr/include/minix && osname=minix
2073         if $test -d /MachTen -o -d /MachTen_Folder; then
2074                 osname=machten
2075                 if $test -x /sbin/version; then
2076                         osvers=`/sbin/version | $awk '{print $2}' |
2077                         $sed -e 's/[A-Za-z]$//'`
2078                 elif $test -x /usr/etc/version; then
2079                         osvers=`/usr/etc/version | $awk '{print $2}' |
2080                         $sed -e 's/[A-Za-z]$//'`
2081                 else
2082                         osvers="$2.$3"
2083                 fi
2084         fi
2085        $test -f /sys/posix.dll &&
2086                $test -f /usr/bin/what &&
2087                set X `/usr/bin/what /sys/posix.dll` &&
2088                $test "$3" = UWIN &&
2089                osname=uwin &&
2090                osvers="$5"
2091         if $test -f $uname; then
2092                 set X $myuname
2093                 shift
2094
2095                 case "$5" in
2096                 fps*) osname=fps ;;
2097                 mips*)
2098                         case "$4" in
2099                         umips) osname=umips ;;
2100                         *) osname=mips ;;
2101                         esac;;
2102                 [23]100) osname=mips ;;
2103                 next*) osname=next ;;
2104                 i386*)
2105                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2106                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2107                                 osname='sco'
2108                                 osvers=$tmp
2109                         elif $test -f /etc/kconfig; then
2110                                 osname=isc
2111                                 if test "$lns" = "$ln -s"; then
2112                                         osvers=4
2113                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2114                                         osvers=3
2115                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2116                                         osvers=2
2117                                 fi
2118                         fi
2119                         tmp=''
2120                         ;;
2121                 pc*)
2122                         if test -n "$DJGPP"; then
2123                                 osname=dos
2124                                 osvers=djgpp
2125                         fi
2126                         ;;
2127                 esac
2128
2129                 case "$1" in
2130                 aix) osname=aix
2131                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2132                         case "$tmp" in
2133                         'not found') osvers="$4"."$3" ;;
2134                         '<3240'|'<>3240') osvers=3.2.0 ;;
2135                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2136                         '=3250'|'>3250') osvers=3.2.5 ;;
2137                         *) osvers=$tmp;;
2138                         esac
2139                         ;;
2140                 *dc.osx) osname=dcosx
2141                         osvers="$3"
2142                         ;;
2143                 dnix) osname=dnix
2144                         osvers="$3"
2145                         ;;
2146                 domainos) osname=apollo
2147                         osvers="$3"
2148                         ;;
2149                 dgux) osname=dgux 
2150                         osvers="$3"
2151                         ;;
2152                 dynixptx*) osname=dynixptx
2153                         osvers=`echo "$4"|sed 's/^v//'`
2154                         ;;
2155                 freebsd) osname=freebsd 
2156                         osvers="$3" ;;
2157                 genix) osname=genix ;;
2158                 hp*) osname=hpux 
2159                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2160                         ;;
2161                 irix*) osname=irix
2162                         case "$3" in
2163                         4*) osvers=4 ;;
2164                         5*) osvers=5 ;;
2165                         *)      osvers="$3" ;;
2166                         esac
2167                         ;;
2168                 linux) osname=linux
2169                         case "$3" in
2170                         *)      osvers="$3" ;;
2171                         esac
2172                         ;;
2173                 MiNT) osname=mint
2174                         ;;
2175                 netbsd*) osname=netbsd
2176                         osvers="$3"
2177                         ;;
2178                 news-os) osvers="$3"
2179                         case "$3" in
2180                         4*) osname=newsos4 ;;
2181                         *) osname=newsos ;;
2182                         esac
2183                         ;;
2184                 bsd386) osname=bsd386
2185                         osvers=`$uname -r`
2186                         ;;
2187                 POSIX-BC | posix-bc ) osname=posix-bc
2188                         osvers="$3"
2189                         ;;
2190                 powerux | power_ux | powermax_os | powermaxos | \
2191                 powerunix | power_unix) osname=powerux
2192                         osvers="$3"
2193                         ;;
2194                 next*) osname=next ;;
2195                 solaris) osname=solaris
2196                         case "$3" in
2197                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2198                         *)      osvers="$3" ;;
2199                         esac
2200                         ;;
2201                 sunos) osname=sunos
2202                         case "$3" in
2203                         5*) osname=solaris
2204                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2205                         *)      osvers="$3" ;;
2206                         esac
2207                         ;;
2208                 titanos) osname=titanos
2209                         case "$3" in
2210                         1*) osvers=1 ;;
2211                         2*) osvers=2 ;;
2212                         3*) osvers=3 ;;
2213                         4*) osvers=4 ;;
2214                         *)      osvers="$3" ;;
2215                         esac
2216                         ;;
2217                 ultrix) osname=ultrix
2218                         osvers="$3"
2219                         ;;
2220                 osf1|mls+)      case "$5" in
2221                                 alpha)
2222                                         osname=dec_osf
2223                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2224                                         ;;
2225                         hp*)    osname=hp_osf1  ;;
2226                         mips)   osname=mips_osf1 ;;
2227                         esac
2228                         ;;
2229                 uts) osname=uts 
2230                         osvers="$3"
2231                         ;;
2232                 qnx) osname=qnx
2233                         osvers="$4"
2234                         ;;
2235                 $2) case "$osname" in
2236                         *isc*) ;;
2237                         *freebsd*) ;;
2238                         svr*)
2239                                 : svr4.x or possibly later
2240                                 case "svr$3" in 
2241                                 ${osname}*)
2242                                         osname=svr$3
2243                                         osvers=$4
2244                                         ;;
2245                                 esac
2246                                 case "$osname" in
2247                                 svr4.0)
2248                                         : Check for ESIX
2249                                         if test -f /stand/boot ; then
2250                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2251                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2252                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2253                                                         if test -n "$isesix"; then
2254                                                                 osname=esix4
2255                                                         fi
2256                                                 fi
2257                                         fi
2258                                         ;;
2259                                 esac
2260                                 ;;
2261                         *)      if test -f /etc/systemid; then
2262                                         osname=sco
2263                                         set `echo $3 | $sed 's/\./ /g'` $4
2264                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2265                                                 osvers=$1.$2.$3
2266                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2267                                                 osvers=$1.$2
2268                                         elif $test -f $src/hints/sco_$1.sh; then
2269                                                 osvers=$1
2270                                         fi
2271                                 else
2272                                         case "$osname" in
2273                                         '') : Still unknown.  Probably a generic Sys V.
2274                                                 osname="sysv"
2275                                                 osvers="$3"
2276                                                 ;;
2277                                         esac
2278                                 fi
2279                                 ;;
2280                         esac
2281                         ;;
2282                 *)      case "$osname" in
2283                         '') : Still unknown.  Probably a generic BSD.
2284                                 osname="$1"
2285                                 osvers="$3"
2286                                 ;;
2287                         esac
2288                         ;;
2289                 esac
2290         else
2291                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2292                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2293                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2294                                 osname=news_os
2295                         fi
2296                         $rm -f UU/kernel.what
2297                 elif test -d c:/.; then
2298                         set X $myuname
2299                         osname=os2
2300                         osvers="$5"
2301                 fi
2302         fi
2303         
2304         : Now look for a hint file osname_osvers, unless one has been
2305         : specified already.
2306         case "$hintfile" in
2307         ''|' ')
2308                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2309                 : Also try without trailing minor version numbers.
2310                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2311                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2312                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2313                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2314                 case "$file" in
2315                 '') dflt=none ;;
2316                 *)  case "$osvers" in
2317                         '') dflt=$file
2318                                 ;;
2319                         *)  if $test -f $src/hints/$file.sh ; then
2320                                         dflt=$file
2321                                 elif $test -f $src/hints/$xfile.sh ; then
2322                                         dflt=$xfile
2323                                 elif $test -f $src/hints/$xxfile.sh ; then
2324                                         dflt=$xxfile
2325                                 elif $test -f $src/hints/$xxxfile.sh ; then
2326                                         dflt=$xxxfile
2327                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2328                                         dflt=$xxxxfile
2329                                 elif $test -f "$src/hints/${osname}.sh" ; then
2330                                         dflt="${osname}"
2331                                 else
2332                                         dflt=none
2333                                 fi
2334                                 ;;
2335                         esac
2336                         ;;
2337                 esac
2338                 if $test -f Policy.sh ; then
2339                         case "$dflt" in
2340                         *Policy*) ;;
2341                         none) dflt="Policy" ;;
2342                         *) dflt="Policy $dflt" ;;
2343                         esac
2344                 fi
2345                 ;;
2346         *)
2347                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2348                 ;;
2349         esac
2350
2351         if $test -f Policy.sh ; then
2352                 $cat <<EOM
2353
2354 There's also a Policy hint file available, which should make the
2355 site-specific (policy) questions easier to answer.
2356 EOM
2357
2358         fi
2359
2360         $cat <<EOM
2361
2362 You may give one or more space-separated answers, or "none" if appropriate.
2363 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2364 is a good thing.  DO NOT give a wrong version.
2365
2366 EOM
2367
2368         rp="Which of these apply, if any?"
2369         . UU/myread
2370         tans=$ans
2371         for file in $tans; do
2372                 if $test X$file = XPolicy -a -f Policy.sh; then
2373                         . Policy.sh
2374                         $cat Policy.sh >> UU/config.sh
2375                 elif $test -f $src/hints/$file.sh; then
2376                         . $src/hints/$file.sh
2377                         $cat $src/hints/$file.sh >> UU/config.sh
2378                 elif $test X$tans = X -o X$tans = Xnone ; then
2379                         : nothing
2380                 else
2381                         : Give one chance to correct a possible typo.
2382                         echo "$file.sh does not exist"
2383                         dflt=$file
2384                         rp="hint to use instead?"
2385                         . UU/myread
2386                         for file in $ans; do
2387                                 if $test -f "$src/hints/$file.sh"; then
2388                                         . $src/hints/$file.sh
2389                                         $cat $src/hints/$file.sh >> UU/config.sh
2390                                 elif $test X$ans = X -o X$ans = Xnone ; then
2391                                         : nothing
2392                                 else
2393                                         echo "$file.sh does not exist -- ignored."
2394                                 fi
2395                         done
2396                 fi
2397         done
2398
2399         hint=recommended
2400         : Remember our hint file for later.
2401         if $test -f "$src/hints/$file.sh" ; then
2402                 hintfile="$file"
2403         else
2404                 hintfile=''
2405         fi
2406 fi
2407 cd UU
2408 ;;
2409 *)
2410         echo " "
2411         echo "Fetching default answers from $config_sh..." >&4
2412         tmp_n="$n"
2413         tmp_c="$c"
2414         cd ..
2415         cp $config_sh config.sh 2>/dev/null
2416         chmod +w config.sh
2417         . ./config.sh
2418         cd UU
2419         cp ../config.sh .
2420         n="$tmp_n"
2421         c="$tmp_c"
2422         hint=previous
2423         ;;
2424 esac
2425 test "$override" && . ./optdef.sh
2426 myuname="$newmyuname"
2427
2428 : Restore computed paths
2429 for file in $loclist $trylist; do
2430         eval $file="\$_$file"
2431 done
2432
2433 cat << EOM
2434
2435 Configure uses the operating system name and version to set some defaults.
2436 The default value is probably right if the name rings a bell. Otherwise,
2437 since spelling matters for me, either accept the default or answer "none"
2438 to leave it blank.
2439
2440 EOM
2441 case "$osname" in
2442         ''|' ')
2443                 case "$hintfile" in
2444                 ''|' '|none) dflt=none ;;
2445                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2446                 esac
2447                 ;;
2448         *) dflt="$osname" ;;
2449 esac
2450 rp="Operating system name?"
2451 . ./myread
2452 case "$ans" in
2453 none)  osname='' ;;
2454 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2455 esac
2456 echo " "
2457 case "$osvers" in
2458         ''|' ')
2459                 case "$hintfile" in
2460                 ''|' '|none) dflt=none ;;
2461                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2462                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2463                         case "$dflt" in
2464                         ''|' ') dflt=none ;;
2465                         esac
2466                         ;;
2467                 esac
2468                 ;;
2469         *) dflt="$osvers" ;;
2470 esac
2471 rp="Operating system version?"
2472 . ./myread
2473 case "$ans" in
2474 none)  osvers='' ;;
2475 *) osvers="$ans" ;;
2476 esac
2477
2478 : who configured the system
2479 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2480 cf_by=`(logname) 2>/dev/null`
2481 case "$cf_by" in
2482 "")
2483         cf_by=`(whoami) 2>/dev/null`
2484         case "$cf_by" in
2485         "") cf_by=unknown ;;
2486         esac ;;
2487 esac
2488
2489 : set up the script used to warn in case of inconsistency
2490 cat <<EOS >whoa
2491 $startsh
2492 EOS
2493 cat <<'EOSC' >>whoa
2494 dflt=y
2495 echo " "
2496 echo "*** WHOA THERE!!! ***" >&4
2497 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2498 rp="    Keep the $hint value?"
2499 . ./myread
2500 case "$ans" in
2501 y) td=$was; tu=$was;;
2502 esac
2503 EOSC
2504
2505 : function used to set $1 to $val
2506 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2507 case "$val$was" in
2508 $define$undef) . ./whoa; eval "$var=\$td";;
2509 $undef$define) . ./whoa; eval "$var=\$tu";;
2510 *) eval "$var=$val";;
2511 esac'
2512
2513 cat <<EOM
2514
2515 Perl can be built to take advantage of threads, on some systems.
2516 To do so, Configure must be run with -Dusethreads.
2517
2518 Note that threading is a highly experimental feature, and
2519 some known race conditions still remain.  If you choose to try
2520 it, be very sure to not actually deploy it for production
2521 purposes.  README.threads has more details, and is required
2522 reading if you enable threads.
2523 EOM
2524 case "$usethreads" in
2525 $define|true|[yY]*)     dflt='y';;
2526 *) dflt='n';;
2527 esac
2528 rp='Build a threading Perl?'
2529 . ./myread
2530 case "$ans" in
2531 y|Y)    val="$define" ;;     
2532 *)      val="$undef" ;;
2533 esac
2534 set usethreads
2535 eval $setvar 
2536
2537 case "$d_oldpthreads" in
2538 '')     : Configure tests would be welcome here.  For now, assume undef.
2539         val="$undef" ;;
2540 *)      val="$d_oldpthreads" ;;
2541 esac
2542 set d_oldpthreads
2543 eval $setvar
2544
2545
2546 case "$usethreads" in
2547 "$define"|true|[yY]*)
2548 : Look for a hint-file generated 'call-back-unit'.  If the
2549 : user has specified that a threading perl is to be built,
2550 : we may need to set or change some other defaults.
2551         if $test -f usethreads.cbu; then
2552                 . ./usethreads.cbu
2553         fi
2554         case "$osname" in
2555         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2556                 # Known thread-capable platforms.
2557                 ;;
2558         *)
2559                 cat >&4 <<EOM
2560 $osname is not known to support threads.
2561 Please let perlbug@perl.com know how to do that.
2562
2563 Cannot continue, aborting.
2564 EOM
2565                 exit 1
2566         ;;
2567         esac # $osname
2568     ;;
2569 esac # $usethreads
2570
2571 cat <<EOM
2572
2573 Perl can be built so that multiple Perl interpreters can coexist
2574 within the same Perl executable.  To do so, Configure must be run with
2575 -Dusemultiplicity.
2576
2577 Normally you do not need this and you should answer no.
2578
2579 EOM
2580 case "$usemultiplicity" in
2581 $define|true|[yY]*)     dflt='y';;
2582 *) dflt='n';;
2583 esac
2584 rp='Build Perl for multiplicity?'
2585 . ./myread
2586 case "$ans" in
2587 y|Y)    val="$define" ;;     
2588 *)      val="$undef" ;;
2589 esac
2590 set usemultiplicity
2591 eval $setvar 
2592
2593 cat <<EOM
2594
2595 Perl can be built to take advantage of explicit 64-bit interfaces,
2596 on some systems.  To do so, Configure must be run with -Duse64bits.
2597
2598 If this doesn't make any sense to you, just accept the default 'n'.
2599 EOM
2600 case "$use64bits" in
2601 $define|true|[yY]*)     dflt='y';;
2602 *) dflt='n';;
2603 esac
2604 rp='Try to use explicit 64-bit interfaces, if available?'
2605 . ./myread
2606 case "$ans" in
2607 y|Y) 
2608         val="$define"
2609         ;;     
2610 *)      
2611         val="$undef"
2612         ;;
2613 esac
2614 set use64bits
2615 eval $setvar
2616
2617 case "$archname64" in
2618 '') archname64='' ;;    # not a typo
2619 esac
2620
2621 case "$use64bits" in
2622 "$define"|true|[yY]*)
2623 : Look for a hint-file generated 'call-back-unit'.  If the
2624 : user has specified that a threading perl is to be built,
2625 : we may need to set or change some other defaults.
2626         if $test -f use64bits.cbu; then
2627                 . ./use64bits.cbu
2628         fi
2629         case "$osname" in
2630         dec_osf|hpux|irix|solaris|unicos)
2631                 # Known 64-bit capable platforms.
2632                 ;;
2633         *)
2634                 cat >&4 <<EOM
2635 $osname is not known to support 64-bit interfaces.
2636 Please let perlbug@perl.com know how to do that.
2637
2638 Cannot continue, aborting.
2639 EOM
2640                 exit 1
2641                 ;;
2642         esac
2643         ;;
2644 esac
2645
2646 : determine the architecture name
2647 echo " "
2648 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2649         tarch=`arch`"-$osname"
2650 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2651         if uname -m > tmparch 2>&1 ; then
2652                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2653                         -e 's/$/'"-$osname/" tmparch`
2654         else
2655                 tarch="$osname"
2656         fi
2657         $rm -f tmparch
2658 else
2659         tarch="$osname"
2660 fi
2661 case "$myarchname" in
2662 ''|"$tarch") ;;
2663 *)
2664         echo "(Your architecture name used to be $myarchname.)"
2665         archname=''
2666         ;;
2667 esac
2668 myarchname="$tarch"
2669 case "$archname" in
2670 '') dflt="$tarch";;
2671 *) dflt="$archname";;
2672 esac
2673 rp='What is your architecture name'
2674 . ./myread
2675 archname="$ans"
2676 case "$usethreads" in
2677 $define)
2678         echo "Threads selected." >&4
2679         case "$archname" in
2680         *-thread*) echo "...and architecture name already has -thread." >&4
2681                 ;;
2682         *)      archname="$archname-thread"
2683                 echo "...setting architecture name to $archname." >&4
2684                 ;;
2685         esac
2686         ;;
2687 esac
2688 case "$usemultiplicity" in
2689 $define)
2690         echo "Multiplicity selected." >&4
2691         case "$archname" in
2692         *-multi*) echo "...and architecture name already has -multi." >&4
2693                 ;;
2694         *)      archname="$archname-multi"
2695                 echo "...setting architecture name to $archname." >&4
2696                 ;;
2697         esac
2698         ;;
2699 esac
2700 case "$use64bits" in
2701 $define)
2702         echo "Explicit 64-bitness selected." >&4
2703         case "$archname64" in
2704         '')
2705                 ;;
2706         *)
2707                 case "$archname" in
2708                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2709                         ;;
2710                 *)      archname="$archname-$archname64"
2711                         echo "...setting architecture name to $archname." >&4
2712                         ;;
2713                 esac
2714                 ;;
2715         esac
2716 esac
2717
2718 : is AFS running?
2719 echo " "
2720 case "$afs" in
2721 $define|true)   afs=true ;;
2722 $undef|false)   afs=false ;;
2723 *)      if test -d /afs; then
2724                 afs=true
2725         else
2726                 afs=false
2727         fi
2728         ;;
2729 esac
2730 if $afs; then
2731         echo "AFS may be running... I'll be extra cautious then..." >&4
2732 else
2733         echo "AFS does not seem to be running..." >&4
2734 fi
2735
2736 : decide how portable to be.  Allow command line overrides.
2737 case "$d_portable" in
2738 "$undef") ;;
2739 *)      d_portable="$define" ;;
2740 esac
2741
2742 : set up shell script to do ~ expansion
2743 cat >filexp <<EOSS
2744 $startsh
2745 : expand filename
2746 case "\$1" in
2747  ~/*|~)
2748         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2749         ;;
2750  ~*)
2751         if $test -f /bin/csh; then
2752                 /bin/csh -f -c "glob \$1"
2753                 failed=\$?
2754                 echo ""
2755                 exit \$failed
2756         else
2757                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2758                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2759                 if $test ! -d "\$dir"; then
2760                         me=\`basename \$0\`
2761                         echo "\$me: can't locate home directory for: \$name" >&2
2762                         exit 1
2763                 fi
2764                 case "\$1" in
2765                 */*)
2766                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2767                         ;;
2768                 *)
2769                         echo \$dir
2770                         ;;
2771                 esac
2772         fi
2773         ;;
2774 *)
2775         echo \$1
2776         ;;
2777 esac
2778 EOSS
2779 chmod +x filexp
2780 $eunicefix filexp
2781
2782 : now set up to get a file name
2783 cat <<EOS >getfile
2784 $startsh
2785 EOS
2786 cat <<'EOSC' >>getfile
2787 tilde=''
2788 fullpath=''
2789 already=''
2790 skip=''
2791 none_ok=''
2792 exp_file=''
2793 nopath_ok=''
2794 orig_rp="$rp"
2795 orig_dflt="$dflt"
2796
2797 case "$fn" in
2798 *\(*)
2799         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2800         fn=`echo $fn | sed 's/(.*)//'`
2801         ;;
2802 esac
2803
2804 case "$fn" in
2805 *:*)
2806         loc_file=`expr $fn : '.*:\(.*\)'`
2807         fn=`expr $fn : '\(.*\):.*'`
2808         ;;
2809 esac
2810
2811 case "$fn" in
2812 *~*) tilde=true;;
2813 esac
2814 case "$fn" in
2815 */*) fullpath=true;;
2816 esac
2817 case "$fn" in
2818 *+*) skip=true;;
2819 esac
2820 case "$fn" in
2821 *n*) none_ok=true;;
2822 esac
2823 case "$fn" in
2824 *e*) exp_file=true;;
2825 esac
2826 case "$fn" in
2827 *p*) nopath_ok=true;;
2828 esac
2829
2830 case "$fn" in
2831 *f*) type='File';;
2832 *d*) type='Directory';;
2833 *l*) type='Locate';;
2834 esac
2835
2836 what="$type"
2837 case "$what" in
2838 Locate) what='File';;
2839 esac
2840
2841 case "$exp_file" in
2842 '')
2843         case "$d_portable" in
2844         "$define") ;;
2845         *) exp_file=true;;
2846         esac
2847         ;;
2848 esac
2849
2850 cd ..
2851 while test "$type"; do
2852         redo=''
2853         rp="$orig_rp"
2854         dflt="$orig_dflt"
2855         case "$tilde" in
2856         true) rp="$rp (~name ok)";;
2857         esac
2858         . UU/myread
2859         if test -f UU/getfile.ok && \
2860                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2861         then
2862                 value="$ans"
2863                 ansexp="$ans"
2864                 break
2865         fi
2866         case "$ans" in
2867         none)
2868                 value=''
2869                 ansexp=''
2870                 case "$none_ok" in
2871                 true) type='';;
2872                 esac
2873                 ;;
2874         *)
2875                 case "$tilde" in
2876                 '') value="$ans"
2877                         ansexp="$ans";;
2878                 *)
2879                         value=`UU/filexp $ans`
2880                         case $? in
2881                         0)
2882                                 if test "$ans" != "$value"; then
2883                                         echo "(That expands to $value on this system.)"
2884                                 fi
2885                                 ;;
2886                         *) value="$ans";;
2887                         esac
2888                         ansexp="$value"
2889                         case "$exp_file" in
2890                         '') value="$ans";;
2891                         esac
2892                         ;;
2893                 esac
2894                 case "$fullpath" in
2895                 true)
2896                         case "$ansexp" in
2897                         /*) value="$ansexp" ;;
2898                         *)
2899                                 redo=true
2900                                 case "$already" in
2901                                 true)
2902                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2903                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2904                                         ;;
2905                                 *)
2906                                 echo "Please give a full path name, starting with slash." >&4
2907                                         case "$tilde" in
2908                                         true)
2909                                 echo "Note that using ~name is ok provided it expands well." >&4
2910                                                 already=true
2911                                                 ;;
2912                                         esac
2913                                 esac
2914                                 ;;
2915                         esac
2916                         ;;
2917                 esac
2918                 case "$redo" in
2919                 '')
2920                         case "$type" in
2921                         File)
2922                                 if test -f "$ansexp"; then
2923                                         type=''
2924                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2925                                 then
2926                                         echo "($value is not a plain file, but that's ok.)"
2927                                         type=''
2928                                 fi
2929                                 ;;
2930                         Directory)
2931                                 if test -d "$ansexp"; then
2932                                         type=''
2933                                 fi
2934                                 ;;
2935                         Locate)
2936                                 if test -d "$ansexp"; then
2937                                         echo "(Looking for $loc_file in directory $value.)"
2938                                         value="$value/$loc_file"
2939                                         ansexp="$ansexp/$loc_file"
2940                                 fi
2941                                 if test -f "$ansexp"; then
2942                                         type=''
2943                                 fi
2944                                 case "$nopath_ok" in
2945                                 true)   case "$value" in
2946                                         */*) ;;
2947                                         *)      echo "Assuming $value will be in people's path."
2948                                                 type=''
2949                                                 ;;
2950                                         esac
2951                                         ;;
2952                                 esac
2953                                 ;;
2954                         esac
2955
2956                         case "$skip" in
2957                         true) type='';
2958                         esac
2959
2960                         case "$type" in
2961                         '') ;;
2962                         *)
2963                                 if test "$fastread" = yes; then
2964                                         dflt=y
2965                                 else
2966                                         dflt=n
2967                                 fi
2968                                 rp="$what $value doesn't exist.  Use that name anyway?"
2969                                 . UU/myread
2970                                 dflt=''
2971                                 case "$ans" in
2972                                 y*) type='';;
2973                                 *) echo " ";;
2974                                 esac
2975                                 ;;
2976                         esac
2977                         ;;
2978                 esac
2979                 ;;
2980         esac
2981 done
2982 cd UU
2983 ans="$value"
2984 rp="$orig_rp"
2985 dflt="$orig_dflt"
2986 rm -f getfile.ok
2987 EOSC
2988
2989 : determine root of directory hierarchy where package will be installed.
2990 case "$prefix" in
2991 '')
2992         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2993         ;;
2994 *)
2995         dflt="$prefix"
2996         ;;
2997 esac
2998 $cat <<EOM
2999
3000 By default, $package will be installed in $dflt/bin, manual
3001 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3002 all installation directories. Typically set to /usr/local, but you
3003 may choose /usr if you wish to install $package among your system
3004 binaries. If you wish to have binaries under /bin but manual pages
3005 under /usr/local/man, that's ok: you will be prompted separately
3006 for each of the installation directories, the prefix being only used
3007 to set the defaults.
3008
3009 EOM
3010 fn=d~
3011 rp='Installation prefix to use?'
3012 . ./getfile
3013 oldprefix=''
3014 case "$prefix" in
3015 '') ;;
3016 *)
3017         case "$ans" in
3018         "$prefix") ;;
3019         *) oldprefix="$prefix";;
3020         esac
3021         ;;
3022 esac
3023 prefix="$ans"
3024 prefixexp="$ansexp"
3025
3026 : set the prefixit variable, to compute a suitable default value
3027 prefixit='case "$3" in
3028 ""|none)
3029         case "$oldprefix" in
3030         "") eval "$1=\"\$$2\"";;
3031         *)
3032                 case "$3" in
3033                 "") eval "$1=";;
3034                 none)
3035                         eval "tp=\"\$$2\"";
3036                         case "$tp" in
3037                         ""|" ") eval "$1=\"\$$2\"";;
3038                         *) eval "$1=";;
3039                         esac;;
3040                 esac;;
3041         esac;;
3042 *)
3043         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3044         case "$tp" in
3045         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3046         /*-$oldprefix/*|\~*-$oldprefix/*)
3047                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3048         *) eval "$1=\"\$$2\"";;
3049         esac;;
3050 esac'
3051
3052 : set the base revision
3053 baserev=5.0
3054
3055 : get the patchlevel
3056 echo " "
3057 echo "Getting the current patchlevel..." >&4
3058 if $test -r $rsrc/patchlevel.h;then
3059         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3060         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3061 else
3062         patchlevel=0
3063         subversion=0
3064 fi
3065 $echo $n "(You have $package" $c
3066 case "$package" in
3067 "*$baserev")    ;;
3068 *)              $echo $n " $baserev" $c ;;
3069 esac
3070 $echo $n " patchlevel $patchlevel" $c
3071 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3072 echo ".)"
3073
3074 if test 0 -eq "$subversion"; then
3075         version=`LC_ALL=C; export LC_ALL; \
3076                  echo $baserev $patchlevel | \
3077                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3078 else
3079         version=`LC_ALL=C; export LC_ALL; \
3080                  echo $baserev $patchlevel $subversion | \
3081                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3082 fi
3083 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3084 if test "$subversion" -lt 50; then
3085         apiversion=`LC_ALL=C; export LC_ALL; \
3086                  LANGUAGE=C; export LANGUAGE; \
3087                  echo $baserev $patchlevel | \
3088                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3089 else
3090         apiversion="$version"
3091 fi
3092
3093 : determine where private library files go
3094 : Usual default is /usr/local/lib/perl5/$version.
3095 : Also allow things like /opt/perl/lib/$version, since 
3096 : /opt/perl/lib/perl5... would be redundant.
3097 case "$prefix" in
3098 *perl*) set dflt privlib lib/$version ;;
3099 *)       set dflt privlib lib/$package/$version ;;
3100 esac
3101 eval $prefixit
3102 $cat <<EOM
3103
3104 There are some auxiliary files for $package that need to be put into a
3105 private library directory that is accessible by everyone.
3106
3107 EOM
3108 fn=d~+
3109 rp='Pathname where the private library files will reside?'
3110 . ./getfile
3111 if $test "X$privlibexp" != "X$ansexp"; then
3112         installprivlib=''
3113 fi
3114 privlib="$ans"
3115 privlibexp="$ansexp"
3116 if $afs; then
3117         $cat <<EOM
3118
3119 Since you are running AFS, I need to distinguish the directory in which
3120 private files reside from the directory in which they are installed (and from
3121 which they are presumably copied to the former directory by occult means).
3122
3123 EOM
3124         case "$installprivlib" in
3125         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3126         *) dflt="$installprivlib";;
3127         esac
3128         fn=de~
3129         rp='Where will private files be installed?'
3130         . ./getfile
3131         installprivlib="$ans"
3132 else
3133         installprivlib="$privlibexp"
3134 fi
3135
3136 : set the prefixup variable, to restore leading tilda escape
3137 prefixup='case "$prefixexp" in
3138 "$prefix") ;;
3139 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3140 esac'
3141
3142 : determine where public architecture dependent libraries go
3143 set archlib archlib
3144 eval $prefixit
3145 : privlib default is /usr/local/lib/$package/$version
3146 : archlib default is /usr/local/lib/$package/$version/$archname
3147 : privlib may have an optional trailing /share.
3148 tdflt=`echo $privlib | $sed 's,/share$,,'`
3149 tdflt=$tdflt/$archname
3150 case "$archlib" in
3151 '')     dflt=$tdflt
3152         ;;
3153 *)      dflt="$archlib"
3154     ;;
3155 esac
3156 cat <<EOM
3157
3158 $spackage contains architecture-dependent library files.  If you are
3159 sharing libraries in a heterogeneous environment, you might store
3160 these files in a separate location.  Otherwise, you can just include
3161 them with the rest of the public library files.
3162
3163 EOM
3164 fn=d+~
3165 rp='Where do you want to put the public architecture-dependent libraries?'
3166 . ./getfile
3167 archlib="$ans"
3168 archlibexp="$ansexp"
3169
3170 if $afs; then
3171         $cat <<EOM
3172
3173 Since you are running AFS, I need to distinguish the directory in
3174 which architecture-dependent library files reside from the directory
3175 in which they are installed (and from which they are presumably copied
3176 to the former directory by occult means).
3177
3178 EOM
3179         case "$installarchlib" in
3180         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3181         *) dflt="$installarchlib";;
3182         esac
3183         fn=de~
3184         rp='Where will architecture-dependent library files be installed?'
3185         . ./getfile
3186         installarchlib="$ans"
3187 else
3188         installarchlib="$archlibexp"
3189 fi
3190 if $test X"$archlib" = X"$privlib"; then
3191         d_archlib="$undef"
3192 else
3193         d_archlib="$define"
3194 fi
3195
3196 : make some quick guesses about what we are up against
3197 echo " "
3198 $echo $n "Hmm...  $c"
3199 echo exit 1 >bsd
3200 echo exit 1 >usg
3201 echo exit 1 >v7
3202 echo exit 1 >osf1
3203 echo exit 1 >eunice
3204 echo exit 1 >xenix
3205 echo exit 1 >venix
3206 echo exit 1 >os2
3207 d_bsd="$undef"
3208 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3209 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3210 then
3211         echo "Looks kind of like an OSF/1 system, but we'll see..."
3212         echo exit 0 >osf1
3213 elif test `echo abc | tr a-z A-Z` = Abc ; then
3214         xxx=`./loc addbib blurfl $pth`
3215         if $test -f $xxx; then
3216         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3217                 echo exit 0 >bsd
3218                 echo exit 0 >usg
3219         else
3220                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3221                         echo "Looks kind of like an extended USG system, but we'll see..."
3222                 else
3223                         echo "Looks kind of like a USG system, but we'll see..."
3224                 fi
3225                 echo exit 0 >usg
3226         fi
3227 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3228         echo "Looks kind of like a BSD system, but we'll see..."
3229         d_bsd="$define"
3230         echo exit 0 >bsd
3231 else
3232         echo "Looks kind of like a Version 7 system, but we'll see..."
3233         echo exit 0 >v7
3234 fi
3235 case "$eunicefix" in
3236 *unixtovms*)
3237         $cat <<'EOI'
3238 There is, however, a strange, musty smell in the air that reminds me of
3239 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3240 EOI
3241         echo exit 0 >eunice
3242         d_eunice="$define"
3243 : it so happens the Eunice I know will not run shell scripts in Unix format
3244         ;;
3245 *)
3246         echo " "
3247         echo "Congratulations.  You aren't running Eunice."
3248         d_eunice="$undef"
3249         ;;
3250 esac
3251 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3252 case "$p_" in
3253 :) ;;
3254 *)
3255         $cat <<'EOI'
3256 I have the feeling something is not exactly right, however...don't tell me...
3257 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3258 EOI
3259         echo exit 0 >os2
3260         ;;
3261 esac
3262 if test -f /xenix; then
3263         echo "Actually, this looks more like a XENIX system..."
3264         echo exit 0 >xenix
3265         d_xenix="$define"
3266 else
3267         echo " "
3268         echo "It's not Xenix..."
3269         d_xenix="$undef"
3270 fi
3271 chmod +x xenix
3272 $eunicefix xenix
3273 if test -f /venix; then
3274         echo "Actually, this looks more like a VENIX system..."
3275         echo exit 0 >venix
3276 else
3277         echo " "
3278         if ./xenix; then
3279                 : null
3280         else
3281                 echo "Nor is it Venix..."
3282         fi
3283 fi
3284 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3285 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3286 $rm -f foo
3287
3288 : see if setuid scripts can be secure
3289 $cat <<EOM
3290
3291 Some kernels have a bug that prevents setuid #! scripts from being
3292 secure.  Some sites have disabled setuid #! scripts because of this.
3293
3294 First let's decide if your kernel supports secure setuid #! scripts.
3295 (If setuid #! scripts would be secure but have been disabled anyway,
3296 don't say that they are secure if asked.)
3297
3298 EOM
3299
3300 val="$undef"
3301 if $test -d /dev/fd; then
3302         echo "#!$ls" >reflect
3303         chmod +x,u+s reflect
3304         ./reflect >flect 2>&1
3305         if $contains "/dev/fd" flect >/dev/null; then
3306                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3307                 val="$define"
3308         else
3309                 $cat <<EOM
3310 If you are not sure if they are secure, I can check but I'll need a
3311 username and password different from the one you are using right now.
3312 If you don't have such a username or don't want me to test, simply
3313 enter 'none'.
3314
3315 EOM
3316                 rp='Other username to test security of setuid scripts with?'
3317                 dflt='none'
3318                 . ./myread
3319                 case "$ans" in
3320                 n|none)
3321                         case "$d_suidsafe" in
3322                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3323                                 dflt=n;;
3324                         "$undef")
3325                                 echo "Well, the $hint value is *not* secure." >&4
3326                                 dflt=n;;
3327                         *)      echo "Well, the $hint value *is* secure." >&4
3328                                 dflt=y;;
3329                         esac
3330                         ;;
3331                 *)
3332                         $rm -f reflect flect
3333                         echo "#!$ls" >reflect
3334                         chmod +x,u+s reflect
3335                         echo >flect
3336                         chmod a+w flect
3337                         echo '"su" will (probably) prompt you for '"$ans's password."
3338                         su $ans -c './reflect >flect'
3339                         if $contains "/dev/fd" flect >/dev/null; then
3340                                 echo "Okay, it looks like setuid scripts are secure." >&4
3341                                 dflt=y
3342                         else
3343                                 echo "I don't think setuid scripts are secure." >&4
3344                                 dflt=n
3345                         fi
3346                         ;;
3347                 esac
3348                 rp='Does your kernel have *secure* setuid scripts?'
3349                 . ./myread
3350                 case "$ans" in
3351                 [yY]*)  val="$define";;
3352                 *)      val="$undef";;
3353                 esac
3354         fi
3355 else
3356         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3357         echo "(That's for file descriptors, not floppy disks.)"
3358         val="$undef"
3359 fi
3360 set d_suidsafe
3361 eval $setvar
3362
3363 $rm -f reflect flect
3364
3365 : now see if they want to do setuid emulation
3366 echo " "
3367 val="$undef"
3368 case "$d_suidsafe" in
3369 "$define")
3370         val="$undef"
3371         echo "No need to emulate SUID scripts since they are secure here." >& 4
3372         ;;
3373 *)
3374         $cat <<EOM
3375 Some systems have disabled setuid scripts, especially systems where
3376 setuid scripts cannot be secure.  On systems where setuid scripts have
3377 been disabled, the setuid/setgid bits on scripts are currently
3378 useless.  It is possible for $package to detect those bits and emulate
3379 setuid/setgid in a secure fashion.  This emulation will only work if
3380 setuid scripts have been disabled in your kernel.
3381
3382 EOM
3383         case "$d_dosuid" in
3384         "$define") dflt=y ;;
3385         *) dflt=n ;;
3386         esac
3387         rp="Do you want to do setuid/setgid emulation?"
3388         . ./myread
3389         case "$ans" in
3390         [yY]*)  val="$define";;
3391         *)      val="$undef";;
3392         esac
3393         ;;
3394 esac
3395 set d_dosuid
3396 eval $setvar
3397
3398 : determine where manual pages are on this system
3399 echo " "
3400 case "$sysman" in
3401 '') 
3402         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3403         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3404         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3405         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3406         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3407         sysman=`./loc . /usr/man/man1 $syspath`
3408         ;;
3409 esac
3410 if $test -d "$sysman"; then
3411         echo "System manual is in $sysman." >&4
3412 else
3413         echo "Could not find manual pages in source form." >&4
3414 fi
3415
3416 : see what memory models we can support
3417 case "$models" in
3418 '')
3419         $cat >pdp11.c <<'EOP'
3420 int main() {
3421 #ifdef pdp11
3422         exit(0);
3423 #else
3424         exit(1);
3425 #endif
3426 }
3427 EOP
3428         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3429         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3430                 dflt='unsplit split'
3431         else
3432                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3433                 case "$tans" in
3434                 X) dflt='none';;
3435                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3436                                 dflt='small'
3437                         else
3438                                 dflt=''
3439                         fi
3440                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3441                                 dflt="$dflt medium"
3442                         fi
3443                         if $test -d /lib/large || $test -d /usr/lib/large; then
3444                                 dflt="$dflt large"
3445                         fi
3446                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3447                                 dflt="$dflt huge"
3448                         fi
3449                 esac
3450         fi;;
3451 *) dflt="$models";;
3452 esac
3453 $cat <<EOM
3454  
3455 Some systems have different model sizes.  On most systems they are called
3456 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3457 split.  If your system doesn't support different memory models, say "none".
3458 If you wish to force everything to one memory model, say "none" here and
3459 put the appropriate flags later when it asks you for other cc and ld flags.
3460 Venix systems may wish to put "none" and let the compiler figure things out.
3461 (In the following question multiple model names should be space separated.)
3462
3463 The default for most systems is "none".
3464
3465 EOM
3466 rp="Which memory models are supported?"
3467 . ./myread
3468 models="$ans"
3469
3470 case "$models" in
3471 none)
3472         small=''
3473         medium=''
3474         large=''
3475         huge=''
3476         unsplit=''
3477         split=''
3478         ;;
3479 *split)
3480         case "$split" in
3481         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3482                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3483                         dflt='-i'
3484                 else
3485                         dflt='none'
3486                 fi;;
3487         *) dflt="$split";;
3488         esac
3489         rp="What flag indicates separate I and D space?"
3490         . ./myread
3491         tans="$ans"
3492         case "$tans" in
3493         none) tans='';;
3494         esac
3495         split="$tans"
3496         unsplit='';;
3497 *large*|*small*|*medium*|*huge*)
3498         case "$models" in
3499         *large*)
3500                 case "$large" in
3501                 '') dflt='-Ml';;
3502                 *) dflt="$large";;
3503                 esac
3504         rp="What flag indicates large model?"
3505         . ./myread
3506         tans="$ans"
3507         case "$tans" in
3508         none) tans='';
3509         esac
3510         large="$tans";;
3511         *) large='';;
3512         esac
3513         case "$models" in
3514         *huge*) case "$huge" in
3515                 '') dflt='-Mh';;
3516                 *) dflt="$huge";;
3517                 esac
3518                 rp="What flag indicates huge model?"
3519                 . ./myread
3520                 tans="$ans"
3521                 case "$tans" in
3522                 none) tans='';
3523                 esac
3524                 huge="$tans";;
3525         *) huge="$large";;
3526         esac
3527         case "$models" in
3528         *medium*) case "$medium" in
3529                 '') dflt='-Mm';;
3530                 *) dflt="$medium";;
3531                 esac
3532                 rp="What flag indicates medium model?"
3533                 . ./myread
3534                 tans="$ans"
3535                 case "$tans" in
3536                 none) tans='';
3537                 esac
3538                 medium="$tans";;
3539         *) medium="$large";;
3540         esac
3541         case "$models" in
3542         *small*) case "$small" in
3543                 '') dflt='none';;
3544                 *) dflt="$small";;
3545                 esac
3546                 rp="What flag indicates small model?"
3547                 . ./myread
3548                 tans="$ans"
3549                 case "$tans" in
3550                 none) tans='';
3551                 esac
3552                 small="$tans";;
3553         *) small='';;
3554         esac
3555         ;;
3556 *)
3557         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3558         ;;
3559 esac
3560 $rm -f pdp11.* pdp11
3561
3562 : see if we need a special compiler
3563 echo " "
3564 if ./usg; then
3565         case "$cc" in
3566         '') case "$Mcc" in
3567                 /*) dflt='Mcc';;
3568                 *) case "$large" in
3569                         -M*) dflt='cc';;
3570                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3571                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3572                                                 dflt='cc'
3573                                         else
3574                                                 dflt='cc -M'
3575                                         fi
3576                                 else
3577                                         dflt='cc'
3578                                 fi;;
3579                         esac;;
3580                 esac;;
3581         *)  dflt="$cc";;
3582         esac
3583         case "$dflt" in
3584         *M*)    $cat <<'EOM'
3585 On some older systems the default C compiler will not resolve multiple global
3586 references that happen to have the same name.  On some such systems the "Mcc"
3587 command may be used to force these to be resolved.  On other systems a "cc -M"
3588 command is required.  (Note that the -M flag on other systems indicates a
3589 memory model to use!) If you have the Gnu C compiler, you might wish to use
3590 that instead.
3591
3592 EOM
3593         ;;
3594         esac
3595         rp="Use which C compiler?"
3596         . ./myread
3597         cc="$ans"
3598 else
3599         case "$cc" in
3600         '') dflt=cc;;
3601         *) dflt="$cc";;
3602         esac
3603         rp="Use which C compiler?"
3604         . ./myread
3605         cc="$ans"
3606 fi
3607 : Look for a hint-file generated 'call-back-unit'.  Now that the
3608 : user has specified the compiler, we may need to set or change some
3609 : other defaults.
3610 if $test -f cc.cbu; then
3611     . ./cc.cbu
3612 fi
3613 echo " "
3614 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3615 $cat >gccvers.c <<EOM
3616 #include <stdio.h>
3617 int main() {
3618 #ifdef __GNUC__
3619 #ifdef __VERSION__
3620         printf("%s\n", __VERSION__);
3621 #else
3622         printf("%s\n", "1");
3623 #endif
3624 #endif
3625         exit(0);
3626 }
3627 EOM
3628 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3629         gccversion=`./gccvers`
3630         case "$gccversion" in
3631         '') echo "You are not using GNU cc." ;;
3632         *)  echo "You are using GNU cc $gccversion." ;;
3633         esac
3634 else
3635         echo " "
3636         echo "*** WHOA THERE!!! ***" >&4
3637         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3638         case "$knowitall" in
3639         '')
3640         echo "    You'd better start hunting for one and let me know about it." >&4
3641                 exit 1
3642                 ;;
3643         esac
3644 fi
3645 $rm -f gccvers*
3646 case "$gccversion" in
3647 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3648 esac
3649
3650 : What should the include directory be ?
3651 echo " "
3652 $echo $n "Hmm...  $c"
3653 dflt='/usr/include'
3654 incpath=''
3655 mips_type=''
3656 if $test -f /bin/mips && /bin/mips; then
3657         echo "Looks like a MIPS system..."
3658         $cat >usr.c <<'EOCP'
3659 #ifdef SYSTYPE_BSD43
3660 /bsd43
3661 #endif
3662 EOCP
3663         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3664                 dflt='/bsd43/usr/include'
3665                 incpath='/bsd43'
3666                 mips_type='BSD 4.3'
3667         else
3668                 mips_type='System V'
3669         fi
3670         $rm -f usr.c usr.out
3671         echo "and you're compiling with the $mips_type compiler and libraries."
3672         xxx_prompt=y
3673         echo "exit 0" >mips
3674 else
3675         echo "Doesn't look like a MIPS system."
3676         xxx_prompt=n
3677         echo "exit 1" >mips
3678 fi
3679 chmod +x mips
3680 $eunicefix mips
3681 case "$usrinc" in
3682 '') ;;
3683 *) dflt="$usrinc";;
3684 esac
3685 case "$xxx_prompt" in
3686 y)      fn=d/
3687         echo " "
3688         rp='Where are the include files you want to use?'
3689         . ./getfile
3690         usrinc="$ans"
3691         ;;
3692 *)      usrinc="$dflt"
3693         ;;
3694 esac
3695
3696 : see how we invoke the C preprocessor
3697 echo " "
3698 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3699 cat <<'EOT' >testcpp.c
3700 #define ABC abc
3701 #define XYZ xyz
3702 ABC.XYZ
3703 EOT
3704 cd ..
3705 if test ! -f cppstdin; then
3706         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3707 else
3708         echo "Keeping your $hint cppstdin wrapper."
3709 fi
3710 chmod 755 cppstdin
3711 wrapper=`pwd`/cppstdin
3712 ok='false'
3713 cd UU
3714
3715 if $test "X$cppstdin" != "X" && \
3716         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3717         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3718 then
3719         echo "You used to use $cppstdin $cppminus so we'll use that again."
3720         case "$cpprun" in
3721         '') echo "But let's see if we can live without a wrapper..." ;;
3722         *)
3723                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3724                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3725                 then
3726                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3727                         ok='true'
3728                 else
3729                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3730                 fi
3731                 ;;
3732         esac
3733 else
3734         case "$cppstdin" in
3735         '') ;;
3736         *)
3737                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3738                 ;;
3739         esac
3740 fi
3741
3742 if $ok; then
3743         : nothing
3744 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3745         $cc -E <testcpp.c >testcpp.out 2>&1; \
3746         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3747         echo "Yup, it does."
3748         x_cpp="$cc -E"
3749         x_minus='';
3750 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3751         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3752         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3753         echo "Yup, it does."
3754         x_cpp="$cc -E"
3755         x_minus='-';
3756 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3757         $cc -P <testcpp.c >testcpp.out 2>&1; \
3758         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3759         echo "Yipee, that works!"
3760         x_cpp="$cc -P"
3761         x_minus='';
3762 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3763         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3764         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3765         echo "At long last!"
3766         x_cpp="$cc -P"
3767         x_minus='-';
3768 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3769         $cpp <testcpp.c >testcpp.out 2>&1; \
3770         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3771         echo "It works!"
3772         x_cpp="$cpp"
3773         x_minus='';
3774 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3775         $cpp - <testcpp.c >testcpp.out 2>&1; \
3776         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3777         echo "Hooray, it works!  I was beginning to wonder."
3778         x_cpp="$cpp"
3779         x_minus='-';
3780 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3781         $wrapper <testcpp.c >testcpp.out 2>&1; \
3782         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3783         x_cpp="$wrapper"
3784         x_minus=''
3785         echo "Eureka!"
3786 else
3787         dflt=''
3788         rp="No dice.  I can't find a C preprocessor.  Name one:"
3789         . ./myread
3790         x_cpp="$ans"
3791         x_minus=''
3792         $x_cpp <testcpp.c >testcpp.out 2>&1
3793         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3794                 echo "OK, that will do." >&4
3795         else
3796 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3797                 exit 1
3798         fi
3799 fi
3800
3801 case "$ok" in
3802 false)
3803         cppstdin="$x_cpp"
3804         cppminus="$x_minus"
3805         cpprun="$x_cpp"
3806         cpplast="$x_minus"
3807         set X $x_cpp
3808         shift
3809         case "$1" in
3810         "$cpp")
3811                 echo "Perhaps can we force $cc -E using a wrapper..."
3812                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3813                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3814                 then
3815                         echo "Yup, we can."
3816                         cppstdin="$wrapper"
3817                         cppminus='';
3818                 else
3819                         echo "Nope, we'll have to live without it..."
3820                 fi
3821                 ;;
3822         esac
3823         case "$cpprun" in
3824         "$wrapper")
3825                 cpprun=''
3826                 cpplast=''
3827                 ;;
3828         esac
3829         ;;
3830 esac
3831
3832 case "$cppstdin" in
3833 "$wrapper"|'cppstdin') ;;
3834 *) $rm -f $wrapper;;
3835 esac
3836 $rm -f testcpp.c testcpp.out
3837
3838 : Set private lib path
3839 case "$plibpth" in
3840 '') if ./mips; then
3841                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3842         fi;;
3843 esac
3844 case "$libpth" in
3845 ' ') dlist='';;
3846 '') dlist="$loclibpth $plibpth $glibpth";;
3847 *) dlist="$libpth";;
3848 esac
3849
3850 : Now check and see which directories actually exist, avoiding duplicates
3851 libpth=''
3852 for xxx in $dlist
3853 do
3854     if $test -d $xxx; then
3855                 case " $libpth " in
3856                 *" $xxx "*) ;;
3857                 *) libpth="$libpth $xxx";;
3858                 esac
3859     fi
3860 done
3861 $cat <<'EOM'
3862
3863 Some systems have incompatible or broken versions of libraries.  Among
3864 the directories listed in the question below, please remove any you
3865 know not to be holding relevant libraries, and add any that are needed.
3866 Say "none" for none.
3867
3868 EOM
3869 case "$libpth" in
3870 '') dflt='none';;
3871 *)
3872         set X $libpth
3873         shift
3874         dflt=${1+"$@"}
3875         ;;
3876 esac
3877 rp="Directories to use for library searches?"
3878 . ./myread
3879 case "$ans" in
3880 none) libpth=' ';;
3881 *) libpth="$ans";;
3882 esac
3883
3884 : compute shared library extension
3885 case "$so" in
3886 '')
3887         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3888                 dflt='sl'
3889         else
3890                 dflt='so'
3891         fi
3892         ;;
3893 *) dflt="$so";;
3894 esac
3895 $cat <<EOM
3896
3897 On some systems, shared libraries may be available.  Answer 'none' if
3898 you want to suppress searching of shared libraries for the remaining
3899 of this configuration.
3900
3901 EOM
3902 rp='What is the file extension used for shared libraries?'
3903 . ./myread
3904 so="$ans"
3905
3906 : Define several unixisms.
3907 : Hints files or command line option can be used to override them.
3908 : The convoluted testing is in case hints files set either the old
3909 : or the new name.
3910 case "$_exe" in
3911 '')     case "$exe_ext" in
3912     '') ;;
3913         *)      _exe="$exe_ext" ;;
3914         esac
3915         ;;
3916 esac
3917 case "$_a" in
3918 '')     case "$lib_ext" in
3919     '') _a='.a';;
3920         *)      _a="$lib_ext" ;;
3921         esac
3922         ;;
3923 esac
3924 case "$_o" in
3925 '') case "$obj_ext" in
3926         '')     _o='.o';;
3927         *)      _o="$obj_ext";;
3928         esac
3929         ;;
3930 esac
3931 case "$p_" in
3932 '') case "$path_sep" in
3933         '')     p_=':';;
3934         *)      p_="$path_sep";;
3935         esac
3936         ;;
3937 esac
3938 exe_ext=$_exe
3939 lib_ext=$_a
3940 obj_ext=$_o
3941 path_sep=$p_
3942
3943 : Which makefile gets called first.  This is used by make depend.
3944 case "$firstmakefile" in
3945 '') firstmakefile='makefile';;
3946 esac
3947
3948 : Looking for optional libraries
3949 echo " "
3950 echo "Checking for optional libraries..." >&4
3951 case "$libs" in
3952 ' '|'') dflt='';;
3953 *) dflt="$libs";;
3954 esac
3955 case "$libswanted" in
3956 '') libswanted='c_s';;
3957 esac
3958 for thislib in $libswanted; do
3959         
3960         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3961                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3962                 echo "Found -l$thislib (shared)."
3963                 case " $dflt " in
3964                 *"-l$thislib "*);;
3965                 *) dflt="$dflt -l$thislib";;
3966                 esac
3967         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3968                 echo "Found -l$thislib (shared)."
3969                 case " $dflt " in
3970                 *"-l$thislib "*);;
3971                 *) dflt="$dflt -l$thislib";;
3972                 esac
3973         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3974                 echo "Found -l$thislib."
3975                 case " $dflt " in
3976                 *"-l$thislib "*);;
3977                 *) dflt="$dflt -l$thislib";;
3978                 esac
3979         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3980                 echo "Found -l$thislib."
3981                 case " $dflt " in
3982                 *"-l$thislib "*);;
3983                 *) dflt="$dflt -l$thislib";;
3984                 esac
3985         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3986                 echo "Found -l${thislib}_s."
3987                 case " $dflt " in
3988                 *"-l$thislib "*);;
3989                 *) dflt="$dflt -l${thislib}_s";;
3990                 esac
3991         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3992                 echo "Found -l$thislib."
3993                 case " $dflt " in
3994                 *"-l$thislib "*);;
3995                 *) dflt="$dflt -l$thislib";;
3996                 esac
3997         else
3998                 echo "No -l$thislib."
3999         fi
4000 done
4001 set X $dflt
4002 shift
4003 dflt="$*"
4004 case "$libs" in
4005 '') dflt="$dflt";;
4006 *) dflt="$libs";;
4007 esac
4008 case "$dflt" in
4009 ' '|'') dflt='none';;
4010 esac
4011
4012 $cat <<EOM
4013  
4014 Some versions of Unix support shared libraries, which make executables smaller
4015 but make load time slightly longer.
4016
4017 On some systems, mostly System V Release 3's, the shared library is included
4018 by putting the option "-lc_s" as the last thing on the cc command line when
4019 linking.  Other systems use shared libraries by default.  There may be other
4020 libraries needed to compile $package on your machine as well.  If your system
4021 needs the "-lc_s" option, include it here.  Include any other special libraries
4022 here as well.  Say "none" for none.
4023 EOM
4024
4025 echo " "
4026 rp="Any additional libraries?"
4027 . ./myread
4028 case "$ans" in
4029 none) libs=' ';;
4030 *) libs="$ans";;
4031 esac
4032
4033 : determine optimize, if desired, or use for debug flag also
4034 case "$optimize" in
4035 ' '|$undef) dflt='none';;
4036 '') dflt='-O';;
4037 *) dflt="$optimize";;
4038 esac
4039 $cat <<EOH
4040
4041 Some C compilers have problems with their optimizers.  By default, $package
4042 compiles with the -O flag to use the optimizer.  Alternately, you might want
4043 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4044 systems).  Either flag can be specified here.  To use neither flag, specify
4045 the word "none".
4046
4047 EOH
4048 rp="What optimizer/debugger flag should be used?"
4049 . ./myread
4050 optimize="$ans"
4051 case "$optimize" in
4052 'none') optimize=" ";;
4053 esac
4054
4055 dflt=''
4056 : We will not override a previous value, but we might want to
4057 : augment a hint file
4058 case "$hint" in
4059 none|recommended)
4060         case "$gccversion" in
4061         1*) dflt='-fpcc-struct-return' ;;
4062         esac
4063         case "$optimize" in
4064         *-g*) dflt="$dflt -DDEBUGGING";;
4065         esac
4066         case "$gccversion" in
4067         2*) if test -d /etc/conf/kconfig.d &&
4068                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4069                 then
4070                         dflt="$dflt -posix"
4071                 fi
4072                 ;;
4073         esac
4074         ;;
4075 esac
4076
4077 case "$mips_type" in
4078 *BSD*|'') inclwanted="$locincpth $usrinc";;
4079 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4080 esac
4081 for thisincl in $inclwanted; do
4082         if $test -d $thisincl; then
4083                 if $test x$thisincl != x$usrinc; then
4084                         case "$dflt" in
4085                         *$thisincl*);;
4086                         *) dflt="$dflt -I$thisincl";;
4087                         esac
4088                 fi
4089         fi
4090 done
4091
4092 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4093         xxx=true;
4094 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4095         xxx=true;
4096 else
4097         xxx=false;
4098 fi;
4099 if $xxx; then
4100         case "$dflt" in
4101         *$2*);;
4102         *) dflt="$dflt -D$2";;
4103         esac;
4104 fi'
4105
4106 set signal.h LANGUAGE_C; eval $inctest
4107
4108 case "$hint" in
4109 none|recommended) dflt="$ccflags $dflt" ;;
4110 *) dflt="$ccflags";;
4111 esac
4112
4113 case "$dflt" in
4114 ''|' ') dflt=none;;
4115 esac
4116 $cat <<EOH
4117
4118 Your C compiler may want other flags.  For this question you should include
4119 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4120 but you should NOT include libraries or ld flags like -lwhatever.  If you
4121 want $package to honor its debug switch, you should include -DDEBUGGING here.
4122 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4123
4124 To use no flags, specify the word "none".
4125
4126 EOH
4127 set X $dflt
4128 shift
4129 dflt=${1+"$@"}
4130 rp="Any additional cc flags?"
4131 . ./myread
4132 case "$ans" in
4133 none) ccflags='';;
4134 *) ccflags="$ans";;
4135 esac
4136
4137 : the following weeds options from ccflags that are of no interest to cpp
4138 cppflags="$ccflags"
4139 case "$gccversion" in
4140 1*) cppflags="$cppflags -D__GNUC__"
4141 esac
4142 case "$mips_type" in
4143 '');;
4144 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4145 esac
4146 case "$cppflags" in
4147 '');;
4148 *)
4149         echo " "
4150         echo "Let me guess what the preprocessor flags are..." >&4
4151         set X $cppflags
4152         shift
4153         cppflags=''
4154         $cat >cpp.c <<'EOM'
4155 #define BLURFL foo
4156
4157 BLURFL xx LFRULB
4158 EOM
4159         previous=''
4160         for flag in $*
4161         do
4162                 case "$flag" in
4163                 -*) ftry="$flag";;
4164                 *) ftry="$previous $flag";;
4165                 esac
4166                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4167                         >cpp1.out 2>/dev/null && \
4168                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4169                         >cpp2.out 2>/dev/null && \
4170                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4171                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4172                 then
4173                         cppflags="$cppflags $ftry"
4174                         previous=''
4175                 else
4176                         previous="$flag"
4177                 fi
4178         done
4179         set X $cppflags
4180         shift
4181         cppflags=${1+"$@"}
4182         case "$cppflags" in
4183         *-*)  echo "They appear to be: $cppflags";;
4184         esac
4185         $rm -f cpp.c cpp?.out
4186         ;;
4187 esac
4188
4189 : flags used in final linking phase
4190 case "$ldflags" in
4191 '') if ./venix; then
4192                 dflt='-i -z'
4193         else
4194                 dflt=''
4195         fi
4196         case "$ccflags" in
4197         *-posix*) dflt="$dflt -posix" ;;
4198         esac
4199         ;;
4200 *) dflt="$ldflags";;
4201 esac
4202
4203 : Try to guess additional flags to pick up local libraries.
4204 for thislibdir in $libpth; do
4205         case " $loclibpth " in
4206         *" $thislibdir "*)
4207                 case "$dflt " in 
4208                 *"-L$thislibdir "*) ;;
4209                 *)  dflt="$dflt -L$thislibdir" ;;
4210                 esac
4211                 ;;
4212         esac
4213 done
4214
4215 case "$dflt" in
4216 '') dflt='none' ;;
4217 esac
4218
4219 $cat <<EOH
4220
4221 Your C linker may need flags.  For this question you should
4222 include -L/whatever and any other flags used by the C linker, but you
4223 should NOT include libraries like -lwhatever.
4224
4225 Make sure you include the appropriate -L/path flags if your C linker
4226 does not normally search all of the directories you specified above,
4227 namely
4228         $libpth
4229 To use no flags, specify the word "none".
4230
4231 EOH
4232
4233 rp="Any additional ld flags (NOT including libraries)?"
4234 . ./myread
4235 case "$ans" in
4236 none) ldflags='';;
4237 *) ldflags="$ans";;
4238 esac
4239 rmlist="$rmlist pdp11"
4240
4241 : coherency check
4242 echo " "
4243 echo "Checking your choice of C compiler and flags for coherency..." >&4
4244 $cat > try.c <<'EOF'
4245 #include <stdio.h>
4246 int main() { printf("Ok\n"); exit(0); }
4247 EOF
4248 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4249 shift
4250 $cat >try.msg <<'EOM'
4251 I've tried to compile and run the following simple program:
4252
4253 EOM
4254 $cat try.c >> try.msg
4255
4256 $cat >> try.msg <<EOM
4257
4258 I used the command:
4259
4260         $*
4261         ./try
4262
4263 and I got the following output:
4264
4265 EOM
4266 dflt=y
4267 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4268         if sh -c './try' >>try.msg 2>&1; then
4269                 xxx=`./try`
4270                 case "$xxx" in
4271                 "Ok") dflt=n ;;
4272                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4273                         case " $libs " in
4274                         *" -lsfio "*)
4275                                 cat >> try.msg <<'EOQS'
4276 If $libs contains -lsfio, and sfio is mis-configured, then it
4277 sometimes (apparently) runs and exits with a 0 status, but with no
4278 output!  It may have to do with sfio's use of _exit vs. exit.
4279
4280 EOQS
4281                                 rp="You have a big problem.  Shall I abort Configure"
4282                                 dflt=y
4283                                 ;;
4284                         esac
4285                         ;;
4286                 esac
4287         else
4288                 echo "The program compiled OK, but exited with status $?." >>try.msg
4289                 rp="You have a problem.  Shall I abort Configure"
4290                 dflt=y
4291         fi
4292 else
4293         echo "I can't compile the test program." >>try.msg
4294         rp="You have a BIG problem.  Shall I abort Configure"
4295         dflt=y
4296 fi
4297 case "$dflt" in
4298 y)
4299         $cat try.msg >&4
4300         case "$knowitall" in
4301         '')
4302                 echo "(The supplied flags or libraries might be incorrect.)"
4303                 ;;
4304         *) dflt=n;;
4305         esac
4306         echo " "
4307         . ./myread
4308         case "$ans" in
4309         n*|N*) ;;
4310         *)      echo "Ok.  Stopping Configure." >&4
4311                 exit 1
4312                 ;;
4313         esac
4314         ;;
4315 n) echo "OK, that should do.";;
4316 esac
4317 $rm -f try try.* core
4318
4319 : determine filename position in cpp output
4320 echo " "
4321 echo "Computing filename position in cpp output for #include directives..." >&4
4322 echo '#include <stdio.h>' > foo.c
4323 $cat >fieldn <<EOF
4324 $startsh
4325 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4326 $grep '^[       ]*#.*stdio\.h' | \
4327 while read cline; do
4328         pos=1
4329         set \$cline
4330         while $test \$# -gt 0; do
4331                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4332                         echo "\$pos"
4333                         exit 0
4334                 fi
4335                 shift
4336                 pos=\`expr \$pos + 1\`
4337         done
4338 done
4339 EOF
4340 chmod +x fieldn
4341 fieldn=`./fieldn`
4342 $rm -f foo.c fieldn
4343 case $fieldn in
4344 '') pos='???';;
4345 1) pos=first;;
4346 2) pos=second;;
4347 3) pos=third;;
4348 *) pos="${fieldn}th";;
4349 esac
4350 echo "Your cpp writes the filename in the $pos field of the line."
4351
4352 : locate header file
4353 $cat >findhdr <<EOF
4354 $startsh
4355 wanted=\$1
4356 name=''
4357 for usrincdir in $usrinc
4358 do
4359         if test -f \$usrincdir/\$wanted; then
4360                 echo "\$usrincdir/\$wanted"
4361                 exit 0
4362         fi
4363 done
4364 awkprg='{ print \$$fieldn }'
4365 echo "#include <\$wanted>" > foo\$\$.c
4366 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4367 $grep "^[       ]*#.*\$wanted" | \
4368 while read cline; do
4369         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4370         case "\$name" in
4371         *[/\\\\]\$wanted) echo "\$name"; exit 0;;
4372         *[\\\\/]\$wanted) echo "\$name"; exit 0;;
4373         *) name='';;
4374         esac;
4375 done;
4376 $rm -f foo\$\$.c;
4377 case "\$name" in
4378 '') exit 1;;
4379 esac
4380 EOF
4381 chmod +x findhdr
4382
4383 : define an alternate in-header-list? function
4384 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4385 cont=true; xxf="echo \"<\$1> found.\" >&4";
4386 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4387 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4388 esac;
4389 case $# in 4) instead=instead;; *) instead="at last";; esac;
4390 while $test "$cont"; do
4391         xxx=`./findhdr $1`
4392         var=$2; eval "was=\$$2";
4393         if $test "$xxx" && $test -r "$xxx";
4394         then eval $xxf;
4395         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4396                 cont="";
4397         else eval $xxnf;
4398         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4399         set $yyy; shift; shift; yyy=$@;
4400         case $# in 0) cont="";;
4401         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4402                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4403         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4404                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4405         esac;
4406 done;
4407 while $test "$yyy";
4408 do set $yyy; var=$2; eval "was=\$$2";
4409         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4410         set $yyy; shift; shift; yyy=$@;
4411 done'
4412
4413 : see if this is a malloc.h system
4414 set malloc.h i_malloc
4415 eval $inhdr
4416
4417 : see if stdlib is available
4418 set stdlib.h i_stdlib
4419 eval $inhdr
4420
4421 : determine which malloc to compile in
4422 echo " "
4423 case "$usemymalloc" in
4424 ''|[yY]*|true|$define)  dflt='y' ;;
4425 *)      dflt='n' ;;
4426 esac
4427 rp="Do you wish to attempt to use the malloc that comes with $package?"
4428 . ./myread
4429 usemymalloc="$ans"
4430 case "$ans" in
4431 y*|true)
4432         usemymalloc='y'
4433         mallocsrc='malloc.c'
4434         mallocobj="malloc$_o"
4435         d_mymalloc="$define"
4436         case "$libs" in
4437         *-lmalloc*)
4438                 : Remove malloc from list of libraries to use
4439                 echo "Removing unneeded -lmalloc from library list" >&4
4440                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4441                 shift
4442                 libs="$*"
4443                 echo "libs = $libs" >&4
4444                 ;;
4445         esac
4446         ;;
4447 *)
4448         usemymalloc='n'
4449         mallocsrc=''
4450         mallocobj=''
4451         d_mymalloc="$undef"
4452         ;;
4453 esac
4454
4455 : compute the return types of malloc and free
4456 echo " "
4457 $cat >malloc.c <<END
4458 #$i_malloc I_MALLOC
4459 #$i_stdlib I_STDLIB
4460 #include <stdio.h>
4461 #include <sys/types.h>
4462 #ifdef I_MALLOC
4463 #include <malloc.h>
4464 #endif
4465 #ifdef I_STDLIB
4466 #include <stdlib.h>
4467 #endif
4468 #ifdef TRY_MALLOC
4469 void *malloc();
4470 #endif
4471 #ifdef TRY_FREE
4472 void free();
4473 #endif
4474 END
4475 case "$malloctype" in
4476 '')
4477         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4478                 malloctype='void *'
4479         else
4480                 malloctype='char *'
4481         fi
4482         ;;
4483 esac
4484 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4485
4486 case "$freetype" in
4487 '')
4488         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4489                 freetype='void'
4490         else
4491                 freetype='int'
4492         fi
4493         ;;
4494 esac
4495 echo "Your system uses $freetype free(), it would seem." >&4
4496 $rm -f malloc.[co]
4497 : Cruising for prototypes
4498 echo " "
4499 echo "Checking out function prototypes..." >&4
4500 $cat >prototype.c <<'EOCP'
4501 int main(int argc, char *argv[]) {
4502         exit(0);}
4503 EOCP
4504 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4505         echo "Your C compiler appears to support function prototypes."
4506         val="$define"
4507 else
4508         echo "Your C compiler doesn't seem to understand function prototypes."
4509         val="$undef"
4510 fi
4511 set prototype
4512 eval $setvar
4513 $rm -f prototype*
4514
4515 case "$prototype" in
4516 "$define") ;;
4517 *)      ansi2knr='ansi2knr'
4518         echo " "
4519         cat <<EOM >&4
4520
4521 $me:  FATAL ERROR:
4522 This version of $package can only be compiled by a compiler that 
4523 understands function prototypes.  Unfortunately, your C compiler 
4524         $cc $ccflags
4525 doesn't seem to understand them.  Sorry about that.
4526
4527 If GNU cc is available for your system, perhaps you could try that instead.  
4528
4529 Eventually, we hope to support building Perl with pre-ANSI compilers.
4530 If you would like to help in that effort, please contact <perlbug@perl.org>.
4531
4532 Aborting Configure now.
4533 EOM
4534         exit 2
4535         ;;
4536 esac
4537
4538 : determine where public executables go
4539 echo " "
4540 set dflt bin bin
4541 eval $prefixit
4542 fn=d~
4543 rp='Pathname where the public executables will reside?'
4544 . ./getfile
4545 if $test "X$ansexp" != "X$binexp"; then
4546         installbin=''
4547 fi
4548 bin="$ans"
4549 binexp="$ansexp"
4550 if $afs; then
4551         $cat <<EOM
4552
4553 Since you are running AFS, I need to distinguish the directory in which
4554 executables reside from the directory in which they are installed (and from
4555 which they are presumably copied to the former directory by occult means).
4556
4557 EOM
4558         case "$installbin" in
4559         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4560         *) dflt="$installbin";;
4561         esac
4562         fn=de~
4563         rp='Where will public executables be installed?'
4564         . ./getfile
4565         installbin="$ans"
4566 else
4567         installbin="$binexp"
4568 fi
4569
4570 : determine whether to install perl also as /usr/bin/perl
4571
4572 echo " "
4573 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4574         $cat <<EOM
4575 Many scripts expect to perl to be installed as /usr/bin/perl.
4576 I can install the perl you are about to compile also as /usr/bin/perl
4577 (in addition to $installbin/perl).
4578 EOM
4579         case "$installusrbinperl" in
4580         "$undef"|[nN]*) dflt='n';;
4581         *)              dflt='y';;
4582         esac
4583         rp="Do you want to install perl as /usr/bin/perl?"
4584         . ./myread
4585         case "$ans" in
4586         [yY]*)  val="$define";;
4587         *)      val="$undef" ;;
4588         esac
4589 else
4590         val="$undef"
4591 fi
4592 set installusrbinperl
4593 eval $setvar
4594
4595 : define a shorthand compile call
4596 compile='
4597 mc_file=$1;
4598 shift;
4599 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4600 : define a shorthand compile call for compilations that should be ok.
4601 compile_ok='
4602 mc_file=$1;
4603 shift;
4604 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4605
4606 echo " "
4607 echo "Checking for GNU C Library..." >&4
4608 cat >gnulibc.c <<EOM
4609 #include <stdio.h>
4610 int main()
4611 {
4612 #ifdef __GLIBC__
4613     exit(0);
4614 #else
4615     exit(1);
4616 #endif
4617 }
4618 EOM
4619 set gnulibc
4620 if eval $compile_ok && ./gnulibc; then
4621         val="$define"
4622         echo "You are using the GNU C Library"
4623 else
4624         val="$undef"
4625         echo "You are not using the GNU C Library"
4626 fi
4627 $rm -f gnulibc*
4628 set d_gnulibc
4629 eval $setvar
4630
4631 : see if nm is to be used to determine whether a symbol is defined or not
4632 case "$usenm" in
4633 '')
4634         dflt=''
4635         case "$d_gnulibc" in
4636         "$define")
4637                 echo " "
4638                 echo "nm probably won't work on the GNU C Library." >&4
4639                 dflt=n
4640                 ;;
4641         esac
4642         case "$dflt" in
4643         '') 
4644                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4645                         echo " "
4646                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4647                         echo "'nm' won't be sufficient on this sytem." >&4
4648                         dflt=n
4649                 fi
4650                 ;;
4651         esac
4652         case "$dflt" in
4653         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4654                 if $test $dflt -gt 20; then
4655                         dflt=y
4656                 else
4657                         dflt=n
4658                 fi
4659                 ;;
4660         esac
4661         ;;
4662 *)
4663         case "$usenm" in
4664         true|$define) dflt=y;;
4665         *) dflt=n;;
4666         esac
4667         ;;
4668 esac
4669 $cat <<EOM
4670
4671 I can use $nm to extract the symbols from your C libraries. This
4672 is a time consuming task which may generate huge output on the disk (up
4673 to 3 megabytes) but that should make the symbols extraction faster. The
4674 alternative is to skip the 'nm' extraction part and to compile a small
4675 test program instead to determine whether each symbol is present. If
4676 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4677 this may be the best solution.
4678
4679 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4680
4681 EOM
4682 rp="Shall I use $nm to extract C symbols from the libraries?"
4683 . ./myread
4684 case "$ans" in
4685 [Nn]*) usenm=false;;
4686 *) usenm=true;;
4687 esac
4688
4689 runnm=$usenm
4690 case "$reuseval" in
4691 true) runnm=false;;
4692 esac
4693
4694 : nm options which may be necessary
4695 case "$nm_opt" in
4696 '') if $test -f /mach_boot; then
4697                 nm_opt=''       # Mach
4698         elif $test -d /usr/ccs/lib; then
4699                 nm_opt='-p'     # Solaris (and SunOS?)
4700         elif $test -f /dgux; then
4701                 nm_opt='-p'     # DG-UX
4702         elif $test -f /lib64/rld; then
4703                 nm_opt='-p'     # 64-bit Irix
4704         else
4705                 nm_opt=''
4706         fi;;
4707 esac
4708
4709 : nm options which may be necessary for shared libraries but illegal
4710 : for archive libraries.  Thank you, Linux.
4711 case "$nm_so_opt" in
4712 '')     case "$myuname" in
4713         *linux*)
4714                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4715                         nm_so_opt='--dynamic'
4716                 fi
4717                 ;;
4718         esac
4719         ;;
4720 esac
4721
4722 case "$runnm" in
4723 true)
4724 : get list of predefined functions in a handy place
4725 echo " "
4726 case "$libc" in
4727 '') libc=unknown
4728         case "$libs" in
4729         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4730         esac
4731         ;;
4732 esac
4733 libnames='';
4734 case "$libs" in
4735 '') ;;
4736 *)  for thislib in $libs; do
4737         case "$thislib" in
4738         -lc|-lc_s)
4739                 : Handle C library specially below.
4740                 ;;
4741         -l*)
4742                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4743                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4744                         :
4745                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4746                         :
4747                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4748                         :
4749                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4750                         :
4751                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4752                         :
4753                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4754                         :
4755                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4756                         :
4757                 else
4758                         try=''
4759                 fi
4760                 libnames="$libnames $try"
4761                 ;;
4762         *) libnames="$libnames $thislib" ;;
4763         esac
4764         done
4765         ;;
4766 esac
4767 xxx=normal
4768 case "$libc" in
4769 unknown)
4770         set /lib/libc.$so
4771         for xxx in $libpth; do
4772                 $test -r $1 || set $xxx/libc.$so
4773                 : The messy sed command sorts on library version numbers.
4774                 $test -r $1 || \
4775                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4776                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4777                                 h
4778                                 s/[0-9][0-9]*/0000&/g
4779                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4780                                 G
4781                                 s/\n/ /' | \
4782                          sort | $sed -e 's/^.* //'`
4783                 eval set \$$#
4784         done
4785         $test -r $1 || set /usr/ccs/lib/libc.$so
4786         $test -r $1 || set /lib/libsys_s$_a
4787         ;;
4788 *)
4789         set blurfl
4790         ;;
4791 esac
4792 if $test -r "$1"; then
4793         echo "Your (shared) C library seems to be in $1."
4794         libc="$1"
4795 elif $test -r /lib/libc && $test -r /lib/clib; then
4796         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4797         xxx=apollo
4798         libc='/lib/clib /lib/libc'
4799         if $test -r /lib/syslib; then
4800                 echo "(Your math library is in /lib/syslib.)"
4801                 libc="$libc /lib/syslib"
4802         fi
4803 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4804         echo "Your C library seems to be in $libc, as you said before."
4805 elif $test -r $incpath/usr/lib/libc$_a; then
4806         libc=$incpath/usr/lib/libc$_a;
4807         echo "Your C library seems to be in $libc.  That's fine."
4808 elif $test -r /lib/libc$_a; then
4809         libc=/lib/libc$_a;
4810         echo "Your C library seems to be in $libc.  You're normal."
4811 else
4812         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4813                 :
4814         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4815                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4816         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4817                 :
4818         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4819                 :
4820         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4821                 :
4822         else
4823                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4824         fi
4825         if $test -r "$tans"; then
4826                 echo "Your C library seems to be in $tans, of all places."
4827                 libc=$tans
4828         else
4829                 libc='blurfl'
4830         fi
4831 fi
4832 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4833         dflt="$libc"
4834         cat <<EOM
4835
4836 If the guess above is wrong (which it might be if you're using a strange
4837 compiler, or your machine supports multiple models), you can override it here.
4838
4839 EOM
4840 else
4841         dflt=''
4842         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4843         cat >&4 <<EOM
4844 I can't seem to find your C library.  I've looked in the following places:
4845
4846 EOM
4847         $sed 's/^/      /' libpath
4848         cat <<EOM
4849
4850 None of these seems to contain your C library. I need to get its name...
4851
4852 EOM
4853 fi
4854 fn=f
4855 rp='Where is your C library?'
4856 . ./getfile
4857 libc="$ans"
4858
4859 echo " "
4860 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4861 set X `cat libnames`
4862 shift
4863 xxx=files
4864 case $# in 1) xxx=file; esac
4865 echo "Extracting names from the following $xxx for later perusal:" >&4
4866 echo " "
4867 $sed 's/^/      /' libnames >&4
4868 echo " "
4869 $echo $n "This may take a while...$c" >&4
4870
4871 for file in $*; do
4872         case $file in
4873         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4874         *) $nm $nm_opt $file 2>/dev/null;;
4875         esac
4876 done >libc.tmp
4877
4878 $echo $n ".$c"
4879 $grep fprintf libc.tmp > libc.ptf
4880 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4881 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4882 xxx='[ADTSIW]'
4883 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4884         eval $xscan;\
4885         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4886                 eval $xrun
4887 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4888         eval $xscan;\
4889         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4890                 eval $xrun
4891 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4892         eval $xscan;\
4893         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4894                 eval $xrun
4895 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4896         eval $xscan;\
4897         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4898                 eval $xrun
4899 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4900         eval $xscan;\
4901         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4902                 eval $xrun
4903 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4904         eval $xscan;\
4905         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4906                 eval $xrun
4907 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4908                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4909         eval $xscan;\
4910         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4911                 eval $xrun
4912 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4913         eval $xscan;\
4914         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4915                 eval $xrun
4916 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4917         eval $xscan;\
4918         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4919                 eval $xrun
4920 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4921         eval $xscan;\
4922         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4923                 eval $xrun
4924 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4925         eval $xscan;\
4926         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4927                 eval $xrun
4928 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4929         eval $xscan;\
4930         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4931                 eval $xrun
4932 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4933         eval $xscan;\
4934         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4935                 eval $xrun
4936 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4937         eval $xscan;\
4938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4939                 eval $xrun
4940 else
4941         $nm -p $* 2>/dev/null >libc.tmp
4942         $grep fprintf libc.tmp > libc.ptf
4943         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4944                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4945         then
4946                 nm_opt='-p'
4947                 eval $xrun
4948         else
4949                 echo " "
4950                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4951                 com=''
4952                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4953                         for thisname in $libnames $libc; do
4954                                 $ar t $thisname >>libc.tmp
4955                         done
4956                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4957                         echo "Ok." >&4
4958                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4959                         # Repeat libc to extract forwarders to DLL entries too
4960                         for thisname in $libnames $libc; do
4961                                 $ar tv $thisname >>libc.tmp
4962                                 # Revision 50 of EMX has bug in $ar.
4963                                 # it will not extract forwarders to DLL entries
4964                                 # Use emximp which will extract exactly them.
4965                                 emximp -o tmp.imp $thisname \
4966                                     2>/dev/null && \
4967                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4968                                     < tmp.imp >>libc.tmp
4969                                 $rm tmp.imp
4970                         done
4971                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4972                         echo "Ok." >&4
4973                 else
4974                         echo "$ar didn't seem to work right." >&4
4975                         echo "Maybe this is a Cray...trying bld instead..." >&4
4976                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4977                         then
4978                                 for thisname in $libnames; do
4979                                         bld t $libnames | \
4980                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4981                                         $ar t $thisname >>libc.tmp
4982                                 done
4983                                 echo "Ok." >&4
4984                         else
4985                                 echo "That didn't work either.  Giving up." >&4
4986                                 exit 1
4987                         fi
4988                 fi
4989         fi
4990 fi
4991 nm_extract="$com"
4992 if $test -f /lib/syscalls.exp; then
4993         echo " "
4994         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4995         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4996 fi
4997 ;;
4998 esac
4999 $rm -f libnames libpath
5000
5001 : see if dld is available
5002 set dld.h i_dld
5003 eval $inhdr
5004
5005 : is a C symbol defined?
5006 csym='tlook=$1;
5007 case "$3" in
5008 -v) tf=libc.tmp; tc=""; tdc="";;
5009 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5010 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5011 esac;
5012 tx=yes;
5013 case "$reuseval-$4" in
5014 true-) ;;
5015 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5016 esac;
5017 case "$tx" in
5018 yes)
5019         case "$runnm" in
5020         true)
5021                 if $contains $tlook $tf >/dev/null 2>&1;
5022                 then tval=true;
5023                 else tval=false;
5024                 fi;;
5025         *)
5026                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5027                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5028                 then tval=true;
5029                 else tval=false;
5030                 fi;
5031                 $rm -f t t.c;;
5032         esac;;
5033 *)
5034         case "$tval" in
5035         $define) tval=true;;
5036         *) tval=false;;
5037         esac;;
5038 esac;
5039 eval "$2=$tval"'
5040
5041 : define an is-in-libc? function
5042 inlibc='echo " "; td=$define; tu=$undef;
5043 sym=$1; var=$2; eval "was=\$$2";
5044 tx=yes;
5045 case "$reuseval$was" in
5046 true) ;;
5047 true*) tx=no;;
5048 esac;
5049 case "$tx" in
5050 yes)
5051         set $sym tres -f;
5052         eval $csym;
5053         case "$tres" in
5054         true)
5055                 echo "$sym() found." >&4;
5056                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5057         *)
5058                 echo "$sym() NOT found." >&4;
5059                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5060         esac;;
5061 *)
5062         case "$was" in
5063         $define) echo "$sym() found." >&4;;
5064         *) echo "$sym() NOT found." >&4;;
5065         esac;;
5066 esac'
5067
5068 : see if dlopen exists
5069 xxx_runnm="$runnm"
5070 runnm=false
5071 set dlopen d_dlopen
5072 eval $inlibc
5073 runnm="$xxx_runnm"
5074
5075 : determine which dynamic loading, if any, to compile in
5076 echo " "
5077 dldir="ext/DynaLoader"
5078 case "$usedl" in
5079 $define|y|true)
5080         dflt='y'
5081         usedl="$define"
5082         ;;
5083 $undef|n|false)
5084         dflt='n'
5085         usedl="$undef"
5086         ;;
5087 *) 
5088         dflt='n'
5089         case "$d_dlopen" in
5090             $define) dflt='y' ;;
5091         esac
5092         case "$i_dld" in
5093             $define) dflt='y' ;;
5094         esac
5095         : Does a dl_xxx.xs file exist for this operating system
5096         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5097         ;;
5098 esac
5099 rp="Do you wish to use dynamic loading?"
5100 . ./myread
5101 usedl="$ans"
5102 case "$ans" in
5103 y*) usedl="$define"
5104         case "$dlsrc" in
5105         '')
5106                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5107                         dflt="$dldir/dl_${osname}.xs"
5108                 elif $test "$d_dlopen" = "$define" ; then
5109                         dflt="$dldir/dl_dlopen.xs"
5110                 elif $test "$i_dld" = "$define" ; then
5111                         dflt="$dldir/dl_dld.xs"
5112                 else
5113                         dflt=''
5114                 fi
5115                 ;;
5116         *)      dflt="$dldir/$dlsrc"
5117                 ;;
5118         esac
5119     echo "The following dynamic loading files are available:"
5120         : Can not go over to $dldir because getfile has path hard-coded in.
5121         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5122         rp="Source file to use for dynamic loading"
5123         fn="fne"
5124         # XXX This getfile call will fail the existence check if you try 
5125         # building away from $src (this is not supported yet).
5126         . ./getfile
5127         usedl="$define"
5128         : emulate basename
5129         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5130
5131         $cat << EOM
5132
5133 Some systems may require passing special flags to $cc -c to
5134 compile modules that will be used to create a shared library.
5135 To use no flags, say "none".
5136
5137 EOM
5138     case "$cccdlflags" in
5139     '') case "$gccversion" in
5140                 '') case "$osname" in
5141                         hpux)   dflt='+z' ;;
5142                         next)   dflt='none' ;;
5143                         irix*)  dflt='-KPIC' ;;
5144                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5145                         sunos)  dflt='-pic' ;;
5146                         *)      dflt='none' ;;
5147                     esac
5148                         ;;
5149                 *)  case "$osname" in
5150                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5151                         *)      dflt='-fpic' ;;
5152                     esac ;;
5153             esac ;;
5154         ' ') dflt='none' ;;
5155     *)  dflt="$cccdlflags" ;;
5156     esac
5157     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5158     . ./myread
5159     case "$ans" in
5160     none) cccdlflags=' ' ;;
5161     *) cccdlflags="$ans" ;;
5162     esac
5163
5164     cat << EOM
5165
5166 Some systems use ld to create libraries that can be dynamically loaded,
5167 while other systems (such as those using ELF) use $cc.
5168
5169 EOM
5170         case "$ld" in
5171         '')     $cat >try.c <<'EOM'
5172 /* Test for whether ELF binaries are produced */
5173 #include <fcntl.h>
5174 #include <stdlib.h>
5175 int main() {
5176         char b[4];
5177         int i = open("a.out",O_RDONLY);
5178         if(i == -1) 
5179                 exit(1); /* fail */
5180         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5181                 exit(0); /* succeed (yes, it's ELF) */
5182         else
5183                 exit(1); /* fail */
5184 }
5185 EOM
5186                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5187                         cat <<EOM
5188 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5189 EOM
5190                         dflt="$cc"
5191                 else
5192                         echo "I'll use ld to build dynamic libraries."
5193                         dflt='ld'
5194                 fi
5195                 rm -f try.c a.out
5196                 ;;
5197         *)      dflt="$ld"
5198                 ;;
5199         esac
5200
5201     rp="What command should be used to create dynamic libraries?"
5202     . ./myread
5203         ld="$ans"
5204
5205     cat << EOM
5206
5207 Some systems may require passing special flags to $ld to create a
5208 library that can be dynamically loaded.  If your ld flags include
5209 -L/other/path options to locate libraries outside your loader's normal
5210 search path, you may need to specify those -L options here as well.  To
5211 use no flags, say "none".
5212
5213 EOM
5214     case "$lddlflags" in
5215     '') case "$osname" in
5216                         beos) dflt='-nostart' ;;
5217                         hpux)  dflt='-b' ;;
5218                         linux|irix*)    dflt='-shared' ;;
5219                         next)  dflt='none' ;;
5220                         solaris) dflt='-G' ;;
5221                         sunos) dflt='-assert nodefinitions' ;;
5222                         svr4*|esix*) dflt="-G $ldflags" ;;
5223                 *)     dflt='none' ;;
5224                         esac
5225                         ;;
5226     *) dflt="$lddlflags" ;;
5227     esac
5228
5229         : Try to guess additional flags to pick up local libraries.
5230         : Be careful not to append to a plain 'none'
5231         case "$dflt" in
5232         none) dflt='' ;;
5233         esac
5234         for thisflag in $ldflags; do
5235                 case "$thisflag" in
5236                 -L*)
5237                         case " $dflt " in
5238                         *" $thisflag "*) ;;
5239                         *) dflt="$dflt $thisflag" ;;
5240                         esac
5241                         ;;
5242                 esac
5243         done
5244
5245         case "$dflt" in
5246         ''|' ') dflt='none' ;;
5247         esac
5248
5249     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5250     . ./myread
5251     case "$ans" in
5252     none) lddlflags=' ' ;;
5253     *) lddlflags="$ans" ;;
5254     esac
5255
5256         cat <<EOM
5257
5258 Some systems may require passing special flags to $cc to indicate that
5259 the resulting executable will use dynamic linking.  To use no flags,
5260 say "none".
5261
5262 EOM
5263     case "$ccdlflags" in
5264     '') case "$osname" in
5265                 hpux)   dflt='-Wl,-E' ;;
5266                 linux)  dflt='-rdynamic' ;;
5267                 next)   dflt='none' ;;
5268                 sunos)  dflt='none' ;;
5269                 *)      dflt='none' ;;
5270             esac ;;
5271     ' ')  dflt='none' ;;
5272     *)  dflt="$ccdlflags" ;;
5273     esac
5274     rp="Any special flags to pass to $cc to use dynamic loading?"
5275     . ./myread
5276     case "$ans" in
5277     none) ccdlflags=' ' ;;
5278     *) ccdlflags="$ans" ;;
5279     esac
5280     ;;
5281 *)  usedl="$undef"
5282         ld='ld'
5283     dlsrc='dl_none.xs'
5284     lddlflags=''
5285     ccdlflags=''
5286     ;;
5287 esac
5288
5289 also=''
5290 case "$usedl" in
5291 $undef)
5292         # No dynamic loading being used, so don't bother even to prompt.
5293         useshrplib='false'
5294         ;;
5295 *)      case "$useshrplib" in
5296         '')     case "$osname" in
5297                 svr4*|dgux|dynixptx|esix|powerux|beos)
5298                         dflt=y
5299                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5300                         ;;
5301                 next*)
5302                         case "$osvers" in
5303                         4*)     dflt=y
5304                                 also='Building a shared libperl is needed for MAB support.'
5305                                 ;;
5306                         *)      dflt=n
5307                                 ;;
5308                         esac
5309                         ;;
5310                 *)      dflt=n
5311                         ;;
5312                 esac
5313                 ;;
5314         $define|true|[Yy]*)
5315                 dflt=y
5316                 ;;
5317         *)      dflt=n
5318                 ;;
5319         esac
5320         $cat << EOM
5321
5322 The perl executable is normally obtained by linking perlmain.c with
5323 libperl${_a}, any static extensions (usually just DynaLoader), and
5324 any other libraries needed on this system (such as -lm, etc.).  Since
5325 your system supports dynamic loading, it is probably possible to build
5326 a shared libperl.$so.  If you will have more than one executable linked
5327 to libperl.$so, this will significantly reduce the size of each
5328 executable, but it may have a noticeable affect on performance.  The
5329 default is probably sensible for your system.
5330 $also
5331
5332 EOM
5333         rp="Build a shared libperl.$so (y/n)"
5334         . ./myread
5335         case "$ans" in
5336         true|$define|[Yy]*)
5337                 useshrplib='true'
5338                 # Why does next4 have to be so different?
5339                 case "${osname}${osvers}" in
5340                 next4*|rhapsody*)
5341                         xxx='DYLD_LIBRARY_PATH' ;;
5342                 os2*)   xxx='' ;; # Nothing special needed.
5343                 beos*)  xxx='' ;;
5344                 *)              xxx='LD_LIBRARY_PATH' ;;
5345                 esac
5346                 ;;
5347         *)      useshrplib='false' ;;
5348         esac
5349         ;;
5350 esac
5351
5352 case "$useshrplib" in
5353 true)
5354         case "$libperl" in
5355         '')
5356                 # Figure out a good name for libperl.so.  Since it gets stored in
5357                 # a version-specific architecture-dependent library, the version
5358                 # number isn't really that important, except for making cc/ld happy.
5359                 #
5360                 # A name such as libperl.so.3.1
5361                 majmin="libperl.$so.$patchlevel.$subversion"
5362                 # A name such as libperl.so.301
5363                 majonly=`echo $patchlevel $subversion |
5364                         $awk '{printf "%d%02d", $1, $2}'`
5365                 majonly=libperl.$so.$majonly
5366                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5367                 # rely on figuring it out from the naming of libc.
5368                 case "${osname}${osvers}" in
5369                 next4*)
5370                         dflt=libperl.5.$so
5371                         # XXX How handle the --version stuff for MAB?
5372                         ;;
5373                 linux*)  # ld won't link with a bare -lperl otherwise.
5374                         dflt=libperl.$so
5375                         ;;
5376                 *)      # Try to guess based on whether libc has major.minor.
5377                         case "$libc" in
5378                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5379                         *libc.$so.[0-9]*) dflt=$majonly ;;
5380                         *)      dflt=libperl.$so ;;
5381                         esac
5382                         ;;
5383                 esac
5384                 ;;
5385         *)      dflt=$libperl
5386                 ;;
5387         esac
5388         cat << EOM
5389
5390 I need to select a good name for the shared libperl.  If your system uses
5391 library names with major and minor numbers, then you might want something
5392 like $majmin.  Alternatively, if your system uses a single version
5393 number for shared libraries, then you might want to use $majonly.
5394 Or, your system might be quite happy with a simple libperl.$so.
5395
5396 Since the shared libperl will get installed into a version-specific
5397 architecture-dependent directory, the version number of the shared perl
5398 library probably isn't important, so the default should be o.k.
5399
5400 EOM
5401         rp='What name do you want to give to the shared libperl?'
5402         . ./myread
5403         libperl=$ans
5404         echo "Ok, I'll use $libperl"
5405         ;;
5406 *)
5407         libperl="libperl${_a}"
5408         ;;
5409 esac
5410
5411 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5412 case "$shrpdir" in
5413 '') ;;
5414 *)      $cat >&4 <<EOM
5415 WARNING:  Use of the shrpdir variable for the installation location of
5416 the shared $libperl is not supported.  It was never documented and
5417 will not work in this version.  Let me (perlbug@perl.com)
5418 know of any problems this may cause.
5419
5420 EOM
5421         case "$shrpdir" in
5422         "$archlibexp/CORE")
5423                 $cat >&4 <<EOM
5424 But your current setting of $shrpdir is
5425 the default anyway, so it's harmless.
5426 EOM
5427                 ;;
5428         *)
5429                 $cat >&4 <<EOM
5430 Further, your current attempted setting of $shrpdir
5431 conflicts with the value of $archlibexp/CORE
5432 that installperl will use.
5433 EOM
5434                 ;;
5435         esac
5436         ;;
5437 esac
5438
5439 # How will the perl executable find the installed shared $libperl?
5440 # Add $xxx to ccdlflags.
5441 # If we can't figure out a command-line option, use $shrpenv to
5442 # set env LD_RUN_PATH.  The main perl makefile uses this.
5443 shrpdir=$archlibexp/CORE
5444 xxx=''
5445 tmp_shrpenv=''
5446 if "$useshrplib"; then
5447     case "$osname" in 
5448         aix)
5449                 # We'll set it in Makefile.SH...
5450                 ;;
5451         solaris|netbsd)
5452                 xxx="-R $shrpdir"
5453                 ;;
5454         freebsd)
5455                 xxx="-Wl,-R$shrpdir"
5456                 ;;
5457         linux|irix*|dec_osf)
5458                 xxx="-Wl,-rpath,$shrpdir"
5459                 ;;
5460         next)
5461                 # next doesn't like the default...
5462                 ;;
5463         beos)
5464                 # beos doesn't like the default, either.
5465                 ;;
5466         hpux*)
5467                 # hpux doesn't like the default, either.
5468                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5469                 ;;
5470         *)
5471                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5472                 ;;
5473         esac
5474         case "$xxx" in
5475         '') ;;
5476         *)      
5477                 # Only add $xxx if it isn't already in ccdlflags.
5478                 case " $ccdlflags " in
5479                 *" $xxx "*)     ;;
5480                 *)      ccdlflags="$ccdlflags $xxx"
5481                         cat <<EOM >&4
5482
5483 Adding $xxx to the flags
5484 passed to $ld so that the perl executable will find the 
5485 installed shared $libperl.
5486
5487 EOM
5488                         ;;
5489                 esac
5490                 ;;
5491         esac
5492 fi
5493 # Respect a hint or command-line value.
5494 case "$shrpenv" in
5495 '') shrpenv="$tmp_shrpenv" ;;
5496 esac
5497
5498 : determine where manual pages go
5499 set man1dir man1dir none
5500 eval $prefixit
5501 $cat <<EOM
5502
5503 $spackage has manual pages available in source form.
5504 EOM
5505 case "$nroff" in
5506 nroff)
5507         echo "However, you don't have nroff, so they're probably useless to you."
5508         case "$man1dir" in
5509         '') man1dir="none";;
5510         esac;;
5511 esac
5512 echo "If you don't want the manual sources installed, answer 'none'."
5513 case "$man1dir" in
5514 ' ') dflt=none
5515         ;;
5516 '')
5517         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5518         lookpath="$lookpath $prefixexp/man/p_man/man1"
5519         lookpath="$lookpath $prefixexp/man/u_man/man1"
5520         lookpath="$lookpath $prefixexp/man/man.1"
5521         case "$sysman" in
5522         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5523         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5524         esac
5525         set dflt
5526         eval $prefixup
5527         ;;
5528 *)  dflt="$man1dir"
5529         ;;
5530 esac
5531 echo " "
5532 fn=dn+~
5533 rp="Where do the main $spackage manual pages (source) go?"
5534 . ./getfile
5535 if $test "X$man1direxp" != "X$ansexp"; then
5536         installman1dir=''
5537 fi
5538 man1dir="$ans"
5539 man1direxp="$ansexp"
5540 case "$man1dir" in
5541 '') man1dir=' '
5542         installman1dir='';;
5543 esac
5544 if $afs; then
5545         $cat <<EOM
5546
5547 Since you are running AFS, I need to distinguish the directory in which
5548 manual pages reside from the directory in which they are installed (and from
5549 which they are presumably copied to the former directory by occult means).
5550
5551 EOM
5552         case "$installman1dir" in
5553         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5554         *) dflt="$installman1dir";;
5555         esac
5556         fn=de~
5557         rp='Where will man pages be installed?'
5558         . ./getfile
5559         installman1dir="$ans"
5560 else
5561         installman1dir="$man1direxp"
5562 fi
5563
5564 : What suffix to use on installed man pages
5565
5566 case "$man1dir" in
5567 ' ')
5568         man1ext='0'
5569         ;;
5570 *)
5571         rp="What suffix should be used for the main $spackage man pages?"
5572         case "$man1ext" in
5573         '')     case "$man1dir" in
5574                 *1)  dflt=1 ;;
5575                 *1p) dflt=1p ;;
5576                 *1pm) dflt=1pm ;;
5577                 *l) dflt=l;;
5578                 *n) dflt=n;;
5579                 *o) dflt=o;;
5580                 *p) dflt=p;;
5581                 *C) dflt=C;;
5582                 *L) dflt=L;;
5583                 *L1) dflt=L1;;
5584                 *) dflt=1;;
5585                 esac
5586                 ;;
5587         *)      dflt="$man1ext";;
5588         esac
5589         . ./myread
5590         man1ext="$ans"
5591         ;;
5592 esac
5593
5594 : see if we can have long filenames
5595 echo " "
5596 rmlist="$rmlist /tmp/cf$$"
5597 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5598 first=123456789abcdef
5599 second=/tmp/cf$$/$first
5600 $rm -f $first $second
5601 if (echo hi >$first) 2>/dev/null; then
5602         if $test -f 123456789abcde; then
5603                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5604                 val="$undef"
5605         else
5606                 if (echo hi >$second) 2>/dev/null; then
5607                         if $test -f /tmp/cf$$/123456789abcde; then
5608                                 $cat <<'EOM'
5609 That's peculiar... You can have filenames longer than 14 characters, but only
5610 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5611 I shall consider your system cannot support long filenames at all.
5612 EOM
5613                                 val="$undef"
5614                         else
5615                                 echo 'You can have filenames longer than 14 characters.' >&4
5616                                 val="$define"
5617                         fi
5618                 else
5619                         $cat <<'EOM'
5620 How confusing! Some of your filesystems are sane enough to allow filenames
5621 longer than 14 characters but some others like /tmp can't even think about them.
5622 So, for now on, I shall assume your kernel does not allow them at all.
5623 EOM
5624                         val="$undef"
5625                 fi
5626         fi
5627 else
5628         $cat <<'EOM'
5629 You can't have filenames longer than 14 chars.  You can't even think about them!
5630 EOM
5631         val="$undef"
5632 fi 
5633 set d_flexfnam
5634 eval $setvar
5635 $rm -rf /tmp/cf$$ 123456789abcde*
5636
5637 : determine where library module manual pages go
5638 set man3dir man3dir none
5639 eval $prefixit
5640 $cat <<EOM
5641
5642 $spackage has manual pages for many of the library modules.
5643 EOM
5644
5645 case "$nroff" in
5646 nroff)
5647         $cat <<'EOM'
5648 However, you don't have nroff, so they're probably useless to you.
5649 EOM
5650         case "$man3dir" in
5651         '') man3dir="none";;
5652         esac;;
5653 esac
5654
5655 case "$d_flexfnam" in
5656 undef)
5657         $cat <<'EOM'
5658 However, your system can't handle the long file names like File::Basename.3. 
5659 EOM
5660         case "$man3dir" in
5661         '') man3dir="none";;
5662         esac;;
5663 esac
5664
5665 echo "If you don't want the manual sources installed, answer 'none'."
5666 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5667 case "$man3dir" in
5668 '')     case "$prefix" in 
5669         *$prog*) dflt=`echo $man1dir | 
5670                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5671         *)      dflt="$privlib/man/man3" ;;
5672         esac
5673         ;;
5674 ' ') dflt=none;;
5675 *)      dflt="$man3dir" ;;
5676 esac
5677 echo " "
5678
5679 fn=dn+~
5680 rp="Where do the $package library man pages (source) go?"
5681 . ./getfile
5682 if test "X$man3direxp" != "X$ansexp"; then
5683         installman3dir=''
5684 fi
5685
5686 man3dir="$ans"
5687 man3direxp="$ansexp"
5688 case "$man3dir" in
5689 '') man3dir=' '
5690         installman3dir='';;
5691 esac
5692 if $afs; then
5693         $cat <<EOM
5694
5695 Since you are running AFS, I need to distinguish the directory in which
5696 manual pages reside from the directory in which they are installed (and from
5697 which they are presumably copied to the former directory by occult means).
5698
5699 EOM
5700         case "$installman3dir" in
5701         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5702         *) dflt="$installman3dir";;
5703         esac
5704         fn=de~
5705         rp='Where will man pages be installed?'
5706         . ./getfile
5707         installman3dir="$ans"
5708 else
5709         installman3dir="$man3direxp"
5710 fi
5711
5712 : What suffix to use on installed man pages
5713
5714 case "$man3dir" in
5715 ' ')
5716         man3ext='0'
5717         ;;
5718 *)
5719         rp="What suffix should be used for the $package library man pages?"
5720         case "$man3ext" in
5721         '')     case "$man3dir" in
5722                 *3)  dflt=3 ;;
5723                 *3p) dflt=3p ;;
5724                 *3pm) dflt=3pm ;;
5725                 *l) dflt=l;;
5726                 *n) dflt=n;;
5727                 *o) dflt=o;;
5728                 *p) dflt=p;;
5729                 *C) dflt=C;;
5730                 *L) dflt=L;;
5731                 *L3) dflt=L3;;
5732                 *) dflt=3;;
5733                 esac
5734                 ;;
5735         *)      dflt="$man3ext";;
5736         esac
5737         . ./myread
5738         man3ext="$ans"
5739         ;;
5740 esac
5741
5742 : see if we have to deal with yellow pages, now NIS.
5743 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5744         if $test -f /usr/etc/nibindd; then
5745                 echo " "
5746                 echo "I'm fairly confident you're on a NeXT."
5747                 echo " "
5748                 rp='Do you get the hosts file via NetInfo?'
5749                 dflt=y
5750                 case "$hostcat" in
5751                 nidump*) ;;
5752                 '') ;;
5753                 *) dflt=n;;
5754                 esac
5755                 . ./myread
5756                 case "$ans" in
5757                 y*) hostcat='nidump hosts .';;
5758                 *)      case "$hostcat" in
5759                         nidump*) hostcat='';;
5760                         esac
5761                         ;;
5762                 esac
5763         fi
5764         case "$hostcat" in
5765         nidump*) ;;
5766         *)
5767                 case "$hostcat" in
5768                 *ypcat*) dflt=y;;
5769                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5770                                 dflt=y
5771                         else
5772                                 dflt=n
5773                         fi;;
5774                 *) dflt=n;;
5775                 esac
5776                 echo " "
5777                 rp='Are you getting the hosts file via yellow pages?'
5778                 . ./myread
5779                 case "$ans" in
5780                 y*) hostcat='ypcat hosts';;
5781                 *) hostcat='cat /etc/hosts';;
5782                 esac
5783                 ;;
5784         esac
5785 fi
5786 case "$hostcat" in
5787 '') hostcat='cat /etc/hosts';;
5788 esac
5789 case "$groupcat" in
5790 '') groupcat='cat /etc/group';;
5791 esac
5792 case "$passcat" in
5793 '') passcat='cat /etc/passwd';;
5794 esac
5795
5796 : now get the host name
5797 echo " "
5798 echo "Figuring out host name..." >&4
5799 case "$myhostname" in
5800 '') cont=true
5801         echo 'Maybe "hostname" will work...'
5802         if tans=`sh -c hostname 2>&1` ; then
5803                 myhostname=$tans
5804                 phostname=hostname
5805                 cont=''
5806         fi
5807         ;;
5808 *) cont='';;
5809 esac
5810 if $test "$cont"; then
5811         if ./xenix; then
5812                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5813                 if tans=`cat /etc/systemid 2>&1` ; then
5814                         myhostname=$tans
5815                         phostname='cat /etc/systemid'
5816                         echo "Whadyaknow.  Xenix always was a bit strange..."
5817                         cont=''
5818                 fi
5819         elif $test -r /etc/systemid; then
5820                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5821         fi
5822 fi
5823 if $test "$cont"; then
5824         echo 'No, maybe "uuname -l" will work...'
5825         if tans=`sh -c 'uuname -l' 2>&1` ; then
5826                 myhostname=$tans
5827                 phostname='uuname -l'
5828         else
5829                 echo 'Strange.  Maybe "uname -n" will work...'
5830                 if tans=`sh -c 'uname -n' 2>&1` ; then
5831                         myhostname=$tans
5832                         phostname='uname -n'
5833                 else
5834                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5835                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5836                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5837                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5838                         else
5839                                 case "$myhostname" in
5840                                 '') echo "Does this machine have an identity crisis or something?"
5841                                         phostname='';;
5842                                 *)
5843                                         echo "Well, you said $myhostname before..."
5844                                         phostname='echo $myhostname';;
5845                                 esac
5846                         fi
5847                 fi
5848         fi
5849 fi
5850 : you do not want to know about this
5851 set $myhostname
5852 myhostname=$1
5853
5854 : verify guess
5855 if $test "$myhostname" ; then
5856         dflt=y
5857         rp='Your host name appears to be "'$myhostname'".'" Right?"
5858         . ./myread
5859         case "$ans" in
5860         y*) ;;
5861         *) myhostname='';;
5862         esac
5863 fi
5864
5865 : bad guess or no guess
5866 while $test "X$myhostname" = X ; do
5867         dflt=''
5868         rp="Please type the (one word) name of your host:"
5869         . ./myread
5870         myhostname="$ans"
5871 done
5872
5873 : translate upper to lower if necessary
5874 case "$myhostname" in
5875 *[A-Z]*)
5876         echo "(Normalizing case in your host name)"
5877         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5878         ;;
5879 esac
5880
5881 case "$myhostname" in
5882 *.*)
5883         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5884         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5885         echo "(Trimming domain name from host name--host name is now $myhostname)"
5886         ;;
5887 *) case "$mydomain" in
5888         '')
5889                 {
5890                         test "X$hostcat" = "Xypcat hosts" &&
5891                         ypmatch "$myhostname" hosts 2>/dev/null |\
5892                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5893                         $test -s hosts
5894                 } || {
5895                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5896                                         /[       ]$myhostname[  . ]/p" > hosts
5897                 }
5898                 tmp_re="[       . ]"
5899                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5900                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5901                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5902                         hosts | $sort | $uniq | \
5903                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5904                 case `$echo X$dflt` in
5905                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5906                         dflt=.
5907                         ;;
5908                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5909                         ;;
5910                 esac
5911                 case "$dflt" in
5912                 .)
5913                         tans=`./loc resolv.conf X /etc /usr/etc`
5914                         if $test -f "$tans"; then
5915                                 echo "(Attempting domain name extraction from $tans)"
5916                                 dflt=.`$sed -n -e 's/   / /g' \
5917                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5918                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5919                                 case "$dflt" in
5920                                 .) dflt=.`$sed -n -e 's/        / /g' \
5921                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5922                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5923                                         ;;
5924                                 esac
5925                         fi
5926                         ;;
5927                 esac
5928                 case "$dflt" in
5929                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5930                         dflt=.`sh -c domainname 2>/dev/null`
5931                         case "$dflt" in
5932                         '') dflt='.';;
5933                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5934                         esac
5935                         ;;
5936                 esac
5937                 case "$dflt" in
5938                 .) echo "(Lost all hope -- silly guess then)"
5939                         dflt='.uucp'
5940                         ;;
5941                 esac
5942                 $rm -f hosts
5943                 ;;
5944         *) dflt="$mydomain";;
5945         esac;;
5946 esac
5947 echo " "
5948 rp="What is your domain name?"
5949 . ./myread
5950 tans="$ans"
5951 case "$ans" in
5952 '') ;;
5953 .*) ;;
5954 *) tans=".$tans";;
5955 esac
5956 mydomain="$tans"
5957
5958 : translate upper to lower if necessary
5959 case "$mydomain" in
5960 *[A-Z]*)
5961         echo "(Normalizing case in your domain name)"
5962         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5963         ;;
5964 esac
5965
5966 : a little sanity check here
5967 case "$phostname" in
5968 '') ;;
5969 *)
5970         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5971         $myhostname$mydomain|$myhostname) ;;
5972         *)
5973                 case "$phostname" in
5974                 sed*)
5975                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5976                         ;;
5977                 *)
5978                         echo "(That doesn't agree with your $phostname command, by the way.)"
5979                         ;;
5980                 esac
5981         ;;
5982         esac
5983         ;;
5984 esac
5985
5986 $cat <<EOM
5987
5988 I need to get your e-mail address in Internet format if possible, i.e.
5989 something like user@host.domain. Please answer accurately since I have
5990 no easy means to double check it. The default value provided below
5991 is most probably close to the reality but may not be valid from outside
5992 your organization...
5993
5994 EOM
5995 cont=x
5996 while test "$cont"; do
5997         case "$cf_email" in
5998         '') dflt="$cf_by@$myhostname$mydomain";;
5999         *) dflt="$cf_email";;
6000         esac
6001         rp='What is your e-mail address?'
6002         . ./myread
6003         cf_email="$ans"
6004         case "$cf_email" in
6005         *@*.*) cont='' ;;
6006         *)
6007                 rp='Address does not look like an Internet one.  Use it anyway?'
6008                 case "$fastread" in
6009                 yes) dflt=y ;;
6010                 *) dflt=n ;;
6011                 esac
6012                 . ./myread
6013                 case "$ans" in
6014                 y*) cont='' ;;
6015                 *) echo " " ;;
6016                 esac
6017                 ;;
6018         esac
6019 done
6020
6021 $cat <<EOM
6022
6023 If you or somebody else will be maintaining perl at your site, please
6024 fill in the correct e-mail address here so that they may be contacted
6025 if necessary. Currently, the "perlbug" program included with perl
6026 will send mail to this address in addition to perlbug@perl.com. You may
6027 enter "none" for no administrator.
6028
6029 EOM
6030 case "$perladmin" in
6031 '') dflt="$cf_email";;
6032 *) dflt="$perladmin";;
6033 esac
6034 rp='Perl administrator e-mail address'
6035 . ./myread
6036 perladmin="$ans"
6037
6038 : figure out how to guarantee perl startup
6039 case "$startperl" in
6040 '')
6041         case "$sharpbang" in
6042         *!)
6043                 $cat <<EOH
6044
6045 I can use the #! construct to start perl on your system. This will
6046 make startup of perl scripts faster, but may cause problems if you
6047 want to share those scripts and perl is not in a standard place
6048 ($binexp/perl) on all your platforms. The alternative is to force
6049 a shell by starting the script with a single ':' character.
6050
6051 EOH
6052                 dflt="$binexp/perl"
6053                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6054                 . ./myread
6055                 case "$ans" in
6056                 none)   startperl=": # use perl";;
6057                 *)      startperl="#!$ans"
6058                         if $test 30 -lt `echo "$ans" | wc -c`; then
6059                                 $cat >&4 <<EOM
6060
6061 WARNING:  Some systems limit the #! command to 32 characters.
6062 If you experience difficulty running Perl scripts with #!, try
6063 installing Perl in a directory with a shorter pathname.
6064
6065 EOM
6066                         fi ;;
6067                 esac
6068                 ;;
6069         *) startperl=": # use perl"
6070                 ;;
6071         esac
6072         ;;
6073 esac
6074 echo "I'll use $startperl to start perl scripts."
6075
6076 : figure best path for perl in scripts
6077 case "$perlpath" in
6078 '')
6079         perlpath="$binexp/perl"
6080         case "$startperl" in
6081         *!*) ;;
6082         *)
6083                 $cat <<EOH
6084
6085 I will use the "eval 'exec'" idiom to start Perl on your system.
6086 I can use the full path of your Perl binary for this purpose, but
6087 doing so may cause problems if you want to share those scripts and
6088 Perl is not always in a standard place ($binexp/perl).
6089
6090 EOH
6091                 dflt="$binexp/perl"
6092                 rp="What path shall I use in \"eval 'exec'\"?"
6093                 . ./myread
6094                 perlpath="$ans"
6095                 ;;
6096         esac
6097         ;;
6098 esac
6099 case "$startperl" in
6100 *!*)    ;;
6101 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6102 esac
6103
6104 : determine where public executable scripts go
6105 set scriptdir scriptdir
6106 eval $prefixit
6107 case "$scriptdir" in
6108 '')
6109         dflt="$bin"
6110         : guess some guesses
6111         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6112         $test -d /usr/share/bin && dflt=/usr/share/bin
6113         $test -d /usr/local/script && dflt=/usr/local/script
6114         $test -d $prefixexp/script && dflt=$prefixexp/script
6115         set dflt
6116         eval $prefixup
6117         ;;
6118 *)  dflt="$scriptdir"
6119         ;;
6120 esac
6121 $cat <<EOM
6122  
6123 Some installations have a separate directory just for executable scripts so
6124 that they can mount it across multiple architectures but keep the scripts in
6125 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6126 Or you might just lump your scripts in with all your other executables.
6127  
6128 EOM
6129 fn=d~
6130 rp='Where do you keep publicly executable scripts?'
6131 . ./getfile
6132 if $test "X$ansexp" != "X$scriptdirexp"; then
6133         installscript=''
6134 fi
6135 scriptdir="$ans"
6136 scriptdirexp="$ansexp"
6137 if $afs; then
6138         $cat <<EOM
6139
6140 Since you are running AFS, I need to distinguish the directory in which
6141 scripts reside from the directory in which they are installed (and from
6142 which they are presumably copied to the former directory by occult means).
6143
6144 EOM
6145         case "$installscript" in
6146         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6147         *) dflt="$installscript";;
6148         esac
6149         fn=de~
6150         rp='Where will public scripts be installed?'
6151         . ./getfile
6152         installscript="$ans"
6153 else
6154         installscript="$scriptdirexp"
6155 fi
6156
6157 : determine where site specific libraries go.
6158 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6159 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6160 case "$prefix" in
6161 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6162 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6163 esac
6164 eval $prefixit
6165 $cat <<EOM
6166
6167 The installation process will also create a directory for
6168 site-specific extensions and modules.  Some users find it convenient
6169 to place all site-specific files in this directory rather than in the
6170 main distribution directory.
6171
6172 EOM
6173 fn=d~+
6174 rp='Pathname for the site-specific library files?'
6175 . ./getfile
6176 if $test "X$sitelibexp" != "X$ansexp"; then
6177         installsitelib=''
6178 fi
6179 sitelib="$ans"
6180 sitelibexp="$ansexp"
6181 if $afs; then
6182         $cat <<EOM
6183
6184 Since you are running AFS, I need to distinguish the directory in
6185 which site-specific files reside from the directory in which they are
6186 installed (and from which they are presumably copied to the former
6187 directory by occult means).
6188
6189 EOM
6190         case "$installsitelib" in
6191         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6192         *) dflt="$installsitelib";;
6193         esac
6194         fn=de~
6195         rp='Where will site-specific files be installed?'
6196         . ./getfile
6197         installsitelib="$ans"
6198 else
6199         installsitelib="$sitelibexp"
6200 fi
6201
6202 : determine where site specific architecture-dependent libraries go.
6203 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6204 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6205 : sitelib may have an optional trailing /share.
6206 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6207 tdflt="$tdflt/$archname"
6208 set sitearch sitearch none
6209 eval $prefixit
6210 case "$sitearch" in
6211 '')     dflt="$tdflt" ;;
6212 *)      dflt="$sitearch" ;;
6213 esac
6214 $cat <<EOM
6215
6216 The installation process will also create a directory for
6217 architecture-dependent site-specific extensions and modules.
6218
6219 EOM
6220 fn=nd~+
6221 rp='Pathname for the site-specific architecture-dependent library files?'
6222 . ./getfile
6223 if $test "X$sitearchexp" != "X$ansexp"; then
6224         installsitearch=''
6225 fi
6226 sitearch="$ans"
6227 sitearchexp="$ansexp"
6228 if $afs; then
6229         $cat <<EOM
6230
6231 Since you are running AFS, I need to distinguish the directory in
6232 which site-specific architecture-dependent library files reside from
6233 the directory in which they are installed (and from which they are
6234 presumably copied to the former directory by occult means).
6235
6236 EOM
6237         case "$installsitearch" in
6238         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6239         *) dflt="$installsitearch";;
6240         esac
6241         fn=de~
6242         rp='Where will site-specific architecture-dependent files be installed?'
6243         . ./getfile
6244         installsitearch="$ans"
6245 else
6246         installsitearch="$sitearchexp"
6247 fi
6248
6249 cat <<EOM
6250
6251 Previous version of $package used the standard IO mechanisms as defined
6252 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6253 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6254 the default.  This abstraction layer can use AT&T's sfio (if you already
6255 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6256 problems with some extension modules.  Using PerlIO with stdio is safe,
6257 but it is slower than plain stdio and therefore is not the default.
6258
6259 If this doesn't make any sense to you, just accept the default 'n'.
6260 EOM
6261 case "$useperlio" in
6262 $define|true|[yY]*)     dflt='y';;
6263 *) dflt='n';;
6264 esac
6265 rp='Use the experimental PerlIO abstraction layer?'
6266 . ./myread
6267 case "$ans" in
6268 y|Y) 
6269         val="$define"
6270         ;;     
6271 *)      
6272         echo "Ok, doing things the stdio way"
6273         val="$undef"
6274         ;;
6275 esac
6276 set useperlio
6277 eval $setvar 
6278
6279 : Check how to convert floats to strings.
6280 if test "X$d_Gconvert" = X; then
6281         echo " "
6282         echo "Checking for an efficient way to convert floats to strings."
6283         $cat >try.c <<'EOP'
6284 #ifdef TRY_gconvert
6285 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6286 char *myname = "gconvert";
6287 #endif
6288 #ifdef TRY_gcvt
6289 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6290 char *myname = "gcvt";
6291 #endif
6292 #ifdef TRY_sprintf
6293 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6294 char *myname = "sprintf";
6295 #endif
6296
6297 #include <stdio.h>
6298
6299 int
6300 checkit(expect, got)
6301 char *expect;
6302 char *got;
6303 {
6304     if (strcmp(expect, got)) {
6305                 printf("%s oddity:  Expected %s, got %s\n",
6306                         myname, expect, got);
6307                 exit(1);
6308         }
6309 }
6310
6311 int main()
6312
6313         char buf[64]; 
6314         buf[63] = '\0';
6315
6316         /* This must be 1st test on (which?) platform */
6317         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6318         Gconvert(0.1, 8, 0, buf);
6319         checkit("0.1", buf);
6320
6321         Gconvert(1.0, 8, 0, buf); 
6322         checkit("1", buf);
6323
6324         Gconvert(0.0, 8, 0, buf); 
6325         checkit("0", buf);
6326
6327         Gconvert(-1.0, 8, 0, buf); 
6328         checkit("-1", buf);
6329
6330         /* Some Linux gcvt's give 1.e+5 here. */
6331         Gconvert(100000.0, 8, 0, buf); 
6332         checkit("100000", buf);
6333         
6334         /* Some Linux gcvt's give -1.e+5 here. */
6335         Gconvert(-100000.0, 8, 0, buf); 
6336         checkit("-100000", buf);
6337
6338         exit(0);
6339 }
6340 EOP
6341         case "$d_Gconvert" in
6342         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6343         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6344         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6345         *) xxx_list='gconvert gcvt sprintf' ;;
6346         esac
6347
6348         for xxx_convert in $xxx_list; do
6349                 echo "Trying $xxx_convert"
6350                 $rm -f try try$_o
6351                 set try -DTRY_$xxx_convert
6352                 if eval $compile; then
6353                         echo "$xxx_convert" found. >&4
6354                         if ./try; then
6355                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6356                                 break;
6357                         else
6358                                 echo "...But $xxx_convert didn't work as I expected."
6359                         fi
6360                 else
6361                         echo "$xxx_convert NOT found." >&4
6362                 fi
6363         done
6364                 
6365         case "$xxx_convert" in
6366         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6367         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6368         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6369         esac
6370 fi
6371
6372 : Initialize h_fcntl
6373 h_fcntl=false
6374
6375 : Initialize h_sysfile
6376 h_sysfile=false
6377
6378 : access call always available on UNIX
6379 set access d_access
6380 eval $inlibc
6381
6382 : locate the flags for 'access()'
6383 case "$d_access" in
6384 "$define")
6385         echo " "
6386         $cat >access.c <<'EOCP'
6387 #include <sys/types.h>
6388 #ifdef I_FCNTL
6389 #include <fcntl.h>
6390 #endif
6391 #ifdef I_SYS_FILE
6392 #include <sys/file.h>
6393 #endif
6394 #ifdef I_UNISTD
6395 #include <unistd.h>
6396 #endif
6397 int main() {
6398         exit(R_OK);
6399 }
6400 EOCP
6401         : check sys/file.h first, no particular reason here
6402         if $test `./findhdr sys/file.h` && \
6403                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6404                 h_sysfile=true;
6405                 echo "<sys/file.h> defines the *_OK access constants." >&4
6406         elif $test `./findhdr fcntl.h` && \
6407                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6408                 h_fcntl=true;
6409                 echo "<fcntl.h> defines the *_OK access constants." >&4
6410         elif $test `./findhdr unistd.h` && \
6411                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6412                 echo "<unistd.h> defines the *_OK access constants." >&4
6413         else
6414                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6415         fi
6416         ;;
6417 esac
6418 $rm -f access*
6419
6420 : see if accessx exists
6421 set accessx d_accessx
6422 eval $inlibc
6423
6424 : see if alarm exists
6425 set alarm d_alarm
6426 eval $inlibc
6427
6428 : Look for GNU-cc style attribute checking
6429 echo " "
6430 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6431 $cat >attrib.c <<'EOCP'
6432 #include <stdio.h>
6433 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6434 EOCP
6435 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6436         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6437                 echo "Your C compiler doesn't fully support __attribute__."
6438                 val="$undef"
6439         else
6440                 echo "Your C compiler supports __attribute__."
6441                 val="$define"
6442         fi
6443 else
6444         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6445         val="$undef"
6446 fi
6447 set d_attribut
6448 eval $setvar
6449 $rm -f attrib*
6450
6451 : see if bcmp exists
6452 set bcmp d_bcmp
6453 eval $inlibc
6454
6455 : see if bcopy exists
6456 set bcopy d_bcopy
6457 eval $inlibc
6458
6459 : see if this is a unistd.h system
6460 set unistd.h i_unistd
6461 eval $inhdr
6462
6463 : see if getpgrp exists
6464 set getpgrp d_getpgrp
6465 eval $inlibc
6466
6467 case "$d_getpgrp" in
6468 "$define")
6469         echo " "
6470         echo "Checking to see which flavor of getpgrp is in use..."
6471         $cat >set.c <<EOP
6472 #$i_unistd I_UNISTD
6473 #include <sys/types.h>
6474 #ifdef I_UNISTD
6475 #  include <unistd.h>
6476 #endif
6477 int main()
6478 {
6479         if (getuid() == 0) {
6480                 printf("(I see you are running Configure as super-user...)\n");
6481                 setuid(1);
6482         }
6483 #ifdef TRY_BSD_PGRP
6484         if (getpgrp(1) == 0)
6485                 exit(0);
6486 #else
6487         if (getpgrp() > 0)
6488                 exit(0);
6489 #endif
6490         exit(1);
6491 }
6492 EOP
6493         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6494                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6495                 val="$define"
6496         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6497                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6498                 val="$undef"
6499         else
6500                 echo "I can't seem to compile and run the test program."
6501                 if ./usg; then
6502                         xxx="a USG one, i.e. you use getpgrp()."
6503                 else
6504                         # SVR4 systems can appear rather BSD-ish.
6505                         case "$i_unistd" in
6506                         $undef)
6507                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6508                                 val="$define"
6509                                 ;;
6510                         $define)
6511                                 xxx="probably a USG one, i.e. you use getpgrp()."
6512                                 val="$undef"
6513                                 ;;
6514                         esac
6515                 fi
6516                 echo "Assuming your getpgrp is $xxx" >&4
6517         fi
6518         ;;
6519 *) val="$undef";;
6520 esac
6521 set d_bsdgetpgrp
6522 eval $setvar
6523 $rm -f set set.c
6524
6525 : see if setpgrp exists
6526 set setpgrp d_setpgrp
6527 eval $inlibc
6528
6529 case "$d_setpgrp" in
6530 "$define")
6531         echo " "
6532         echo "Checking to see which flavor of setpgrp is in use..."
6533         $cat >set.c <<EOP
6534 #$i_unistd I_UNISTD
6535 #include <sys/types.h>
6536 #ifdef I_UNISTD
6537 #  include <unistd.h>
6538 #endif
6539 int main()
6540 {
6541         if (getuid() == 0) {
6542                 printf("(I see you are running Configure as super-user...)\n");
6543                 setuid(1);
6544         }
6545 #ifdef TRY_BSD_PGRP
6546         if (-1 == setpgrp(1, 1))
6547                 exit(0);
6548 #else
6549         if (setpgrp() != -1)
6550                 exit(0);
6551 #endif
6552         exit(1);
6553 }
6554 EOP
6555         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6556                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6557                 val="$define"
6558         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6559                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6560                 val="$undef"
6561         else
6562                 echo "(I can't seem to compile and run the test program.)"
6563                 if ./usg; then
6564                         xxx="a USG one, i.e. you use setpgrp()."
6565                 else
6566                         # SVR4 systems can appear rather BSD-ish.
6567                         case "$i_unistd" in
6568                         $undef)
6569                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6570                                 val="$define"
6571                                 ;;
6572                         $define)
6573                                 xxx="probably a USG one, i.e. you use setpgrp()."
6574                                 val="$undef"
6575                                 ;;
6576                         esac
6577                 fi
6578                 echo "Assuming your setpgrp is $xxx" >&4
6579         fi
6580         ;;
6581 *) val="$undef";;
6582 esac
6583 set d_bsdsetpgrp
6584 eval $setvar
6585 $rm -f set set.c
6586 : see if bzero exists
6587 set bzero d_bzero
6588 eval $inlibc
6589
6590 : check for lengths of integral types
6591 echo " "
6592 case "$intsize" in
6593 '')
6594         echo "Checking to see how big your integers are..." >&4
6595         $cat >intsize.c <<'EOCP'
6596 #include <stdio.h>
6597 int main()
6598 {
6599         printf("intsize=%d;\n", sizeof(int));
6600         printf("longsize=%d;\n", sizeof(long));
6601         printf("shortsize=%d;\n", sizeof(short));
6602         exit(0);
6603 }
6604 EOCP
6605         set intsize
6606         if eval $compile_ok && ./intsize > /dev/null; then
6607                 eval `./intsize`
6608                 echo "Your integers are $intsize bytes long."
6609                 echo "Your long integers are $longsize bytes long."
6610                 echo "Your short integers are $shortsize bytes long."
6611         else
6612                 $cat >&4 <<EOM
6613 !
6614 Help! I can't compile and run the intsize test program: please enlighten me!
6615 (This is probably a misconfiguration in your system or libraries, and
6616 you really ought to fix it.  Still, I'll try anyway.)
6617 !
6618 EOM
6619                 dflt=4
6620                 rp="What is the size of an integer (in bytes)?"
6621                 . ./myread
6622                 intsize="$ans"
6623                 dflt=$intsize
6624                 rp="What is the size of a long integer (in bytes)?"
6625                 . ./myread
6626                 longsize="$ans"
6627                 dflt=2
6628                 rp="What is the size of a short integer (in bytes)?"
6629                 . ./myread
6630                 shortsize="$ans"
6631         fi
6632         ;;
6633 esac
6634 $rm -f intsize intsize.*
6635
6636 : see if signal is declared as pointer to function returning int or void
6637 echo " "
6638 xxx=`./findhdr signal.h`
6639 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6640 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6641         echo "You have int (*signal())() instead of void." >&4
6642         val="$undef"
6643 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6644         echo "You have void (*signal())()." >&4
6645         val="$define"
6646 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6647         echo "You have int (*signal())() instead of void." >&4
6648         val="$undef"
6649 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6650         echo "You have void (*signal())()." >&4
6651         val="$define"
6652 else
6653         case "$d_voidsig" in
6654         '')
6655         echo "I can't determine whether signal handler returns void or int..." >&4
6656                 dflt=void
6657                 rp="What type does your signal handler return?"
6658                 . ./myread
6659                 case "$ans" in
6660                 v*) val="$define";;
6661                 *) val="$undef";;
6662                 esac;;
6663         "$define")
6664                 echo "As you already told me, signal handler returns void." >&4
6665                 val="$define"
6666                 ;;
6667         *)      echo "As you already told me, signal handler returns int." >&4
6668                 val="$undef"
6669                 ;;
6670         esac
6671 fi
6672 set d_voidsig
6673 eval $setvar
6674 case "$d_voidsig" in
6675 "$define") signal_t="void";;
6676 *) signal_t="int";;
6677 esac
6678 $rm -f $$.tmp
6679
6680 : check for ability to cast large floats to 32-bit ints.
6681 echo " "
6682 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6683 if $test "$intsize" -ge 4; then
6684         xxx=int
6685 else
6686         xxx=long
6687 fi
6688 $cat >try.c <<EOCP
6689 #include <stdio.h>
6690 #include <sys/types.h>
6691 #include <signal.h>
6692 $signal_t blech(s) int s; { exit(3); }
6693 int main()
6694 {
6695         $xxx i32;
6696         double f, g;
6697         int result = 0;
6698         char str[16];
6699         signal(SIGFPE, blech);
6700
6701         /* Don't let compiler optimize the test away.  Store the number 
6702            in a writable string for gcc to pass to sscanf under HP/UX.
6703         */
6704         sprintf(str, "2147483647");
6705         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6706         g = 10 * f;
6707         i32  = ($xxx) g;
6708
6709         /* x86 processors will probably give 0x8000 0000, which is a
6710        sign change.  We don't want that.  We want to mimic SPARC
6711            behavior here, which is to preserve the sign and give
6712            back 0x7fff ffff.
6713         */
6714         if (i32 != ($xxx) f)
6715                 result |= 1;
6716         exit(result);
6717 }
6718 EOCP
6719 set try
6720 if eval $compile_ok; then
6721         ./try
6722         yyy=$?
6723 else
6724         echo "(I can't seem to compile the test program--assuming it can't)"
6725         yyy=1
6726 fi
6727 case "$yyy" in
6728 0)      val="$define"
6729         echo "Yup, it can."
6730         ;;
6731 *)      val="$undef"
6732         echo "Nope, it can't."
6733         ;;
6734 esac
6735 set d_casti32
6736 eval $setvar
6737 $rm -f try try.*
6738
6739 : check for ability to cast negative floats to unsigned
6740 echo " "
6741 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6742 $cat >try.c <<EOCP
6743 #include <stdio.h>
6744 #include <sys/types.h>
6745 #include <signal.h>
6746 $signal_t blech(s) int s; { exit(7); }
6747 $signal_t blech_in_list(s) int s; { exit(4); }
6748 unsigned long dummy_long(p) unsigned long p; { return p; }
6749 unsigned int dummy_int(p) unsigned int p; { return p; }
6750 unsigned short dummy_short(p) unsigned short p; { return p; }
6751 int main()
6752 {
6753         double f;
6754         unsigned long along;
6755         unsigned int aint;
6756         unsigned short ashort;
6757         int result = 0;
6758         char str[16];
6759         
6760         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6761            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6762            optimized the whole file away
6763         */
6764         /* Store the number in a writable string for gcc to pass to 
6765            sscanf under HP/UX.
6766         */
6767         sprintf(str, "-123");
6768         sscanf(str, "%lf", &f);  /* f = -123.; */
6769
6770         signal(SIGFPE, blech);
6771         along = (unsigned long)f;
6772         aint = (unsigned int)f;
6773         ashort = (unsigned short)f;
6774         if (along != (unsigned long)-123)
6775                 result |= 1;
6776         if (aint != (unsigned int)-123)
6777                 result |= 1;
6778         if (ashort != (unsigned short)-123)
6779                 result |= 1;
6780         sprintf(str, "1073741824.");
6781         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6782         f = f + f;
6783         along = 0;
6784         along = (unsigned long)f;
6785         if (along != 0x80000000)
6786                 result |= 2;
6787         f -= 1.;
6788         along = 0;
6789         along = (unsigned long)f;
6790         if (along != 0x7fffffff)
6791                 result |= 1;
6792         f += 2.;
6793         along = 0;
6794         along = (unsigned long)f;
6795         if (along != 0x80000001)
6796                 result |= 2;
6797         if (result)
6798                 exit(result);
6799         signal(SIGFPE, blech_in_list);
6800         sprintf(str, "123.");
6801         sscanf(str, "%lf", &f);  /* f = 123.; */
6802         along = dummy_long((unsigned long)f);
6803         aint = dummy_int((unsigned int)f);
6804         ashort = dummy_short((unsigned short)f);
6805         if (along != (unsigned long)123)
6806                 result |= 4;
6807         if (aint != (unsigned int)123)
6808                 result |= 4;
6809         if (ashort != (unsigned short)123)
6810                 result |= 4;
6811         exit(result);
6812
6813 }
6814 EOCP
6815 set try
6816 if eval $compile_ok; then
6817         ./try
6818         castflags=$?
6819 else
6820         echo "(I can't seem to compile the test program--assuming it can't)"
6821         castflags=7
6822 fi
6823 case "$castflags" in
6824 0)      val="$define"
6825         echo "Yup, it can."
6826         ;;
6827 *)      val="$undef"
6828         echo "Nope, it can't."
6829         ;;
6830 esac
6831 set d_castneg
6832 eval $setvar
6833 $rm -f try.*
6834
6835 : see if vprintf exists
6836 echo " "
6837 if set vprintf val -f d_vprintf; eval $csym; $val; then
6838         echo 'vprintf() found.' >&4
6839         val="$define"
6840         $cat >vprintf.c <<'EOF'
6841 #include <varargs.h>
6842
6843 int main() { xxx("foo"); }
6844
6845 xxx(va_alist)
6846 va_dcl
6847 {
6848         va_list args;
6849         char buf[10];
6850
6851         va_start(args);
6852         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6853 }
6854 EOF
6855         set vprintf
6856         if eval $compile && ./vprintf; then
6857                 echo "Your vsprintf() returns (int)." >&4
6858                 val2="$undef"
6859         else
6860                 echo "Your vsprintf() returns (char*)." >&4
6861                 val2="$define"
6862         fi
6863 else
6864         echo 'vprintf() NOT found.' >&4
6865                 val="$undef"
6866                 val2="$undef"
6867 fi
6868 set d_vprintf
6869 eval $setvar
6870 val=$val2
6871 set d_charvspr
6872 eval $setvar
6873
6874 : see if chown exists
6875 set chown d_chown
6876 eval $inlibc
6877
6878 : see if chroot exists
6879 set chroot d_chroot
6880 eval $inlibc
6881
6882 : see if chsize exists
6883 set chsize d_chsize
6884 eval $inlibc
6885
6886 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6887 while $test $# -ge 2; do
6888         case "$1" in
6889         $define) echo "#include <$2>";;
6890         esac ;
6891     shift 2;
6892 done > try.c;
6893 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6894 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6895         val="$define";
6896 else
6897         val="$undef";
6898 fi;
6899 set $varname;
6900 eval $setvar;
6901 $rm -f try.c try.o'
6902
6903 : see if this is a sys/uio.h system
6904 set sys/uio.h i_sysuio
6905 eval $inhdr
6906
6907 echo "Checking to see if your system supports struct iovec..." >&4
6908 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6909 eval $hasfield
6910 case "$d_iovec_s" in
6911 "$define")      echo "Yup, it does." >&4
6912                 ;;
6913 *)              echo "Nope, it doesn't." >&4
6914                 ;;
6915 esac
6916
6917 socketlib=''
6918 sockethdr=''
6919 : see whether socket exists
6920 echo " "
6921 $echo $n "Hmm... $c" >&4
6922 if set socket val -f d_socket; eval $csym; $val; then
6923         echo "Looks like you have Berkeley networking support." >&4
6924         d_socket="$define"
6925         if set setsockopt val -f; eval $csym; $val; then
6926                 d_oldsock="$undef"
6927         else
6928                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6929                 d_oldsock="$define"
6930         fi
6931 else
6932         if $contains socklib libc.list >/dev/null 2>&1; then
6933                 echo "Looks like you have Berkeley networking support." >&4
6934                 d_socket="$define"
6935                 : we will have to assume that it supports the 4.2 BSD interface
6936                 d_oldsock="$undef"
6937         else
6938                 echo "You don't have Berkeley networking in libc$_a..." >&4
6939                 if test "X$d_socket" = "X$define"; then
6940                    echo "...but you seem to believe that you have sockets." >&4
6941                 else
6942                         for net in net socket
6943                         do
6944                                 if test -f /usr/lib/lib$net$_a; then
6945                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6946                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6947                                         if $contains socket libc.list >/dev/null 2>&1; then
6948                                                 d_socket="$define"
6949                                                 socketlib="-l$net"
6950                                                 case "$net" in
6951                                                 net)
6952                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6953                                                         sockethdr="-I/usr/netinclude"
6954                                                         ;;
6955                                                 esac
6956                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6957                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6958                                                         d_oldsock="$undef"
6959                                                 else
6960                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6961                                                         d_oldsock="$define"
6962                                                 fi
6963                                                 break
6964                                         fi
6965                                 fi
6966                         done
6967                         if test "X$d_socket" != "X$define"; then
6968                            echo "or anywhere else I see." >&4
6969                            d_socket="$undef"
6970                            d_oldsock="$undef"
6971                         fi
6972                 fi
6973         fi
6974 fi
6975
6976 : see if socketpair exists
6977 set socketpair d_sockpair
6978 eval $inlibc
6979
6980
6981 echo " "
6982 echo "Checking the availability of certain socket constants..." >& 4
6983 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6984         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6985         $cat >try.c <<EOF
6986 #include <sys/types.h>
6987 #include <sys/socket.h>
6988 int main() {
6989     int i = $ENUM;
6990 }
6991 EOF
6992         val="$undef"
6993         set try; if eval $compile; then
6994                 val="$define"
6995         fi
6996         set d_${enum}; eval $setvar
6997         $rm -f try.c try
6998 done
6999
7000 set sendmsg d_sendmsg
7001 eval $inlibc
7002
7003 set recvmsg d_recvmsg
7004 eval $inlibc
7005
7006 echo " "
7007 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7008 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7009 eval $hasfield
7010 case "$d_msghdr_s" in
7011 "$define")      echo "Yup, it does." >&4
7012                 ;;
7013 *)              echo "Nope, it doesn't." >&4
7014                 ;;
7015 esac
7016
7017 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7018 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7019 eval $hasfield
7020 case "$d_cmsghdr_s" in
7021 "$define")      echo "Yup, it does." >&4
7022                 ;;
7023 *)              echo "Nope, it doesn't." >&4
7024                 ;;
7025 esac
7026
7027 : check for const keyword
7028 echo " "
7029 echo 'Checking to see if your C compiler knows about "const"...' >&4
7030 $cat >const.c <<'EOCP'
7031 typedef struct spug { int drokk; } spug;
7032 int main()
7033 {
7034         const char *foo;
7035         const spug y;
7036 }
7037 EOCP
7038 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7039         val="$define"
7040         echo "Yup, it does."
7041 else
7042         val="$undef"
7043         echo "Nope, it doesn't."
7044 fi
7045 set d_const
7046 eval $setvar
7047
7048 : see if crypt exists
7049 echo " "
7050 if set crypt val -f d_crypt; eval $csym; $val; then
7051         echo 'crypt() found.' >&4
7052         val="$define"
7053         cryptlib=''
7054 else
7055         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7056         if $test -z "$cryptlib"; then
7057                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7058         else
7059                 cryptlib=-lcrypt
7060         fi
7061         if $test -z "$cryptlib"; then
7062                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7063         else
7064                 cryptlib=-lcrypt
7065         fi
7066         if $test -z "$cryptlib"; then
7067                 cryptlib=`./loc libcrypt$_a "" $libpth`
7068         else
7069                 cryptlib=-lcrypt
7070         fi
7071         if $test -z "$cryptlib"; then
7072                 echo 'crypt() NOT found.' >&4
7073                 val="$undef"
7074         else
7075                 val="$define"
7076         fi
7077 fi
7078 set d_crypt
7079 eval $setvar
7080
7081 : get csh whereabouts
7082 case "$csh" in
7083 'csh') val="$undef" ;;
7084 *) val="$define" ;;
7085 esac
7086 set d_csh
7087 eval $setvar
7088 : Respect a hint or command line value for full_csh.
7089 case "$full_csh" in
7090 '') full_csh=$csh ;;
7091 esac
7092
7093 : see if cuserid exists
7094 set cuserid d_cuserid
7095 eval $inlibc
7096
7097 : see if this is a limits.h system
7098 set limits.h i_limits
7099 eval $inhdr
7100
7101 : see if this is a float.h system
7102 set float.h i_float
7103 eval $inhdr
7104
7105 : See if number of significant digits in a double precision number is known
7106 echo " "
7107 $cat >dbl_dig.c <<EOM
7108 #$i_limits I_LIMITS
7109 #$i_float I_FLOAT
7110 #ifdef I_LIMITS
7111 #include <limits.h>
7112 #endif
7113 #ifdef I_FLOAT
7114 #include <float.h>
7115 #endif
7116 #ifdef DBL_DIG
7117 printf("Contains DBL_DIG");
7118 #endif
7119 EOM
7120 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7121 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7122         echo "DBL_DIG found." >&4
7123         val="$define"
7124 else
7125         echo "DBL_DIG NOT found." >&4
7126         val="$undef"
7127 fi
7128 $rm -f dbl_dig.?
7129 set d_dbl_dig
7130 eval $setvar
7131
7132
7133 if $test X"$use64bits" = X"$define"; then
7134         : see if dbminit64 exists
7135         set dbminit64 d_dbminit64
7136         eval $inlibc
7137
7138         : see if dbmclose64 exists
7139         set dbmclose64 d_dbmclose64
7140         eval $inlibc
7141
7142         : see if fetch64 exists
7143         set fetch64 d_fetch64
7144         eval $inlibc
7145
7146         : see if store64 exists
7147         set store64 d_store64
7148         eval $inlibc
7149
7150         : see if delete64 exists
7151         set delete64 d_delete64
7152         eval $inlibc
7153
7154         : see if firstkey64 exists
7155         set firstkey64 d_firstkey64
7156         eval $inlibc
7157
7158         : see if nextkey64 exists
7159         set nextkey64 d_nextkey64
7160         eval $inlibc
7161 else
7162         val="$undef"
7163         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7164         do
7165                 set $xxx
7166                 eval $setvar
7167         done
7168 fi
7169
7170 : see if difftime exists
7171 set difftime d_difftime
7172 eval $inlibc
7173
7174 : see if sys/stat.h is available
7175 set sys/stat.h i_sysstat
7176 eval $inhdr
7177
7178 : see if this is a dirent system
7179 echo " "
7180 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7181         val="$define"
7182         echo "<dirent.h> found." >&4
7183 else
7184         val="$undef"
7185         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7186                 echo "<sys/dir.h> found." >&4
7187                 echo " "
7188         else
7189                 xinc=`./findhdr sys/ndir.h`
7190         fi
7191         echo "<dirent.h> NOT found." >&4
7192 fi
7193 set i_dirent
7194 eval $setvar
7195
7196 : Look for type of directory structure.
7197 echo " "
7198 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7199
7200 case "$direntrytype" in
7201 ''|' ')
7202         case "$i_dirent" in
7203         $define) guess1='struct dirent' ;;
7204         *) guess1='struct direct'  ;;
7205         esac
7206         ;;
7207 *)      guess1="$direntrytype"
7208         ;;
7209 esac
7210
7211 case "$guess1" in
7212 'struct dirent') guess2='struct direct' ;;
7213 *) guess2='struct dirent' ;;
7214 esac
7215                 
7216 if $contains "$guess1" try.c >/dev/null 2>&1; then
7217         direntrytype="$guess1"
7218         echo "Your directory entries are $direntrytype." >&4
7219 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7220         direntrytype="$guess2"
7221         echo "Your directory entries seem to be $direntrytype." >&4
7222 else
7223         echo "I don't recognize your system's directory entries." >&4
7224         rp="What type is used for directory entries on this system?"
7225         dflt="$guess1"
7226         . ./myread
7227         direntrytype="$ans"
7228 fi
7229 $rm -f try.c
7230
7231
7232 : see if the directory entry stores field length
7233 echo " "
7234 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7235 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7236         echo "Good, your directory entry keeps length information in d_namlen." >&4
7237         val="$define"
7238 else
7239         echo "Your directory entry does not know about the d_namlen field." >&4
7240         val="$undef"
7241 fi
7242 set d_dirnamlen
7243 eval $setvar
7244 $rm -f try.c
7245
7246
7247 if $test X"$use64bits" = X"$define"; then
7248         : see if fstat64 exists
7249         set fstat64 d_fstat64
7250         eval $inlibc
7251
7252         : see if ftruncate64 exists
7253         set ftruncate64 d_ftruncate64
7254         eval $inlibc
7255
7256         : see if lockf64 exists
7257         set lockf64 d_lockf64
7258         eval $inlibc
7259
7260         : see if llseek exists
7261         set llseek d_llseek
7262         eval $inlibc
7263
7264         : see if lseek64 exists
7265         set lseek64 d_lseek64
7266         eval $inlibc
7267
7268         : see if lstat64 exists
7269         set lstat64 d_lstat64
7270         eval $inlibc
7271
7272         : see if open64 exists
7273         set open64 d_open64
7274         eval $inlibc
7275
7276         : see if opendir64 exists
7277         set opendir64 d_opendir64
7278         eval $inlibc
7279
7280         : see if readdir64 exists
7281         set readdir64 d_readdir64
7282         eval $inlibc
7283
7284         : see if seekdir64 exists
7285         set seekdir64 d_seekdir64
7286         eval $inlibc
7287
7288         : see if stat64 exists
7289         set stat64 d_stat64
7290         eval $inlibc
7291
7292         : see if telldir64 exists
7293         set telldir64 d_telldir64
7294         eval $inlibc
7295
7296         : see if truncate64 exists
7297         set truncate64 d_truncate64
7298         eval $inlibc
7299
7300         : check for off64_t
7301         echo " "
7302         echo $n "Checking to see if your system supports off64_t...$c" >&4
7303         $cat >try.c <<EOCP
7304 #include <sys/types.h>
7305 #include <unistd.h>
7306 off64_t foo() { off64_t x; x = 7; return x; }'
7307 EOCP
7308         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7309                 val="$define"
7310                 echo " Yup, it does." >&4
7311         else
7312                 val="$undef"
7313                 echo " Nope, it doesn't." >&4
7314         fi
7315         $rm -f try.*
7316         set d_off64_t
7317         eval $setvar
7318
7319         : check for offset_t
7320         echo " "
7321         echo $n "Checking to see if your system supports offset_t...$c" >&4
7322         $cat >try.c <<EOCP
7323 #include <sys/types.h>
7324 #include <unistd.h>
7325 offset_t foo() { offset_t x; x = 7; return x; }'
7326 EOCP
7327         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7328                 val="$define"
7329                 echo " Yup, it does." >&4
7330         else
7331                 val="$undef"
7332                 echo " Nope, it doesn't." >&4
7333         fi
7334         $rm -f try.*
7335         set d_offset_t
7336         eval $setvar
7337
7338         : check for ino64_t
7339         echo " "
7340         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7341         val="$undef"
7342         case "$i_sysstat" in
7343         "$define" )
7344                 $cat >try.c <<EOCP
7345 #include <sys/types.h>
7346 #include <sys/stat.h>
7347 ino64_t foo() { ino64_t x; x = 7; return x; }'
7348 EOCP
7349                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7350                         val="$define"
7351                 fi
7352                 $rm -f try.*
7353                 ;;
7354         esac
7355         if $test "X$val" = X"$define"; then
7356                 echo " Yup, it does." >&4
7357         else
7358                 echo " Nope, it doesn't." >&4
7359         fi
7360         set d_ino64_t
7361         eval $setvar
7362
7363         : check for struct flock64
7364         echo " "
7365         echo "Checking to see if your system supports struct flock64..." >&4
7366         if $h_fcntl; then
7367                 set d_flock64_s flock64 l_len define fcntl.h
7368                 eval $hasfield
7369         else
7370                 val="$undef"
7371                 set d_flock64_s
7372                 eval $setvar
7373         fi
7374         case "$d_flock64_s" in
7375         "$define")      echo "Yup, it does." >&4
7376                         ;;
7377         *)              echo "Nope, it doesn't." >&4
7378                         ;;
7379         esac
7380
7381         : check for struct dirent64
7382         echo " "
7383         echo "Checking to see if your system supports struct dirent64..." >&4
7384         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7385         eval $hasfield
7386         case "$d_dirent64_s" in
7387         "$define")      echo "Yup, it does." >&4
7388                         ;;
7389         *)              echo "Nope, it doesn't." >&4
7390                         ;;
7391         esac
7392
7393 else
7394         val="$undef"
7395         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
7396         do
7397                 set $xxx
7398                 eval $setvar
7399         done
7400 fi
7401
7402 : see if dlerror exists
7403 xxx_runnm="$runnm"
7404 runnm=false
7405 set dlerror d_dlerror
7406 eval $inlibc
7407 runnm="$xxx_runnm"
7408
7409 : see if dlfcn is available
7410 set dlfcn.h i_dlfcn
7411 eval $inhdr
7412
7413 case "$usedl" in
7414 $define|y|true)
7415         $cat << EOM
7416
7417 On a few systems, the dynamically loaded modules that perl generates and uses
7418 will need a different extension than shared libs. The default will probably
7419 be appropriate.
7420
7421 EOM
7422         case "$dlext" in
7423         '')     dflt="$so" ;;
7424         *)      dflt="$dlext" ;;
7425         esac
7426         rp='What is the extension of dynamically loaded modules'
7427         . ./myread
7428         dlext="$ans"
7429         ;;
7430 *)
7431         dlext="none"
7432         ;;
7433 esac
7434
7435 : Check if dlsym need a leading underscore
7436 echo " "
7437 val="$undef"
7438
7439 case "$dlsrc" in
7440 dl_dlopen.xs)
7441         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7442         $cat >dyna.c <<'EOM'
7443 fred () { }
7444 EOM
7445
7446 $cat >fred.c<<EOM
7447
7448 #include <stdio.h>
7449 #$i_dlfcn I_DLFCN
7450 #ifdef I_DLFCN
7451 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7452 #else
7453 #include <sys/types.h>
7454 #include <nlist.h>
7455 #include <link.h>
7456 #endif
7457
7458 extern int fred() ;
7459
7460 int main()
7461 {
7462     void * handle ;
7463     void * symbol ;
7464 #ifndef RTLD_LAZY
7465     int mode = 1 ;
7466 #else
7467     int mode = RTLD_LAZY ;
7468 #endif
7469     handle = dlopen("./dyna.$dlext", mode) ;
7470     if (handle == NULL) {
7471         printf ("1\n") ;
7472         fflush (stdout) ;
7473         exit(0);
7474     }
7475     symbol = dlsym(handle, "fred") ;
7476     if (symbol == NULL) {
7477         /* try putting a leading underscore */
7478         symbol = dlsym(handle, "_fred") ;
7479         if (symbol == NULL) {
7480             printf ("2\n") ;
7481             fflush (stdout) ;
7482             exit(0);
7483         }
7484         printf ("3\n") ;
7485     }
7486     else
7487         printf ("4\n") ;
7488     fflush (stdout) ;
7489     exit(0);
7490 }
7491 EOM
7492         : Call the object file tmp-dyna.o in case dlext=o.
7493         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7494                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7495                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7496                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7497                 xxx=`./fred`
7498                 case $xxx in
7499                 1)      echo "Test program failed using dlopen." >&4
7500                         echo "Perhaps you should not use dynamic loading." >&4;;
7501                 2)      echo "Test program failed using dlsym." >&4
7502                         echo "Perhaps you should not use dynamic loading." >&4;;
7503                 3)      echo "dlsym needs a leading underscore" >&4
7504                         val="$define" ;;
7505                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7506                 esac
7507         else
7508                 echo "I can't compile and run the test program." >&4
7509         fi
7510         ;;
7511 esac
7512                 
7513 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7514
7515 set d_dlsymun
7516 eval $setvar
7517
7518 hasproto='varname=$1; func=$2; shift; shift;
7519 while $test $# -ge 2; do
7520         case "$1" in
7521         $define) echo "#include <$2>";;
7522         esac ;
7523     shift 2;
7524 done > try.c;
7525 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7526 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7527         echo "$func() prototype found.";
7528         val="$define";
7529 else
7530         echo "$func() prototype NOT found.";
7531         val="$undef";
7532 fi;
7533 set $varname;
7534 eval $setvar;
7535 $rm -f try.c tryout.c'
7536
7537 : see if prototype for drand48 is available
7538 echo " "
7539 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7540 eval $hasproto
7541
7542 : see if dup2 exists
7543 set dup2 d_dup2
7544 eval $inlibc
7545
7546 : see if eaccess exists
7547 set eaccess d_eaccess
7548 eval $inlibc
7549
7550 : see if endgrent exists
7551 set endgrent d_endgrent
7552 eval $inlibc
7553
7554 : see if endhostent exists
7555 set endhostent d_endhent
7556 eval $inlibc
7557
7558 : see if endnetent exists
7559 set endnetent d_endnent
7560 eval $inlibc
7561
7562 : see if endprotoent exists
7563 set endprotoent d_endpent
7564 eval $inlibc
7565
7566 : see if endpwent exists
7567 set endpwent d_endpwent
7568 eval $inlibc
7569
7570 : see if endservent exists
7571 set endservent d_endsent
7572 eval $inlibc
7573
7574 : see if endspent exists
7575 set endspent d_endspent
7576 eval $inlibc
7577
7578 : Locate the flags for 'open()'
7579 echo " "
7580 $cat >open3.c <<'EOCP'
7581 #include <sys/types.h>
7582 #ifdef I_FCNTL
7583 #include <fcntl.h>
7584 #endif
7585 #ifdef I_SYS_FILE
7586 #include <sys/file.h>
7587 #endif
7588 int main() {
7589         if(O_RDONLY);
7590 #ifdef O_TRUNC
7591         exit(0);
7592 #else
7593         exit(1);
7594 #endif
7595 }
7596 EOCP
7597 : check sys/file.h first to get FREAD on Sun
7598 if $test `./findhdr sys/file.h` && \
7599                 set open3 -DI_SYS_FILE && eval $compile; then
7600         h_sysfile=true;
7601         echo "<sys/file.h> defines the O_* constants..." >&4
7602         if ./open3; then
7603                 echo "and you have the 3 argument form of open()." >&4
7604                 val="$define"
7605         else
7606                 echo "but not the 3 argument form of open().  Oh, well." >&4
7607                 val="$undef"
7608         fi
7609 elif $test `./findhdr fcntl.h` && \
7610                 set open3 -DI_FCNTL && eval $compile; then
7611         h_fcntl=true;
7612         echo "<fcntl.h> defines the O_* constants..." >&4
7613         if ./open3; then
7614                 echo "and you have the 3 argument form of open()." >&4
7615                 val="$define"
7616         else
7617                 echo "but not the 3 argument form of open().  Oh, well." >&4
7618                 val="$undef"
7619         fi
7620 else
7621         val="$undef"
7622         echo "I can't find the O_* constant definitions!  You got problems." >&4
7623 fi
7624 set d_open3
7625 eval $setvar
7626 $rm -f open3*
7627
7628 : check for non-blocking I/O stuff
7629 case "$h_sysfile" in
7630 true) echo "#include <sys/file.h>" > head.c;;
7631 *)
7632         case "$h_fcntl" in
7633         true) echo "#include <fcntl.h>" > head.c;;
7634         *) echo "#include <sys/fcntl.h>" > head.c;;
7635         esac
7636         ;;
7637 esac
7638 echo " "
7639 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7640 case "$o_nonblock" in
7641 '')
7642         $cat head.c > try.c
7643         $cat >>try.c <<'EOCP'
7644 int main() {
7645 #ifdef O_NONBLOCK
7646         printf("O_NONBLOCK\n");
7647         exit(0);
7648 #endif
7649 #ifdef O_NDELAY
7650         printf("O_NDELAY\n");
7651         exit(0);
7652 #endif
7653 #ifdef FNDELAY
7654         printf("FNDELAY\n");
7655         exit(0);
7656 #endif
7657         exit(0);
7658 }
7659 EOCP
7660         set try
7661         if eval $compile_ok; then
7662                 o_nonblock=`./try`
7663                 case "$o_nonblock" in
7664                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7665                 *) echo "Seems like we can use $o_nonblock.";;
7666                 esac
7667         else
7668                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7669         fi
7670         ;;
7671 *) echo "Using $hint value $o_nonblock.";;
7672 esac
7673 $rm -f try try.* .out core
7674
7675 echo " "
7676 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7677 case "$eagain" in
7678 '')
7679         $cat head.c > try.c
7680         $cat >>try.c <<EOCP
7681 #include <errno.h>
7682 #include <sys/types.h>
7683 #include <signal.h>
7684 #define MY_O_NONBLOCK $o_nonblock
7685 #ifndef errno  /* XXX need better Configure test */
7686 extern int errno;
7687 #endif
7688 $signal_t blech(x) int x; { exit(3); }
7689 EOCP
7690         $cat >> try.c <<'EOCP'
7691 int main()
7692 {
7693         int pd[2];
7694         int pu[2];
7695         char buf[1];
7696         char string[100];
7697
7698         pipe(pd);       /* Down: child -> parent */
7699         pipe(pu);       /* Up: parent -> child */
7700         if (0 != fork()) {
7701                 int ret;
7702                 close(pd[1]);   /* Parent reads from pd[0] */
7703                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7704                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7705                         exit(1);
7706                 signal(SIGALRM, blech);
7707                 alarm(5);
7708                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7709                         exit(2);
7710                 sprintf(string, "%d\n", ret);
7711                 write(2, string, strlen(string));
7712                 alarm(0);
7713 #ifdef EAGAIN
7714                 if (errno == EAGAIN) {
7715                         printf("EAGAIN\n");
7716                         goto ok;
7717                 }
7718 #endif
7719 #ifdef EWOULDBLOCK
7720                 if (errno == EWOULDBLOCK)
7721                         printf("EWOULDBLOCK\n");
7722 #endif
7723         ok:
7724                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7725                 sleep(2);                               /* Give it time to close our pipe */
7726                 alarm(5);
7727                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7728                 alarm(0);
7729                 sprintf(string, "%d\n", ret);
7730                 write(3, string, strlen(string));
7731                 exit(0);
7732         }
7733
7734         close(pd[0]);                   /* We write to pd[1] */
7735         close(pu[1]);                   /* We read from pu[0] */
7736         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7737         close(pd[1]);                   /* Pipe pd is now fully closed! */
7738         exit(0);                                /* Bye bye, thank you for playing! */
7739 }
7740 EOCP
7741         set try
7742         if eval $compile_ok; then
7743                 echo "$startsh" >mtry
7744                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7745                 chmod +x mtry
7746                 ./mtry >/dev/null 2>&1
7747                 case $? in
7748                 0) eagain=`$cat try.out`;;
7749                 1) echo "Could not perform non-blocking setting!";;
7750                 2) echo "I did a successful read() for something that was not there!";;
7751                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7752                 *) echo "Something terribly wrong happened during testing.";;
7753                 esac
7754                 rd_nodata=`$cat try.ret`
7755                 echo "A read() system call with no data present returns $rd_nodata."
7756                 case "$rd_nodata" in
7757                 0|-1) ;;
7758                 *)
7759                         echo "(That's peculiar, fixing that to be -1.)"
7760                         rd_nodata=-1
7761                         ;;
7762                 esac
7763                 case "$eagain" in
7764                 '')
7765                         echo "Forcing errno EAGAIN on read() with no data available."
7766                         eagain=EAGAIN
7767                         ;;
7768                 *)
7769                         echo "Your read() sets errno to $eagain when no data is available."
7770                         ;;
7771                 esac
7772                 status=`$cat try.err`
7773                 case "$status" in
7774                 0) echo "And it correctly returns 0 to signal EOF.";;
7775                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7776                 *) echo "However, your read() returns '$status' on EOF??";;
7777                 esac
7778                 val="$define"
7779                 if test "$status" = "$rd_nodata"; then
7780                         echo "WARNING: you can't distinguish between EOF and no data!"
7781                         val="$undef"
7782                 fi
7783         else
7784                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7785                 eagain=EAGAIN
7786         fi
7787         set d_eofnblk
7788         eval $setvar
7789         ;;
7790 *)
7791         echo "Using $hint value $eagain."
7792         echo "Your read() returns $rd_nodata when no data is present."
7793         case "$d_eofnblk" in
7794         "$define") echo "And you can see EOF because read() returns 0.";;
7795         "$undef") echo "But you can't see EOF status from read() returned value.";;
7796         *)
7797                 echo "(Assuming you can't see EOF status from read anyway.)"
7798                 d_eofnblk=$undef
7799                 ;;
7800         esac
7801         ;;
7802 esac
7803 $rm -f try try.* .out core head.c mtry
7804
7805 : see if fchmod exists
7806 set fchmod d_fchmod
7807 eval $inlibc
7808
7809 : see if fchown exists
7810 set fchown d_fchown
7811 eval $inlibc
7812
7813 : see if this is an fcntl system
7814 set fcntl d_fcntl
7815 eval $inlibc
7816
7817 : see if sys/select.h has to be included
7818 set sys/select.h i_sysselct
7819 eval $inhdr
7820
7821 : see if we should include time.h, sys/time.h, or both
7822 echo " "
7823 if test "X$timeincl" = X; then
7824         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7825         $echo $n "I'm now running the test program...$c"
7826         $cat >try.c <<'EOCP'
7827 #include <sys/types.h>
7828 #ifdef I_TIME
7829 #include <time.h>
7830 #endif
7831 #ifdef I_SYSTIME
7832 #ifdef SYSTIMEKERNEL
7833 #define KERNEL
7834 #endif
7835 #include <sys/time.h>
7836 #endif
7837 #ifdef I_SYSSELECT
7838 #include <sys/select.h>
7839 #endif
7840 int main()
7841 {
7842         struct tm foo;
7843 #ifdef S_TIMEVAL
7844         struct timeval bar;
7845 #endif
7846 #ifdef S_TIMEZONE
7847         struct timezone tzp;
7848 #endif
7849         if (foo.tm_sec == foo.tm_sec)
7850                 exit(0);
7851 #ifdef S_TIMEVAL
7852         if (bar.tv_sec == bar.tv_sec)
7853                 exit(0);
7854 #endif
7855         exit(1);
7856 }
7857 EOCP
7858         flags=''
7859         for s_timezone in '-DS_TIMEZONE' ''; do
7860         sysselect=''
7861         for s_timeval in '-DS_TIMEVAL' ''; do
7862         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7863         for i_time in '' '-DI_TIME'; do
7864         for i_systime in '-DI_SYSTIME' ''; do
7865                 case "$flags" in
7866                 '') $echo $n ".$c"
7867                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7868                         if eval $compile; then
7869                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7870                                 shift
7871                                 flags="$*"
7872                                 echo " "
7873                                 $echo $n "Succeeded with $flags$c"
7874                         fi
7875                         ;;
7876                 esac
7877         done
7878         done
7879         done
7880         done
7881         done
7882         timeincl=''
7883         echo " "
7884         case "$flags" in
7885         *SYSTIMEKERNEL*) i_systimek="$define"
7886                 timeincl=`./findhdr sys/time.h`
7887                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7888         *) i_systimek="$undef";;
7889         esac
7890         case "$flags" in
7891         *I_TIME*) i_time="$define"
7892                 timeincl=`./findhdr time.h`" $timeincl"
7893                 echo "We'll include <time.h>." >&4;;
7894         *) i_time="$undef";;
7895         esac
7896         case "$flags" in
7897         *I_SYSTIME*) i_systime="$define"
7898                 timeincl=`./findhdr sys/time.h`" $timeincl"
7899                 echo "We'll include <sys/time.h>." >&4;;
7900         *) i_systime="$undef";;
7901         esac
7902         $rm -f try.c try
7903 fi
7904
7905 : check for fd_set items
7906 $cat <<EOM
7907
7908 Checking to see how well your C compiler handles fd_set and friends ...
7909 EOM
7910 $cat >fd_set.c <<EOCP
7911 #$i_systime I_SYS_TIME
7912 #$i_sysselct I_SYS_SELECT
7913 #$d_socket HAS_SOCKET
7914 #include <sys/types.h>
7915 #ifdef HAS_SOCKET
7916 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7917 #endif
7918 #ifdef I_SYS_TIME
7919 #include <sys/time.h>
7920 #endif
7921 #ifdef I_SYS_SELECT
7922 #include <sys/select.h>
7923 #endif
7924 int main() {
7925         fd_set fds;
7926
7927 #ifdef TRYBITS
7928         if(fds.fds_bits);
7929 #endif
7930
7931 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7932         exit(0);
7933 #else
7934         exit(1);
7935 #endif
7936 }
7937 EOCP
7938 set fd_set -DTRYBITS
7939 if eval $compile; then
7940         d_fds_bits="$define"
7941         d_fd_set="$define"
7942         echo "Well, your system knows about the normal fd_set typedef..." >&4
7943         if ./fd_set; then
7944                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7945                 d_fd_macros="$define"
7946         else
7947                 $cat >&4 <<'EOM'
7948 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7949 EOM
7950                 d_fd_macros="$undef"
7951         fi
7952 else
7953         $cat <<'EOM'
7954 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7955 EOM
7956         set fd_set
7957         if eval $compile; then
7958                 d_fds_bits="$undef"
7959                 d_fd_set="$define"
7960                 echo "Well, your system has some sort of fd_set available..." >&4
7961                 if ./fd_set; then
7962                         echo "and you have the normal fd_set macros." >&4
7963                         d_fd_macros="$define"
7964                 else
7965                         $cat <<'EOM'
7966 but not the normal fd_set macros!  Gross!  More work for me...
7967 EOM
7968                         d_fd_macros="$undef"
7969                 fi
7970         else
7971         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7972                 d_fd_set="$undef"
7973                 d_fds_bits="$undef"
7974                 d_fd_macros="$undef"
7975         fi
7976 fi
7977 $rm -f fd_set*
7978
7979 : see if fgetpos exists
7980 set fgetpos d_fgetpos
7981 eval $inlibc
7982
7983
7984 if $test X"$use64bits" = X"$define"; then
7985         : see if fgetpos64 exists
7986         set fgetpos64 d_fgetpos64
7987         eval $inlibc
7988
7989         : see if fopen64 exists
7990         set freopen64 d_fopen64
7991         eval $inlibc
7992
7993         : see if freopen64 exists
7994         set freopen64 d_freopen64
7995         eval $inlibc
7996
7997         : see if fseek64 exists
7998         set fseek64 d_fseek64
7999         eval $inlibc
8000
8001         : see if fseeko64 exists
8002         set fseeko64 d_fseeko64
8003         eval $inlibc
8004
8005         : see if fsetpos64 exists
8006         set fsetpos64 d_fsetpos64
8007         eval $inlibc
8008
8009         : see if ftell64 exists
8010         set ftell64 d_ftell64
8011         eval $inlibc
8012
8013         : see if ftello64 exists
8014         set ftello64 d_ftello64
8015         eval $inlibc
8016
8017         : see if tmpfile64 exists
8018         set tmpfile64 d_tmpfile64
8019         eval $inlibc
8020 else
8021         val="$undef"
8022         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8023         do
8024                 set $xxx
8025                 eval $setvar
8026         done
8027 fi
8028
8029 : see if flock exists
8030 set flock d_flock
8031 eval $inlibc
8032
8033 : see if fork exists
8034 set fork d_fork
8035 eval $inlibc
8036
8037 : see if pathconf exists
8038 set pathconf d_pathconf
8039 eval $inlibc
8040
8041 : see if fpathconf exists
8042 set fpathconf d_fpathconf
8043 eval $inlibc
8044
8045 : see if fseeko exists
8046 set fseeko d_fseeko
8047 eval $inlibc
8048
8049 : see if fsetpos exists
8050 set fsetpos d_fsetpos
8051 eval $inlibc
8052
8053 : see if this is a sys/param system
8054 set sys/param.h i_sysparam
8055 eval $inhdr
8056
8057 : see if this is a sys/mount.h system
8058 set sys/mount.h i_sysmount
8059 eval $inhdr
8060
8061
8062 : see if statfs exists
8063 set statfs d_statfs
8064 eval $inlibc
8065
8066 : see if fstatfs exists
8067 set fstatfs d_fstatfs
8068 eval $inlibc
8069
8070 : see if statfs knows about mount flags
8071 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8072 eval $hasfield
8073
8074
8075 : see if statvfs exists
8076 set statvfs d_statvfs
8077 eval $inlibc
8078
8079 : see if fstatvfs exists
8080 set fstatvfs d_fstatvfs
8081 eval $inlibc
8082
8083
8084 : see if ftello exists
8085 set ftello d_ftello
8086 eval $inlibc
8087
8088 : see if getgrent exists
8089 set getgrent d_getgrent
8090 eval $inlibc
8091
8092 : see if gethostbyaddr exists
8093 set gethostbyaddr d_gethbyaddr
8094 eval $inlibc
8095
8096 : see if gethostbyname exists
8097 set gethostbyname d_gethbyname
8098 eval $inlibc
8099
8100 : see if gethostent exists
8101 set gethostent d_gethent
8102 eval $inlibc
8103
8104 : see how we will look up host name
8105 echo " "
8106 call=''
8107 if set gethostname val -f d_gethname; eval $csym; $val; then
8108         echo 'gethostname() found.' >&4
8109         d_gethname="$define"
8110         call=gethostname
8111 fi
8112 if set uname val -f d_uname; eval $csym; $val; then
8113         if ./xenix; then
8114                 $cat <<'EOM'
8115 uname() was found, but you're running xenix, and older versions of xenix
8116 have a broken uname(). If you don't really know whether your xenix is old
8117 enough to have a broken system call, use the default answer.
8118
8119 EOM
8120                 dflt=y
8121                 case "$d_uname" in
8122                 "$define") dflt=n;;
8123                 esac
8124                 rp='Is your uname() broken?'
8125                 . ./myread
8126                 case "$ans" in
8127                 n*) d_uname="$define"; call=uname;;
8128                 esac
8129         else
8130                 echo 'uname() found.' >&4
8131                 d_uname="$define"
8132                 case "$call" in
8133                 '') call=uname ;;
8134                 esac
8135         fi
8136 fi
8137 case "$d_gethname" in
8138 '') d_gethname="$undef";;
8139 esac
8140 case "$d_uname" in
8141 '') d_uname="$undef";;
8142 esac
8143 case "$d_uname$d_gethname" in
8144 *define*)
8145         dflt=n
8146         cat <<EOM
8147  
8148 Every now and then someone has a $call() that lies about the hostname
8149 but can't be fixed for political or economic reasons.  If you wish, I can
8150 pretend $call() isn't there and maybe compute hostname at run-time
8151 thanks to the '$phostname' command.
8152
8153 EOM
8154         rp="Shall I ignore $call() from now on?"
8155         . ./myread
8156         case "$ans" in
8157         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8158         esac;;
8159 esac
8160 case "$phostname" in
8161 '') aphostname='';;
8162 *) case "$aphostname" in
8163         /*) ;;
8164         *) set X $phostname
8165                 shift
8166                 file=$1
8167                 shift
8168                 file=`./loc $file $file $pth`
8169                 aphostname=`echo $file $*`
8170                 ;;
8171         esac
8172         ;;
8173 esac
8174 case "$d_uname$d_gethname" in
8175 *define*) ;;
8176 *)
8177         case "$phostname" in
8178         '')
8179                 echo "There will be no way for $package to get your hostname." >&4;;
8180         *)
8181         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8182                 ;;
8183         esac;;
8184 esac
8185 case "$d_phostname" in
8186 '') d_phostname="$undef";;
8187 esac
8188
8189 : see if this is a netdb.h system
8190 set netdb.h i_netdb
8191 eval $inhdr
8192
8193 : see if prototypes for various gethostxxx netdb.h functions are available
8194 echo " "
8195 set d_gethostprotos gethostent $i_netdb netdb.h
8196 eval $hasproto
8197
8198 : see if getlogin exists
8199 set getlogin d_getlogin
8200 eval $inlibc
8201
8202 : see if getmntent exists
8203 set getmntent d_getmntent
8204 eval $inlibc
8205
8206 : see if getnetbyaddr exists
8207 set getnetbyaddr d_getnbyaddr
8208 eval $inlibc
8209
8210 : see if getnetbyname exists
8211 set getnetbyname d_getnbyname
8212 eval $inlibc
8213
8214 : see if getnetent exists
8215 set getnetent d_getnent
8216 eval $inlibc
8217
8218 : see if prototypes for various getnetxxx netdb.h functions are available
8219 echo " "
8220 set d_getnetprotos getnetent $i_netdb netdb.h
8221 eval $hasproto
8222
8223
8224 : see if getprotobyname exists
8225 set getprotobyname d_getpbyname
8226 eval $inlibc
8227
8228 : see if getprotobynumber exists
8229 set getprotobynumber d_getpbynumber
8230 eval $inlibc
8231
8232 : see if getprotoent exists
8233 set getprotoent d_getpent
8234 eval $inlibc
8235
8236 : see if getpgid exists
8237 set getpgid d_getpgid
8238 eval $inlibc
8239
8240 : see if getpgrp2 exists
8241 set getpgrp2 d_getpgrp2
8242 eval $inlibc
8243
8244 : see if getppid exists
8245 set getppid d_getppid
8246 eval $inlibc
8247
8248 : see if getpriority exists
8249 set getpriority d_getprior
8250 eval $inlibc
8251
8252 : see if prototypes for various getprotoxxx netdb.h functions are available
8253 echo " "
8254 set d_getprotoprotos getprotoent $i_netdb netdb.h
8255 eval $hasproto
8256
8257 : see if getpwent exists
8258 set getpwent d_getpwent
8259 eval $inlibc
8260
8261
8262 : see if getservbyname exists
8263 set getservbyname d_getsbyname
8264 eval $inlibc
8265
8266 : see if getservbyport exists
8267 set getservbyport d_getsbyport
8268 eval $inlibc
8269
8270 : see if getservent exists
8271 set getservent d_getsent
8272 eval $inlibc
8273
8274 : see if prototypes for various getservxxx netdb.h functions are available
8275 echo " "
8276 set d_getservprotos getservent $i_netdb netdb.h
8277 eval $hasproto
8278
8279 : see if getspent exists
8280 set getspent d_getspent
8281 eval $inlibc
8282
8283 : see if getspnam exists
8284 set getspnam d_getspnam
8285 eval $inlibc
8286
8287 : see if gettimeofday or ftime exists
8288 set gettimeofday d_gettimeod
8289 eval $inlibc
8290 case "$d_gettimeod" in
8291 "$undef")
8292         set ftime d_ftime 
8293         eval $inlibc
8294         ;;
8295 *)
8296         val="$undef"; set d_ftime; eval $setvar
8297         ;;
8298 esac
8299 case "$d_gettimeod$d_ftime" in
8300 "$undef$undef")
8301         echo " "
8302         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8303         ;;
8304 esac
8305
8306 : see if this is an grp system
8307 set grp.h i_grp
8308 eval $inhdr
8309
8310 case "$i_grp" in
8311 $define)
8312         xxx=`./findhdr grp.h`
8313         $cppstdin $cppflags $cppminus < $xxx >$$.h
8314
8315         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8316                 val="$define"
8317         else
8318                 val="$undef"
8319         fi
8320         set d_grpasswd
8321         eval $setvar
8322
8323         $rm -f $$.h
8324         ;;
8325 *)
8326         val="$undef";
8327         set d_grpasswd; eval $setvar
8328         ;;
8329 esac
8330
8331 : see if hasmntopt exists
8332 set hasmntopt d_hasmntopt
8333 eval $inlibc
8334
8335 : see if this is a netinet/in.h or sys/in.h system
8336 set netinet/in.h i_niin sys/in.h i_sysin
8337 eval $inhdr
8338
8339 : see if arpa/inet.h has to be included
8340 set arpa/inet.h i_arpainet
8341 eval $inhdr
8342
8343 : see if htonl --and friends-- exists
8344 val=''
8345 set htonl val
8346 eval $inlibc
8347
8348 : Maybe they are macros.
8349 case "$val" in
8350 $undef)
8351         $cat >htonl.c <<EOM
8352 #include <stdio.h>
8353 #include <sys/types.h>
8354 #$i_niin I_NETINET_IN
8355 #$i_sysin I_SYS_IN
8356 #$i_arpainet I_ARPA_INET
8357 #ifdef I_NETINET_IN
8358 #include <netinet/in.h>
8359 #endif
8360 #ifdef I_SYS_IN
8361 #include <sys/in.h>
8362 #endif
8363 #ifdef I_ARPA_INET
8364 #include <arpa/inet.h>
8365 #endif
8366 #ifdef htonl
8367 printf("Defined as a macro.");
8368 #endif
8369 EOM
8370         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8371         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8372                 val="$define"
8373                 echo "But it seems to be defined as a macro." >&4
8374         fi
8375         $rm -f htonl.?
8376         ;;
8377 esac
8378 set d_htonl
8379 eval $setvar
8380
8381 : see which of string.h or strings.h is needed
8382 echo " "
8383 strings=`./findhdr string.h`
8384 if $test "$strings" && $test -r "$strings"; then
8385         echo "Using <string.h> instead of <strings.h>." >&4
8386         val="$define"
8387 else
8388         val="$undef"
8389         strings=`./findhdr strings.h`
8390         if $test "$strings" && $test -r "$strings"; then
8391                 echo "Using <strings.h> instead of <string.h>." >&4
8392         else
8393                 echo "No string header found -- You'll surely have problems." >&4
8394         fi
8395 fi
8396 set i_string
8397 eval $setvar
8398 case "$i_string" in
8399 "$undef") strings=`./findhdr strings.h`;;
8400 *)        strings=`./findhdr string.h`;;
8401 esac
8402
8403 : index or strchr
8404 echo " "
8405 if set index val -f; eval $csym; $val; then
8406         if set strchr val -f d_strchr; eval $csym; $val; then
8407                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8408                         val="$define"
8409                         vali="$undef"
8410                         echo "strchr() found." >&4
8411                 else
8412                         val="$undef"
8413                         vali="$define"
8414                         echo "index() found." >&4
8415                 fi
8416         else
8417                 val="$undef"
8418                 vali="$define"
8419                 echo "index() found." >&4
8420         fi
8421 else
8422         if set strchr val -f d_strchr; eval $csym; $val; then
8423                 val="$define"
8424                 vali="$undef"
8425                 echo "strchr() found." >&4
8426         else
8427                 echo "No index() or strchr() found!" >&4
8428                 val="$undef"
8429                 vali="$undef"
8430         fi
8431 fi
8432 set d_strchr; eval $setvar
8433 val="$vali"
8434 set d_index; eval $setvar
8435
8436 : check whether inet_aton exists
8437 set inet_aton d_inetaton
8438 eval $inlibc
8439
8440 : see if inttypes.h is available
8441 : we want a real compile instead of Inhdr because some systems
8442 : have an inttypes.h which includes non-existent headers
8443 echo " "
8444 $cat >try.c <<EOCP
8445 #include <inttypes.h>
8446 int main() {
8447         static int32_t foo32 = 0x12345678;
8448 }
8449 EOCP
8450 set try
8451 if eval $compile; then
8452         echo "<inttypes.h> found." >&4
8453         val="$define"
8454 else
8455         echo "<inttypes.h> NOT found." >&4
8456         val="$undef"
8457 fi
8458 $rm -f try.c try
8459 set i_inttypes
8460 eval $setvar
8461
8462 : check for int64_t
8463 case "$use64bits" in
8464 "$define" )
8465         echo " "
8466         echo $n "Checking to see if your system supports int64_t...$c" >&4
8467         $cat >try.c <<EOCP
8468 #include <sys/types.h>
8469 #$i_inttypes I_INTTYPES
8470 #ifdef I_INTTYPES
8471 #include <inttypes.h>
8472 #endif
8473 int64_t foo() { int64_t x; x = 7; return x; }
8474 EOCP
8475         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8476                 val="$define"
8477                 echo " Yup, it does." >&4
8478         else
8479                 val="$undef"
8480                 echo " Nope, it doesn't." >&4
8481         fi
8482         $rm -f try.*
8483         ;;
8484 *)      val="$undef"
8485         ;;
8486 esac
8487 set d_int64t
8488 eval $setvar
8489
8490
8491 : Look for isascii
8492 echo " "
8493 $cat >isascii.c <<'EOCP'
8494 #include <stdio.h>
8495 #include <ctype.h>
8496 int main() {
8497         int c = 'A';
8498         if (isascii(c))
8499                 exit(0);
8500         else
8501                 exit(1);
8502 }
8503 EOCP
8504 set isascii
8505 if eval $compile; then
8506         echo "isascii() found." >&4
8507         val="$define"
8508 else
8509         echo "isascii() NOT found." >&4
8510         val="$undef"
8511 fi
8512 set d_isascii
8513 eval $setvar
8514 $rm -f isascii*
8515
8516 : see if killpg exists
8517 set killpg d_killpg
8518 eval $inlibc
8519
8520 : see if lchown exists
8521 echo " "
8522 $cat > try.c <<'EOCP'
8523 /* System header to define __stub macros and hopefully few prototypes,
8524     which can conflict with char lchown(); below.  */
8525 #include <assert.h>
8526 /* Override any gcc2 internal prototype to avoid an error.  */
8527 /* We use char because int might match the return type of a gcc2
8528    builtin and then its argument prototype would still apply.  */
8529 char lchown();
8530 int main() {
8531     /*  The GNU C library defines this for functions which it implements
8532         to always fail with ENOSYS.  Some functions are actually named
8533         something starting with __ and the normal name is an alias.  */
8534 #if defined (__stub_lchown) || defined (__stub___lchown)
8535 choke me
8536 #else
8537 lchown();
8538 #endif
8539 ; return 0; }
8540 EOCP
8541 set try
8542 if eval $compile; then
8543     $echo "lchown() found." >&4
8544     val="$define"
8545 else
8546     $echo "lchown() NOT found." >&4
8547     val="$undef"
8548 fi
8549 set d_lchown
8550 eval $setvar
8551
8552 : see if link exists
8553 set link d_link
8554 eval $inlibc
8555
8556 : see if localeconv exists
8557 set localeconv d_locconv
8558 eval $inlibc
8559
8560 : see if lockf exists
8561 set lockf d_lockf
8562 eval $inlibc
8563
8564 : check for length of double
8565 echo " "
8566 case "$doublesize" in
8567 '')
8568         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8569         $cat >try.c <<'EOCP'
8570 #include <stdio.h>
8571 int main()
8572 {
8573         printf("%d\n", sizeof(double));
8574 }
8575 EOCP
8576         set try
8577         if eval $compile_ok; then
8578                 doublesize=`./try`
8579                 $echo " $doublesize bytes." >&4
8580         else
8581                 dflt='8'
8582                 echo "(I can't seem to compile the test program.  Guessing...)"
8583                 rp="What is the size of a double precision number (in bytes)?"
8584                 . ./myread
8585                 doublesize="$ans"
8586         fi
8587         ;;
8588 esac
8589 $rm -f try.c try
8590
8591 : check for long doubles
8592 echo " "
8593 echo $n "Checking to see if your system supports long doubles...$c" >&4
8594 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8595 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8596         val="$define"
8597         echo " Yup, it does." >&4
8598 else
8599         val="$undef"
8600         echo " Nope, it doesn't." >&4
8601 fi
8602 $rm try.*
8603 set d_longdbl
8604 eval $setvar
8605
8606 : check for length of long double
8607 case "${d_longdbl}${longdblsize}" in
8608 $define)
8609         echo " "
8610         $echo $n "Checking to see how big your long doubles are...$c" >&4
8611         $cat >try.c <<'EOCP'
8612 #include <stdio.h>
8613 int main()
8614 {
8615         printf("%d\n", sizeof(long double));
8616 }
8617 EOCP
8618         set try
8619         if eval $compile; then
8620                 longdblsize=`./try`
8621                 $echo " $longdblsize bytes." >&4
8622         else
8623                 dflt='8'
8624                 echo " "
8625                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8626                 rp="What is the size of a long double (in bytes)?"
8627                 . ./myread
8628                 longdblsize="$ans"
8629         fi
8630         if $test "X$doublesize" = "X$longdblsize"; then
8631                 echo "(That isn't any different from an ordinary double.)"
8632         fi      
8633         ;;
8634 esac
8635 $rm -f try.c try
8636
8637 : check for long long
8638 echo " "
8639 echo $n "Checking to see if your system supports long long...$c" >&4
8640 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8641 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8642         val="$define"
8643         echo " Yup, it does." >&4
8644 else
8645         val="$undef"
8646         echo " Nope, it doesn't." >&4
8647 fi
8648 $rm try.*
8649 set d_longlong
8650 eval $setvar
8651
8652 : check for length of long long
8653 case "${d_longlong}${longlongsize}" in
8654 $define)
8655         echo " "
8656         $echo $n "Checking to see how big your long longs are...$c" >&4
8657         $cat >try.c <<'EOCP'
8658 #include <stdio.h>
8659 int main()
8660 {
8661         printf("%d\n", sizeof(long long));
8662 }
8663 EOCP
8664         set try
8665         if eval $compile_ok; then
8666                 longlongsize=`./try`
8667                 $echo " $longlongsize bytes." >&4
8668         else
8669                 dflt='8'
8670                 echo " "
8671                 echo "(I can't seem to compile the test program.  Guessing...)"
8672                 rp="What is the size of a long long (in bytes)?"
8673                 . ./myread
8674                 longlongsize="$ans"
8675         fi
8676         if $test "X$longsize" = "X$longlongsize"; then
8677                 echo "(That isn't any different from an ordinary long.)"
8678         fi      
8679         ;;
8680 esac
8681 $rm -f try.c try
8682
8683 : see if lstat exists
8684 set lstat d_lstat
8685 eval $inlibc
8686
8687 : see if madvise exists
8688 set madvise d_madvise
8689 eval $inlibc
8690
8691 : see if mblen exists
8692 set mblen d_mblen
8693 eval $inlibc
8694
8695 : see if mbstowcs exists
8696 set mbstowcs d_mbstowcs
8697 eval $inlibc
8698
8699 : see if mbtowc exists
8700 set mbtowc d_mbtowc
8701 eval $inlibc
8702
8703 : see if memchr exists
8704 set memchr d_memchr
8705 eval $inlibc
8706
8707 : see if memcmp exists
8708 set memcmp d_memcmp
8709 eval $inlibc
8710
8711 : see if memcpy exists
8712 set memcpy d_memcpy
8713 eval $inlibc
8714
8715 : see if memmove exists
8716 set memmove d_memmove
8717 eval $inlibc
8718
8719 : see if memset exists
8720 set memset d_memset
8721 eval $inlibc
8722
8723 : see if mkdir exists
8724 set mkdir d_mkdir
8725 eval $inlibc
8726
8727 : see if mkfifo exists
8728 set mkfifo d_mkfifo
8729 eval $inlibc
8730
8731 : see if mktime exists
8732 set mktime d_mktime
8733 eval $inlibc
8734
8735 : see if this is a sys/mman.h system
8736 set sys/mman.h i_sysmman
8737 eval $inhdr
8738
8739 : see if mmap exists
8740 set mmap d_mmap
8741 eval $inlibc
8742 : see what shmat returns
8743 : default to something harmless
8744 mmaptype='void *'
8745 case "$i_sysmman$d_mmap" in
8746 "$define$define")
8747         $cat >mmap.c <<'END'
8748 #include <sys/mman.h>
8749 void *mmap();
8750 END
8751         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8752                 mmaptype='void *'
8753         else
8754                 mmaptype='caddr_t'
8755         fi
8756         echo "and it returns ($mmaptype)." >&4
8757         ;;
8758 esac
8759
8760
8761
8762 : see if mprotect exists
8763 set mprotect d_mprotect
8764 eval $inlibc
8765
8766 : see if msgctl exists
8767 set msgctl d_msgctl
8768 eval $inlibc
8769
8770 : see if msgget exists
8771 set msgget d_msgget
8772 eval $inlibc
8773
8774 : see if msgsnd exists
8775 set msgsnd d_msgsnd
8776 eval $inlibc
8777
8778 : see if msgrcv exists
8779 set msgrcv d_msgrcv
8780 eval $inlibc
8781
8782 : see how much of the 'msg*(2)' library is present.
8783 h_msg=true
8784 echo " "
8785 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8786 *"$undef"*) h_msg=false;;
8787 esac
8788 case "$osname" in
8789 freebsd)
8790     case "`ipcs 2>&1`" in
8791     "SVID messages"*"not configured"*)
8792         echo "Your $osname does not have the msg*(2) configured." >&4
8793         h_msg=false
8794         val="$undef"
8795         set msgctl d_msgctl
8796         eval $setvar
8797         set msgget d_msgget
8798         eval $setvar
8799         set msgsnd d_msgsnd
8800         eval $setvar
8801         set msgrcv d_msgrcv
8802         eval $setvar
8803         ;;
8804     esac
8805     ;;
8806 esac
8807 : we could also check for sys/ipc.h ...
8808 if $h_msg && $test `./findhdr sys/msg.h`; then
8809         echo "You have the full msg*(2) library." >&4
8810         val="$define"
8811 else
8812         echo "You don't have the full msg*(2) library." >&4
8813         val="$undef"
8814 fi
8815 set d_msg
8816 eval $setvar
8817
8818 : see if msync exists
8819 set msync d_msync
8820 eval $inlibc
8821
8822 : see if munmap exists
8823 set munmap d_munmap
8824 eval $inlibc
8825
8826 : see if nice exists
8827 set nice d_nice
8828 eval $inlibc
8829
8830 : see if POSIX threads are available
8831 if test "X$usethreads" = "X$define"; then
8832         set pthread.h i_pthread
8833         eval $inhdr
8834 else
8835         i_pthread="$undef"
8836 fi
8837
8838
8839
8840 : how to create joinable pthreads
8841 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8842         echo " "
8843         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8844         $cat >try.c <<'EOCP'
8845 #include <pthread.h>
8846 int main() {
8847     int detachstate = JOINABLE;
8848 }
8849 EOCP
8850         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8851         if eval $compile; then
8852                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8853                 val="$undef" # Yes, undef.
8854                 set d_old_pthread_create_joinable
8855                 eval $setvar
8856                 val=""
8857                 set old_pthread_create_joinable
8858                 eval $setvar
8859         else
8860                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8861                 if eval $compile; then
8862                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8863                         val="$define"
8864                         set d_old_pthread_create_joinable
8865                         eval $setvar
8866                         val=PTHREAD_CREATE_UNDETACHED
8867                         set old_pthread_create_joinable
8868                         eval $setvar
8869                 else            
8870                         set try -DJOINABLE=__UNDETACHED
8871                         if eval $compile; then
8872                                 echo "You seem to use __UNDETACHED." >&4
8873                                 val="$define"
8874                                 set d_old_pthread_create_joinable
8875                                 eval $setvar
8876                                 val=__UNDETACHED
8877                                 set old_pthread_create_joinable
8878                                 eval $setvar
8879                         else
8880                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8881                                 val="$define"
8882                                 set d_old_pthread_create_joinable
8883                                 eval $setvar
8884                                 val=0
8885                                 set old_pthread_create_joinable
8886                                 eval $setvar
8887                         fi
8888                 fi
8889         fi
8890         $rm -f try try.*
8891 else
8892     d_old_pthread_create_joinable="$undef"
8893     old_pthread_create_joinable=""
8894 fi
8895
8896 : see if pause exists
8897 set pause d_pause
8898 eval $inlibc
8899
8900 : see if pipe exists
8901 set pipe d_pipe
8902 eval $inlibc
8903
8904 : see if poll exists
8905 set poll d_poll
8906 eval $inlibc
8907
8908
8909 : see whether the various POSIXish _yields exist
8910 $cat >try.c <<EOP
8911 #include <pthread.h>
8912 #include <stdio.h>
8913 int main() {
8914 #ifdef SCHED_YIELD
8915         sched_yield();
8916 #else
8917 #ifdef PTHREAD_YIELD
8918         pthread_yield();
8919 #else
8920 #ifdef PTHREAD_YIELD_NULL
8921         pthread_yield(NULL);
8922 #endif
8923 #endif
8924 #endif
8925 }
8926 EOP
8927 : see if sched_yield exists
8928 set try -DSCHED_YIELD
8929 if eval $compile; then
8930     val="$define"
8931     sched_yield='sched_yield()'
8932 else
8933     val="$undef"
8934 fi
8935 case "$usethreads" in
8936 $define)
8937         case "$val" in
8938         $define) echo 'sched_yield() found.' >&4        ;;
8939         *)       echo 'sched_yield() NOT found.' >&4    ;;
8940         esac
8941 esac
8942 set d_sched_yield
8943 eval $setvar
8944
8945 : see if pthread_yield exists
8946 set try -DPTHREAD_YIELD
8947 if eval $compile; then
8948     val="$define"
8949     case "$sched_yield" in
8950     '') sched_yield='pthread_yield()' ;;
8951     esac
8952 else
8953     set try -DPTHREAD_YIELD_NULL
8954     if eval $compile; then
8955         val="$define"
8956         case "$sched_yield" in
8957         '') sched_yield='pthread_yield(NULL)' ;;
8958         esac
8959     else
8960         val="$undef"
8961     fi
8962 fi
8963 case "$usethreads" in
8964 $define)
8965         case "$val" in
8966         $define) echo 'pthread_yield() found.' >&4      ;;
8967         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8968         esac
8969         ;;
8970 esac
8971 set d_pthread_yield
8972 eval $setvar
8973
8974 case "$sched_yield" in
8975 '') sched_yield=undef ;;
8976 esac
8977
8978 $rm -f try try.*
8979
8980 : see if this is a pwd.h system
8981 set pwd.h i_pwd
8982 eval $inhdr
8983
8984 case "$i_pwd" in
8985 $define)
8986         xxx=`./findhdr pwd.h`
8987         $cppstdin $cppflags $cppminus < $xxx >$$.h
8988
8989         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8990                 val="$define"
8991         else
8992                 val="$undef"
8993         fi
8994         set d_pwquota
8995         eval $setvar
8996
8997         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8998                 val="$define"
8999         else
9000                 val="$undef"
9001         fi
9002         set d_pwage
9003         eval $setvar
9004
9005         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9006                 val="$define"
9007         else
9008                 val="$undef"
9009         fi
9010         set d_pwchange
9011         eval $setvar
9012
9013         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9014                 val="$define"
9015         else
9016                 val="$undef"
9017         fi
9018         set d_pwclass
9019         eval $setvar
9020
9021         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9022                 val="$define"
9023         else
9024                 val="$undef"
9025         fi
9026         set d_pwexpire
9027         eval $setvar
9028
9029         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9030                 val="$define"
9031         else
9032                 val="$undef"
9033         fi
9034         set d_pwcomment
9035         eval $setvar
9036
9037         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9038                 val="$define"
9039         else
9040                 val="$undef"
9041         fi
9042         set d_pwgecos
9043         eval $setvar
9044
9045         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9046                 val="$define"
9047         else
9048                 val="$undef"
9049         fi
9050         set d_pwpasswd
9051         eval $setvar
9052
9053         $rm -f $$.h
9054         ;;
9055 *)
9056         val="$undef"; 
9057         set d_pwquota; eval $setvar
9058         set d_pwage; eval $setvar
9059         set d_pwchange; eval $setvar
9060         set d_pwclass; eval $setvar
9061         set d_pwexpire; eval $setvar
9062         set d_pwcomment; eval $setvar
9063         set d_pwgecos; eval $setvar
9064         set d_pwpasswd; eval $setvar
9065         ;;
9066 esac
9067
9068 : see if readdir and friends exist
9069 set readdir d_readdir
9070 eval $inlibc
9071 set seekdir d_seekdir
9072 eval $inlibc
9073 set telldir d_telldir
9074 eval $inlibc
9075 set rewinddir d_rewinddir
9076 eval $inlibc
9077
9078 : see if readlink exists
9079 set readlink d_readlink
9080 eval $inlibc
9081
9082 : see if readv exists
9083 set readv d_readv
9084 eval $inlibc
9085
9086 : see if rename exists
9087 set rename d_rename
9088 eval $inlibc
9089
9090 : see if rmdir exists
9091 set rmdir d_rmdir
9092 eval $inlibc
9093
9094 : see if memory.h is available.
9095 val=''
9096 set memory.h val
9097 eval $inhdr
9098
9099 : See if it conflicts with string.h
9100 case "$val" in
9101 $define)
9102         case "$strings" in
9103         '') ;;
9104         *)
9105                 $cppstdin $cppflags $cppminus < $strings > mem.h
9106                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9107                         echo " "
9108                         echo "We won't be including <memory.h>."
9109                         val="$undef"
9110                 fi
9111                 $rm -f mem.h
9112                 ;;
9113         esac
9114 esac
9115 set i_memory
9116 eval $setvar
9117
9118 : can bcopy handle overlapping blocks?
9119 val="$undef"
9120 case "$d_bcopy" in
9121 "$define")
9122         echo " "
9123         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9124         $cat >try.c <<EOCP
9125 #$i_memory I_MEMORY
9126 #$i_stdlib I_STDLIB
9127 #$i_string I_STRING
9128 #$i_unistd I_UNISTD
9129 EOCP
9130         $cat >>try.c <<'EOCP'
9131 #include <stdio.h>
9132 #ifdef I_MEMORY
9133 #  include <memory.h>
9134 #endif
9135 #ifdef I_STDLIB
9136 #  include <stdlib.h>
9137 #endif
9138 #ifdef I_STRING
9139 #  include <string.h>
9140 #else
9141 #  include <strings.h>
9142 #endif
9143 #ifdef I_UNISTD
9144 #  include <unistd.h>  /* Needed for NetBSD */
9145 #endif
9146 int main()
9147 {
9148 char buf[128], abc[128];
9149 char *b;
9150 int len;
9151 int off;
9152 int align;
9153
9154 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9155
9156 for (align = 7; align >= 0; align--) {
9157         for (len = 36; len; len--) {
9158                 b = buf+align;
9159                 bcopy(abc, b, len);
9160                 for (off = 1; off <= len; off++) {
9161                         bcopy(b, b+off, len);
9162                         bcopy(b+off, b, len);
9163                         if (bcmp(b, abc, len))
9164                                 exit(1);
9165                 }
9166         }
9167 }
9168 exit(0);
9169 }
9170 EOCP
9171         set try
9172         if eval $compile_ok; then
9173                 if ./try 2>/dev/null; then
9174                         echo "Yes, it can."
9175                         val="$define"
9176                 else
9177                         echo "It can't, sorry."
9178                         case "$d_memmove" in
9179                         "$define") echo "But that's Ok since you have memmove()." ;;
9180                         esac
9181                 fi
9182         else
9183                 echo "(I can't compile the test program, so we'll assume not...)"
9184                 case "$d_memmove" in
9185                 "$define") echo "But that's Ok since you have memmove()." ;;
9186                 esac
9187         fi
9188         ;;
9189 esac
9190 $rm -f try.* try core
9191 set d_safebcpy
9192 eval $setvar
9193
9194 : can memcpy handle overlapping blocks?
9195 val="$undef"
9196 case "$d_memcpy" in
9197 "$define")
9198         echo " "
9199         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9200         $cat >try.c <<EOCP
9201 #$i_memory I_MEMORY
9202 #$i_stdlib I_STDLIB
9203 #$i_string I_STRING
9204 #$i_unistd I_UNISTD
9205 EOCP
9206         $cat >>try.c <<'EOCP'
9207 #include <stdio.h>
9208 #ifdef I_MEMORY
9209 #  include <memory.h>
9210 #endif
9211 #ifdef I_STDLIB
9212 #  include <stdlib.h>
9213 #endif
9214 #ifdef I_STRING
9215 #  include <string.h>
9216 #else
9217 #  include <strings.h>
9218 #endif
9219 #ifdef I_UNISTD
9220 #  include <unistd.h>  /* Needed for NetBSD */
9221 #endif
9222 int main()
9223 {
9224 char buf[128], abc[128];
9225 char *b;
9226 int len;
9227 int off;
9228 int align;
9229
9230 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9231    try to store the string in read-only memory. */
9232 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9233
9234 for (align = 7; align >= 0; align--) {
9235         for (len = 36; len; len--) {
9236                 b = buf+align;
9237                 memcpy(b, abc, len);
9238                 for (off = 1; off <= len; off++) {
9239                         memcpy(b+off, b, len);
9240                         memcpy(b, b+off, len);
9241                         if (memcmp(b, abc, len))
9242                                 exit(1);
9243                 }
9244         }
9245 }
9246 exit(0);
9247 }
9248 EOCP
9249         set try
9250         if eval $compile_ok; then
9251                 if ./try 2>/dev/null; then
9252                         echo "Yes, it can."
9253                         val="$define"
9254                 else
9255                         echo "It can't, sorry."
9256                         case "$d_memmove" in
9257                         "$define") echo "But that's Ok since you have memmove()." ;;
9258                         esac
9259                 fi
9260         else
9261                 echo "(I can't compile the test program, so we'll assume not...)"
9262                 case "$d_memmove" in
9263                 "$define") echo "But that's Ok since you have memmove()." ;;
9264                 esac
9265         fi
9266         ;;
9267 esac
9268 $rm -f try.* try core
9269 set d_safemcpy
9270 eval $setvar
9271
9272 : can memcmp be trusted to compare relative magnitude?
9273 val="$undef"
9274 case "$d_memcmp" in
9275 "$define")
9276         echo " "
9277         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9278         $cat >try.c <<EOCP
9279 #$i_memory I_MEMORY
9280 #$i_stdlib I_STDLIB
9281 #$i_string I_STRING
9282 #$i_unistd I_UNISTD
9283 EOCP
9284         $cat >>try.c <<'EOCP'
9285 #include <stdio.h>
9286 #ifdef I_MEMORY
9287 #  include <memory.h>
9288 #endif
9289 #ifdef I_STDLIB
9290 #  include <stdlib.h>
9291 #endif
9292 #ifdef I_STRING
9293 #  include <string.h>
9294 #else
9295 #  include <strings.h>
9296 #endif
9297 #ifdef I_UNISTD
9298 #  include <unistd.h>  /* Needed for NetBSD */
9299 #endif
9300 int main()
9301 {
9302 char a = -1;
9303 char b = 0;
9304 if ((a < b) && memcmp(&a, &b, 1) < 0)
9305         exit(1);
9306 exit(0);
9307 }
9308 EOCP
9309         set try
9310         if eval $compile_ok; then
9311                 if ./try 2>/dev/null; then
9312                         echo "Yes, it can."
9313                         val="$define"
9314                 else
9315                         echo "No, it can't (it uses signed chars)."
9316                 fi
9317         else
9318                 echo "(I can't compile the test program, so we'll assume not...)"
9319         fi
9320         ;;
9321 esac
9322 $rm -f try.* try core
9323 set d_sanemcmp
9324 eval $setvar
9325
9326 : see if select exists
9327 set select d_select
9328 eval $inlibc
9329
9330 : see if semctl exists
9331 set semctl d_semctl
9332 eval $inlibc
9333
9334 : see if semget exists
9335 set semget d_semget
9336 eval $inlibc
9337
9338 : see if semop exists
9339 set semop d_semop
9340 eval $inlibc
9341
9342 : see how much of the 'sem*(2)' library is present.
9343 h_sem=true
9344 echo " "
9345 case "$d_semctl$d_semget$d_semop" in
9346 *"$undef"*) h_sem=false;;
9347 esac
9348 case "$osname" in
9349 freebsd)
9350     case "`ipcs 2>&1`" in
9351     "SVID messages"*"not configured"*)
9352         echo "Your $osname does not have the sem*(2) configured." >&4
9353         h_sem=false
9354         val="$undef"
9355         set semctl d_semctl
9356         eval $setvar
9357         set semget d_semget
9358         eval $setvar
9359         set semop d_semop
9360         eval $setvar
9361         ;;
9362     esac
9363     ;;
9364 esac
9365 : we could also check for sys/ipc.h ...
9366 if $h_sem && $test `./findhdr sys/sem.h`; then
9367         echo "You have the full sem*(2) library." >&4
9368         val="$define"
9369 else
9370         echo "You don't have the full sem*(2) library." >&4
9371         val="$undef"
9372 fi
9373 set d_sem
9374 eval $setvar
9375
9376 : see whether sys/sem.h defines union semun
9377 echo " "
9378 $cat > try.c <<'END'
9379 #include <sys/types.h>
9380 #include <sys/ipc.h>
9381 #include <sys/sem.h>
9382 int main () { union semun semun; semun.buf = 0; }
9383 END
9384 set try
9385 if eval $compile; then
9386     echo "You have union semun in <sys/sem.h>." >&4
9387     val="$define"
9388 else
9389     echo "You do not have union semun in <sys/sem.h>." >&4
9390     val="$undef"
9391 fi
9392 $rm -f try try.c try.h
9393 set d_union_semun
9394 eval $setvar
9395
9396 : see how to do semctl IPC_STAT
9397 case "$d_sem" in
9398 $define)
9399     : see whether semctl IPC_STAT can use union semun
9400     echo " "
9401     $cat > try.h <<END
9402 #ifndef S_IRUSR
9403 #   ifdef S_IREAD
9404 #       define S_IRUSR S_IREAD
9405 #       define S_IWUSR S_IWRITE
9406 #       define S_IXUSR S_IEXEC
9407 #   else
9408 #       define S_IRUSR 0400
9409 #       define S_IWUSR 0200
9410 #       define S_IXUSR 0100
9411 #   endif
9412 #   define S_IRGRP (S_IRUSR>>3)
9413 #   define S_IWGRP (S_IWUSR>>3)
9414 #   define S_IXGRP (S_IXUSR>>3)
9415 #   define S_IROTH (S_IRUSR>>6)
9416 #   define S_IWOTH (S_IWUSR>>6)
9417 #   define S_IXOTH (S_IXUSR>>6)
9418 #endif
9419 #ifndef S_IRWXU
9420 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9421 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9422 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9423 #endif
9424 END
9425
9426     $cat > try.c <<END
9427 #include <sys/types.h>
9428 #include <sys/ipc.h>
9429 #include <sys/sem.h>
9430 #include <sys/stat.h>
9431 #include <stdio.h>
9432 #include <errno.h>
9433 #include "try.h"
9434 #ifndef errno
9435 extern int errno;
9436 #endif
9437 #$d_union_semun HAS_UNION_SEMUN
9438 int main() {
9439     union semun
9440 #ifndef HAS_UNION_SEMUN
9441     {
9442         int val;
9443         struct semid_ds *buf;
9444         unsigned short *array;
9445     }
9446 #endif
9447     arg;
9448     int sem, st;
9449
9450 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9451     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9452     if (sem > -1) {
9453         struct semid_ds argbuf;
9454         arg.buf = &argbuf;
9455 #       ifdef IPC_STAT
9456         st = semctl(sem, 0, IPC_STAT, arg);
9457         if (st == 0)
9458             printf("semun\n");
9459         else
9460 #       endif /* IPC_STAT */
9461             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9462 #       ifdef IPC_RMID
9463         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9464 #       endif /* IPC_RMID */
9465             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9466     } else
9467 #endif /* IPC_PRIVATE && ... */
9468         printf("semget failed: errno = %d\n", errno);
9469   return 0;
9470 }
9471 END
9472     val="$undef"
9473     set try
9474     if eval $compile; then
9475         xxx=`./try`
9476         case "$xxx" in
9477         semun) val="$define" ;;
9478         esac
9479     fi
9480     $rm -f try try.c
9481     set d_semctl_semun
9482     eval $setvar
9483     case "$d_semctl_semun" in
9484     $define)
9485         echo "You can use union semun for semctl IPC_STAT." >&4
9486         also='also'
9487         ;;
9488     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9489         also=''
9490         ;;
9491     esac
9492
9493     : see whether semctl IPC_STAT can use struct semid_ds pointer
9494     $cat > try.c <<'END'
9495 #include <sys/types.h>
9496 #include <sys/ipc.h>
9497 #include <sys/sem.h>
9498 #include <sys/stat.h>
9499 #include "try.h"
9500 #include <stdio.h>
9501 #include <errno.h>
9502 #ifndef errno
9503 extern int errno;
9504 #endif
9505 int main() {
9506     struct semid_ds arg;
9507     int sem, st;
9508
9509 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9510     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9511     if (sem > -1) {
9512 #       ifdef IPC_STAT
9513         st = semctl(sem, 0, IPC_STAT, &arg);
9514         if (st == 0)
9515             printf("semid_ds\n");
9516         else
9517 #       endif /* IPC_STAT */
9518             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9519 #       ifdef IPC_RMID
9520         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9521 #       endif /* IPC_RMID */
9522             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9523     } else
9524 #endif /* IPC_PRIVATE && ... */
9525         printf("semget failed: errno = %d\n", errno);
9526
9527     return 0;
9528 }
9529 END
9530     val="$undef"
9531     set try
9532     if eval $compile; then
9533         xxx=`./try`
9534         case "$xxx" in
9535         semid_ds) val="$define" ;;
9536         esac
9537     fi
9538     $rm -f try try.c
9539     set d_semctl_semid_ds
9540     eval $setvar
9541     case "$d_semctl_semid_ds" in
9542     $define)
9543         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9544         ;;
9545     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9546         ;;
9547     esac
9548     $rm -f try.h
9549     ;;
9550 *)  val="$undef"
9551
9552     # We do not have the full sem*(2) library, so assume we can not
9553     # use either.
9554
9555     set d_semctl_semun
9556     eval $setvar
9557
9558     set d_semctl_semid_ds
9559     eval $setvar
9560     ;;
9561 esac
9562
9563 : see if setegid exists
9564 set setegid d_setegid
9565 eval $inlibc
9566
9567 : see if seteuid exists
9568 set seteuid d_seteuid
9569 eval $inlibc
9570
9571 : see if setgrent exists
9572 set setgrent d_setgrent
9573 eval $inlibc
9574
9575 : see if sethostent exists
9576 set sethostent d_sethent
9577 eval $inlibc
9578
9579 : see if setlinebuf exists
9580 set setlinebuf d_setlinebuf
9581 eval $inlibc
9582
9583 : see if setlocale exists
9584 set setlocale d_setlocale
9585 eval $inlibc
9586
9587 : see if setnetent exists
9588 set setnetent d_setnent
9589 eval $inlibc
9590
9591 : see if setprotoent exists
9592 set setprotoent d_setpent
9593 eval $inlibc
9594
9595 : see if setpgid exists
9596 set setpgid d_setpgid
9597 eval $inlibc
9598
9599 : see if setpgrp2 exists
9600 set setpgrp2 d_setpgrp2
9601 eval $inlibc
9602
9603 : see if setpriority exists
9604 set setpriority d_setprior
9605 eval $inlibc
9606
9607 : see if setpwent exists
9608 set setpwent d_setpwent
9609 eval $inlibc
9610
9611 : see if setregid exists
9612 set setregid d_setregid
9613 eval $inlibc
9614 set setresgid d_setresgid
9615 eval $inlibc
9616
9617 : see if setreuid exists
9618 set setreuid d_setreuid
9619 eval $inlibc
9620 set setresuid d_setresuid
9621 eval $inlibc
9622
9623 : see if setrgid exists
9624 set setrgid d_setrgid
9625 eval $inlibc
9626
9627 : see if setruid exists
9628 set setruid d_setruid
9629 eval $inlibc
9630
9631 : see if setservent exists
9632 set setservent d_setsent
9633 eval $inlibc
9634
9635 : see if setsid exists
9636 set setsid d_setsid
9637 eval $inlibc
9638
9639 : see if setspent exists
9640 set setspent d_setspent
9641 eval $inlibc
9642
9643 : see if setvbuf exists
9644 set setvbuf d_setvbuf
9645 eval $inlibc
9646
9647 : see if sfio.h is available
9648 set sfio.h i_sfio
9649 eval $inhdr
9650
9651
9652 : see if sfio library is available
9653 case "$i_sfio" in
9654 $define)
9655         val=''
9656         set sfreserve val
9657         eval $inlibc
9658         ;;
9659 *)
9660         val="$undef"
9661         ;;
9662 esac
9663 : Ok, but do we want to use it.
9664 case "$val" in
9665 $define)
9666         case "$usesfio" in
9667         true|$define|[yY]*) dflt='y';;
9668         *) dflt='n';;
9669         esac
9670         echo "$package can use the sfio library, but it is experimental."
9671         rp="You seem to have sfio available, do you want to try using it?"
9672         . ./myread
9673         case "$ans" in
9674         y|Y) ;;
9675         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9676                 val="$undef"
9677                 : Remove sfio from list of libraries to use
9678                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9679                 shift
9680                 libs="$*"
9681                 echo "libs = $libs" >&4
9682                 ;;
9683         esac
9684         ;;
9685 *)      case "$usesfio" in
9686         true|$define|[yY]*)
9687                 echo "Sorry, cannot find sfio on this machine" >&4
9688                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9689                 ;;
9690         esac
9691         ;;
9692 esac
9693 set d_sfio
9694 eval $setvar
9695 case "$d_sfio" in
9696 $define) usesfio='true';;
9697 *) usesfio='false';;
9698 esac
9699
9700 : see if shmctl exists
9701 set shmctl d_shmctl
9702 eval $inlibc
9703
9704 : see if shmget exists
9705 set shmget d_shmget
9706 eval $inlibc
9707
9708 : see if shmat exists
9709 set shmat d_shmat
9710 eval $inlibc
9711 : see what shmat returns
9712 case "$d_shmat" in
9713 "$define")
9714         $cat >shmat.c <<'END'
9715 #include <sys/shm.h>
9716 void *shmat();
9717 END
9718         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9719                 shmattype='void *'
9720         else
9721                 shmattype='char *'
9722         fi
9723         echo "and it returns ($shmattype)." >&4
9724         : see if a prototype for shmat is available
9725         xxx=`./findhdr sys/shm.h`
9726         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9727         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9728                 val="$define"
9729         else
9730                 val="$undef"
9731         fi
9732         $rm -f shmat.[co]
9733         ;;
9734 *)
9735         val="$undef"
9736         ;;
9737 esac
9738 set d_shmatprototype
9739 eval $setvar
9740
9741 : see if shmdt exists
9742 set shmdt d_shmdt
9743 eval $inlibc
9744
9745 : see how much of the 'shm*(2)' library is present.
9746 h_shm=true
9747 echo " "
9748 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9749 *"$undef"*) h_shm=false;;
9750 esac
9751 case "$osname" in
9752 freebsd)
9753     case "`ipcs 2>&1`" in
9754     "SVID shared memory"*"not configured"*)
9755         echo "Your $osname does not have the shm*(2) configured." >&4
9756         h_shm=false
9757         val="$undef"
9758         set shmctl d_shmctl
9759         evat $setvar
9760         set shmget d_shmget
9761         evat $setvar
9762         set shmat d_shmat
9763         evat $setvar
9764         set shmdt d_shmdt
9765         evat $setvar
9766         ;;
9767     esac
9768     ;;
9769 esac
9770 : we could also check for sys/ipc.h ...
9771 if $h_shm && $test `./findhdr sys/shm.h`; then
9772         echo "You have the full shm*(2) library." >&4
9773         val="$define"
9774 else
9775         echo "You don't have the full shm*(2) library." >&4
9776         val="$undef"
9777 fi
9778 set d_shm
9779 eval $setvar
9780
9781 echo " "
9782 : see if we have sigaction
9783 if set sigaction val -f d_sigaction; eval $csym; $val; then
9784         echo 'sigaction() found.' >&4
9785         $cat > try.c <<'EOP'
9786 #include <stdio.h>
9787 #include <sys/types.h>
9788 #include <signal.h>
9789 int main()
9790 {
9791     struct sigaction act, oact;
9792 }
9793 EOP
9794         set try
9795         if eval $compile_ok; then
9796                 val="$define"
9797         else
9798                 echo "But you don't seem to have a useable struct sigaction." >&4
9799                 val="$undef"
9800         fi
9801 else
9802         echo 'sigaction NOT found.' >&4
9803         val="$undef"
9804 fi
9805 set d_sigaction; eval $setvar
9806 $rm -f try try$_o try.c
9807
9808 : see if sigsetjmp exists
9809 echo " "
9810 case "$d_sigsetjmp" in
9811 '')
9812         $cat >try.c <<'EOP'
9813 #include <setjmp.h>
9814 sigjmp_buf env;
9815 int set = 1;
9816 int main()
9817 {
9818         if (sigsetjmp(env,1))
9819                 exit(set);
9820         set = 0;
9821         siglongjmp(env, 1);
9822         exit(1);
9823 }
9824 EOP
9825         set try
9826         if eval $compile; then
9827                 if ./try >/dev/null 2>&1; then
9828                         echo "POSIX sigsetjmp found." >&4
9829                         val="$define"
9830                 else
9831                         $cat >&4 <<EOM
9832 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9833 I'll ignore them.
9834 EOM
9835                         val="$undef"
9836                 fi
9837         else
9838                 echo "sigsetjmp not found." >&4
9839                 val="$undef"
9840         fi
9841         ;;
9842 *) val="$d_sigsetjmp"
9843         case "$d_sigsetjmp" in
9844         $define) echo "POSIX sigsetjmp found." >&4;;
9845         $undef) echo "sigsetjmp not found." >&4;;
9846         esac
9847         ;;
9848 esac
9849 set d_sigsetjmp
9850 eval $setvar
9851 $rm -f try.c try
9852
9853 : see if stat knows about block sizes
9854 echo " "
9855 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9856 eval $hasfield
9857
9858 : see if _ptr and _cnt from stdio act std
9859 echo " "
9860 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9861         echo "(Looks like you have stdio.h from Linux.)"
9862         case "$stdio_ptr" in
9863         '') stdio_ptr='((fp)->_IO_read_ptr)'
9864                 ptr_lval=$define
9865                 ;;
9866         *)      ptr_lval=$d_stdio_ptr_lval;;
9867         esac
9868         case "$stdio_cnt" in
9869         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9870                 cnt_lval=$undef
9871                 ;;
9872         *)      cnt_lval=$d_stdio_cnt_lval;;
9873         esac
9874         case "$stdio_base" in
9875         '') stdio_base='((fp)->_IO_read_base)';;
9876         esac
9877         case "$stdio_bufsiz" in
9878         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9879         esac
9880 else
9881         case "$stdio_ptr" in
9882         '') stdio_ptr='((fp)->_ptr)'
9883                 ptr_lval=$define
9884                 ;;
9885         *)      ptr_lval=$d_stdio_ptr_lval;;
9886         esac
9887         case "$stdio_cnt" in
9888         '') stdio_cnt='((fp)->_cnt)'
9889                 cnt_lval=$define
9890                 ;;
9891         *)      cnt_lval=$d_stdio_cnt_lval;;
9892         esac
9893         case "$stdio_base" in
9894         '') stdio_base='((fp)->_base)';;
9895         esac
9896         case "$stdio_bufsiz" in
9897         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9898         esac
9899 fi
9900 : test whether _ptr and _cnt really work
9901 echo "Checking how std your stdio is..." >&4
9902 $cat >try.c <<EOP
9903 #include <stdio.h>
9904 #define FILE_ptr(fp)    $stdio_ptr
9905 #define FILE_cnt(fp)    $stdio_cnt
9906 int main() {
9907         FILE *fp = fopen("try.c", "r");
9908         char c = getc(fp);
9909         if (
9910                 18 <= FILE_cnt(fp) &&
9911                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9912         )
9913                 exit(0);
9914         exit(1);
9915 }
9916 EOP
9917 val="$undef"
9918 set try
9919 if eval $compile; then
9920         if ./try; then
9921                 echo "Your stdio acts pretty std."
9922                 val="$define"
9923         else
9924                 echo "Your stdio isn't very std."
9925         fi
9926 else
9927         echo "Your stdio doesn't appear very std."
9928 fi
9929 $rm -f try.c try
9930 set d_stdstdio
9931 eval $setvar
9932
9933 : Can _ptr be used as an lvalue?
9934 case "$d_stdstdio$ptr_lval" in
9935 $define$define) val=$define ;;
9936 *) val=$undef ;;
9937 esac
9938 set d_stdio_ptr_lval
9939 eval $setvar
9940
9941 : Can _cnt be used as an lvalue?
9942 case "$d_stdstdio$cnt_lval" in
9943 $define$define) val=$define ;;
9944 *) val=$undef ;;
9945 esac
9946 set d_stdio_cnt_lval
9947 eval $setvar
9948
9949 : see if _base is also standard
9950 val="$undef"
9951 case "$d_stdstdio" in
9952 $define)
9953         $cat >try.c <<EOP
9954 #include <stdio.h>
9955 #define FILE_base(fp)   $stdio_base
9956 #define FILE_bufsiz(fp) $stdio_bufsiz
9957 int main() {
9958         FILE *fp = fopen("try.c", "r");
9959         char c = getc(fp);
9960         if (
9961                 19 <= FILE_bufsiz(fp) &&
9962                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9963         )
9964                 exit(0);
9965         exit(1);
9966 }
9967 EOP
9968         set try
9969         if eval $compile; then
9970                 if ./try; then
9971                         echo "And its _base field acts std."
9972                         val="$define"
9973                 else
9974                         echo "But its _base field isn't std."
9975                 fi
9976         else
9977                 echo "However, it seems to be lacking the _base field."
9978         fi
9979         $rm -f try.c try
9980         ;;
9981 esac
9982 set d_stdiobase
9983 eval $setvar
9984
9985 $cat >&4 <<EOM
9986 Checking how to access stdio streams by file descriptor number...
9987 EOM
9988 case "$stdio_stream_array" in
9989 '')     $cat >try.c <<EOCP
9990 #include <stdio.h>
9991 int main() {
9992   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
9993     printf("yes\n");
9994 }
9995 EOCP
9996         for s in _iob __iob __sF
9997         do
9998                 set try -DSTDIO_STREAM_ARRAY=$s
9999                 if eval $compile; then
10000                         case "`./try$exe_ext`" in
10001                         yes)    stdio_stream_array=$s; break ;;
10002                         esac
10003                 fi
10004         done
10005         $rm -f try.* try$exe_ext
10006 esac
10007 case "$stdio_stream_array" in
10008 '')     $cat >&4 <<EOM
10009 I can't figure out how to access stdio streams by file descriptor number.
10010 EOM
10011         d_stdio_stream_array="$undef"
10012         ;;
10013 *)      $cat >&4 <<EOM
10014 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10015 EOM
10016         d_stdio_stream_array="$define"
10017         ;;
10018 esac
10019
10020 : see if strcoll exists
10021 set strcoll d_strcoll
10022 eval $inlibc
10023
10024 : check for structure copying
10025 echo " "
10026 echo "Checking to see if your C compiler can copy structs..." >&4
10027 $cat >try.c <<'EOCP'
10028 int main()
10029 {
10030         struct blurfl {
10031                 int dyick;
10032         } foo, bar;
10033
10034         foo = bar;
10035 }
10036 EOCP
10037 if $cc -c try.c >/dev/null 2>&1 ; then
10038         val="$define"
10039         echo "Yup, it can."
10040 else
10041         val="$undef"
10042         echo "Nope, it can't."
10043 fi
10044 set d_strctcpy
10045 eval $setvar
10046 $rm -f try.*
10047
10048 : see if strerror and/or sys_errlist[] exist
10049 echo " "
10050 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10051     if set strerror val -f d_strerror; eval $csym; $val; then
10052                 echo 'strerror() found.' >&4
10053                 d_strerror="$define"
10054                 d_strerrm='strerror(e)'
10055                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10056                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10057                         d_syserrlst="$define"
10058                 else
10059                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10060                         d_syserrlst="$undef"
10061                 fi
10062     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10063                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10064                 echo 'strerror() found in string header.' >&4
10065                 d_strerror="$define"
10066                 d_strerrm='strerror(e)'
10067                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10068                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10069                                 d_syserrlst="$define"
10070                 else
10071                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10072                         d_syserrlst="$undef"
10073                 fi
10074     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10075                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10076                 d_strerror="$undef"
10077                 d_syserrlst="$define"
10078                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10079     else
10080                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10081                 d_strerror="$undef"
10082                 d_syserrlst="$undef"
10083                 d_strerrm='"unknown"'
10084     fi
10085 fi
10086
10087 : see if strtod exists
10088 set strtod d_strtod
10089 eval $inlibc
10090
10091 : see if strtol exists
10092 set strtol d_strtol
10093 eval $inlibc
10094
10095 : see if strtoul exists
10096 set strtoul d_strtoul
10097 eval $inlibc
10098
10099 : see if strxfrm exists
10100 set strxfrm d_strxfrm
10101 eval $inlibc
10102
10103 : see if symlink exists
10104 set symlink d_symlink
10105 eval $inlibc
10106
10107 : see if syscall exists
10108 set syscall d_syscall
10109 eval $inlibc
10110
10111 : see if sysconf exists
10112 set sysconf d_sysconf
10113 eval $inlibc
10114
10115 : see if system exists
10116 set system d_system
10117 eval $inlibc
10118
10119 : see if tcgetpgrp exists
10120 set tcgetpgrp d_tcgetpgrp
10121 eval $inlibc
10122
10123 : see if tcsetpgrp exists
10124 set tcsetpgrp d_tcsetpgrp
10125 eval $inlibc
10126
10127 : see if sys/types.h has to be included
10128 set sys/types.h i_systypes
10129 eval $inhdr
10130
10131 : see if prototype for telldir is available
10132 echo " "
10133 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10134 eval $hasproto
10135
10136 : define an is-a-typedef? function
10137 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10138 case "$inclist" in
10139 "") inclist="sys/types.h";;
10140 esac;
10141 eval "varval=\$$var";
10142 case "$varval" in
10143 "")
10144         $rm -f temp.c;
10145         for inc in $inclist; do
10146                 echo "#include <$inc>" >>temp.c;
10147         done;
10148         echo "#ifdef $type" >> temp.c;
10149         echo "printf(\"We have $type\");" >> temp.c;
10150         echo "#endif" >> temp.c;
10151         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10152         if $contains $type temp.E >/dev/null 2>&1; then
10153                 eval "$var=\$type";
10154         else
10155                 eval "$var=\$def";
10156         fi;
10157         $rm -f temp.?;;
10158 *) eval "$var=\$varval";;
10159 esac'
10160
10161 : define an is-a-typedef? function that prompts if the type is not available.
10162 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10163 case "$inclist" in
10164 "") inclist="sys/types.h";;
10165 esac;
10166 eval "varval=\$$var";
10167 case "$varval" in
10168 "")
10169         $rm -f temp.c;
10170         for inc in $inclist; do
10171                 echo "#include <$inc>" >>temp.c;
10172         done;
10173         echo "#ifdef $type" >> temp.c;
10174         echo "printf(\"We have $type\");" >> temp.c;
10175         echo "#endif" >> temp.c;
10176         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10177         echo " " ;
10178         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10179         if $contains $type temp.E >/dev/null 2>&1; then
10180                 echo "$type found." >&4;
10181                 eval "$var=\$type";
10182         else
10183                 echo "$type NOT found." >&4;
10184                 dflt="$def";
10185                 . ./myread ;
10186                 eval "$var=\$ans";
10187         fi;
10188         $rm -f temp.?;;
10189 *) eval "$var=\$varval";;
10190 esac'
10191
10192 : see if this is a sys/times.h system
10193 set sys/times.h i_systimes
10194 eval $inhdr
10195
10196 : see if times exists
10197 echo " "
10198 if set times val -f d_times; eval $csym; $val; then
10199         echo 'times() found.' >&4
10200         d_times="$define"
10201         inc=''
10202         case "$i_systimes" in
10203         "$define") inc='sys/times.h';;
10204         esac
10205         rp="What is the type returned by times() on this system?"
10206         set clock_t clocktype long stdio.h sys/types.h $inc
10207         eval $typedef_ask
10208 else
10209         echo 'times() NOT found, hope that will do.' >&4
10210         d_times="$undef"
10211         clocktype='int'
10212 fi
10213
10214 : see if truncate exists
10215 set truncate d_truncate
10216 eval $inlibc
10217
10218 : see if tzname[] exists
10219 echo " "
10220 if set tzname val -a d_tzname; eval $csym; $val; then
10221         val="$define"
10222         echo 'tzname[] found.' >&4
10223 else
10224         val="$undef"
10225         echo 'tzname[] NOT found.' >&4
10226 fi
10227 set d_tzname
10228 eval $setvar
10229
10230 : see if umask exists
10231 set umask d_umask
10232 eval $inlibc
10233
10234 : backward compatibility for d_hvfork
10235 if test X$d_hvfork != X; then
10236         d_vfork="$d_hvfork"
10237         d_hvfork=''
10238 fi
10239 : see if there is a vfork
10240 val=''
10241 set vfork val
10242 eval $inlibc
10243
10244 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10245 : perl on Solaris 2.x, and probably elsewhere.
10246 case "$val" in
10247 $define)
10248         echo " "
10249         case "$usevfork" in
10250         false) dflt='n';;
10251         *) dflt='y';;
10252         esac
10253         cat <<'EOM'
10254  
10255 Perl can only use a vfork() that doesn't suffer from strict
10256 restrictions on calling functions or modifying global data in
10257 the child.  For example, glibc-2.1 contains such a vfork()
10258 that is unsuitable.  If your system provides a proper fork()
10259 call, chances are that you do NOT want perl to use vfork().
10260
10261 EOM
10262         rp="Do you still want to use vfork()?"
10263         . ./myread
10264         case "$ans" in
10265         y|Y) ;;
10266         *)
10267                 echo "Ok, we won't use vfork()."
10268                 val="$undef"
10269                 ;;
10270         esac
10271         ;;
10272 esac
10273 set d_vfork
10274 eval $setvar
10275 case "$d_vfork" in
10276 $define) usevfork='true';;
10277 *) usevfork='false';;
10278 esac
10279
10280 : see if this is an sysdir system
10281 set sys/dir.h i_sysdir
10282 eval $inhdr
10283
10284 : see if this is an sysndir system
10285 set sys/ndir.h i_sysndir
10286 eval $inhdr
10287
10288 : see if closedir exists
10289 set closedir d_closedir
10290 eval $inlibc
10291
10292 case "$d_closedir" in
10293 "$define")
10294         echo " "
10295         echo "Checking whether closedir() returns a status..." >&4
10296         cat > closedir.c <<EOM
10297 #$i_dirent I_DIRENT             /**/
10298 #$i_sysdir I_SYS_DIR            /**/
10299 #$i_sysndir I_SYS_NDIR          /**/
10300 #$i_systypes I_SYS_TYPES        /**/
10301
10302 #if defined(I_SYS_TYPES)
10303 #include <sys/types.h>
10304 #endif
10305 #if defined(I_DIRENT)
10306 #include <dirent.h>
10307 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10308 #include <sys/dir.h>
10309 #endif
10310 #else
10311 #ifdef I_SYS_NDIR
10312 #include <sys/ndir.h>
10313 #else
10314 #ifdef I_SYS_DIR
10315 #ifdef hp9000s500
10316 #include <ndir.h>       /* may be wrong in the future */
10317 #else
10318 #include <sys/dir.h>
10319 #endif
10320 #endif
10321 #endif
10322 #endif 
10323 int main() { return closedir(opendir(".")); }
10324 EOM
10325         set closedir
10326         if eval $compile_ok; then
10327                 if ./closedir > /dev/null 2>&1 ; then
10328                         echo "Yes, it does."
10329                         val="$undef"
10330                 else
10331                         echo "No, it doesn't."
10332                         val="$define"
10333                 fi
10334         else
10335                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10336                 val="$define"
10337         fi
10338         ;;
10339 *)
10340         val="$undef";
10341         ;;
10342 esac
10343 set d_void_closedir
10344 eval $setvar
10345 $rm -f closedir*
10346 : check for volatile keyword
10347 echo " "
10348 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10349 $cat >try.c <<'EOCP'
10350 int main()
10351 {
10352         typedef struct _goo_struct goo_struct;
10353         goo_struct * volatile goo = ((goo_struct *)0);
10354         struct _goo_struct {
10355                 long long_int;
10356                 int reg_int;
10357                 char char_var;
10358         };
10359         typedef unsigned short foo_t;
10360         char *volatile foo;
10361         volatile int bar;
10362         volatile foo_t blech;
10363         foo = foo;
10364 }
10365 EOCP
10366 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10367         val="$define"
10368         echo "Yup, it does."
10369 else
10370         val="$undef"
10371         echo "Nope, it doesn't."
10372 fi
10373 set d_volatile
10374 eval $setvar
10375 $rm -f try.*
10376
10377 : see if there is a wait4
10378 set wait4 d_wait4
10379 eval $inlibc
10380
10381 : see if waitpid exists
10382 set waitpid d_waitpid
10383 eval $inlibc
10384
10385 : see if wcstombs exists
10386 set wcstombs d_wcstombs
10387 eval $inlibc
10388
10389 : see if wctomb exists
10390 set wctomb d_wctomb
10391 eval $inlibc
10392
10393 : see if writev exists
10394 set writev d_writev
10395 eval $inlibc
10396
10397 : preserve RCS keywords in files with variable substitution, grrr
10398 Date='$Date'
10399 Id='$Id'
10400 Log='$Log'
10401 RCSfile='$RCSfile'
10402 Revision='$Revision'
10403
10404 case "$crosscompile" in
10405 ''|[nN]*) crosscompile="$undef" ;;
10406 esac
10407
10408 case "$osname" in
10409 next|rhapsody) multiarch="$define" ;;
10410 esac
10411 case "$multiarch" in
10412 ''|[nN]*) multiarch="$undef" ;;
10413 esac
10414
10415 : check for alignment requirements
10416 echo " "
10417 case "$crosscompile$multiarch" in
10418 *$define*)
10419         $cat <<EOM
10420 You seem to be either cross-compiling or doing a multiarchitecture build,
10421 skipping the memory alignment check.
10422
10423 EOM
10424         case "$alignbytes" in
10425         '') alignbytes=8 ;;
10426         esac
10427         ;;
10428 *)
10429         case "$alignbytes" in
10430         '') echo "Checking alignment constraints..." >&4
10431                 $cat >try.c <<'EOCP'
10432 struct foobar {
10433         char foo;
10434         double bar;
10435 } try_algn;
10436 int main()
10437 {
10438         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10439 }
10440 EOCP
10441                 set try
10442                 if eval $compile_ok; then
10443                         dflt=`./try`
10444                 else
10445                         dflt='8'
10446                         echo "(I can't seem to compile the test program...)"
10447                 fi
10448                 ;;
10449         *) dflt="$alignbytes"
10450                 ;;
10451         esac
10452         rp="Doubles must be aligned on a how-many-byte boundary?"
10453         . ./myread
10454         alignbytes="$ans"
10455         $rm -f try.c try
10456         ;;
10457 esac
10458
10459
10460 : check for ordering of bytes in a long
10461 echo " "
10462 case "$crosscompile$multiarch" in
10463 *$define*)
10464         $cat <<EOM
10465 You seem to be either cross-compiling or doing a multiarchitecture build,
10466 skipping the byteorder check.
10467
10468 EOM
10469         byteorder=''
10470         ;;
10471 *)
10472         case "$byteorder" in
10473         '')
10474                 $cat <<'EOM'
10475 In the following, larger digits indicate more significance.  A big-endian
10476 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10477 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10478 machines may have weird orders like 3412.  A Cray will report 87654321. If
10479 the test program works the default is probably right.
10480 I'm now running the test program...
10481 EOM
10482                 $cat >try.c <<'EOCP'
10483 #include <stdio.h>
10484 int main()
10485 {
10486         int i;
10487         union {
10488                 unsigned long l;
10489                 char c[sizeof(long)];
10490         } u;
10491
10492         if (sizeof(long) > 4)
10493                 u.l = (0x08070605L << 32) | 0x04030201L;
10494         else
10495                 u.l = 0x04030201L;
10496         for (i = 0; i < sizeof(long); i++)
10497                 printf("%c", u.c[i]+'0');
10498         printf("\n");
10499         exit(0);
10500 }
10501 EOCP
10502                 xxx_prompt=y
10503                 set try
10504                 if eval $compile && ./try > /dev/null; then
10505                         dflt=`./try`
10506                         case "$dflt" in
10507                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10508                                 echo "(The test program ran ok.)"
10509                                 echo "byteorder=$dflt"
10510                                 xxx_prompt=n
10511                         ;;
10512                         ????|????????) echo "(The test program ran ok.)" ;;
10513                         *) echo "(The test program didn't run right for some reason.)" ;;
10514                         esac
10515                 else
10516                         dflt='4321'
10517                         cat <<'EOM'
10518 (I can't seem to compile the test program.  Guessing big-endian...)
10519 EOM
10520                 fi
10521                 case "$xxx_prompt" in
10522                 y)
10523                         rp="What is the order of bytes in a long?"
10524                         . ./myread
10525                         byteorder="$ans"
10526                         ;;
10527                 *)      byteorder=$dflt
10528                         ;;
10529                 esac
10530                 ;;
10531         esac
10532         $rm -f try.c try
10533         ;;
10534 esac
10535
10536
10537 : how do we catenate cpp tokens here?
10538 echo " "
10539 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10540 $cat >cpp_stuff.c <<'EOCP'
10541 #define RCAT(a,b)a/**/b
10542 #define ACAT(a,b)a ## b
10543 RCAT(Rei,ser)
10544 ACAT(Cir,cus)
10545 EOCP
10546 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10547 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10548         echo "Oh!  Smells like ANSI's been here." >&4
10549         echo "We can catify or stringify, separately or together!"
10550         cpp_stuff=42
10551 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10552         echo "Ah, yes!  The good old days!" >&4
10553         echo "However, in the good old days we don't know how to stringify and"
10554         echo "catify at the same time."
10555         cpp_stuff=1
10556 else
10557         $cat >&4 <<EOM
10558 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10559 to have to edit the values of CAT[2-5] in config.h...
10560 EOM
10561         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10562 fi
10563 $rm -f cpp_stuff.*
10564
10565 : see if this is a db.h system
10566 set db.h i_db
10567 eval $inhdr
10568
10569 case "$i_db" in
10570 $define)
10571         : Check db version.
10572         echo " "
10573         echo "Checking Berkeley DB version ..." >&4
10574         $cat >try.c <<EOCP
10575 #$d_const HASCONST
10576 #ifndef HASCONST
10577 #define const
10578 #endif
10579 #include <sys/types.h>
10580 #include <stdio.h>
10581 #include <db.h>
10582 int main()
10583 {
10584 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10585     int Major, Minor, Patch ;
10586     unsigned long Version ;
10587     (void)db_version(&Major, &Minor, &Patch) ;
10588     printf("You have Berkeley DB Version 2 or greater\n");
10589
10590     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10591                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10592     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10593                 Major, Minor, Patch) ;
10594
10595     /* check that db.h & libdb are compatible */
10596     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10597         printf("db.h and libdb are incompatible\n") ;
10598         exit(3);        
10599     }
10600
10601     printf("db.h and libdb are compatible\n") ;
10602
10603     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10604                 + DB_VERSION_PATCH ;
10605
10606     /* needs to be >= 2.3.4 */
10607     if (Version < 2003004) {
10608     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10609         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10610         exit(2);        
10611     }
10612
10613     exit(0);
10614 #else
10615 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10616     printf("You have Berkeley DB Version 1\n");
10617     exit(0);    /* DB version < 2: the coast is clear. */
10618 #else
10619     exit(1);    /* <db.h> not Berkeley DB? */
10620 #endif
10621 #endif
10622 }
10623 EOCP
10624         set try
10625         if eval $compile && ./try; then
10626                 echo 'Looks OK.' >&4
10627         else
10628                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10629                 i_db=$undef
10630                 case " $libs " in
10631                 *"-ldb "*)
10632                         : Remove db from list of libraries to use
10633                         echo "Removing unusable -ldb from library list" >&4
10634                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10635                         shift
10636                         libs="$*"
10637                         echo "libs = $libs" >&4
10638                         ;;
10639                 esac
10640         fi
10641         $rm -f try.*
10642         ;;
10643 esac
10644
10645 case "$i_db" in
10646 define)
10647         : Check the return type needed for hash 
10648         echo " "
10649         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10650         $cat >try.c <<EOCP
10651 #$d_const HASCONST
10652 #ifndef HASCONST
10653 #define const
10654 #endif
10655 #include <sys/types.h>
10656 #include <db.h>
10657
10658 #ifndef DB_VERSION_MAJOR
10659 u_int32_t hash_cb (ptr, size)
10660 const void *ptr;
10661 size_t size;
10662 {
10663 }
10664 HASHINFO info;
10665 int main()
10666 {
10667         info.hash = hash_cb;
10668 }
10669 #endif
10670 EOCP
10671         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10672                 if $contains warning try.out >>/dev/null 2>&1 ; then
10673                         db_hashtype='int'
10674                 else
10675                         db_hashtype='u_int32_t'
10676                 fi
10677         else
10678                 : XXX Maybe we should just give up here.
10679                 db_hashtype=u_int32_t
10680                 $cat try.out >&4
10681                 echo "Help:  I can't seem to compile the db test program." >&4
10682                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10683         fi
10684         $rm -f try.*
10685         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10686         ;;
10687 *)      db_hashtype=u_int32_t
10688         ;;
10689 esac
10690 case "$i_db" in
10691 define)
10692         : Check the return type needed for prefix 
10693         echo " "
10694         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10695         cat >try.c <<EOCP
10696 #$d_const HASCONST
10697 #ifndef HASCONST
10698 #define const
10699 #endif
10700 #include <sys/types.h>
10701 #include <db.h>
10702
10703 #ifndef DB_VERSION_MAJOR
10704 size_t prefix_cb (key1, key2)
10705 const DBT *key1;
10706 const DBT *key2;
10707 {
10708 }
10709 BTREEINFO info;
10710 int main()
10711 {
10712         info.prefix = prefix_cb;
10713 }
10714 #endif
10715 EOCP
10716         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10717                 if $contains warning try.out >>/dev/null 2>&1 ; then
10718                         db_prefixtype='int'
10719                 else
10720                         db_prefixtype='size_t'
10721                 fi
10722         else
10723                 db_prefixtype='size_t'
10724                 : XXX Maybe we should just give up here.
10725                 $cat try.out >&4
10726                 echo "Help:  I can't seem to compile the db test program." >&4
10727                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10728         fi
10729         $rm -f try.*
10730         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10731         ;;
10732 *)      db_prefixtype='size_t'
10733         ;;
10734 esac
10735
10736 : check for void type
10737 echo " "
10738 echo "Checking to see how well your C compiler groks the void type..." >&4
10739 case "$voidflags" in
10740 '')
10741         $cat >try.c <<'EOCP'
10742 #if TRY & 1
10743 void sub() {
10744 #else
10745 sub() {
10746 #endif
10747         extern void moo();      /* function returning void */
10748         void (*goo)();          /* ptr to func returning void */
10749 #if TRY & 8
10750         void *hue;              /* generic ptr */
10751 #endif
10752 #if TRY & 2
10753         void (*foo[10])();
10754 #endif
10755
10756 #if TRY & 4
10757         if(goo == moo) {
10758                 exit(0);
10759         }
10760 #endif
10761         exit(0);
10762 }
10763 int main() { sub(); }
10764 EOCP
10765         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10766                 voidflags=$defvoidused
10767         echo "Good.  It appears to support void to the level $package wants.">&4
10768                 if $contains warning .out >/dev/null 2>&1; then
10769                         echo "However, you might get some warnings that look like this:"
10770                         $cat .out
10771                 fi
10772         else
10773 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10774                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10775                         echo "It supports 1..."
10776                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10777                                 echo "It also supports 2..."
10778                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10779                                         voidflags=7
10780                                         echo "And it supports 4 but not 8 definitely."
10781                                 else
10782                                         echo "It doesn't support 4..."
10783                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10784                                                 voidflags=11
10785                                                 echo "But it supports 8."
10786                                         else
10787                                                 voidflags=3
10788                                                 echo "Neither does it support 8."
10789                                         fi
10790                                 fi
10791                         else
10792                                 echo "It does not support 2..."
10793                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10794                                         voidflags=13
10795                                         echo "But it supports 4 and 8."
10796                                 else
10797                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10798                                                 voidflags=5
10799                                                 echo "And it supports 4 but has not heard about 8."
10800                                         else
10801                                                 echo "However it supports 8 but not 4."
10802                                         fi
10803                                 fi
10804                         fi
10805                 else
10806                         echo "There is no support at all for void."
10807                         voidflags=0
10808                 fi
10809         fi
10810 esac
10811 case "$voidflags" in
10812 "$defvoidused") ;;
10813 *)      $cat >&4 <<'EOM'
10814   Support flag bits are:
10815     1: basic void declarations.
10816     2: arrays of pointers to functions returning void.
10817     4: operations between pointers to and addresses of void functions.
10818     8: generic void pointers.
10819 EOM
10820         dflt="$voidflags";
10821         rp="Your void support flags add up to what?"
10822         . ./myread
10823         voidflags="$ans"
10824         ;;
10825 esac
10826 $rm -f try.* .out
10827
10828
10829 : How can we generate normalized random numbers ?
10830 echo " "
10831 echo "Looking for a random number function..." >&4
10832 case "$randfunc" in
10833 '')
10834         if set drand48 val -f; eval $csym; $val; then
10835                 dflt="drand48"
10836                 echo "Good, found drand48()." >&4
10837         elif set random val -f; eval $csym; $val; then
10838                 dflt="random"
10839                 echo "OK, found random()." >&4
10840         else
10841                 dflt="rand"
10842                 echo "Yick, looks like I have to use rand()." >&4
10843         fi
10844         echo " "
10845         ;;
10846 *)
10847         dflt="$randfunc"
10848         ;;
10849 esac
10850 cont=true
10851
10852 case "$ccflags" in
10853 *-Dmy_rand=*|*-Dmy_srand=*)
10854         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10855         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10856         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10857         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10858         ;;
10859 esac
10860
10861 while $test "$cont"; do
10862         rp="Use which function to generate random numbers?"
10863         . ./myread
10864         if $test "$ans" = "$dflt"; then
10865                 : null
10866         else
10867                 randbits=''
10868         fi
10869         randfunc="$ans"
10870         if set $ans val -f; eval $csym; $val; then
10871                 cont=''
10872         else
10873                 dflt=y
10874                 rp="I cannot find function $ans. Use that name anyway?"
10875                 . ./myread
10876                 dflt=rand
10877                 case "$ans" in
10878                         [yY]*) cont='';;
10879                 esac
10880         fi
10881         case "$cont" in
10882         '')
10883                 case "$randfunc" in
10884                 drand48)
10885                         drand01="drand48()"
10886                         seedfunc="srand48"
10887                         randbits=48
10888                         randseedtype=long
10889                         ;;
10890                 rand|random)
10891                         case "$randbits" in
10892                         '')
10893 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10894                                 $cat >try.c <<EOCP
10895 #$i_unistd I_UNISTD
10896 #$i_stdlib I_STDLIB
10897 #include <stdio.h>
10898 #ifdef I_UNISTD
10899 #  include <unistd.h>
10900 #endif
10901 #ifdef I_STDLIB
10902 #  include <stdlib.h>
10903 #endif
10904 int main()
10905 {
10906         register int i;
10907         register unsigned long tmp;
10908         register unsigned long max = 0L;
10909
10910         for (i = 1000; i; i--) {
10911                 tmp = (unsigned long) $randfunc();
10912                 if (tmp > max) max = tmp;
10913         }
10914         for (i = 0; max; i++)
10915                 max /= 2;
10916         printf("%d\n",i);
10917 }
10918 EOCP
10919                                 set try
10920                                 if eval $compile_ok; then
10921                                         dflt=`try`
10922                                 else
10923                                         dflt='?'
10924                                         echo "(I can't seem to compile the test program...)"
10925                                 fi
10926                                 ;;
10927                         *)
10928                                 dflt="$randbits"
10929                                 ;;
10930                         esac
10931                         rp="How many bits does your $randfunc() function produce?"
10932                         . ./myread
10933                         randbits="$ans"
10934                         $rm -f try.c try
10935                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10936                         seedfunc="s$randfunc"
10937                         randseedtype=unsigned
10938                         ;;
10939                 *)
10940                         dflt="31"
10941                         rp="How many bits does your $randfunc() function produce?"
10942                         . ./myread
10943                         randbits="$ans"
10944                         seedfunc="s$randfunc"
10945                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10946                         if set $seedfunc val -f; eval $csym; $val; then
10947                                 echo "(Using $seedfunc() to seed random generator)"
10948                         else
10949                                 echo "(Warning: no $seedfunc() to seed random generator)"
10950                                 seedfunc=rand
10951                         fi
10952                         randseedtype=unsigned
10953                         ;;
10954                 esac
10955                 ;;
10956         esac
10957 done
10958
10959 echo " "
10960 echo "Determining whether or not we are on an EBCDIC system..." >&4
10961 $cat >tebcdic.c <<'EOM'
10962 int main()
10963 {
10964   if ('M'==0xd4) return 0;
10965   return 1;
10966 }
10967 EOM
10968
10969 val=$undef
10970 set tebcdic
10971 if eval $compile_ok; then
10972         if ./tebcdic; then
10973                 echo "You have EBCDIC." >&4
10974                 val="$define"
10975         else
10976                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10977         fi
10978 else
10979         echo "I'm unable to compile the test program." >&4
10980         echo "I'll assume ASCII or some ISO Latin." >&4
10981 fi
10982 $rm -f tebcdic.c tebcdic
10983 set ebcdic
10984 eval $setvar
10985
10986 $cat >&4 <<EOM
10987 Checking how to flush all pending stdio output...
10988 EOM
10989 # I only know how to find the first 32 possibly open files on SunOS.
10990 # See also hints/sunos_4_1.sh and util.c  --AD
10991 case "$osname" in
10992 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
10993 esac
10994 $cat >>try.c <<EOCP
10995 #include <stdio.h>
10996 #$i_unistd I_UNISTD
10997 #ifdef I_UNISTD
10998 # include <unistd.h>
10999 #endif
11000 #$d_sysconf HAS_SYSCONF
11001 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11002 #ifdef HAS_STDIO_STREAM_ARRAY
11003 # define STDIO_STREAM_ARRAY $stdio_stream_array
11004 #endif
11005 int main() {
11006   FILE* p = fopen("try.out", "w");
11007 #ifdef TRY_FPUTC
11008   fputc('x', p);
11009 #else
11010 # ifdef TRY_FPRINTF
11011   fprintf(p, "x");
11012 # endif
11013 #endif
11014 #ifdef TRY_FFLUSH_NULL
11015   fflush(NULL);
11016 #endif
11017 #ifdef TRY_FFLUSH_ALL
11018   {
11019     long open_max = -1;
11020 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11021     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11022 # else
11023 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11024     open_max = sysconf(_SC_OPEN_MAX);
11025 #  else
11026 #  ifdef FOPEN_MAX
11027     open_max = FOPEN_MAX;
11028 #   else
11029 #    ifdef OPEN_MAX
11030     open_max = OPEN_MAX;
11031 #    else
11032 #     ifdef _NFILE
11033     open_max = _NFILE;
11034 #     endif
11035 #    endif
11036 #   endif
11037 #  endif
11038 # ifdef HAS_STDIO_STREAM_ARRAY
11039     if (open_max > 0) {
11040       long i;
11041       for (i = 0; i < open_max; i++)
11042             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11043                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11044                 STDIO_STREAM_ARRAY[i]._flag)
11045                 fflush(&STDIO_STREAM_ARRAY[i]);
11046     }   
11047   }
11048 # endif
11049 #endif
11050   _exit(42);
11051 }
11052 EOCP
11053 : first we have to find out how _not_ to flush
11054 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11055     output=''
11056     set try -DTRY_FPUTC
11057     $rm -f try.out
11058     if eval $compile; then
11059             ./try$exe_ext 2>/dev/null
11060             if $test ! -s try.out -a "X$?" = X42; then
11061                 output=-DTRY_FPUTC
11062             fi
11063     fi
11064     case "$output" in
11065     '')
11066             set try -DTRY_FPRINTF
11067             $rm -f try.out
11068             if eval $compile; then
11069                     ./try$exe_ext 2>/dev/null
11070                     if $test ! -s try.out -a "X$?" = X42; then
11071                         output=-DTRY_FPRINTF
11072                     fi
11073             fi
11074         ;;
11075     esac
11076 fi
11077 : check for fflush NULL behaviour
11078 case "$fflushNULL" in
11079 '')     set try -DTRY_FFLUSH_NULL $output
11080         $rm -f try.out
11081         if eval $compile; then
11082                 ./try$exe_ext 2>/dev/null
11083                 code="$?"
11084                 if $test -s try.out -a "X$code" = X42; then
11085                         fflushNULL="`$cat try.out`"
11086                 else
11087                         if $test "X$code" != X42; then
11088                                 $cat >&4 <<EOM
11089 (If this test failed, don't worry, we'll try another method shortly.)
11090 EOM
11091                         fi
11092                 fi
11093         fi
11094         $rm -f core try.core core.try.*
11095         case "$fflushNULL" in
11096         x)      $cat >&4 <<EOM
11097 Your fflush(NULL) works okay.
11098 EOM
11099                 fflushNULL="$define"
11100                 ;;
11101         '')     $cat >&4 <<EOM
11102 Your fflush(NULL) isn't working (contrary to ANSI C).
11103 EOM
11104                 fflushNULL="$undef"
11105                 ;;
11106         *)      $cat >&4 <<EOM
11107 Cannot figure out whether your fflush(NULL) works or not.
11108 I'm assuming it doesn't (contrary to ANSI C).
11109 EOM
11110                 fflushNULL="$undef"
11111                 ;;
11112         esac
11113         ;;
11114 $define|true|[yY]*)
11115         fflushNULL="$define"
11116         ;;
11117 *)
11118         fflushNULL="$undef"
11119         ;;
11120 esac
11121 : check explicit looping only if NULL did not work
11122 case "$fflushNULL" in
11123 "$undef")
11124         : check for fflush all behaviour
11125         case "$fflushall" in
11126         '')     set try -DTRY_FFLUSH_ALL $output
11127                 $rm -f try.out
11128                 if eval $compile; then
11129                 $cat >&4 <<EOM
11130 (Now testing the other method--but note that also this may fail.)
11131 EOM
11132                         ./try$exe_ext 2>/dev/null
11133                         if $test -s try.out -a "X$?" = X42; then
11134                                 fflushall="`$cat try.out`"
11135                         fi
11136                 fi
11137                 $rm -f core try.core core.try.*
11138                 case "$fflushall" in
11139                 x)      $cat >&4 <<EOM
11140 Whew. Flushing explicitly all the stdio streams works.
11141 EOM
11142                         fflushall="$define"
11143                         ;;
11144                 '')     $cat >&4 <<EOM
11145 Sigh. Flushing explicitly all the stdio streams doesn't work.
11146 EOM
11147                         fflushall="$undef"
11148                         ;;
11149                 *)      $cat >&4 <<EOM
11150 Cannot figure out whether flushing stdio streams explicitly works or not.
11151 I'm assuming it doesn't.
11152 EOM
11153                         fflushall="$undef"
11154                         ;;
11155                 esac
11156                 ;;
11157         "$define"|true|[yY]*)
11158                 fflushall="$define"
11159                 ;;
11160         *)
11161                 fflushall="$undef"
11162                 ;;
11163         esac
11164         ;;
11165 *)      fflushall="$undef"      
11166         ;;
11167 esac
11168 case "$fflushNULL$fflushall" in
11169 undefundef)
11170         $cat <<EOM
11171 I cannot figure out how to flush pending stdio output.
11172 EOM
11173         ;;
11174 esac
11175 $rm -f try.* try$exe_ext
11176
11177 : see what type file positions are declared as in the library
11178 rp="What is the type for file position used by fsetpos()?"
11179 set fpos_t fpostype long stdio.h sys/types.h
11180 eval $typedef_ask
11181
11182 : Store the full pathname to the ar program for use in the C program
11183 : Respect a hint or command line value for full_ar.
11184 case "$full_ar" in
11185 '') full_ar=$ar ;;
11186 esac
11187
11188 : Store the full pathname to the sed program for use in the C program
11189 full_sed=$sed
11190
11191 : see what type gids are declared as in the kernel
11192 echo " "
11193 echo "Looking for the type for group ids returned by getgid()."
11194 set gid_t gidtype xxx stdio.h sys/types.h
11195 eval $typedef
11196 case "$gidtype" in
11197 xxx)
11198         xxx=`./findhdr sys/user.h`
11199         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11200         case $1 in
11201         unsigned) dflt="$1 $2" ;;
11202         *) dflt="$1" ;;
11203         esac
11204         ;;
11205 *) dflt="$gidtype";;
11206 esac
11207 case "$gidtype" in
11208 gid_t) echo "gid_t found." ;;
11209 *)      rp="What is the type for group ids returned by getgid()?"
11210         . ./myread
11211         gidtype="$ans"
11212         ;;
11213 esac
11214
11215 : see if getgroups exists
11216 set getgroups d_getgrps
11217 eval $inlibc
11218
11219 : see if setgroups exists
11220 set setgroups d_setgrps
11221 eval $inlibc
11222
11223
11224 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11225 echo " "
11226 case "$d_getgrps$d_setgrps" in
11227 *define*)
11228         case "$groupstype" in
11229         '') dflt="$gidtype" ;;
11230         *)  dflt="$groupstype" ;;
11231         esac
11232         $cat <<EOM
11233 What type of pointer is the second argument to getgroups() and setgroups()?
11234 Usually this is the same as group ids, $gidtype, but not always.
11235
11236 EOM
11237         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11238         . ./myread
11239         groupstype="$ans"
11240         ;;
11241 *)  groupstype="$gidtype";;
11242 esac
11243
11244 : see what type lseek is declared as in the kernel
11245 rp="What is the type used for lseek's offset on this system?"
11246 set off_t lseektype long stdio.h sys/types.h
11247 eval $typedef_ask
11248
11249 echo " "
11250 $echo $n "Checking to see how big your file offsets are...$c" >&4
11251 $cat >try.c <<EOCP
11252 #include <sys/types.h>
11253 #include <stdio.h>
11254 int main()
11255 {
11256         printf("%d\n", sizeof($lseektype));
11257 }
11258 EOCP
11259 set try
11260 if eval $compile_ok; then
11261         lseeksize=`./try`
11262         $echo " $lseeksize bytes." >&4
11263 else
11264         dflt='4'
11265         echo " "
11266         echo "(I can't seem to compile the test program.  Guessing...)"
11267         rp="What is the size of your file offsets (in bytes)?"
11268         . ./myread
11269         lseeksize="$ans"
11270 fi
11271 $rm -f try.c try
11272
11273 echo " "
11274 echo "Checking if your $make program sets \$(MAKE)..." >&4
11275 case "$make_set_make" in
11276 '')
11277         $sed 's/^X //' > testmake.mak << 'EOF'
11278 Xall:
11279 X       @echo 'maketemp="$(MAKE)"'
11280 EOF
11281         case "`$make -f testmake.mak 2>/dev/null`" in
11282         *maketemp=*) make_set_make='#' ;;
11283         *)      make_set_make="MAKE=$make" ;;
11284         esac
11285         $rm -f testmake.mak
11286         ;;
11287 esac
11288 case "$make_set_make" in
11289 '#') echo "Yup, it does.";;
11290 *) echo "Nope, it doesn't.";;
11291 esac
11292
11293 : see what type is used for mode_t
11294 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11295 set mode_t modetype int stdio.h sys/types.h
11296 eval $typedef_ask
11297
11298 : define a fucntion to check prototypes
11299 $cat > protochk <<EOSH
11300 $startsh
11301 cc="$cc"
11302 optimize="$optimize"
11303 ccflags="$ccflags"
11304 prototype="$prototype"
11305 define="$define"
11306 rm=$rm
11307 EOSH
11308
11309 $cat >> protochk <<'EOSH'
11310
11311 $rm -f try.c
11312 foo="$1"
11313 shift
11314 while test $# -ge 2; do
11315         case "$1" in
11316                 $define) echo "#include <$2>" >> try.c ;;
11317                 literal) echo "$2" >> try.c ;;
11318         esac
11319     shift 2
11320 done
11321 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11322 cat >> try.c <<'EOCP'
11323 #ifdef CAN_PROTOTYPE
11324 #define _(args) args
11325 #else
11326 #define _(args) ()
11327 #endif
11328 EOCP
11329 echo "$foo" >> try.c
11330 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11331 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11332 status=$?
11333 $rm -f try.[co]
11334 exit $status
11335 EOSH
11336 chmod +x protochk
11337 $eunicefix protochk
11338
11339 : see what type is used for size_t
11340 rp="What is the type used for the length parameter for string functions?"
11341 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11342 eval $typedef_ask
11343
11344 : check for type of arguments to gethostbyaddr. 
11345 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11346         case "$d_gethbyaddr" in
11347         $define)
11348                 $cat <<EOM
11349
11350 Checking to see what type of arguments are accepted by gethostbyaddr().
11351 EOM
11352                 hdrs="$define sys/types.h
11353                         $d_socket sys/socket.h 
11354                         $i_niin netinet/in.h 
11355                         $i_netdb netdb.h
11356                         $i_unistd unistd.h"
11357                 : The first arg can 'char *' or 'void *'
11358                 : The second arg is some of integral type
11359                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11360                         for yyy in size_t long int; do
11361                                 case "$netdb_host_type" in
11362                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11363                                         if ./protochk "$try" $hdrs; then
11364                                                 echo "Your system accepts $xxx for the first arg."
11365                                                 echo "...and $yyy for the second arg."
11366                                                 netdb_host_type="$xxx"
11367                                                 netdb_hlen_type="$yyy"
11368                                         fi
11369                                         ;;
11370                                 esac
11371                         done
11372                 done
11373                 : In case none of those worked, prompt the user.
11374                 case "$netdb_host_type" in
11375                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11376                         dflt='char *'
11377                         . ./myread
11378                         netdb_host_type=$ans
11379                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11380                         dflt="$sizetype"
11381                         . ./myread
11382                         netdb_hlen_type=$ans
11383                         ;;
11384                 esac
11385                 ;;
11386         *)      : no gethostbyaddr, so pick harmless defaults
11387                 netdb_host_type='char *'
11388                 netdb_hlen_type="$sizetype"
11389                 ;;
11390         esac
11391         # Remove the "const" if needed. -- but then we'll have a 
11392         # prototype clash!
11393         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11394 fi
11395
11396 : check for type of argument to gethostbyname. 
11397 if test "X$netdb_name_type" = X ; then
11398         case "$d_gethbyname" in
11399         $define)
11400                 $cat <<EOM
11401
11402 Checking to see what type of argument is accepted by gethostbyname().
11403 EOM
11404                 hdrs="$define sys/types.h
11405                         $d_socket sys/socket.h 
11406                         $i_niin netinet/in.h 
11407                         $i_netdb netdb.h
11408                         $i_unistd unistd.h"
11409                 for xxx in "const char *" "char *"; do
11410                         case "$netdb_name_type" in
11411                         '')     try="extern struct hostent *gethostbyname($xxx);"
11412                                 if ./protochk "$try" $hdrs; then
11413                                         echo "Your system accepts $xxx."
11414                                         netdb_name_type="$xxx"
11415                                 fi
11416                                 ;;
11417                         esac
11418                 done
11419                 : In case none of those worked, prompt the user.
11420                 case "$netdb_name_type" in
11421                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11422                         dflt='char *'
11423                         . ./myread
11424                         netdb_name_type=$ans
11425                         ;;
11426                 esac
11427                 ;;
11428         *)      : no gethostbyname, so pick harmless default
11429                 netdb_name_type='char *'
11430                 ;;
11431         esac
11432 fi
11433
11434 : check for type of 1st argument to getnetbyaddr. 
11435 if test "X$netdb_net_type" = X ; then
11436         case "$d_getnbyaddr" in
11437         $define)
11438                 $cat <<EOM
11439
11440 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11441 EOM
11442                 hdrs="$define sys/types.h
11443                         $d_socket sys/socket.h 
11444                         $i_niin netinet/in.h 
11445                         $i_netdb netdb.h
11446                         $i_unistd unistd.h"
11447                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11448                         case "$netdb_net_type" in
11449                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11450                                 if ./protochk "$try" $hdrs; then
11451                                         echo "Your system accepts $xxx."
11452                                         netdb_net_type="$xxx"
11453                                 fi
11454                                 ;;
11455                         esac
11456                 done
11457                 : In case none of those worked, prompt the user.
11458                 case "$netdb_net_type" in
11459                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11460                         dflt='long'
11461                         . ./myread
11462                         netdb_net_type=$ans
11463                         ;;
11464                 esac
11465                 ;;
11466         *)      : no getnetbyaddr, so pick harmless default
11467                 netdb_net_type='long'
11468                 ;;
11469         esac
11470 fi
11471 : locate the preferred pager for this system
11472 case "$pager" in
11473 '')
11474         dflt=''
11475         case "$pg" in
11476         /*) dflt=$pg;;
11477         esac
11478         case "$more" in
11479         /*) dflt=$more;;
11480         esac
11481         case "$less" in
11482         /*) dflt=$less;;
11483         esac
11484         case "$dflt" in
11485         '') dflt=/usr/ucb/more;;
11486         esac
11487         ;;
11488 *) dflt="$pager";;
11489 esac
11490 echo " "
11491 fn=f/
11492 rp='What pager is used on your system?'
11493 . ./getfile
11494 pager="$ans"
11495
11496 : see what type pids are declared as in the kernel
11497 rp="What is the type of process ids on this system?"
11498 set pid_t pidtype int stdio.h sys/types.h
11499 eval $typedef_ask
11500
11501 : check for length of pointer
11502 echo " "
11503 case "$ptrsize" in
11504 '')
11505         $echo $n "Checking to see how big your pointers are...$c" >&4
11506         if test "$voidflags" -gt 7; then
11507                 echo '#define VOID_PTR char *' > try.c
11508         else
11509                 echo '#define VOID_PTR void *' > try.c
11510         fi
11511         $cat >>try.c <<'EOCP'
11512 #include <stdio.h>
11513 int main()
11514 {
11515         printf("%d\n", sizeof(VOID_PTR));
11516         exit(0);
11517 }
11518 EOCP
11519         set try
11520         if eval $compile_ok; then
11521                 ptrsize=`./try`
11522                 $echo " $ptrsize bytes." >&4
11523         else
11524                 dflt='4'
11525                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11526                 rp="What is the size of a pointer (in bytes)?"
11527                 . ./myread
11528                 ptrsize="$ans"
11529         fi
11530         ;;
11531 esac
11532 $rm -f try.c try
11533
11534 : see if ar generates random libraries by itself
11535 echo " "
11536 echo "Checking how to generate random libraries on your machine..." >&4
11537 echo 'int bar1() { return bar2(); }' > bar1.c
11538 echo 'int bar2() { return 2; }' > bar2.c
11539 $cat > foo.c <<'EOP'
11540 int main() { printf("%d\n", bar1()); exit(0); }
11541 EOP
11542 $cc $ccflags -c bar1.c >/dev/null 2>&1
11543 $cc $ccflags -c bar2.c >/dev/null 2>&1
11544 $cc $ccflags -c foo.c >/dev/null 2>&1
11545 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11546 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11547         ./foobar >/dev/null 2>&1; then
11548         echo "$ar appears to generate random libraries itself."
11549         orderlib=false
11550         ranlib=":"
11551 elif $ar ts bar$_a >/dev/null 2>&1 &&
11552         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11553         ./foobar >/dev/null 2>&1; then
11554                 echo "a table of contents needs to be added with '$ar ts'."
11555                 orderlib=false
11556                 ranlib="$ar ts"
11557 else
11558         case "$ranlib" in
11559         :) ranlib='';;
11560         '')
11561                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11562                 $test -f $ranlib || ranlib=''
11563                 ;;
11564         esac
11565         if $test -n "$ranlib"; then
11566                 echo "your system has '$ranlib'; we'll use that."
11567                 orderlib=false
11568         else
11569                 echo "your system doesn't seem to support random libraries"
11570                 echo "so we'll use lorder and tsort to order the libraries."
11571                 orderlib=true
11572                 ranlib=":"
11573         fi
11574 fi
11575 $rm -f foo* bar* 
11576
11577 : check for type of arguments to select. 
11578 case "$selecttype" in
11579 '') case "$d_select" in
11580         $define)
11581                 $cat <<EOM
11582 Checking to see what type of arguments are accepted by select().
11583 EOM
11584                 hdrs="$define sys/types.h
11585                         $i_systime sys/time.h 
11586                         $i_sysselct sys/select.h
11587                         $d_socket sys/socket.h"
11588                 : The first arg can be int, unsigned, or size_t
11589                 : The last arg may or may not be 'const'
11590                 val=''
11591                 : void pointer has been seen but using that
11592                 : breaks the selectminbits test
11593                 for xxx in 'fd_set *' 'int *'; do
11594                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11595                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11596                                         case "$val" in
11597                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11598                                                 if ./protochk "$try" $hdrs; then
11599                                                         echo "Your system accepts $xxx."
11600                                                         val="$xxx"
11601                                                 fi
11602                                                 ;;
11603                                         esac
11604                                 done
11605                         done
11606                 done
11607                 case "$val" in
11608                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11609                         case "$d_fd_set" in
11610                                 $define) dflt="fd_set *" ;;
11611                                 *)              dflt="int *" ;;
11612                         esac
11613                         . ./myread
11614                         val=$ans
11615                         ;;
11616                 esac
11617                 selecttype="$val"
11618                 ;;
11619         *)      : no select, so pick a harmless default
11620                 selecttype='int *'
11621                 ;;
11622         esac
11623         ;;
11624 esac
11625
11626 : check for the select 'width'
11627 case "$selectminbits" in
11628 '') case "$d_select" in
11629         $define)
11630                 $cat <<EOM
11631
11632 Checking to see on how many bits at a time your select() operates...
11633 EOM
11634                 $cat >try.c <<EOCP
11635 #include <sys/types.h>
11636 #$i_time I_TIME
11637 #$i_systime I_SYS_TIME
11638 #$i_systimek I_SYS_TIME_KERNEL
11639 #ifdef I_TIME
11640 #   include <time.h>
11641 #endif
11642 #ifdef I_SYS_TIME
11643 #   ifdef I_SYS_TIME_KERNEL
11644 #       define KERNEL
11645 #   endif
11646 #   include <sys/time.h>
11647 #   ifdef I_SYS_TIME_KERNEL
11648 #       undef KERNEL
11649 #   endif
11650 #endif
11651 #$i_sysselct I_SYS_SELECT
11652 #ifdef I_SYS_SELECT
11653 #include <sys/select.h>
11654 #endif
11655 #$d_socket HAS_SOCKET
11656 #ifdef HAS_SOCKET
11657 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11658 #endif
11659 #include <stdio.h>
11660 $selecttype b;
11661 #define S sizeof(*(b))
11662 #define MINBITS 64
11663 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11664 #define NBITS  (NBYTES * 8)
11665 int main() {
11666     char s[NBYTES];
11667     struct timeval t;
11668     int i;
11669     FILE* fp;
11670     int fd;
11671
11672     fclose(stdin);
11673     fp = fopen("try.c", "r");
11674     if (fp == 0)
11675       exit(1);
11676     fd = fileno(fp);
11677     if (fd < 0)
11678       exit(2);
11679     b = ($selecttype)s;
11680     for (i = 0; i < NBITS; i++)
11681         FD_SET(i, b);
11682     t.tv_sec  = 0;
11683     t.tv_usec = 0;
11684     select(fd + 1, b, 0, 0, &t);
11685     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11686     printf("%d\n", i + 1);
11687     return 0;
11688 }
11689 EOCP
11690                 set try
11691                 if eval $compile_ok; then
11692                         selectminbits=`./try`
11693                         case "$selectminbits" in
11694                         '')     cat >&4 <<EOM
11695 Cannot figure out on how many bits at a time your select() operates.
11696 I'll play safe and guess it is 32 bits.
11697 EOM
11698                                 selectminbits=32
11699                                 bits="32 bits"
11700                                 ;;
11701                         1)      bits="1 bit" ;;
11702                         *)      bits="$selectminbits bits" ;;
11703                         esac
11704                         echo "Your select() operates on $bits at a time." >&4
11705                 else
11706                         rp='What is the minimum number of bits your select() operates on?'
11707                         case "$byteorder" in
11708                         1234|12345678)  dflt=32 ;;
11709                         *)              dflt=1  ;;
11710                         esac
11711                         . ./myread
11712                         val=$ans
11713                         selectminbits="$val"
11714                 fi
11715                 $rm -f try.* try
11716                 ;;
11717         *)      : no select, so pick a harmless default
11718                 selectminbits='32'
11719                 ;;
11720         esac
11721         ;;
11722 esac
11723
11724 : Trace out the files included by signal.h, then look for SIGxxx names.
11725 : Remove SIGARRAYSIZE used by HPUX.
11726 : Remove SIGSTKSIZE used by Linux.
11727 : Remove SIGSTKSZ used by Posix.
11728 : Remove SIGTYP void lines used by OS2.
11729 xxx=`echo '#include <signal.h>' |
11730         $cppstdin $cppminus $cppflags 2>/dev/null |
11731         $grep '^[       ]*#.*include' | 
11732         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11733 : Check this list of files to be sure we have parsed the cpp output ok.
11734 : This will also avoid potentially non-existent files, such 
11735 : as ../foo/bar.h
11736 xxxfiles=''
11737 for xx in $xxx /dev/null ; do
11738         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11739 done
11740 : If we have found no files, at least try signal.h
11741 case "$xxxfiles" in
11742 '')     xxxfiles=`./findhdr signal.h` ;;
11743 esac
11744 xxx=`awk '
11745 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11746         print substr($2, 4, 20)
11747 }
11748 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11749         print substr($3, 4, 20)
11750 }' $xxxfiles`
11751 : Append some common names just in case the awk scan failed.
11752 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11753 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11754 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11755 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11756 : generate a few handy files for later
11757 $cat > signal.c <<'EOCP'
11758 #include <sys/types.h>
11759 #include <signal.h>
11760 #include <stdio.h>
11761 int main() {
11762
11763 /* Strange style to avoid deeply-nested #if/#else/#endif */
11764 #ifndef NSIG
11765 #  ifdef _NSIG
11766 #    define NSIG (_NSIG)
11767 #  endif
11768 #endif
11769
11770 #ifndef NSIG
11771 #  ifdef SIGMAX
11772 #    define NSIG (SIGMAX+1)
11773 #  endif
11774 #endif
11775
11776 #ifndef NSIG
11777 #  ifdef SIG_MAX
11778 #    define NSIG (SIG_MAX+1)
11779 #  endif
11780 #endif
11781
11782 #ifndef NSIG
11783 #  ifdef MAXSIG
11784 #    define NSIG (MAXSIG+1)
11785 #  endif
11786 #endif
11787
11788 #ifndef NSIG
11789 #  ifdef MAX_SIG
11790 #    define NSIG (MAX_SIG+1)
11791 #  endif
11792 #endif
11793
11794 #ifndef NSIG
11795 #  ifdef SIGARRAYSIZE
11796 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11797 #  endif
11798 #endif
11799
11800 #ifndef NSIG
11801 #  ifdef _sys_nsig
11802 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11803 #  endif
11804 #endif
11805
11806 /* Default to some arbitrary number that's big enough to get most
11807    of the common signals.
11808 */
11809 #ifndef NSIG
11810 #    define NSIG 50
11811 #endif
11812
11813 printf("NSIG %d\n", NSIG);
11814
11815 #ifndef JUST_NSIG
11816
11817 EOCP
11818
11819 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11820 {
11821         printf "#ifdef SIG"; printf $1; printf "\n"
11822         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11823         printf $1; printf ");\n"
11824         printf "#endif\n"
11825 }
11826 END {
11827         printf "#endif /* JUST_NSIG */\n";
11828         printf "}\n";
11829 }
11830 ' >>signal.c
11831 $cat >signal.awk <<'EOP'
11832 BEGIN { ndups = 0 }
11833 $1 ~ /^NSIG$/ { nsig = $2 }
11834 ($1 !~ /^NSIG$/) && (NF == 2) {
11835     if ($2 > maxsig) { maxsig = $2 }
11836     if (sig_name[$2]) {
11837         dup_name[ndups] = $1
11838         dup_num[ndups] = $2
11839         ndups++ 
11840     }
11841     else {
11842         sig_name[$2] = $1
11843         sig_num[$2] = $2
11844     }
11845 }
11846 END { 
11847     if (nsig == 0) {
11848         nsig = maxsig + 1
11849     }
11850     printf("NSIG %d\n", nsig);
11851     for (n = 1; n < nsig; n++) {
11852         if (sig_name[n]) {
11853             printf("%s %d\n", sig_name[n], sig_num[n])
11854         }
11855         else {
11856             printf("NUM%d %d\n", n, n) 
11857         }
11858     }
11859     for (n = 0; n < ndups; n++) {
11860         printf("%s %d\n", dup_name[n], dup_num[n])
11861     }
11862 }
11863 EOP
11864 $cat >signal_cmd <<EOS
11865 $startsh
11866 if $test -s signal.lst; then
11867     echo "Using your existing signal.lst file"
11868         exit 0
11869 fi
11870 xxx="$xxx"
11871 EOS
11872 $cat >>signal_cmd <<'EOS'
11873
11874 set signal
11875 if eval $compile_ok; then
11876         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11877 else
11878         echo "(I can't seem be able to compile the whole test program)" >&4
11879         echo "(I'll try it in little pieces.)" >&4
11880         set signal -DJUST_NSIG
11881         if eval $compile_ok; then
11882                 ./signal$_exe > signal.nsg
11883                 $cat signal.nsg
11884         else
11885                 echo "I can't seem to figure out how many signals you have." >&4
11886                 echo "Guessing 50." >&4
11887                 echo 'NSIG 50' > signal.nsg
11888         fi
11889         : Now look at all the signal names, one at a time.
11890         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11891                 $cat > signal.c <<EOCP
11892 #include <sys/types.h>
11893 #include <signal.h>
11894 #include <stdio.h>
11895 int main() {
11896 printf("$xx %d\n", SIG${xx});
11897 return 0;
11898 }
11899 EOCP
11900                 set signal
11901                 if eval $compile; then
11902                         echo "SIG${xx} found."
11903                         ./signal$_exe  >> signal.ls1
11904                 else
11905                         echo "SIG${xx} NOT found."
11906                 fi
11907         done
11908         if $test -s signal.ls1; then
11909                 $cat signal.nsg signal.ls1 |
11910                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11911         fi
11912
11913 fi
11914 if $test -s signal.lst; then
11915         :
11916 else
11917         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11918         echo 'kill -l' >signal
11919         set X `csh -f <signal`
11920         $rm -f signal
11921         shift
11922         case $# in
11923         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11924         esac
11925         echo $@ | $tr ' ' $trnl | \
11926             $awk '{ printf "%s %d\n", $1, ++s; }
11927                   END { printf "NSIG %d\n", ++s }' >signal.lst
11928 fi
11929 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11930 EOS
11931 chmod a+x signal_cmd
11932 $eunicefix signal_cmd
11933
11934 : generate list of signal names
11935 echo " "
11936 case "$sig_name_init" in
11937 '') doinit=yes ;;
11938 *)  case "$sig_num_init" in
11939     ''|*,*) doinit=yes ;;
11940     esac ;;
11941 esac
11942 case "$doinit" in
11943 yes)
11944         echo "Generating a list of signal names and numbers..." >&4
11945         . ./signal_cmd
11946         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11947         sig_name=`$awk 'BEGIN { printf "ZERO " }
11948                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11949         sig_num=`$awk  'BEGIN { printf "0 " }
11950                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11951         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11952                              !/^NSIG/   { printf "\"%s\", ", $1 }
11953                              END        { printf "0\n" }' signal.lst`
11954         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11955                              !/^NSIG/   { printf "%d, ", $2}
11956                              END        { printf "0\n"}' signal.lst`
11957         ;;
11958 esac
11959 echo "The following $sig_count signals are available:"
11960 echo " "
11961 echo $sig_name | $awk \
11962 'BEGIN { linelen = 0 }
11963 {
11964         for (i = 1; i <= NF; i++) {
11965                 name = "SIG" $i " "
11966                 linelen = linelen + length(name)
11967                 if (linelen > 70) {
11968                         printf "\n"
11969                         linelen = length(name)
11970                 }
11971                 printf "%s", name
11972         }
11973         printf "\n"
11974 }'
11975 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11976
11977 : see what type is used for signed size_t
11978 set ssize_t ssizetype int stdio.h sys/types.h
11979 eval $typedef
11980 dflt="$ssizetype"
11981 $cat > ssize.c <<EOM
11982 #include <stdio.h>
11983 #include <sys/types.h>
11984 #define Size_t $sizetype
11985 #define SSize_t $dflt
11986 int main()
11987 {
11988         if (sizeof(Size_t) == sizeof(SSize_t))
11989                 printf("$dflt\n");
11990         else if (sizeof(Size_t) == sizeof(int))
11991                 printf("int\n");
11992         else 
11993                 printf("long\n");
11994         exit(0);
11995 }
11996 EOM
11997 echo " "
11998 set ssize
11999 if eval $compile_ok && ./ssize > /dev/null; then
12000         ssizetype=`./ssize`
12001         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12002 else
12003         $cat >&4 <<EOM
12004 Help! I can't compile and run the ssize_t test program: please enlighten me!
12005 (This is probably a misconfiguration in your system or libraries, and
12006 you really ought to fix it.  Still, I'll try anyway.)
12007
12008 I need a type that is the same size as $sizetype, but is guaranteed to
12009 be signed.  Common values are ssize_t, int and long.
12010
12011 EOM
12012         rp="What signed type is the same size as $sizetype?"
12013         . ./myread
12014         ssizetype="$ans"
12015 fi
12016 $rm -f ssize ssize.*
12017
12018 : see what type of char stdio uses.
12019 echo " "
12020 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12021         echo "Your stdio uses unsigned chars." >&4
12022         stdchar="unsigned char"
12023 else
12024         echo "Your stdio uses signed chars." >&4
12025         stdchar="char"
12026 fi
12027
12028 : see if time exists
12029 echo " "
12030 if test "X$d_time" = X -o X"$timetype" = X; then
12031     if set time val -f d_time; eval $csym; $val; then
12032                 echo 'time() found.' >&4
12033                 val="$define"
12034                 rp="What is the type returned by time() on this system?"
12035                 set time_t timetype long stdio.h sys/types.h
12036                 eval $typedef_ask
12037     else
12038                 echo 'time() not found, hope that will do.' >&4
12039                 val="$undef"
12040                 timetype='int';
12041     fi
12042     set d_time
12043     eval $setvar
12044 fi
12045
12046 : see what type uids are declared as in the kernel
12047 echo " "
12048 echo "Looking for the type for user ids returned by getuid()."
12049 set uid_t uidtype xxx stdio.h sys/types.h
12050 eval $typedef
12051 case "$uidtype" in
12052 xxx)
12053         xxx=`./findhdr sys/user.h`
12054         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12055         case $1 in
12056         unsigned) dflt="$1 $2" ;;
12057         *) dflt="$1" ;;
12058         esac
12059         ;;
12060 *) dflt="$uidtype";;
12061 esac
12062 case "$uidtype" in
12063 uid_t)  echo "uid_t found." ;;
12064 *)      rp="What is the type for user ids returned by getuid()?"
12065         . ./myread
12066         uidtype="$ans"
12067         ;;
12068 esac
12069
12070 : see if dbm.h is available
12071 : see if dbmclose exists
12072 set dbmclose d_dbmclose
12073 eval $inlibc
12074
12075 case "$d_dbmclose" in
12076 $define)
12077         set dbm.h i_dbm
12078         eval $inhdr
12079         case "$i_dbm" in
12080         $define)
12081                 val="$undef"
12082                 set i_rpcsvcdbm
12083                 eval $setvar
12084                 ;;
12085         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12086                 eval $inhdr
12087                 ;;
12088         esac
12089         ;;
12090 *)      echo "We won't be including <dbm.h>"
12091         val="$undef"
12092         set i_dbm
12093         eval $setvar
12094         val="$undef"
12095         set i_rpcsvcdbm
12096         eval $setvar
12097         ;;
12098 esac
12099
12100 : see if this is a sys/file.h system
12101 val=''
12102 set sys/file.h val
12103 eval $inhdr
12104
12105 : do we need to include sys/file.h ?
12106 case "$val" in
12107 "$define")
12108         echo " "
12109         if $h_sysfile; then
12110                 val="$define"
12111                 echo "We'll be including <sys/file.h>." >&4
12112         else
12113                 val="$undef"
12114                 echo "We won't be including <sys/file.h>." >&4
12115         fi
12116         ;;
12117 *)
12118         h_sysfile=false
12119         ;;
12120 esac
12121 set i_sysfile
12122 eval $setvar
12123
12124 : see if fcntl.h is there
12125 val=''
12126 set fcntl.h val
12127 eval $inhdr
12128
12129 : see if we can include fcntl.h
12130 case "$val" in
12131 "$define")
12132         echo " "
12133         if $h_fcntl; then
12134                 val="$define"
12135                 echo "We'll be including <fcntl.h>." >&4
12136         else
12137                 val="$undef"
12138                 if $h_sysfile; then
12139         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12140                 else
12141                         echo "We won't be including <fcntl.h>." >&4
12142                 fi
12143         fi
12144         ;;
12145 *)
12146         h_fcntl=false
12147         val="$undef"
12148         ;;
12149 esac
12150 set i_fcntl
12151 eval $setvar
12152
12153 : see if locale.h is available
12154 set locale.h i_locale
12155 eval $inhdr
12156
12157 : see if mach cthreads are available
12158 if test "X$usethreads" = "X$define"; then
12159         set mach/cthreads.h i_machcthr
12160         eval $inhdr
12161 else
12162         i_machcthr="$undef"
12163 fi
12164
12165
12166
12167 : see if this is a math.h system
12168 set math.h i_math
12169 eval $inhdr
12170
12171 : see if this is a mntent.h system
12172 set mntent.h i_mntent
12173 eval $inhdr
12174
12175 : see if ndbm.h is available
12176 set ndbm.h t_ndbm
12177 eval $inhdr
12178 case "$t_ndbm" in
12179 $define)
12180         : see if dbm_open exists
12181         set dbm_open d_dbm_open
12182         eval $inlibc
12183         case "$d_dbm_open" in
12184         $undef)
12185                 t_ndbm="$undef"
12186                 echo "We won't be including <ndbm.h>"
12187                 ;;
12188         esac
12189         ;;
12190 esac
12191 val="$t_ndbm"
12192 set i_ndbm
12193 eval $setvar
12194
12195 : see if net/errno.h is available
12196 val=''
12197 set net/errno.h val
12198 eval $inhdr
12199
12200 : Unfortunately, it causes problems on some systems.  Arrgh.
12201 case "$val" in
12202 $define)
12203         cat > try.c <<'EOM'
12204 #include <stdio.h>
12205 #include <errno.h>
12206 #include <net/errno.h>
12207 int func()
12208 {
12209         return ENOTSOCK;
12210 }
12211 EOM
12212         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12213                 echo "We'll be including <net/errno.h>." >&4
12214         else
12215                 echo "We won't be including <net/errno.h>." >&4
12216                 val="$undef"
12217         fi
12218         $rm -f try.* try
12219         ;;
12220 esac
12221 set i_neterrno
12222 eval $setvar
12223
12224 : see if netinet/tcp.h is available
12225 set netinet/tcp.h i_netinettcp
12226 eval $inhdr
12227
12228 : see if this is a poll.h system
12229 set poll.h i_poll
12230 eval $inhdr
12231
12232 : get C preprocessor symbols handy
12233 echo " "
12234 $echo $n "Hmm... $c"
12235 echo $al | $tr ' ' $trnl >Cppsym.know
12236 $cat <<EOSS >Cppsym
12237 $startsh
12238 case "\$1" in
12239 -l) list=true
12240         shift
12241         ;;
12242 esac
12243 unknown=''
12244 case "\$list\$#" in
12245 1|2)
12246         for sym do
12247                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12248                         exit 0
12249                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12250                         :
12251                 else
12252                         unknown="\$unknown \$sym"
12253                 fi
12254         done
12255         set X \$unknown
12256         shift
12257         ;;
12258 esac
12259 case \$# in
12260 0) exit 1;;
12261 esac
12262 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12263 #ifdef \1\\
12264 exit 0; _ _ _ _\1\\      \1\\
12265 #endif\\
12266 /' >Cppsym\$\$
12267 echo "exit 1; _ _ _" >>Cppsym\$\$
12268 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12269 case "\$list" in
12270 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12271 *)
12272         sh Cppsym2\$\$
12273         status=\$?
12274         ;;
12275 esac
12276 $rm -f Cppsym\$\$ Cppsym2\$\$
12277 exit \$status
12278 EOSS
12279 chmod +x Cppsym
12280 $eunicefix Cppsym
12281 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12282
12283 : now check the C compiler for additional symbols
12284 postprocess_cc_v=''
12285 case "$osname" in
12286 aix) postprocess_cc_v="|$tr , ' '" ;;
12287 esac
12288 $cat >ccsym <<EOS
12289 $startsh
12290 $cat >tmp.c <<EOF
12291 extern int foo;
12292 EOF
12293 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12294 do
12295         case "\$i" in
12296         -D*) echo "\$i" | $sed 's/^-D//';;
12297         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12298         esac
12299 done
12300 $rm -f try.c
12301 EOS
12302 postprocess_cc_v=''
12303 chmod +x ccsym
12304 $eunicefix ccsym
12305 ./ccsym > ccsym1.raw
12306 if $test -s ccsym1.raw; then
12307        $sort ccsym1.raw | $uniq >ccsym.raw
12308 else
12309        mv ccsym1.raw ccsym.raw
12310 fi
12311
12312 $awk '/\=/ { print $0; next }
12313         { print $0"=1" }' ccsym.raw >ccsym.list
12314 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12315 $comm -13 ccsym.true ccsym.list >ccsym.own
12316 $comm -12 ccsym.true ccsym.list >ccsym.com
12317 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12318 also=''
12319 if $test -z ccsym.raw; then
12320         echo "Your C compiler doesn't seem to define any symbols!" >&4
12321         echo " "
12322         echo "However, your C preprocessor defines the following symbols:"
12323         $cat Cppsym.true
12324         ccsymbols=''
12325         cppsymbols=`$cat Cppsym.true`
12326         cppsymbols=`echo $cppsymbols`
12327         cppccsymbols="$cppsymbols"
12328 else
12329         if $test -s ccsym.com; then
12330                 echo "Your C compiler and pre-processor define these symbols:"
12331                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12332                 also='also '
12333                 symbols='ones'
12334                 cppccsymbols=`$cat ccsym.com`
12335                 cppccsymbols=`echo $cppccsymbols`
12336                 $test "$silent" || sleep 1
12337         fi
12338         if $test -s ccsym.cpp; then
12339                 $test "$also" && echo " "
12340                 echo "Your C pre-processor ${also}defines the following symbols:"
12341                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12342                 also='further '
12343                 cppsymbols=`$cat ccsym.cpp`
12344                 cppsymbols=`echo $cppsymbols`
12345                 $test "$silent" || sleep 1
12346         fi
12347         if $test -s ccsym.own; then
12348                 $test "$also" && echo " "
12349                 echo "Your C compiler ${also}defines the following cpp symbols:"
12350                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12351                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12352                 ccsymbols=`$cat ccsym.own`
12353                 ccsymbols=`echo $ccsymbols`
12354                 $test "$silent" || sleep 1
12355         fi
12356 fi
12357 $rm -f ccsym*
12358
12359 : see if this is a termio system
12360 val="$undef"
12361 val2="$undef"
12362 val3="$undef"
12363 if $test `./findhdr termios.h`; then
12364         set tcsetattr i_termios
12365         eval $inlibc
12366         val3="$i_termios"
12367 fi
12368 echo " "
12369 case "$val3" in
12370 "$define") echo "You have POSIX termios.h... good!" >&4;;
12371 *) if ./Cppsym pyr; then
12372                 case "`/bin/universe`" in
12373                 ucb) if $test `./findhdr sgtty.h`; then
12374                                 val2="$define"
12375                                 echo "<sgtty.h> found." >&4
12376                         else
12377                                 echo "System is pyramid with BSD universe."
12378                                 echo "<sgtty.h> not found--you could have problems." >&4
12379                         fi;;
12380                 *) if $test `./findhdr termio.h`; then
12381                                 val="$define"
12382                                 echo "<termio.h> found." >&4
12383                         else
12384                                 echo "System is pyramid with USG universe."
12385                                 echo "<termio.h> not found--you could have problems." >&4
12386                         fi;;
12387                 esac
12388         elif ./usg; then
12389                 if $test `./findhdr termio.h`; then
12390                         echo "<termio.h> found." >&4
12391                         val="$define"
12392                 elif $test `./findhdr sgtty.h`; then
12393                         echo "<sgtty.h> found." >&4
12394                         val2="$define"
12395                 else
12396 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12397                 fi
12398         else
12399                 if $test `./findhdr sgtty.h`; then
12400                         echo "<sgtty.h> found." >&4
12401                         val2="$define"
12402                 elif $test `./findhdr termio.h`; then
12403                         echo "<termio.h> found." >&4
12404                         val="$define"
12405                 else
12406 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12407                 fi
12408         fi;;
12409 esac
12410 set i_termio; eval $setvar
12411 val=$val2; set i_sgtty; eval $setvar
12412 val=$val3; set i_termios; eval $setvar
12413
12414 : see if this is a shadow.h system
12415 set shadow.h i_shadow
12416 eval $inhdr
12417
12418 : see if stdarg is available
12419 echo " "
12420 if $test `./findhdr stdarg.h`; then
12421         echo "<stdarg.h> found." >&4
12422         valstd="$define"
12423 else
12424         echo "<stdarg.h> NOT found." >&4
12425         valstd="$undef"
12426 fi
12427
12428 : see if varags is available
12429 echo " "
12430 if $test `./findhdr varargs.h`; then
12431         echo "<varargs.h> found." >&4
12432 else
12433         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12434 fi
12435
12436 : set up the varargs testing programs
12437 $cat > varargs.c <<EOP
12438 #ifdef I_STDARG
12439 #include <stdarg.h>
12440 #endif
12441 #ifdef I_VARARGS
12442 #include <varargs.h>
12443 #endif
12444
12445 #ifdef I_STDARG
12446 int f(char *p, ...)
12447 #else
12448 int f(va_alist)
12449 va_dcl
12450 #endif
12451 {
12452         va_list ap;
12453 #ifndef I_STDARG
12454         char *p;
12455 #endif
12456 #ifdef I_STDARG
12457         va_start(ap,p);
12458 #else
12459         va_start(ap);
12460         p = va_arg(ap, char *);
12461 #endif
12462         va_end(ap);
12463 }
12464 EOP
12465 $cat > varargs <<EOP
12466 $startsh
12467 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12468         echo "true"
12469 else
12470         echo "false"
12471 fi
12472 $rm -f varargs$_o
12473 EOP
12474 chmod +x varargs
12475
12476 : now check which varargs header should be included
12477 echo " "
12478 i_varhdr=''
12479 case "$valstd" in
12480 "$define")
12481         if `./varargs I_STDARG`; then
12482                 val='stdarg.h'
12483         elif `./varargs I_VARARGS`; then
12484                 val='varargs.h'
12485         fi
12486         ;;
12487 *)
12488         if `./varargs I_VARARGS`; then
12489                 val='varargs.h'
12490         fi
12491         ;;
12492 esac
12493 case "$val" in
12494 '')
12495 echo "I could not find the definition for va_dcl... You have problems..." >&4
12496         val="$undef"; set i_stdarg; eval $setvar
12497         val="$undef"; set i_varargs; eval $setvar
12498         ;;
12499 *) 
12500         set i_varhdr
12501         eval $setvar
12502         case "$i_varhdr" in
12503         stdarg.h)
12504                 val="$define"; set i_stdarg; eval $setvar
12505                 val="$undef"; set i_varargs; eval $setvar
12506                 ;;
12507         varargs.h)
12508                 val="$undef"; set i_stdarg; eval $setvar
12509                 val="$define"; set i_varargs; eval $setvar
12510                 ;;
12511         esac
12512         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12513 esac
12514 $rm -f varargs*
12515
12516 : see if stddef is available
12517 set stddef.h i_stddef
12518 eval $inhdr
12519
12520 : see if sys/access.h is available
12521 set sys/access.h i_sysaccess
12522 eval $inhdr
12523
12524 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12525 set sys/filio.h i_sysfilio
12526 eval $inhdr
12527 echo " "
12528 if $test `./findhdr sys/ioctl.h`; then
12529         val="$define"
12530         echo '<sys/ioctl.h> found.' >&4
12531 else
12532         val="$undef"
12533         if $test $i_sysfilio = "$define"; then
12534             echo '<sys/ioctl.h> NOT found.' >&4
12535         else
12536                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12537                 $test $i_termio = "$define" && xxx="termio.h"
12538                 $test $i_termios = "$define" && xxx="termios.h"
12539 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12540         fi
12541 fi
12542 set i_sysioctl
12543 eval $setvar
12544
12545 : see if sys/resource.h has to be included
12546 set sys/resource.h i_sysresrc
12547 eval $inhdr
12548
12549 : see if sys/security.h is available
12550 set sys/security.h i_syssecrt
12551 eval $inhdr
12552
12553 : see if this is a sys/statvfs.h system
12554 set sys/statvfs.h i_sysstatvfs
12555 eval $inhdr
12556
12557 : see if this is a sys/un.h system
12558 set sys/un.h i_sysun
12559 eval $inhdr
12560
12561 : see if this is a syswait system
12562 set sys/wait.h i_syswait
12563 eval $inhdr
12564
12565 : see if this is an utime system
12566 set utime.h i_utime
12567 eval $inhdr
12568
12569 : see if this is a values.h system
12570 set values.h i_values
12571 eval $inhdr
12572
12573 : see if this is a vfork system
12574 case "$d_vfork" in
12575 "$define")
12576         set vfork.h i_vfork
12577         eval $inhdr
12578         ;;
12579 *)
12580         i_vfork="$undef"
12581         ;;
12582 esac
12583
12584 : see if gdbm.h is available
12585 set gdbm.h t_gdbm
12586 eval $inhdr
12587 case "$t_gdbm" in
12588 $define)
12589         : see if gdbm_open exists
12590         set gdbm_open d_gdbm_open
12591         eval $inlibc
12592         case "$d_gdbm_open" in
12593         $undef)
12594                 t_gdbm="$undef"
12595                 echo "We won't be including <gdbm.h>"
12596                 ;;
12597         esac
12598         ;;
12599 esac
12600 val="$t_gdbm"
12601 set i_gdbm
12602 eval $setvar
12603
12604 echo " "
12605 echo "Looking for extensions..." >&4
12606 tdir=`pwd`
12607 cd $rsrc/ext
12608 : If we are using the old config.sh, known_extensions may contain
12609 : old or inaccurate or duplicate values.
12610 known_extensions=''
12611 nonxs_extensions=''
12612 : We do not use find because it might not be available.
12613 : We do not just use MANIFEST because the user may have dropped
12614 : some additional extensions into the source tree and expect them
12615 : to be built.
12616 for xxx in * ; do
12617         case "$xxx" in
12618         DynaLoader|dynaload) ;;
12619         *)      if $test -f $xxx/$xxx.xs; then
12620                         known_extensions="$known_extensions $xxx"
12621                 elif $test -f $xxx/Makefile.PL; then
12622                         nonxs_extensions="$nonxs_extensions $xxx"
12623                 else
12624                         if $test -d $xxx; then
12625                                 # Look for nested extensions, eg. Devel/Dprof.
12626                                 cd $xxx
12627                                 for yyy in * ; do
12628                                 if $test -f $yyy/$yyy.xs; then
12629                                         known_extensions="$known_extensions $xxx/$yyy"
12630                                 elif $test -f $yyy/Makefile.PL; then
12631                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12632                                 fi
12633                                 done
12634                                 cd ..
12635                         fi
12636                 fi 
12637                 ;;
12638         esac
12639 done
12640 set X $nonxs_extensions
12641 shift
12642 nonxs_extensions="$*"
12643 set X $known_extensions
12644 shift
12645 known_extensions="$*"
12646 cd $tdir
12647
12648 : Now see which are supported on this system.
12649 avail_ext=''
12650 for xxx in $known_extensions ; do
12651         case "$xxx" in
12652         DB_File|db_file)
12653                 case "$i_db" in
12654                 $define) avail_ext="$avail_ext $xxx" ;;
12655                 esac
12656                 ;;
12657         GDBM_File|gdbm_fil)
12658                 case "$i_gdbm" in 
12659                 $define) avail_ext="$avail_ext $xxx" ;;
12660                 esac
12661                 ;;
12662         NDBM_File|ndbm_fil)
12663                 case "$i_ndbm" in
12664                 $define) avail_ext="$avail_ext $xxx" ;;
12665                 esac
12666                 ;;
12667         ODBM_File|odbm_fil) 
12668                 case "${i_dbm}${i_rpcsvcdbm}" in
12669                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12670                 esac
12671                 ;;
12672         POSIX|posix)
12673                 case "$useposix" in
12674                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12675                 esac
12676                 ;;
12677         Opcode|opcode)
12678                 case "$useopcode" in
12679                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12680                 esac
12681                 ;;
12682         Socket|socket)
12683                 case "$d_socket" in 
12684                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12685                 esac
12686                 ;;
12687         Thread|thread)
12688                 case "$usethreads" in 
12689                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12690                 esac
12691                 ;;
12692         IPC/SysV|ipc/sysv)
12693                 : XXX Do we need a useipcsysv variable here
12694                 case "${d_msg}${d_sem}${d_shm}" in 
12695                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12696                 esac
12697                 ;;
12698         *)      avail_ext="$avail_ext $xxx"
12699                 ;;
12700         esac
12701 done
12702
12703 set X $avail_ext
12704 shift
12705 avail_ext="$*"
12706
12707 : Now see which nonxs extensions are supported on this system.
12708 : For now assume all are.
12709 nonxs_ext=''
12710 for xxx in $nonxs_extensions ; do
12711         case "$xxx" in
12712         *)      nonxs_ext="$nonxs_ext $xxx"
12713                 ;;
12714         esac
12715 done
12716
12717 set X $nonxs_ext
12718 shift
12719 nonxs_ext="$*"
12720
12721 case $usedl in
12722 $define)
12723         $cat <<EOM
12724 A number of extensions are supplied with $package.  You may choose to
12725 compile these extensions for dynamic loading (the default), compile
12726 them into the $package executable (static loading), or not include
12727 them at all.  Answer "none" to include no extensions.
12728 Note that DynaLoader is always built and need not be mentioned here.
12729
12730 EOM
12731         case "$dynamic_ext" in
12732         '') dflt="$avail_ext" ;;
12733         *)      dflt="$dynamic_ext"
12734                 # Perhaps we are reusing an old out-of-date config.sh.
12735                 case "$hint" in
12736                 previous)
12737                         if test X"$dynamic_ext" != X"$avail_ext"; then
12738                                 $cat <<EOM
12739 NOTICE:  Your previous config.sh list may be incorrect. 
12740 The extensions now available to you are 
12741         ${avail_ext}
12742 but the default list from your previous config.sh is
12743         ${dynamic_ext} 
12744
12745 EOM
12746                         fi
12747                         ;;
12748                 esac
12749                 ;;
12750         esac
12751         case "$dflt" in
12752         '')     dflt=none;;
12753         esac
12754         rp="What extensions do you wish to load dynamically?"
12755         . ./myread
12756         case "$ans" in
12757         none) dynamic_ext=' ' ;;
12758         *) dynamic_ext="$ans" ;;
12759         esac
12760
12761         case "$static_ext" in
12762         '')
12763                 : Exclude those already listed in dynamic linking
12764                 dflt=''
12765                 for xxx in $avail_ext; do
12766                         case " $dynamic_ext " in
12767                         *" $xxx "*) ;;
12768                         *) dflt="$dflt $xxx" ;;
12769                         esac
12770                 done
12771                 set X $dflt
12772                 shift
12773                 dflt="$*"
12774                 ;;
12775         *)  dflt="$static_ext" 
12776                 ;;
12777         esac
12778
12779         case "$dflt" in
12780         '')     dflt=none;;
12781         esac
12782         rp="What extensions do you wish to load statically?"
12783         . ./myread
12784         case "$ans" in
12785         none) static_ext=' ' ;;
12786         *) static_ext="$ans" ;;
12787         esac
12788         ;;
12789 *)
12790         $cat <<EOM
12791 A number of extensions are supplied with $package.  Answer "none" 
12792 to include no extensions. 
12793 Note that DynaLoader is always built and need not be mentioned here.
12794
12795 EOM
12796         case "$static_ext" in
12797         '') dflt="$avail_ext" ;;
12798         *)      dflt="$static_ext"
12799                 # Perhaps we are reusing an old out-of-date config.sh.
12800                 case "$hint" in
12801                 previous)
12802                         if test X"$static_ext" != X"$avail_ext"; then
12803                                 $cat <<EOM
12804 NOTICE:  Your previous config.sh list may be incorrect. 
12805 The extensions now available to you are 
12806         ${avail_ext}
12807 but the default list from your previous config.sh is
12808         ${static_ext} 
12809
12810 EOM
12811                         fi
12812                         ;;
12813                 esac
12814                 ;;
12815         esac
12816         : Exclude those that are not xs extensions
12817         case "$dflt" in
12818         '')     dflt=none;;
12819         esac
12820         rp="What extensions do you wish to include?"
12821         . ./myread
12822         case "$ans" in
12823         none) static_ext=' ' ;;
12824         *) static_ext="$ans" ;;
12825         esac
12826         ;;
12827 esac
12828
12829 set X $dynamic_ext $static_ext $nonxs_ext
12830 shift
12831 extensions="$*"
12832
12833 : Remove build directory name from cppstdin so it can be used from
12834 : either the present location or the final installed location.
12835 echo " "
12836 : Get out of the UU directory to get correct path name.
12837 cd ..
12838 case "$cppstdin" in
12839 `pwd`/cppstdin)
12840         echo "Stripping down cppstdin path name"
12841         cppstdin=cppstdin
12842         ;;
12843 esac
12844 cd UU
12845
12846 : end of configuration questions
12847 echo " "
12848 echo "End of configuration questions."
12849 echo " "
12850
12851 : back to where it started
12852 if test -d ../UU; then
12853         cd ..
12854 fi
12855
12856 : configuration may be patched via a 'config.over' file
12857 if $test -f config.over; then
12858         echo " "
12859         dflt=y
12860         rp='I see a config.over file.  Do you wish to load it?'
12861         . UU/myread
12862         case "$ans" in
12863         n*) echo "OK, I'll ignore it.";;
12864         *)      . ./config.over
12865                 echo "Configuration override changes have been loaded."
12866                 ;;
12867         esac
12868 fi
12869
12870 : in case they want portability, strip down executable paths
12871 case "$d_portable" in
12872 "$define")
12873         echo " "
12874         echo "Stripping down executable paths..." >&4
12875         for file in $loclist $trylist; do
12876                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12877                         eval $file="\$file"
12878                 fi
12879         done
12880         ;;
12881 esac
12882
12883 : create config.sh file
12884 echo " "
12885 echo "Creating config.sh..." >&4
12886 $spitshell <<EOT >config.sh
12887 $startsh
12888 #
12889 # This file was produced by running the Configure script. It holds all the
12890 # definitions figured out by Configure. Should you modify one of these values,
12891 # do not forget to propagate your changes by running "Configure -der". You may
12892 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12893 #
12894
12895 # Package name      : $package
12896 # Source directory  : $src
12897 # Configuration time: $cf_time
12898 # Configured by     : $cf_by
12899 # Target system     : $myuname
12900
12901 Author='$Author'
12902 Date='$Date'
12903 Header='$Header'
12904 Id='$Id'
12905 Locker='$Locker'
12906 Log='$Log'
12907 Mcc='$Mcc'
12908 RCSfile='$RCSfile'
12909 Revision='$Revision'
12910 Source='$Source'
12911 State='$State'
12912 _a='$_a'
12913 _exe='$_exe'
12914 _o='$_o'
12915 afs='$afs'
12916 alignbytes='$alignbytes'
12917 ansi2knr='$ansi2knr'
12918 aphostname='$aphostname'
12919 apiversion='$apiversion'
12920 ar='$ar'
12921 archlib='$archlib'
12922 archlibexp='$archlibexp'
12923 archname64='$archname64'
12924 archname='$archname'
12925 archobjs='$archobjs'
12926 awk='$awk'
12927 baserev='$baserev'
12928 bash='$bash'
12929 bin='$bin'
12930 binexp='$binexp'
12931 bison='$bison'
12932 byacc='$byacc'
12933 byteorder='$byteorder'
12934 c='$c'
12935 castflags='$castflags'
12936 cat='$cat'
12937 cc='$cc'
12938 cccdlflags='$cccdlflags'
12939 ccdlflags='$ccdlflags'
12940 ccflags='$ccflags'
12941 ccsymbols='$ccsymbols'
12942 cf_by='$cf_by'
12943 cf_email='$cf_email'
12944 cf_time='$cf_time'
12945 chgrp='$chgrp'
12946 chmod='$chmod'
12947 chown='$chown'
12948 clocktype='$clocktype'
12949 comm='$comm'
12950 compress='$compress'
12951 contains='$contains'
12952 cp='$cp'
12953 cpio='$cpio'
12954 cpp='$cpp'
12955 cpp_stuff='$cpp_stuff'
12956 cppccsymbols='$cppccsymbols'
12957 cppflags='$cppflags'
12958 cpplast='$cpplast'
12959 cppminus='$cppminus'
12960 cpprun='$cpprun'
12961 cppstdin='$cppstdin'
12962 cppsymbols='$cppsymbols'
12963 crosscompile='$crosscompile'
12964 cryptlib='$cryptlib'
12965 csh='$csh'
12966 d_Gconvert='$d_Gconvert'
12967 d_access='$d_access'
12968 d_accessx='$d_accessx'
12969 d_alarm='$d_alarm'
12970 d_archlib='$d_archlib'
12971 d_attribut='$d_attribut'
12972 d_bcmp='$d_bcmp'
12973 d_bcopy='$d_bcopy'
12974 d_bsd='$d_bsd'
12975 d_bsdgetpgrp='$d_bsdgetpgrp'
12976 d_bsdsetpgrp='$d_bsdsetpgrp'
12977 d_bzero='$d_bzero'
12978 d_casti32='$d_casti32'
12979 d_castneg='$d_castneg'
12980 d_charvspr='$d_charvspr'
12981 d_chown='$d_chown'
12982 d_chroot='$d_chroot'
12983 d_chsize='$d_chsize'
12984 d_closedir='$d_closedir'
12985 d_cmsghdr_s='$d_cmsghdr_s'
12986 d_const='$d_const'
12987 d_crypt='$d_crypt'
12988 d_csh='$d_csh'
12989 d_cuserid='$d_cuserid'
12990 d_dbl_dig='$d_dbl_dig'
12991 d_dbmclose64='$d_dbmclose64'
12992 d_dbminit64='$d_dbminit64'
12993 d_delete64='$d_delete64'
12994 d_difftime='$d_difftime'
12995 d_dirent64_s='$d_dirent64_s'
12996 d_dirnamlen='$d_dirnamlen'
12997 d_dlerror='$d_dlerror'
12998 d_dlopen='$d_dlopen'
12999 d_dlsymun='$d_dlsymun'
13000 d_dosuid='$d_dosuid'
13001 d_drand48proto='$d_drand48proto'
13002 d_dup2='$d_dup2'
13003 d_eaccess='$d_eaccess'
13004 d_endgrent='$d_endgrent'
13005 d_endhent='$d_endhent'
13006 d_endnent='$d_endnent'
13007 d_endpent='$d_endpent'
13008 d_endpwent='$d_endpwent'
13009 d_endsent='$d_endsent'
13010 d_endspent='$d_endspent'
13011 d_eofnblk='$d_eofnblk'
13012 d_eunice='$d_eunice'
13013 d_fchmod='$d_fchmod'
13014 d_fchown='$d_fchown'
13015 d_fcntl='$d_fcntl'
13016 d_fd_macros='$d_fd_macros'
13017 d_fd_set='$d_fd_set'
13018 d_fds_bits='$d_fds_bits'
13019 d_fetch64='$d_fetch64'
13020 d_fgetpos64='$d_fgetpos64'
13021 d_fgetpos='$d_fgetpos'
13022 d_firstkey64='$d_firstkey64'
13023 d_flexfnam='$d_flexfnam'
13024 d_flock64_s='$d_flock64_s'
13025 d_flock='$d_flock'
13026 d_fopen64='$d_fopen64'
13027 d_fork='$d_fork'
13028 d_fpathconf='$d_fpathconf'
13029 d_freopen64='$d_freopen64'
13030 d_fseek64='$d_fseek64'
13031 d_fseeko64='$d_fseeko64'
13032 d_fseeko='$d_fseeko'
13033 d_fsetpos64='$d_fsetpos64'
13034 d_fsetpos='$d_fsetpos'
13035 d_fstat64='$d_fstat64'
13036 d_fstatfs='$d_fstatfs'
13037 d_fstatvfs='$d_fstatvfs'
13038 d_ftell64='$d_ftell64'
13039 d_ftello64='$d_ftello64'
13040 d_ftello='$d_ftello'
13041 d_ftime='$d_ftime'
13042 d_ftruncate64='$d_ftruncate64'
13043 d_getgrent='$d_getgrent'
13044 d_getgrps='$d_getgrps'
13045 d_gethbyaddr='$d_gethbyaddr'
13046 d_gethbyname='$d_gethbyname'
13047 d_gethent='$d_gethent'
13048 d_gethname='$d_gethname'
13049 d_gethostprotos='$d_gethostprotos'
13050 d_getlogin='$d_getlogin'
13051 d_getmntent='$d_getmntent'
13052 d_getnbyaddr='$d_getnbyaddr'
13053 d_getnbyname='$d_getnbyname'
13054 d_getnent='$d_getnent'
13055 d_getnetprotos='$d_getnetprotos'
13056 d_getpbyname='$d_getpbyname'
13057 d_getpbynumber='$d_getpbynumber'
13058 d_getpent='$d_getpent'
13059 d_getpgid='$d_getpgid'
13060 d_getpgrp2='$d_getpgrp2'
13061 d_getpgrp='$d_getpgrp'
13062 d_getppid='$d_getppid'
13063 d_getprior='$d_getprior'
13064 d_getprotoprotos='$d_getprotoprotos'
13065 d_getpwent='$d_getpwent'
13066 d_getsbyname='$d_getsbyname'
13067 d_getsbyport='$d_getsbyport'
13068 d_getsent='$d_getsent'
13069 d_getservprotos='$d_getservprotos'
13070 d_getspent='$d_getspent'
13071 d_getspnam='$d_getspnam'
13072 d_gettimeod='$d_gettimeod'
13073 d_gnulibc='$d_gnulibc'
13074 d_grpasswd='$d_grpasswd'
13075 d_hasmntopt='$d_hasmntopt'
13076 d_htonl='$d_htonl'
13077 d_index='$d_index'
13078 d_inetaton='$d_inetaton'
13079 d_ino64_t='$d_ino64_t'
13080 d_int64t='$d_int64t'
13081 d_iovec_s='$d_iovec_s'
13082 d_isascii='$d_isascii'
13083 d_killpg='$d_killpg'
13084 d_lchown='$d_lchown'
13085 d_link='$d_link'
13086 d_llseek='$d_llseek'
13087 d_locconv='$d_locconv'
13088 d_lockf64='$d_lockf64'
13089 d_lockf='$d_lockf'
13090 d_longdbl='$d_longdbl'
13091 d_longlong='$d_longlong'
13092 d_lseek64='$d_lseek64'
13093 d_lstat64='$d_lstat64'
13094 d_lstat='$d_lstat'
13095 d_madvise='$d_madvise'
13096 d_mblen='$d_mblen'
13097 d_mbstowcs='$d_mbstowcs'
13098 d_mbtowc='$d_mbtowc'
13099 d_memchr='$d_memchr'
13100 d_memcmp='$d_memcmp'
13101 d_memcpy='$d_memcpy'
13102 d_memmove='$d_memmove'
13103 d_memset='$d_memset'
13104 d_mkdir='$d_mkdir'
13105 d_mkfifo='$d_mkfifo'
13106 d_mktime='$d_mktime'
13107 d_mmap='$d_mmap'
13108 d_mprotect='$d_mprotect'
13109 d_msg='$d_msg'
13110 d_msg_ctrunc='$d_msg_ctrunc'
13111 d_msg_dontroute='$d_msg_dontroute'
13112 d_msg_oob='$d_msg_oob'
13113 d_msg_peek='$d_msg_peek'
13114 d_msg_proxy='$d_msg_proxy'
13115 d_msgctl='$d_msgctl'
13116 d_msgget='$d_msgget'
13117 d_msghdr_s='$d_msghdr_s'
13118 d_msgrcv='$d_msgrcv'
13119 d_msgsnd='$d_msgsnd'
13120 d_msync='$d_msync'
13121 d_munmap='$d_munmap'
13122 d_mymalloc='$d_mymalloc'
13123 d_nextkey64='$d_nextkey64'
13124 d_nice='$d_nice'
13125 d_off64_t='$d_off64_t'
13126 d_offset_t='$d_offset_t'
13127 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13128 d_oldpthreads='$d_oldpthreads'
13129 d_oldsock='$d_oldsock'
13130 d_open3='$d_open3'
13131 d_open64='$d_open64'
13132 d_opendir64='$d_opendir64'
13133 d_pathconf='$d_pathconf'
13134 d_pause='$d_pause'
13135 d_phostname='$d_phostname'
13136 d_pipe='$d_pipe'
13137 d_poll='$d_poll'
13138 d_portable='$d_portable'
13139 d_pthread_yield='$d_pthread_yield'
13140 d_pwage='$d_pwage'
13141 d_pwchange='$d_pwchange'
13142 d_pwclass='$d_pwclass'
13143 d_pwcomment='$d_pwcomment'
13144 d_pwexpire='$d_pwexpire'
13145 d_pwgecos='$d_pwgecos'
13146 d_pwpasswd='$d_pwpasswd'
13147 d_pwquota='$d_pwquota'
13148 d_readdir64='$d_readdir64'
13149 d_readdir='$d_readdir'
13150 d_readlink='$d_readlink'
13151 d_readv='$d_readv'
13152 d_recvmsg='$d_recvmsg'
13153 d_rename='$d_rename'
13154 d_rewinddir='$d_rewinddir'
13155 d_rmdir='$d_rmdir'
13156 d_safebcpy='$d_safebcpy'
13157 d_safemcpy='$d_safemcpy'
13158 d_sanemcmp='$d_sanemcmp'
13159 d_sched_yield='$d_sched_yield'
13160 d_scm_rights='$d_scm_rights'
13161 d_seekdir64='$d_seekdir64'
13162 d_seekdir='$d_seekdir'
13163 d_select='$d_select'
13164 d_sem='$d_sem'
13165 d_semctl='$d_semctl'
13166 d_semctl_semid_ds='$d_semctl_semid_ds'
13167 d_semctl_semun='$d_semctl_semun'
13168 d_semget='$d_semget'
13169 d_semop='$d_semop'
13170 d_sendmsg='$d_sendmsg'
13171 d_setegid='$d_setegid'
13172 d_seteuid='$d_seteuid'
13173 d_setgrent='$d_setgrent'
13174 d_setgrps='$d_setgrps'
13175 d_sethent='$d_sethent'
13176 d_setlinebuf='$d_setlinebuf'
13177 d_setlocale='$d_setlocale'
13178 d_setnent='$d_setnent'
13179 d_setpent='$d_setpent'
13180 d_setpgid='$d_setpgid'
13181 d_setpgrp2='$d_setpgrp2'
13182 d_setpgrp='$d_setpgrp'
13183 d_setprior='$d_setprior'
13184 d_setpwent='$d_setpwent'
13185 d_setregid='$d_setregid'
13186 d_setresgid='$d_setresgid'
13187 d_setresuid='$d_setresuid'
13188 d_setreuid='$d_setreuid'
13189 d_setrgid='$d_setrgid'
13190 d_setruid='$d_setruid'
13191 d_setsent='$d_setsent'
13192 d_setsid='$d_setsid'
13193 d_setspent='$d_setspent'
13194 d_setvbuf='$d_setvbuf'
13195 d_sfio='$d_sfio'
13196 d_shm='$d_shm'
13197 d_shmat='$d_shmat'
13198 d_shmatprototype='$d_shmatprototype'
13199 d_shmctl='$d_shmctl'
13200 d_shmdt='$d_shmdt'
13201 d_shmget='$d_shmget'
13202 d_sigaction='$d_sigaction'
13203 d_sigsetjmp='$d_sigsetjmp'
13204 d_socket='$d_socket'
13205 d_sockpair='$d_sockpair'
13206 d_stat64='$d_stat64'
13207 d_statblks='$d_statblks'
13208 d_statfs='$d_statfs'
13209 d_statfsflags='$d_statfsflags'
13210 d_statvfs='$d_statvfs'
13211 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13212 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13213 d_stdio_stream_array='$d_stdio_stream_array'
13214 d_stdiobase='$d_stdiobase'
13215 d_stdstdio='$d_stdstdio'
13216 d_store64='$d_store64'
13217 d_strchr='$d_strchr'
13218 d_strcoll='$d_strcoll'
13219 d_strctcpy='$d_strctcpy'
13220 d_strerrm='$d_strerrm'
13221 d_strerror='$d_strerror'
13222 d_strtod='$d_strtod'
13223 d_strtol='$d_strtol'
13224 d_strtoul='$d_strtoul'
13225 d_strxfrm='$d_strxfrm'
13226 d_suidsafe='$d_suidsafe'
13227 d_symlink='$d_symlink'
13228 d_syscall='$d_syscall'
13229 d_sysconf='$d_sysconf'
13230 d_sysernlst='$d_sysernlst'
13231 d_syserrlst='$d_syserrlst'
13232 d_system='$d_system'
13233 d_tcgetpgrp='$d_tcgetpgrp'
13234 d_tcsetpgrp='$d_tcsetpgrp'
13235 d_telldir64='$d_telldir64'
13236 d_telldir='$d_telldir'
13237 d_telldirproto='$d_telldirproto'
13238 d_time='$d_time'
13239 d_times='$d_times'
13240 d_tmpfile64='$d_tmpfile64'
13241 d_truncate64='$d_truncate64'
13242 d_truncate='$d_truncate'
13243 d_tzname='$d_tzname'
13244 d_umask='$d_umask'
13245 d_uname='$d_uname'
13246 d_union_semun='$d_union_semun'
13247 d_vfork='$d_vfork'
13248 d_void_closedir='$d_void_closedir'
13249 d_voidsig='$d_voidsig'
13250 d_voidtty='$d_voidtty'
13251 d_volatile='$d_volatile'
13252 d_vprintf='$d_vprintf'
13253 d_wait4='$d_wait4'
13254 d_waitpid='$d_waitpid'
13255 d_wcstombs='$d_wcstombs'
13256 d_wctomb='$d_wctomb'
13257 d_writev='$d_writev'
13258 d_xenix='$d_xenix'
13259 date='$date'
13260 db_hashtype='$db_hashtype'
13261 db_prefixtype='$db_prefixtype'
13262 defvoidused='$defvoidused'
13263 direntrytype='$direntrytype'
13264 dlext='$dlext'
13265 dlsrc='$dlsrc'
13266 doublesize='$doublesize'
13267 drand01='$drand01'
13268 dynamic_ext='$dynamic_ext'
13269 eagain='$eagain'
13270 ebcdic='$ebcdic'
13271 echo='$echo'
13272 egrep='$egrep'
13273 emacs='$emacs'
13274 eunicefix='$eunicefix'
13275 exe_ext='$exe_ext'
13276 expr='$expr'
13277 extensions='$extensions'
13278 fflushNULL='$fflushNULL'
13279 fflushall='$fflushall'
13280 find='$find'
13281 firstmakefile='$firstmakefile'
13282 flex='$flex'
13283 fpostype='$fpostype'
13284 freetype='$freetype'
13285 full_ar='$full_ar'
13286 full_csh='$full_csh'
13287 full_sed='$full_sed'
13288 gccversion='$gccversion'
13289 gidtype='$gidtype'
13290 glibpth='$glibpth'
13291 grep='$grep'
13292 groupcat='$groupcat'
13293 groupstype='$groupstype'
13294 gzip='$gzip'
13295 h_fcntl='$h_fcntl'
13296 h_sysfile='$h_sysfile'
13297 hint='$hint'
13298 hostcat='$hostcat'
13299 huge='$huge'
13300 i_arpainet='$i_arpainet'
13301 i_bsdioctl='$i_bsdioctl'
13302 i_db='$i_db'
13303 i_dbm='$i_dbm'
13304 i_dirent='$i_dirent'
13305 i_dld='$i_dld'
13306 i_dlfcn='$i_dlfcn'
13307 i_fcntl='$i_fcntl'
13308 i_float='$i_float'
13309 i_gdbm='$i_gdbm'
13310 i_grp='$i_grp'
13311 i_inttypes='$i_inttypes'
13312 i_limits='$i_limits'
13313 i_locale='$i_locale'
13314 i_machcthr='$i_machcthr'
13315 i_malloc='$i_malloc'
13316 i_math='$i_math'
13317 i_memory='$i_memory'
13318 i_mntent='$i_mntent'
13319 i_ndbm='$i_ndbm'
13320 i_netdb='$i_netdb'
13321 i_neterrno='$i_neterrno'
13322 i_netinettcp='$i_netinettcp'
13323 i_niin='$i_niin'
13324 i_poll='$i_poll'
13325 i_pthread='$i_pthread'
13326 i_pwd='$i_pwd'
13327 i_rpcsvcdbm='$i_rpcsvcdbm'
13328 i_sfio='$i_sfio'
13329 i_sgtty='$i_sgtty'
13330 i_shadow='$i_shadow'
13331 i_stdarg='$i_stdarg'
13332 i_stddef='$i_stddef'
13333 i_stdlib='$i_stdlib'
13334 i_string='$i_string'
13335 i_sysaccess='$i_sysaccess'
13336 i_sysdir='$i_sysdir'
13337 i_sysfile='$i_sysfile'
13338 i_sysfilio='$i_sysfilio'
13339 i_sysin='$i_sysin'
13340 i_sysioctl='$i_sysioctl'
13341 i_sysmman='$i_sysmman'
13342 i_sysmount='$i_sysmount'
13343 i_sysndir='$i_sysndir'
13344 i_sysparam='$i_sysparam'
13345 i_sysresrc='$i_sysresrc'
13346 i_syssecrt='$i_syssecrt'
13347 i_sysselct='$i_sysselct'
13348 i_syssockio='$i_syssockio'
13349 i_sysstat='$i_sysstat'
13350 i_sysstatvfs='$i_sysstatvfs'
13351 i_systime='$i_systime'
13352 i_systimek='$i_systimek'
13353 i_systimes='$i_systimes'
13354 i_systypes='$i_systypes'
13355 i_sysuio='$i_sysuio'
13356 i_sysun='$i_sysun'
13357 i_syswait='$i_syswait'
13358 i_termio='$i_termio'
13359 i_termios='$i_termios'
13360 i_time='$i_time'
13361 i_unistd='$i_unistd'
13362 i_utime='$i_utime'
13363 i_values='$i_values'
13364 i_varargs='$i_varargs'
13365 i_varhdr='$i_varhdr'
13366 i_vfork='$i_vfork'
13367 ignore_versioned_solibs='$ignore_versioned_solibs'
13368 incpath='$incpath'
13369 inews='$inews'
13370 installarchlib='$installarchlib'
13371 installbin='$installbin'
13372 installman1dir='$installman1dir'
13373 installman3dir='$installman3dir'
13374 installprivlib='$installprivlib'
13375 installscript='$installscript'
13376 installsitearch='$installsitearch'
13377 installsitelib='$installsitelib'
13378 installusrbinperl='$installusrbinperl'
13379 intsize='$intsize'
13380 known_extensions='$known_extensions'
13381 ksh='$ksh'
13382 large='$large'
13383 ld='$ld'
13384 lddlflags='$lddlflags'
13385 ldflags='$ldflags'
13386 less='$less'
13387 lib_ext='$lib_ext'
13388 libc='$libc'
13389 libperl='$libperl'
13390 libpth='$libpth'
13391 libs='$libs'
13392 libswanted='$libswanted'
13393 line='$line'
13394 lint='$lint'
13395 lkflags='$lkflags'
13396 ln='$ln'
13397 lns='$lns'
13398 locincpth='$locincpth'
13399 loclibpth='$loclibpth'
13400 longdblsize='$longdblsize'
13401 longlongsize='$longlongsize'
13402 longsize='$longsize'
13403 lp='$lp'
13404 lpr='$lpr'
13405 ls='$ls'
13406 lseeksize='$lseeksize'
13407 lseektype='$lseektype'
13408 mail='$mail'
13409 mailx='$mailx'
13410 make='$make'
13411 make_set_make='$make_set_make'
13412 mallocobj='$mallocobj'
13413 mallocsrc='$mallocsrc'
13414 malloctype='$malloctype'
13415 man1dir='$man1dir'
13416 man1direxp='$man1direxp'
13417 man1ext='$man1ext'
13418 man3dir='$man3dir'
13419 man3direxp='$man3direxp'
13420 man3ext='$man3ext'
13421 medium='$medium'
13422 mips='$mips'
13423 mips_type='$mips_type'
13424 mkdir='$mkdir'
13425 mmaptype='$mmaptype'
13426 models='$models'
13427 modetype='$modetype'
13428 more='$more'
13429 multiarch='$multiarch'
13430 mv='$mv'
13431 myarchname='$myarchname'
13432 mydomain='$mydomain'
13433 myhostname='$myhostname'
13434 myuname='$myuname'
13435 n='$n'
13436 netdb_hlen_type='$netdb_hlen_type'
13437 netdb_host_type='$netdb_host_type'
13438 netdb_name_type='$netdb_name_type'
13439 netdb_net_type='$netdb_net_type'
13440 nm='$nm'
13441 nm_opt='$nm_opt'
13442 nm_so_opt='$nm_so_opt'
13443 nonxs_ext='$nonxs_ext'
13444 nroff='$nroff'
13445 o_nonblock='$o_nonblock'
13446 obj_ext='$obj_ext'
13447 old_pthread_create_joinable='$old_pthread_create_joinable'
13448 optimize='$optimize'
13449 orderlib='$orderlib'
13450 osname='$osname'
13451 osvers='$osvers'
13452 package='$package'
13453 pager='$pager'
13454 passcat='$passcat'
13455 patchlevel='$patchlevel'
13456 path_sep='$path_sep'
13457 perl='$perl'
13458 perladmin='$perladmin'
13459 perlpath='$perlpath'
13460 pg='$pg'
13461 phostname='$phostname'
13462 pidtype='$pidtype'
13463 plibpth='$plibpth'
13464 pmake='$pmake'
13465 pr='$pr'
13466 prefix='$prefix'
13467 prefixexp='$prefixexp'
13468 privlib='$privlib'
13469 privlibexp='$privlibexp'
13470 prototype='$prototype'
13471 ptrsize='$ptrsize'
13472 randbits='$randbits'
13473 randfunc='$randfunc'
13474 randseedtype='$randseedtype'
13475 ranlib='$ranlib'
13476 rd_nodata='$rd_nodata'
13477 rm='$rm'
13478 rmail='$rmail'
13479 runnm='$runnm'
13480 sched_yield='$sched_yield'
13481 scriptdir='$scriptdir'
13482 scriptdirexp='$scriptdirexp'
13483 sed='$sed'
13484 seedfunc='$seedfunc'
13485 selectminbits='$selectminbits'
13486 selecttype='$selecttype'
13487 sendmail='$sendmail'
13488 sh='$sh'
13489 shar='$shar'
13490 sharpbang='$sharpbang'
13491 shmattype='$shmattype'
13492 shortsize='$shortsize'
13493 shrpenv='$shrpenv'
13494 shsharp='$shsharp'
13495 sig_count='$sig_count'
13496 sig_name='$sig_name'
13497 sig_name_init='$sig_name_init'
13498 sig_num='$sig_num'
13499 sig_num_init='$sig_num_init'
13500 signal_t='$signal_t'
13501 sitearch='$sitearch'
13502 sitearchexp='$sitearchexp'
13503 sitelib='$sitelib'
13504 sitelibexp='$sitelibexp'
13505 sizetype='$sizetype'
13506 sleep='$sleep'
13507 smail='$smail'
13508 small='$small'
13509 so='$so'
13510 sockethdr='$sockethdr'
13511 socketlib='$socketlib'
13512 sort='$sort'
13513 spackage='$spackage'
13514 spitshell='$spitshell'
13515 split='$split'
13516 src='$src'
13517 ssizetype='$ssizetype'
13518 startperl='$startperl'
13519 startsh='$startsh'
13520 static_ext='$static_ext'
13521 stdchar='$stdchar'
13522 stdio_base='$stdio_base'
13523 stdio_bufsiz='$stdio_bufsiz'
13524 stdio_cnt='$stdio_cnt'
13525 stdio_filbuf='$stdio_filbuf'
13526 stdio_ptr='$stdio_ptr'
13527 stdio_stream_array='$stdio_stream_array'
13528 strings='$strings'
13529 submit='$submit'
13530 subversion='$subversion'
13531 sysman='$sysman'
13532 tail='$tail'
13533 tar='$tar'
13534 tbl='$tbl'
13535 tee='$tee'
13536 test='$test'
13537 timeincl='$timeincl'
13538 timetype='$timetype'
13539 touch='$touch'
13540 tr='$tr'
13541 trnl='$trnl'
13542 troff='$troff'
13543 uidtype='$uidtype'
13544 uname='$uname'
13545 uniq='$uniq'
13546 use64bits='$use64bits'
13547 usedl='$usedl'
13548 usemultiplicity='$usemultiplicity'
13549 usemymalloc='$usemymalloc'
13550 usenm='$usenm'
13551 useopcode='$useopcode'
13552 useperlio='$useperlio'
13553 useposix='$useposix'
13554 usesfio='$usesfio'
13555 useshrplib='$useshrplib'
13556 usethreads='$usethreads'
13557 usevfork='$usevfork'
13558 usrinc='$usrinc'
13559 uuname='$uuname'
13560 version='$version'
13561 vi='$vi'
13562 voidflags='$voidflags'
13563 xlibpth='$xlibpth'
13564 zcat='$zcat'
13565 zip='$zip'
13566 EOT
13567
13568 : Add in command line options if available
13569 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13570
13571 : add special variables
13572 $test -f $src/patchlevel.h && \
13573 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13574 echo "CONFIGDOTSH=true" >>config.sh
13575
13576 : propagate old symbols
13577 if $test -f UU/config.sh; then
13578         <UU/config.sh sort | uniq >UU/oldconfig.sh
13579         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13580         sort | uniq -u >UU/oldsyms
13581         set X `cat UU/oldsyms`
13582         shift
13583         case $# in
13584         0) ;;
13585         *)
13586                 cat <<EOM
13587 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13588 EOM
13589                 echo "# Variables propagated from previous config.sh file." >>config.sh
13590                 for sym in `cat UU/oldsyms`; do
13591                         echo "    Propagating $hint variable "'$'"$sym..."
13592                         eval 'tmp="$'"${sym}"'"'
13593                         echo "$tmp" | \
13594                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13595                 done
13596                 ;;
13597         esac
13598 fi
13599
13600 : Finish up by extracting the .SH files
13601 case "$alldone" in
13602 exit)
13603         $rm -rf UU
13604         echo "Done."
13605         exit 0
13606         ;;
13607 cont)
13608         ;;
13609 '')
13610         dflt=''
13611         nostick=true
13612         $cat <<EOM
13613
13614 If you'd like to make any changes to the config.sh file before I begin
13615 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13616
13617 EOM
13618         rp="Press return or use a shell escape to edit config.sh:"
13619         . UU/myread
13620         nostick=''
13621         case "$ans" in
13622         '') ;;
13623         *) : in case they cannot read
13624                 sh 1>&4 -c "$ans";;
13625         esac
13626         ;;
13627 esac
13628
13629 : if this fails, just run all the .SH files by hand
13630 . ./config.sh
13631
13632 echo " "
13633 exec 1>&4
13634 . ./UU/extract
13635
13636 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13637         dflt=y
13638         case "$silent" in
13639         true) ;;
13640         *)
13641                 $cat <<EOM
13642
13643 Now you need to generate make dependencies by running "$make depend".
13644 You might prefer to run it in background: "$make depend > makedepend.out &"
13645 It can take a while, so you might not want to run it right now.
13646
13647 EOM
13648                 ;;
13649         esac
13650         rp="Run $make depend now?"
13651         . UU/myread
13652         case "$ans" in
13653         y*)
13654                 $make depend && echo "Now you must run a $make."
13655                 ;;
13656         *)
13657                 echo "You must run '$make depend' then '$make'."
13658                 ;;
13659         esac
13660 elif test -f [Mm]akefile; then
13661         echo " "
13662         echo "Now you must run a $make."
13663 else
13664         echo "Done."
13665 fi
13666
13667 if $test -f Policy.sh; then
13668     $cat <<EOM
13669
13670 If you compile $package on a different machine or from a different object
13671 directory, copy the Policy.sh file from this object directory to the
13672 new one before you run Configure -- this will help you with most of
13673 the policy defaults.
13674
13675 EOM
13676 fi
13677 if $test -f config.msg; then
13678     echo "Hmm.  I also noted the following information while running:"
13679     echo " "
13680     $cat config.msg >&4
13681     $rm -f config.msg
13682 fi
13683 $rm -f kit*isdone ark*isdone
13684 $rm -rf UU
13685
13686 : End of Configure
13687