Integrate with Sarathy.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Jul  6 18:36:05 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_socks=''
632 i_stddef=''
633 i_stdlib=''
634 i_string=''
635 strings=''
636 i_sysaccess=''
637 i_sysdir=''
638 i_sysfile=''
639 d_voidtty=''
640 i_bsdioctl=''
641 i_sysfilio=''
642 i_sysioctl=''
643 i_syssockio=''
644 i_sysmman=''
645 i_sysmount=''
646 i_sysndir=''
647 i_sysparam=''
648 i_sysresrc=''
649 i_syssecrt=''
650 i_sysselct=''
651 i_sysstat=''
652 i_sysstatvfs=''
653 i_systimes=''
654 i_systypes=''
655 d_iovec_s=''
656 i_sysuio=''
657 i_sysun=''
658 i_syswait=''
659 i_sgtty=''
660 i_termio=''
661 i_termios=''
662 i_systime=''
663 i_systimek=''
664 i_time=''
665 timeincl=''
666 i_unistd=''
667 i_utime=''
668 i_values=''
669 i_stdarg=''
670 i_varargs=''
671 i_varhdr=''
672 i_vfork=''
673 installusrbinperl=''
674 intsize=''
675 longsize=''
676 shortsize=''
677 d_dirent64_s=''
678 d_flock64_s=''
679 d_fstat64=''
680 d_ftruncate64=''
681 d_ino64_t=''
682 d_llseek=''
683 d_lockf64=''
684 d_lseek64=''
685 d_lstat64=''
686 d_off64_t=''
687 d_offset_t=''
688 d_open64=''
689 d_opendir64=''
690 d_readdir64=''
691 d_seekdir64=''
692 d_stat64=''
693 d_telldir64=''
694 d_truncate64=''
695 libc=''
696 libperl=''
697 shrpenv=''
698 useshrplib=''
699 glibpth=''
700 libpth=''
701 loclibpth=''
702 plibpth=''
703 xlibpth=''
704 ignore_versioned_solibs=''
705 libs=''
706 lns=''
707 lseeksize=''
708 lseektype=''
709 make_set_make=''
710 d_mymalloc=''
711 freetype=''
712 mallocobj=''
713 mallocsrc=''
714 malloctype=''
715 usemymalloc=''
716 installman1dir=''
717 man1dir=''
718 man1direxp=''
719 man1ext=''
720 installman3dir=''
721 man3dir=''
722 man3direxp=''
723 man3ext=''
724 huge=''
725 large=''
726 medium=''
727 models=''
728 small=''
729 split=''
730 modetype=''
731 multiarch=''
732 mydomain=''
733 myhostname=''
734 phostname=''
735 c=''
736 n=''
737 d_eofnblk=''
738 eagain=''
739 o_nonblock=''
740 rd_nodata=''
741 netdb_hlen_type=''
742 netdb_host_type=''
743 netdb_name_type=''
744 netdb_net_type=''
745 groupcat=''
746 hostcat=''
747 passcat=''
748 orderlib=''
749 ranlib=''
750 package=''
751 spackage=''
752 pager=''
753 apiversion=''
754 patchlevel=''
755 subversion=''
756 version=''
757 perladmin=''
758 perlpath=''
759 pidtype=''
760 prefix=''
761 prefixexp=''
762 installprivlib=''
763 privlib=''
764 privlibexp=''
765 prototype=''
766 ptrsize=''
767 drand01=''
768 randbits=''
769 randfunc=''
770 randseedtype=''
771 seedfunc=''
772 installscript=''
773 scriptdir=''
774 scriptdirexp=''
775 selectminbits=''
776 selecttype=''
777 sh=''
778 sig_count=''
779 sig_name=''
780 sig_name_init=''
781 sig_num=''
782 sig_num_init=''
783 installsitearch=''
784 sitearch=''
785 sitearchexp=''
786 installsitelib=''
787 sitelib=''
788 sitelibexp=''
789 sizetype=''
790 so=''
791 sharpbang=''
792 shsharp=''
793 spitshell=''
794 src=''
795 ssizetype=''
796 startperl=''
797 startsh=''
798 stdchar=''
799 d_fgetpos64=''
800 d_fopen64=''
801 d_freopen64=''
802 d_fseek64=''
803 d_fseeko64=''
804 d_fsetpos64=''
805 d_ftell64=''
806 d_ftello64=''
807 d_tmpfile64=''
808 d_stdio_stream_array=''
809 stdio_stream_array=''
810 sysman=''
811 trnl=''
812 uidtype=''
813 archname64=''
814 use64bits=''
815 usemultiplicity=''
816 nm_opt=''
817 nm_so_opt=''
818 runnm=''
819 usenm=''
820 useperlio=''
821 usesocks=''
822 d_oldpthreads=''
823 usethreads=''
824 incpath=''
825 mips=''
826 mips_type=''
827 usrinc=''
828 defvoidused=''
829 voidflags=''
830 CONFIG=''
831
832 define='define'
833 undef='undef'
834 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
835 rmlist=''
836
837 : We must find out about Eunice early
838 eunicefix=':'
839 if test -f /etc/unixtovms; then
840         eunicefix=/etc/unixtovms
841 fi
842 if test -f /etc/unixtovms.exe; then
843         eunicefix=/etc/unixtovms.exe
844 fi
845
846 i_whoami=''
847 : Possible local include directories to search.
848 : Set locincpth to "" in a hint file to defeat local include searches.
849 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
850 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
851 :
852 : no include file wanted by default
853 inclwanted=''
854
855 : list of known cpp symbols, sorted alphabetically
856 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
857 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
858 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
859 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
860 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
861 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
862 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
863 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
864 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
865 al="$al VMS Xenix286"
866 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
867 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
868 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
869 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
870 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
871 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
872 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
873 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
874 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
875 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
876 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
877 al="$al __SVR4_2__ __UMAXV__"
878 al="$al ____386BSD____ __alpha __alpha__ __amiga"
879 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
880 al="$al __host_mips__"
881 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
882 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
883 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
884 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
885 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
886 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
887 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
888 al="$al __mc88100 __mc88100__ __mips __mips__"
889 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
890 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
891 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
892 al="$al _host_mips _mips _unix"
893 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
894 al="$al apollo ardent att386 att3b"
895 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
896 al="$al cadmus clipper concurrent convex cray ctix"
897 al="$al dmert encore gcos gcx gimpel gould"
898 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
899 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
900 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
901 al="$al i186 i286 i386 i486 i8086"
902 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
903 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
904 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
905 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
906 al="$al mc88000 mc88100 merlin mert mips mvs n16"
907 al="$al ncl_el ncl_mr"
908 al="$al news1500 news1700 news1800 news1900 news3700"
909 al="$al news700 news800 news900 ns16000 ns32000"
910 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
911 al="$al parisc pc532 pdp11 plexus posix pyr"
912 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
913 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
914 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
915 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
916 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
917 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
918 al="$al xenix z8000"
919
920 : Trailing extension.  Override this in a hint file, if needed.
921 _exe=''
922 : Extra object files, if any, needed on this platform.
923 archobjs=''
924 groupstype=''
925 : change the next line if compiling for Xenix/286 on Xenix/386
926 xlibpth='/usr/lib/386 /lib/386'
927
928 : Possible local library directories to search.
929 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
930 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
931
932 : general looking path for locating libraries
933 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
934 glibpth="$glibpth /lib /usr/lib $xlibpth"
935 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
936 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
937
938 : Private path used by Configure to find libraries.  Its value
939 : is prepended to libpth. This variable takes care of special
940 : machines, like the mips.  Usually, it should be empty.
941 plibpth=''
942
943 : default library list
944 libswanted=''
945 : some systems want to use only the non-versioned libso:s
946 ignore_versioned_solibs=''
947 : full support for void wanted by default
948 defvoidused=15
949
950 : set useposix=false in your hint file to disable the POSIX extension.
951 useposix=true
952 : set useopcode=false in your hint file to disable the Opcode extension.
953 useopcode=true
954 : set usemultiplicity on the Configure command line to enable multiplicity.
955 : set usesocks on the Configure command line to enable socks.
956 : set usethreads on the Configure command line to enable threads.
957 : List of libraries we want.
958 : If anyone needs -lnet, put it in a hint file.
959 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
960 libswanted="$libswanted dld ld sun m rt c cposix posix"
961 libswanted="$libswanted ndir dir crypt sec"
962 libswanted="$libswanted ucb bsd BSD PW x"
963 : We probably want to search /usr/shlib before most other libraries.
964 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
965 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
966 glibpth="/usr/shlib $glibpth"
967 : Do not use vfork unless overridden by a hint file.
968 usevfork=false
969
970 : Find the basic shell for Bourne shell scripts
971 case "$sh" in
972 '')
973         case "$SYSTYPE" in
974         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
975         *) xxx='/bin/sh';;
976         esac
977         if test -f "$xxx"; then
978                 sh="$xxx"
979         else
980                 : Build up a list and do a single loop so we can 'break' out.
981                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
982                 for xxx in sh bash ksh pdksh ash; do
983                         for p in $pth; do
984                                 try="$try ${p}/${xxx}"
985                         done
986                 done
987                 for xxx in $try; do
988                         if test -f "$xxx"; then
989                                 sh="$xxx";
990                                 break
991                         elif test -f "$xxx.exe"; then
992                                 sh="$xxx";
993                                 break
994                         fi
995                 done
996         fi
997         ;;
998 esac
999
1000 case "$sh" in
1001 '')     cat <<EOM >&2
1002 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1003
1004 Usually it's in /bin/sh.  How did you even get this far?
1005 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1006 we'll try to straighten this all out.
1007 EOM
1008         exit 1
1009         ;;
1010 esac
1011
1012 : see if sh knows # comments
1013 if `$sh -c '#' >/dev/null 2>&1`; then
1014         shsharp=true
1015         spitshell=cat
1016         xcat=/bin/cat
1017         test -f $xcat || xcat=/usr/bin/cat
1018         echo "#!$xcat" >try
1019         $eunicefix try
1020         chmod +x try
1021         ./try > today
1022         if test -s today; then
1023                 sharpbang='#!'
1024         else
1025                 echo "#! $xcat" > try
1026                 $eunicefix try
1027                 chmod +x try
1028                 ./try > today
1029                 if test -s today; then
1030                         sharpbang='#! '
1031                 else
1032                         sharpbang=': use '
1033                 fi
1034         fi
1035 else
1036         echo " "
1037         echo "Your $sh doesn't grok # comments--I will strip them later on."
1038         shsharp=false
1039         cd ..
1040         echo "exec grep -v '^[  ]*#'" >spitshell
1041         chmod +x spitshell
1042         $eunicefix spitshell
1043         spitshell=`pwd`/spitshell
1044         cd UU
1045         echo "I presume that if # doesn't work, #! won't work either!"
1046         sharpbang=': use '
1047 fi
1048 rm -f try today
1049
1050 : figure out how to guarantee sh startup
1051 case "$startsh" in
1052 '') startsh=${sharpbang}${sh} ;;
1053 *)
1054 esac
1055 cat >try <<EOSS
1056 $startsh
1057 set abc
1058 test "$?abc" != 1
1059 EOSS
1060
1061 chmod +x try
1062 $eunicefix try
1063 if ./try; then
1064         : echo "Yup, it does."
1065 else
1066         echo "Hmm... '$startsh' does not guarantee sh startup..."
1067         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1068 fi
1069 rm -f try
1070
1071
1072 : Save command line options in file UU/cmdline.opt for later use in
1073 : generating config.sh.
1074 cat > cmdline.opt <<EOSH
1075 # Configure command line arguments.
1076 config_arg0='$0'
1077 config_args='$*'
1078 config_argc=$#
1079 EOSH
1080 argn=1
1081 for arg in "$@"; do
1082         cat >>cmdline.opt <<EOSH
1083 config_arg$argn='$arg'
1084 EOSH
1085         argn=`expr $argn + 1`
1086 done
1087
1088 : produce awk script to parse command line options
1089 cat >options.awk <<'EOF'
1090 BEGIN {
1091         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1092
1093         len = length(optstr);
1094         for (i = 1; i <= len; i++) {
1095                 c = substr(optstr, i, 1);
1096                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1097                 if (a == ":") {
1098                         arg[c] = 1;
1099                         i++;
1100                 }
1101                 opt[c] = 1;
1102         }
1103 }
1104 {
1105         expect = 0;
1106         str = $0;
1107         if (substr(str, 1, 1) != "-") {
1108                 printf("'%s'\n", str);
1109                 next;
1110         }
1111         len = length($0);
1112         for (i = 2; i <= len; i++) {
1113                 c = substr(str, i, 1);
1114                 if (!opt[c]) {
1115                         printf("-%s\n", substr(str, i));
1116                         next;
1117                 }
1118                 printf("-%s\n", c);
1119                 if (arg[c]) {
1120                         if (i < len)
1121                                 printf("'%s'\n", substr(str, i + 1));
1122                         else
1123                                 expect = 1;
1124                         next;
1125                 }
1126         }
1127 }
1128 END {
1129         if (expect)
1130                 print "?";
1131 }
1132 EOF
1133
1134 : process the command line options
1135 set X `for arg in "$@"; do echo "X$arg"; done |
1136         sed -e s/X// | awk -f options.awk`
1137 eval "set $*"
1138 shift
1139 rm -f options.awk
1140
1141 : set up default values
1142 fastread=''
1143 reuseval=false
1144 config_sh=''
1145 alldone=''
1146 error=''
1147 silent=''
1148 extractsh=''
1149 override=''
1150 knowitall=''
1151 rm -f optdef.sh
1152 cat >optdef.sh <<EOS
1153 $startsh
1154 EOS
1155
1156
1157 : option parsing
1158 while test $# -gt 0; do
1159         case "$1" in
1160         -d) shift; fastread=yes;;
1161         -e) shift; alldone=cont;;
1162         -f)
1163                 shift
1164                 cd ..
1165                 if test -r "$1"; then
1166                         config_sh="$1"
1167                 else
1168                         echo "$me: cannot read config file $1." >&2
1169                         error=true
1170                 fi
1171                 cd UU
1172                 shift;;
1173         -h) shift; error=true;;
1174         -r) shift; reuseval=true;;
1175         -s) shift; silent=true; realsilent=true;;
1176         -E) shift; alldone=exit;;
1177         -K) shift; knowitall=true;;
1178         -O) shift; override=true;;
1179         -S) shift; silent=true; extractsh=true;;
1180         -D)
1181                 shift
1182                 case "$1" in
1183                 *=)
1184                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1185                         echo "$me: ignoring -D $1" >&2
1186                         ;;
1187                 *=*) echo "$1" | \
1188                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1189                 *) echo "$1='define'" >> optdef.sh;;
1190                 esac
1191                 shift
1192                 ;;
1193         -U)
1194                 shift
1195                 case "$1" in
1196                 *=) echo "$1" >> optdef.sh;;
1197                 *=*)
1198                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1199                         echo "$me: ignoring -U $1" >&2
1200                         ;;
1201                 *) echo "$1='undef'" >> optdef.sh;;
1202                 esac
1203                 shift
1204                 ;;
1205         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1206                 exit 0;;
1207         --) break;;
1208         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1209         *) break;;
1210         esac
1211 done
1212
1213 case "$error" in
1214 true)
1215         cat >&2 <<EOM
1216 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1217                  [-U symbol] [-U symbol=]
1218   -d : use defaults for all answers.
1219   -e : go on without questioning past the production of config.sh.
1220   -f : specify an alternate default configuration file.
1221   -h : print this help message and exit (with an error status).
1222   -r : reuse C symbols value if possible (skips costly nm extraction).
1223   -s : silent mode, only echoes questions and essential information.
1224   -D : define symbol to have some value:
1225          -D symbol         symbol gets the value 'define'
1226          -D symbol=value   symbol gets the value 'value'
1227   -E : stop at the end of questions, after having produced config.sh.
1228   -K : do not use unless you know what you are doing.
1229   -O : let -D and -U override definitions from loaded configuration file.
1230   -S : perform variable substitutions on all .SH files (can mix with -f)
1231   -U : undefine symbol:
1232          -U symbol    symbol gets the value 'undef'
1233          -U symbol=   symbol gets completely empty
1234   -V : print version number and exit (with a zero status).
1235 EOM
1236         exit 1
1237         ;;
1238 esac
1239
1240 : Sanity checks
1241 case "$fastread$alldone" in
1242 yescont|yesexit) ;;
1243 *)
1244         if test ! -t 0; then
1245                 echo "Say 'sh Configure', not 'sh <Configure'"
1246                 exit 1
1247         fi
1248         ;;
1249 esac
1250
1251 exec 4>&1
1252 case "$silent" in
1253 true) exec 1>/dev/null;;
1254 esac
1255
1256 : run the defines and the undefines, if any, but leave the file out there...
1257 touch optdef.sh
1258 . ./optdef.sh
1259
1260 : set package name
1261 package=perl5
1262 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1263 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1264 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1265 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1266 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1267 esac
1268
1269 : Some greps do not return status, grrr.
1270 echo "grimblepritz" >grimble
1271 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1272         contains=contains
1273 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1274         contains=grep
1275 else
1276         contains=contains
1277 fi
1278 rm -f grimble
1279 : the following should work in any shell
1280 case "$contains" in
1281 contains*)
1282         echo " "
1283         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1284         cat >contains <<'EOSS'
1285 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1286 EOSS
1287 chmod +x contains
1288 esac
1289
1290 : Find the path to the source tree
1291 case "$src" in
1292 '') case "$0" in
1293     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1294     *)   src='.';;
1295     esac;;
1296 esac
1297 case "$src" in
1298 '')     src=/
1299         rsrc=/
1300         ;;
1301 /*) rsrc="$src";;
1302 *) rsrc="../$src";;
1303 esac
1304 if test -f $rsrc/Configure && \
1305         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1306 then
1307    : found it, so we are ok.
1308 else
1309         rsrc=''
1310         for src in . .. ../.. ../../.. ../../../..; do
1311                 if test -f ../$src/Configure && \
1312                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1313                 then
1314                         rsrc=../$src
1315                         break
1316                 fi
1317         done
1318 fi
1319 case "$rsrc" in
1320 '')
1321         cat <<EOM >&4
1322
1323 Sorry, I can't seem to locate the source dir for $package.  Please start
1324 Configure with an explicit path -- i.e. /some/path/Configure.
1325
1326 EOM
1327         exit 1
1328         ;;
1329 ../.)   rsrc='..';;
1330 *)
1331         echo " "
1332         echo "Sources for $package found in \"$src\"." >&4
1333         ;;
1334 esac
1335
1336 : script used to extract .SH files with variable substitutions
1337 cat >extract <<'EOS'
1338 CONFIGDOTSH=true
1339 echo "Doing variable substitutions on .SH files..."
1340 if test -f $src/MANIFEST; then
1341         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1342 else
1343         echo "(Looking for .SH files under the source directory.)"
1344         set x `(cd $src; find . -name "*.SH" -print)`
1345 fi
1346 shift
1347 case $# in
1348 0) set x `(cd $src; echo *.SH)`; shift;;
1349 esac
1350 if test ! -f $src/$1; then
1351         shift
1352 fi
1353 mkdir_p='
1354 name=$1;
1355 create="";
1356 while test $name; do
1357         if test ! -d "$name"; then
1358                 create="$name $create";
1359                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1360                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1361         else
1362                 name="";
1363         fi;
1364 done;
1365 for file in $create; do
1366         mkdir $file;
1367 done
1368 '
1369 for file in $*; do
1370         case "$src" in
1371         ".")
1372                 case "$file" in
1373                 */*)
1374                         dir=`expr X$file : 'X\(.*\)/'`
1375                         file=`expr X$file : 'X.*/\(.*\)'`
1376                         (cd $dir && . ./$file)
1377                         ;;
1378                 *)
1379                         . ./$file
1380                         ;;
1381                 esac
1382                 ;;
1383         *)
1384                 case "$file" in
1385                 */*)
1386                         dir=`expr X$file : 'X\(.*\)/'`
1387                         file=`expr X$file : 'X.*/\(.*\)'`
1388                         (set x $dir; shift; eval $mkdir_p)
1389                         sh <$src/$dir/$file
1390                         ;;
1391                 *)
1392                         sh <$src/$file
1393                         ;;
1394                 esac
1395                 ;;
1396         esac
1397 done
1398 if test -f $src/config_h.SH; then
1399         if test ! -f config.h; then
1400         : oops, they left it out of MANIFEST, probably, so do it anyway.
1401         . $src/config_h.SH
1402         fi
1403 fi
1404 EOS
1405
1406 : extract files and exit if asked to do so
1407 case "$extractsh" in
1408 true)
1409         case "$realsilent" in
1410         true) ;;
1411         *) exec 1>&4;;
1412         esac
1413         case "$config_sh" in
1414         '') config_sh='config.sh';;
1415         esac
1416         echo " "
1417         echo "Fetching answers from $config_sh..."
1418         cd ..
1419         . $config_sh
1420         test "$override" && . ./optdef.sh
1421         echo " "
1422         . UU/extract
1423         rm -rf UU
1424         echo "Done."
1425         exit 0
1426         ;;
1427 esac
1428
1429 : Eunice requires " " instead of "", can you believe it
1430 echo " "
1431 : Here we go...
1432 echo "Beginning of configuration questions for $package."
1433
1434 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1435
1436 : first determine how to suppress newline on echo command
1437 echo " "
1438 echo "Checking echo to see how to suppress newlines..."
1439 (echo "hi there\c" ; echo " ") >.echotmp
1440 if $contains c .echotmp >/dev/null 2>&1 ; then
1441         echo "...using -n."
1442         n='-n'
1443         c=''
1444 else
1445         cat <<'EOM'
1446 ...using \c
1447 EOM
1448         n=''
1449         c='\c'
1450 fi
1451 echo $n "The star should be here-->$c"
1452 echo '*'
1453 rm -f .echotmp
1454
1455 : Now test for existence of everything in MANIFEST
1456 echo " "
1457 if test -f $rsrc/MANIFEST; then
1458         echo "First let's make sure your kit is complete.  Checking..." >&4
1459         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1460         rm -f missing
1461         tmppwd=`pwd`
1462         for filelist in x??; do
1463                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1464         done
1465         if test -s missing; then
1466                 cat missing >&4
1467                 cat >&4 <<'EOM'
1468
1469 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1470
1471 You have the option of continuing the configuration process, despite the
1472 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1473 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1474 and contact the author (perlbug@perl.com).
1475
1476 EOM
1477                 echo $n "Continue? [n] $c" >&4
1478                 read ans
1479                 case "$ans" in
1480                 y*)
1481                         echo "Continuing..." >&4
1482                         rm -f missing
1483                         ;;
1484                 *)
1485                         echo "ABORTING..." >&4
1486                         kill $$
1487                         ;;
1488                 esac
1489         else
1490                 echo "Looks good..."
1491         fi
1492 else
1493         echo "There is no MANIFEST file.  I hope your kit is complete !"
1494 fi
1495 rm -f missing x??
1496
1497 echo " "
1498 : Find the appropriate value for a newline for tr
1499 if test -n "$DJGPP"; then
1500        trnl='\012'
1501 fi
1502 if test X"$trnl" = X; then
1503         case "`echo foo|tr '\n' x 2>/dev/null`" in
1504         foox) trnl='\n' ;;
1505         esac
1506 fi
1507 if test X"$trnl" = X; then
1508         case "`echo foo|tr '\012' x 2>/dev/null`" in
1509         foox) trnl='\012' ;;
1510         esac
1511 fi
1512 if test X"$trnl" = X; then
1513         cat <<EOM >&2
1514
1515 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1516
1517 EOM
1518         exit 1
1519 fi
1520
1521 : compute the number of columns on the terminal for proper question formatting
1522 case "$COLUMNS" in
1523 '') COLUMNS='80';;
1524 esac
1525
1526 : set up the echo used in my read
1527 myecho="case \"\$xxxm\" in
1528 '') echo $n \"\$rp $c\" >&4;;
1529 *) case \"\$rp\" in
1530         '') echo $n \"[\$xxxm] $c\";;
1531         *)
1532                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1533                         echo \"\$rp\" >&4
1534                         echo $n \"[\$xxxm] $c\" >&4
1535                 else
1536                         echo $n \"\$rp [\$xxxm] $c\" >&4
1537                 fi
1538                 ;;
1539         esac;;
1540 esac"
1541
1542 : now set up to do reads with possible shell escape and default assignment
1543 cat <<EOSC >myread
1544 $startsh
1545 xxxm=\$dflt
1546 $myecho
1547 ans='!'
1548 case "\$fastread" in
1549 yes) case "\$dflt" in
1550         '') ;;
1551         *) ans='';
1552                 case "\$silent-\$rp" in
1553                 true-) ;;
1554                 *) echo " " >&4;;
1555                 esac;;
1556         esac;;
1557 *) case "\$silent" in
1558         true) case "\$rp" in
1559                 '') ans='';;
1560                 esac;;
1561         esac;;
1562 esac
1563 while expr "X\$ans" : "X!" >/dev/null; do
1564         read answ
1565         set x \$xxxm
1566         shift
1567         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1568         case  "\$answ" in
1569         "!")
1570                 sh 1>&4
1571                 echo " "
1572                 $myecho
1573                 ;;
1574         !*)
1575                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1576                 shift
1577                 sh 1>&4 -c "\$*"
1578                 echo " "
1579                 $myecho
1580                 ;;
1581         "\$ans")
1582                 case "\$ans" in
1583                 \\&*)
1584                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1585                         shift
1586                         case "\$1" in
1587                         -d)
1588                                 fastread=yes
1589                                 echo "(OK, I'll run with -d after this question.)" >&4
1590                                 ;;
1591                         -*)
1592                                 echo "*** Sorry, \$1 not supported yet." >&4
1593                                 ;;
1594                         esac
1595                         $myecho
1596                         ans=!
1597                         ;;
1598                 esac;;
1599         *)
1600                 case "\$aok" in
1601                 y)
1602                         echo "*** Substitution done -- please confirm."
1603                         xxxm="\$ans"
1604                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1605                         xxxm="\$ans"
1606                         ans=!
1607                         ;;
1608                 *)
1609                         echo "*** Error -- try again."
1610                         ans=!
1611                         ;;
1612                 esac
1613                 $myecho
1614                 ;;
1615         esac
1616         case "\$ans\$xxxm\$nostick" in
1617         '')
1618                 ans=!
1619                 $myecho
1620                 ;;
1621         esac
1622 done
1623 case "\$ans" in
1624 '') ans="\$xxxm";;
1625 esac
1626 EOSC
1627
1628 : create .config dir to save info across Configure sessions
1629 test -d ../.config || mkdir ../.config
1630 cat >../.config/README <<EOF
1631 This directory created by Configure to save information that should
1632 persist across sessions for $package.
1633
1634 You may safely delete it if you wish.
1635 EOF
1636
1637 : general instructions
1638 needman=true
1639 firsttime=true
1640 user=`(logname) 2>/dev/null`
1641 case "$user" in
1642 '') user=`whoami 2>&1`;;
1643 esac
1644 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1645         firsttime=false
1646         echo " "
1647         rp='Would you like to see the instructions?'
1648         dflt=n
1649         . ./myread
1650         case "$ans" in
1651         [yY]*) ;;
1652         *) needman=false;;
1653         esac
1654 fi
1655 if $needman; then
1656         cat <<EOH
1657
1658 This installation shell script will examine your system and ask you questions
1659 to determine how the perl5 package should be installed. If you get
1660 stuck on a question, you may use a ! shell escape to start a subshell or
1661 execute a command.  Many of the questions will have default answers in square
1662 brackets; typing carriage return will give you the default.
1663
1664 On some of the questions which ask for file or directory names you are allowed
1665 to use the ~name construct to specify the login directory belonging to "name",
1666 even if you don't have a shell which knows about that.  Questions where this is
1667 allowed will be marked "(~name ok)".
1668
1669 EOH
1670         rp=''
1671         dflt='Type carriage return to continue'
1672         . ./myread
1673         cat <<'EOH'
1674
1675 The prompter used in this script allows you to use shell variables and
1676 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1677 in the default answer, as if the default line was a set of arguments given to a
1678 script shell.  This means you may also use $* to repeat the whole default line,
1679 so you do not have to re-type everything to add something to the default.
1680
1681 Everytime there is a substitution, you will have to confirm.  If there is an
1682 error (e.g. an unmatched backtick), the default answer will remain unchanged
1683 and you will be prompted again.
1684
1685 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1686 the questions and use the computed defaults (or the previous answers if there
1687 was already a config.sh file). Type 'Configure -h' for a list of options.
1688 You may also start interactively and then answer '& -d' at any prompt to turn
1689 on the non-interactive behaviour for the remainder of the execution.
1690
1691 EOH
1692         . ./myread
1693         cat <<EOH
1694
1695 Much effort has been expended to ensure that this shell script will run on any
1696 Unix system.  If despite that it blows up on yours, your best bet is to edit
1697 Configure and run it again.  If you can't run Configure for some reason,
1698 you'll have to generate a config.sh file by hand.  Whatever problems you
1699 have, let me (perlbug@perl.com) know how I blew it.
1700
1701 This installation script affects things in two ways:
1702
1703 1) it may do direct variable substitutions on some of the files included
1704    in this kit.
1705 2) it builds a config.h file for inclusion in C programs.  You may edit
1706    any of these files as the need arises after running this script.
1707
1708 If you make a mistake on a question, there is no easy way to back up to it
1709 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1710 files.  Configure will offer to let you do this before it runs the SH files.
1711
1712 EOH
1713         dflt='Type carriage return to continue'
1714         . ./myread
1715         case "$firsttime" in
1716         true) echo $user >>../.config/instruct;;
1717         esac
1718 fi
1719
1720 : find out where common programs are
1721 echo " "
1722 echo "Locating common programs..." >&4
1723 cat <<EOSC >loc
1724 $startsh
1725 case \$# in
1726 0) exit 1;;
1727 esac
1728 thing=\$1
1729 shift
1730 dflt=\$1
1731 shift
1732 for dir in \$*; do
1733         case "\$thing" in
1734         .)
1735         if test -d \$dir/\$thing; then
1736                 echo \$dir
1737                 exit 0
1738         fi
1739         ;;
1740         *)
1741         for thisthing in \$dir/\$thing; do
1742                 : just loop through to pick last item
1743         done
1744         if test -f \$thisthing; then
1745                 echo \$thisthing
1746                 exit 0
1747         elif test -f \$dir/\$thing.exe; then
1748                 if test -n "$DJGPP"; then
1749                         echo \$dir/\$thing.exe
1750                 else
1751                         : on Eunice apparently
1752                         echo \$dir/\$thing
1753                 fi
1754                 exit 0
1755         fi
1756         ;;
1757         esac
1758 done
1759 echo \$dflt
1760 exit 1
1761 EOSC
1762 chmod +x loc
1763 $eunicefix loc
1764 loclist="
1765 awk
1766 cat
1767 comm
1768 cp
1769 echo
1770 expr
1771 grep
1772 ls
1773 make
1774 mkdir
1775 rm
1776 sed
1777 sort
1778 touch
1779 tr
1780 uniq
1781 "
1782 trylist="
1783 Mcc
1784 ar
1785 byacc
1786 cpp
1787 csh
1788 date
1789 egrep
1790 gzip
1791 less
1792 ln
1793 more
1794 nm
1795 nroff
1796 pg
1797 test
1798 uname
1799 zip
1800 "
1801 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1802 pth="$pth /lib /usr/lib"
1803 for file in $loclist; do
1804         eval xxx=\$$file
1805         case "$xxx" in
1806         /*|?:[\\/]*)
1807                 if test -f "$xxx"; then
1808                         : ok
1809                 else
1810                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1811                         xxx=`./loc $file $file $pth`
1812                 fi
1813                 ;;
1814         '') xxx=`./loc $file $file $pth`;;
1815         *) xxx=`./loc $xxx $xxx $pth`;;
1816         esac
1817         eval $file=$xxx
1818         eval _$file=$xxx
1819         case "$xxx" in
1820         /*)
1821                 echo $file is in $xxx.
1822                 ;;
1823         ?:[\\/]*)
1824                 echo $file is in $xxx.
1825                 ;;
1826         *)
1827                 echo "I don't know where '$file' is, and my life depends on it." >&4
1828                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1829                 exit 1
1830                 ;;
1831         esac
1832 done
1833 echo " "
1834 echo "Don't worry if any of the following aren't found..."
1835 say=offhand
1836 for file in $trylist; do
1837         eval xxx=\$$file
1838         case "$xxx" in
1839         /*|?:[\\/]*)
1840                 if test -f "$xxx"; then
1841                         : ok
1842                 else
1843                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1844                         xxx=`./loc $file $file $pth`
1845                 fi
1846                 ;;
1847         '') xxx=`./loc $file $file $pth`;;
1848         *) xxx=`./loc $xxx $xxx $pth`;;
1849         esac
1850         eval $file=$xxx
1851         eval _$file=$xxx
1852         case "$xxx" in
1853         /*)
1854                 echo $file is in $xxx.
1855                 ;;
1856         ?:[\\/]*)
1857                 echo $file is in $xxx.
1858                 ;;
1859         *)
1860                 echo "I don't see $file out there, $say."
1861                 say=either
1862                 ;;
1863         esac
1864 done
1865 case "$egrep" in
1866 egrep)
1867         echo "Substituting grep for egrep."
1868         egrep=$grep
1869         ;;
1870 esac
1871 case "$ln" in
1872 ln)
1873         echo "Substituting cp for ln."
1874         ln=$cp
1875         ;;
1876 esac
1877 case "$test" in
1878 test)
1879         echo "Hopefully test is built into your sh."
1880         ;;
1881 *)
1882         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1883                 echo "Using the test built into your sh."
1884                 test=test
1885                 _test=test
1886         fi
1887         ;;
1888 esac
1889 case "$echo" in
1890 echo)
1891         echo "Hopefully echo is built into your sh."
1892         ;;
1893 '') ;;
1894 *)
1895         echo " "
1896 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1897         $echo $n "hi there$c" >foo1
1898         echo $n "hi there$c" >foo2
1899         if cmp foo1 foo2 >/dev/null 2>&1; then
1900                 echo "They are compatible.  In fact, they may be identical."
1901         else
1902                 case "$n" in
1903                 '-n') n='' c='\c';;
1904                 *) n='-n' c='';;
1905                 esac
1906                 cat <<FOO
1907 They are not compatible!  You are probably running ksh on a non-USG system.
1908 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1909 have echo built in and we may have to run some Bourne shell scripts.  That
1910 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1911
1912 FOO
1913                 $echo $n "The star should be here-->$c"
1914                 $echo "*"
1915         fi
1916         $rm -f foo1 foo2
1917         ;;
1918 esac
1919
1920 : determine whether symbolic links are supported
1921 echo " "
1922 $touch blurfl
1923 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1924         echo "Symbolic links are supported." >&4
1925         lns="$ln -s"
1926 else
1927         echo "Symbolic links are NOT supported." >&4
1928         lns="$ln"
1929 fi
1930 $rm -f blurfl sym
1931
1932 : see whether [:lower:] and [:upper:] are supported character classes
1933 echo " "
1934 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1935 ABYZ)
1936         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1937         up='[:upper:]'
1938         low='[:lower:]'
1939         ;;
1940 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1941         # (0xc9 and 0xd1), therefore that is a nice testing point.
1942         if test "X$up" = X -o "X$low" = X; then
1943             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1944             ij) up='[A-Z]'
1945                 low='[a-z]'
1946                 ;;
1947             esac
1948         fi
1949         if test "X$up" = X -o "X$low" = X; then
1950             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1951             ij) up='A-Z'
1952                 low='a-z'
1953                 ;;
1954             esac
1955         fi
1956         if test "X$up" = X -o "X$low" = X; then
1957             case "`echo IJ | od -x 2>/dev/null`" in
1958             *C9D1*|*c9d1*)
1959                 echo "Hey, this might be EBCDIC." >&4
1960                 if test "X$up" = X -o "X$low" = X; then
1961                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1962                     ij) up='[A-IJ-RS-Z]'
1963                         low='[a-ij-rs-z]'
1964                         ;;
1965                     esac
1966                 fi
1967                 if test "X$up" = X -o "X$low" = X; then
1968                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1969                     ij) up='A-IJ-RS-Z'
1970                         low='a-ij-rs-z'
1971                         ;;
1972                     esac
1973                 fi
1974                 ;;
1975             esac
1976         fi
1977 esac
1978 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1979 ij)
1980     echo "Using $up and $low to convert case." >&4
1981     ;;
1982 *)
1983     echo "I don't know how to translate letters from upper to lower case." >&4
1984     echo "Your tr is not acting any way I know of." >&4
1985     exit 1
1986     ;;
1987 esac
1988 : set up the translation script tr, must be called with ./tr of course
1989 cat >tr <<EOSC
1990 $startsh
1991 case "\$1\$2" in
1992 '[A-Z][a-z]') exec $tr '$up' '$low';;
1993 '[a-z][A-Z]') exec $tr '$low' '$up';;
1994 esac
1995 exec $tr "\$@"
1996 EOSC
1997 chmod +x tr
1998 $eunicefix tr
1999
2000 : Try to determine whether config.sh was made on this system
2001 case "$config_sh" in
2002 '')
2003 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2004 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2005 # because the A-Z/a-z are not consecutive.
2006 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2007         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2008 newmyuname="$myuname"
2009 dflt=n
2010 case "$knowitall" in
2011 '')
2012         if test -f ../config.sh; then
2013                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2014                         eval "`grep myuname= ../config.sh`"
2015                 fi
2016                 if test "X$myuname" = "X$newmyuname"; then
2017                         dflt=y
2018                 fi
2019         fi
2020         ;;
2021 *) dflt=y;;
2022 esac
2023
2024 : Get old answers from old config file if Configure was run on the
2025 : same system, otherwise use the hints.
2026 hint=default
2027 cd ..
2028 if test -f config.sh; then
2029         echo " "
2030         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2031         . UU/myread
2032         case "$ans" in
2033         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2034         *)  echo "Fetching default answers from your old config.sh file..." >&4
2035                 tmp_n="$n"
2036                 tmp_c="$c"
2037                 tmp_sh="$sh"
2038                 . ./config.sh
2039                 cp config.sh UU
2040                 n="$tmp_n"
2041                 c="$tmp_c"
2042                 : Older versions did not always set $sh.  Catch re-use of such
2043                 : an old config.sh.
2044                 case "$sh" in
2045                 '') sh="$tmp_sh" ;;
2046                 esac
2047                 hint=previous
2048                 ;;
2049         esac
2050 fi
2051 if test ! -f config.sh; then
2052         $cat <<EOM
2053
2054 First time through, eh?  I have some defaults handy for some systems
2055 that need some extra help getting the Configure answers right:
2056
2057 EOM
2058         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2059         dflt=''
2060         : Half the following guesses are probably wrong... If you have better
2061         : tests or hints, please send them to perlbug@perl.com
2062         : The metaconfig authors would also appreciate a copy...
2063         $test -f /irix && osname=irix
2064         $test -f /xenix && osname=sco_xenix
2065         $test -f /dynix && osname=dynix
2066         $test -f /dnix && osname=dnix
2067         $test -f /lynx.os && osname=lynxos
2068         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2069         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2070         $test -f /bin/mips && /bin/mips && osname=mips
2071         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2072                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2073         $test -d /usr/apollo/bin && osname=apollo
2074         $test -f /etc/saf/_sactab && osname=svr4
2075         $test -d /usr/include/minix && osname=minix
2076         if $test -d /MachTen -o -d /MachTen_Folder; then
2077                 osname=machten
2078                 if $test -x /sbin/version; then
2079                         osvers=`/sbin/version | $awk '{print $2}' |
2080                         $sed -e 's/[A-Za-z]$//'`
2081                 elif $test -x /usr/etc/version; then
2082                         osvers=`/usr/etc/version | $awk '{print $2}' |
2083                         $sed -e 's/[A-Za-z]$//'`
2084                 else
2085                         osvers="$2.$3"
2086                 fi
2087         fi
2088        $test -f /sys/posix.dll &&
2089                $test -f /usr/bin/what &&
2090                set X `/usr/bin/what /sys/posix.dll` &&
2091                $test "$3" = UWIN &&
2092                osname=uwin &&
2093                osvers="$5"
2094         if $test -f $uname; then
2095                 set X $myuname
2096                 shift
2097
2098                 case "$5" in
2099                 fps*) osname=fps ;;
2100                 mips*)
2101                         case "$4" in
2102                         umips) osname=umips ;;
2103                         *) osname=mips ;;
2104                         esac;;
2105                 [23]100) osname=mips ;;
2106                 next*) osname=next ;;
2107                 i386*)
2108                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2109                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2110                                 osname='sco'
2111                                 osvers=$tmp
2112                         elif $test -f /etc/kconfig; then
2113                                 osname=isc
2114                                 if test "$lns" = "$ln -s"; then
2115                                         osvers=4
2116                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2117                                         osvers=3
2118                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2119                                         osvers=2
2120                                 fi
2121                         fi
2122                         tmp=''
2123                         ;;
2124                 pc*)
2125                         if test -n "$DJGPP"; then
2126                                 osname=dos
2127                                 osvers=djgpp
2128                         fi
2129                         ;;
2130                 esac
2131
2132                 case "$1" in
2133                 aix) osname=aix
2134                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2135                         case "$tmp" in
2136                         'not found') osvers="$4"."$3" ;;
2137                         '<3240'|'<>3240') osvers=3.2.0 ;;
2138                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2139                         '=3250'|'>3250') osvers=3.2.5 ;;
2140                         *) osvers=$tmp;;
2141                         esac
2142                         ;;
2143                 *dc.osx) osname=dcosx
2144                         osvers="$3"
2145                         ;;
2146                 dnix) osname=dnix
2147                         osvers="$3"
2148                         ;;
2149                 domainos) osname=apollo
2150                         osvers="$3"
2151                         ;;
2152                 dgux) osname=dgux 
2153                         osvers="$3"
2154                         ;;
2155                 dynixptx*) osname=dynixptx
2156                         osvers=`echo "$4"|sed 's/^v//'`
2157                         ;;
2158                 freebsd) osname=freebsd 
2159                         osvers="$3" ;;
2160                 genix) osname=genix ;;
2161                 hp*) osname=hpux 
2162                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2163                         ;;
2164                 irix*) osname=irix
2165                         case "$3" in
2166                         4*) osvers=4 ;;
2167                         5*) osvers=5 ;;
2168                         *)      osvers="$3" ;;
2169                         esac
2170                         ;;
2171                 linux) osname=linux
2172                         case "$3" in
2173                         *)      osvers="$3" ;;
2174                         esac
2175                         ;;
2176                 MiNT) osname=mint
2177                         ;;
2178                 netbsd*) osname=netbsd
2179                         osvers="$3"
2180                         ;;
2181                 news-os) osvers="$3"
2182                         case "$3" in
2183                         4*) osname=newsos4 ;;
2184                         *) osname=newsos ;;
2185                         esac
2186                         ;;
2187                 bsd386) osname=bsd386
2188                         osvers=`$uname -r`
2189                         ;;
2190                 POSIX-BC | posix-bc ) osname=posix-bc
2191                         osvers="$3"
2192                         ;;
2193                 powerux | power_ux | powermax_os | powermaxos | \
2194                 powerunix | power_unix) osname=powerux
2195                         osvers="$3"
2196                         ;;
2197                 next*) osname=next ;;
2198                 solaris) osname=solaris
2199                         case "$3" in
2200                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2201                         *)      osvers="$3" ;;
2202                         esac
2203                         ;;
2204                 sunos) osname=sunos
2205                         case "$3" in
2206                         5*) osname=solaris
2207                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2208                         *)      osvers="$3" ;;
2209                         esac
2210                         ;;
2211                 titanos) osname=titanos
2212                         case "$3" in
2213                         1*) osvers=1 ;;
2214                         2*) osvers=2 ;;
2215                         3*) osvers=3 ;;
2216                         4*) osvers=4 ;;
2217                         *)      osvers="$3" ;;
2218                         esac
2219                         ;;
2220                 ultrix) osname=ultrix
2221                         osvers="$3"
2222                         ;;
2223                 osf1|mls+)      case "$5" in
2224                                 alpha)
2225                                         osname=dec_osf
2226                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2227                                         ;;
2228                         hp*)    osname=hp_osf1  ;;
2229                         mips)   osname=mips_osf1 ;;
2230                         esac
2231                         ;;
2232                 uts) osname=uts 
2233                         osvers="$3"
2234                         ;;
2235                 qnx) osname=qnx
2236                         osvers="$4"
2237                         ;;
2238                 $2) case "$osname" in
2239                         *isc*) ;;
2240                         *freebsd*) ;;
2241                         svr*)
2242                                 : svr4.x or possibly later
2243                                 case "svr$3" in 
2244                                 ${osname}*)
2245                                         osname=svr$3
2246                                         osvers=$4
2247                                         ;;
2248                                 esac
2249                                 case "$osname" in
2250                                 svr4.0)
2251                                         : Check for ESIX
2252                                         if test -f /stand/boot ; then
2253                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2254                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2255                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2256                                                         if test -n "$isesix"; then
2257                                                                 osname=esix4
2258                                                         fi
2259                                                 fi
2260                                         fi
2261                                         ;;
2262                                 esac
2263                                 ;;
2264                         *)      if test -f /etc/systemid; then
2265                                         osname=sco
2266                                         set `echo $3 | $sed 's/\./ /g'` $4
2267                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2268                                                 osvers=$1.$2.$3
2269                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2270                                                 osvers=$1.$2
2271                                         elif $test -f $src/hints/sco_$1.sh; then
2272                                                 osvers=$1
2273                                         fi
2274                                 else
2275                                         case "$osname" in
2276                                         '') : Still unknown.  Probably a generic Sys V.
2277                                                 osname="sysv"
2278                                                 osvers="$3"
2279                                                 ;;
2280                                         esac
2281                                 fi
2282                                 ;;
2283                         esac
2284                         ;;
2285                 *)      case "$osname" in
2286                         '') : Still unknown.  Probably a generic BSD.
2287                                 osname="$1"
2288                                 osvers="$3"
2289                                 ;;
2290                         esac
2291                         ;;
2292                 esac
2293         else
2294                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2295                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2296                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2297                                 osname=news_os
2298                         fi
2299                         $rm -f UU/kernel.what
2300                 elif test -d c:/.; then
2301                         set X $myuname
2302                         osname=os2
2303                         osvers="$5"
2304                 fi
2305         fi
2306         
2307         : Now look for a hint file osname_osvers, unless one has been
2308         : specified already.
2309         case "$hintfile" in
2310         ''|' ')
2311                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2312                 : Also try without trailing minor version numbers.
2313                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2314                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2315                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2316                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2317                 case "$file" in
2318                 '') dflt=none ;;
2319                 *)  case "$osvers" in
2320                         '') dflt=$file
2321                                 ;;
2322                         *)  if $test -f $src/hints/$file.sh ; then
2323                                         dflt=$file
2324                                 elif $test -f $src/hints/$xfile.sh ; then
2325                                         dflt=$xfile
2326                                 elif $test -f $src/hints/$xxfile.sh ; then
2327                                         dflt=$xxfile
2328                                 elif $test -f $src/hints/$xxxfile.sh ; then
2329                                         dflt=$xxxfile
2330                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2331                                         dflt=$xxxxfile
2332                                 elif $test -f "$src/hints/${osname}.sh" ; then
2333                                         dflt="${osname}"
2334                                 else
2335                                         dflt=none
2336                                 fi
2337                                 ;;
2338                         esac
2339                         ;;
2340                 esac
2341                 if $test -f Policy.sh ; then
2342                         case "$dflt" in
2343                         *Policy*) ;;
2344                         none) dflt="Policy" ;;
2345                         *) dflt="Policy $dflt" ;;
2346                         esac
2347                 fi
2348                 ;;
2349         *)
2350                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2351                 ;;
2352         esac
2353
2354         if $test -f Policy.sh ; then
2355                 $cat <<EOM
2356
2357 There's also a Policy hint file available, which should make the
2358 site-specific (policy) questions easier to answer.
2359 EOM
2360
2361         fi
2362
2363         $cat <<EOM
2364
2365 You may give one or more space-separated answers, or "none" if appropriate.
2366 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2367 is a good thing.  DO NOT give a wrong version.
2368
2369 EOM
2370
2371         rp="Which of these apply, if any?"
2372         . UU/myread
2373         tans=$ans
2374         for file in $tans; do
2375                 if $test X$file = XPolicy -a -f Policy.sh; then
2376                         . Policy.sh
2377                         $cat Policy.sh >> UU/config.sh
2378                 elif $test -f $src/hints/$file.sh; then
2379                         . $src/hints/$file.sh
2380                         $cat $src/hints/$file.sh >> UU/config.sh
2381                 elif $test X$tans = X -o X$tans = Xnone ; then
2382                         : nothing
2383                 else
2384                         : Give one chance to correct a possible typo.
2385                         echo "$file.sh does not exist"
2386                         dflt=$file
2387                         rp="hint to use instead?"
2388                         . UU/myread
2389                         for file in $ans; do
2390                                 if $test -f "$src/hints/$file.sh"; then
2391                                         . $src/hints/$file.sh
2392                                         $cat $src/hints/$file.sh >> UU/config.sh
2393                                 elif $test X$ans = X -o X$ans = Xnone ; then
2394                                         : nothing
2395                                 else
2396                                         echo "$file.sh does not exist -- ignored."
2397                                 fi
2398                         done
2399                 fi
2400         done
2401
2402         hint=recommended
2403         : Remember our hint file for later.
2404         if $test -f "$src/hints/$file.sh" ; then
2405                 hintfile="$file"
2406         else
2407                 hintfile=''
2408         fi
2409 fi
2410 cd UU
2411 ;;
2412 *)
2413         echo " "
2414         echo "Fetching default answers from $config_sh..." >&4
2415         tmp_n="$n"
2416         tmp_c="$c"
2417         cd ..
2418         cp $config_sh config.sh 2>/dev/null
2419         chmod +w config.sh
2420         . ./config.sh
2421         cd UU
2422         cp ../config.sh .
2423         n="$tmp_n"
2424         c="$tmp_c"
2425         hint=previous
2426         ;;
2427 esac
2428 test "$override" && . ./optdef.sh
2429 myuname="$newmyuname"
2430
2431 : Restore computed paths
2432 for file in $loclist $trylist; do
2433         eval $file="\$_$file"
2434 done
2435
2436 cat << EOM
2437
2438 Configure uses the operating system name and version to set some defaults.
2439 The default value is probably right if the name rings a bell. Otherwise,
2440 since spelling matters for me, either accept the default or answer "none"
2441 to leave it blank.
2442
2443 EOM
2444 case "$osname" in
2445         ''|' ')
2446                 case "$hintfile" in
2447                 ''|' '|none) dflt=none ;;
2448                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2449                 esac
2450                 ;;
2451         *) dflt="$osname" ;;
2452 esac
2453 rp="Operating system name?"
2454 . ./myread
2455 case "$ans" in
2456 none)  osname='' ;;
2457 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2458 esac
2459 echo " "
2460 case "$osvers" in
2461         ''|' ')
2462                 case "$hintfile" in
2463                 ''|' '|none) dflt=none ;;
2464                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2465                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2466                         case "$dflt" in
2467                         ''|' ') dflt=none ;;
2468                         esac
2469                         ;;
2470                 esac
2471                 ;;
2472         *) dflt="$osvers" ;;
2473 esac
2474 rp="Operating system version?"
2475 . ./myread
2476 case "$ans" in
2477 none)  osvers='' ;;
2478 *) osvers="$ans" ;;
2479 esac
2480
2481 : who configured the system
2482 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2483 cf_by=`(logname) 2>/dev/null`
2484 case "$cf_by" in
2485 "")
2486         cf_by=`(whoami) 2>/dev/null`
2487         case "$cf_by" in
2488         "") cf_by=unknown ;;
2489         esac ;;
2490 esac
2491
2492 : set up the script used to warn in case of inconsistency
2493 cat <<EOS >whoa
2494 $startsh
2495 EOS
2496 cat <<'EOSC' >>whoa
2497 dflt=y
2498 echo " "
2499 echo "*** WHOA THERE!!! ***" >&4
2500 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2501 rp="    Keep the $hint value?"
2502 . ./myread
2503 case "$ans" in
2504 y) td=$was; tu=$was;;
2505 esac
2506 EOSC
2507
2508 : function used to set $1 to $val
2509 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2510 case "$val$was" in
2511 $define$undef) . ./whoa; eval "$var=\$td";;
2512 $undef$define) . ./whoa; eval "$var=\$tu";;
2513 *) eval "$var=$val";;
2514 esac'
2515
2516 cat <<EOM
2517
2518 Perl can be built to take advantage of threads, on some systems.
2519 To do so, Configure must be run with -Dusethreads.
2520
2521 Note that threading is a highly experimental feature, and
2522 some known race conditions still remain.  If you choose to try
2523 it, be very sure to not actually deploy it for production
2524 purposes.  README.threads has more details, and is required
2525 reading if you enable threads.
2526 EOM
2527 case "$usethreads" in
2528 $define|true|[yY]*)     dflt='y';;
2529 *) dflt='n';;
2530 esac
2531 rp='Build a threading Perl?'
2532 . ./myread
2533 case "$ans" in
2534 y|Y)    val="$define" ;;     
2535 *)      val="$undef" ;;
2536 esac
2537 set usethreads
2538 eval $setvar 
2539
2540 case "$d_oldpthreads" in
2541 '')     : Configure tests would be welcome here.  For now, assume undef.
2542         val="$undef" ;;
2543 *)      val="$d_oldpthreads" ;;
2544 esac
2545 set d_oldpthreads
2546 eval $setvar
2547
2548
2549 case "$usethreads" in
2550 "$define"|true|[yY]*)
2551 : Look for a hint-file generated 'call-back-unit'.  If the
2552 : user has specified that a threading perl is to be built,
2553 : we may need to set or change some other defaults.
2554         if $test -f usethreads.cbu; then
2555                 . ./usethreads.cbu
2556         fi
2557         case "$osname" in
2558         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2559                 # Known thread-capable platforms.
2560                 ;;
2561         *)
2562                 cat >&4 <<EOM
2563 $osname is not known to support threads.
2564 Please let perlbug@perl.com know how to do that.
2565
2566 Cannot continue, aborting.
2567 EOM
2568                 exit 1
2569         ;;
2570         esac # $osname
2571     ;;
2572 esac # $usethreads
2573
2574 cat <<EOM
2575
2576 Perl can be built so that multiple Perl interpreters can coexist
2577 within the same Perl executable.  To do so, Configure must be run with
2578 -Dusemultiplicity.
2579
2580 Normally you do not need this and you should answer no.
2581
2582 EOM
2583 case "$usemultiplicity" in
2584 $define|true|[yY]*)     dflt='y';;
2585 *) dflt='n';;
2586 esac
2587 rp='Build Perl for multiplicity?'
2588 . ./myread
2589 case "$ans" in
2590 y|Y)    val="$define" ;;     
2591 *)      val="$undef" ;;
2592 esac
2593 set usemultiplicity
2594 eval $setvar 
2595
2596 cat <<EOM
2597
2598 Perl can be built to take advantage of explicit 64-bit interfaces,
2599 on some systems.  To do so, Configure must be run with -Duse64bits.
2600
2601 If this doesn't make any sense to you, just accept the default 'n'.
2602 EOM
2603 case "$use64bits" in
2604 $define|true|[yY]*)     dflt='y';;
2605 *) dflt='n';;
2606 esac
2607 rp='Try to use explicit 64-bit interfaces, if available?'
2608 . ./myread
2609 case "$ans" in
2610 y|Y) 
2611         val="$define"
2612         ;;     
2613 *)      
2614         val="$undef"
2615         ;;
2616 esac
2617 set use64bits
2618 eval $setvar
2619
2620 case "$archname64" in
2621 '') archname64='' ;;    # not a typo
2622 esac
2623
2624 case "$use64bits" in
2625 "$define"|true|[yY]*)
2626 : Look for a hint-file generated 'call-back-unit'.  If the
2627 : user has specified that a threading perl is to be built,
2628 : we may need to set or change some other defaults.
2629         if $test -f use64bits.cbu; then
2630                 . ./use64bits.cbu
2631         fi
2632         case "$osname" in
2633         aix|dec_osf|hpux|irix|solaris|unicos)
2634                 # Known 64-bit capable platforms.
2635                 ;;
2636         *)
2637                 cat >&4 <<EOM
2638 $osname is not known to support 64-bit interfaces.
2639 Please let perlbug@perl.com know how to do that.
2640
2641 Cannot continue, aborting.
2642 EOM
2643                 exit 1
2644                 ;;
2645         esac
2646         ;;
2647 esac
2648
2649 : determine the architecture name
2650 echo " "
2651 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2652         tarch=`arch`"-$osname"
2653 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2654         if uname -m > tmparch 2>&1 ; then
2655                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2656                         -e 's/$/'"-$osname/" tmparch`
2657         else
2658                 tarch="$osname"
2659         fi
2660         $rm -f tmparch
2661 else
2662         tarch="$osname"
2663 fi
2664 case "$myarchname" in
2665 ''|"$tarch") ;;
2666 *)
2667         echo "(Your architecture name used to be $myarchname.)"
2668         archname=''
2669         ;;
2670 esac
2671 myarchname="$tarch"
2672 case "$archname" in
2673 '') dflt="$tarch";;
2674 *) dflt="$archname";;
2675 esac
2676 rp='What is your architecture name'
2677 . ./myread
2678 archname="$ans"
2679 case "$usethreads" in
2680 $define)
2681         echo "Threads selected." >&4
2682         case "$archname" in
2683         *-thread*) echo "...and architecture name already has -thread." >&4
2684                 ;;
2685         *)      archname="$archname-thread"
2686                 echo "...setting architecture name to $archname." >&4
2687                 ;;
2688         esac
2689         ;;
2690 esac
2691 case "$usemultiplicity" in
2692 $define)
2693         echo "Multiplicity selected." >&4
2694         case "$archname" in
2695         *-multi*) echo "...and architecture name already has -multi." >&4
2696                 ;;
2697         *)      archname="$archname-multi"
2698                 echo "...setting architecture name to $archname." >&4
2699                 ;;
2700         esac
2701         ;;
2702 esac
2703 case "$use64bits" in
2704 $define)
2705         echo "Explicit 64-bitness selected." >&4
2706         case "$archname64" in
2707         '')
2708                 ;;
2709         *)
2710                 case "$archname" in
2711                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2712                         ;;
2713                 *)      archname="$archname-$archname64"
2714                         echo "...setting architecture name to $archname." >&4
2715                         ;;
2716                 esac
2717                 ;;
2718         esac
2719 esac
2720
2721 : is AFS running?
2722 echo " "
2723 case "$afs" in
2724 $define|true)   afs=true ;;
2725 $undef|false)   afs=false ;;
2726 *)      if test -d /afs; then
2727                 afs=true
2728         else
2729                 afs=false
2730         fi
2731         ;;
2732 esac
2733 if $afs; then
2734         echo "AFS may be running... I'll be extra cautious then..." >&4
2735 else
2736         echo "AFS does not seem to be running..." >&4
2737 fi
2738
2739 : decide how portable to be.  Allow command line overrides.
2740 case "$d_portable" in
2741 "$undef") ;;
2742 *)      d_portable="$define" ;;
2743 esac
2744
2745 : set up shell script to do ~ expansion
2746 cat >filexp <<EOSS
2747 $startsh
2748 : expand filename
2749 case "\$1" in
2750  ~/*|~)
2751         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2752         ;;
2753  ~*)
2754         if $test -f /bin/csh; then
2755                 /bin/csh -f -c "glob \$1"
2756                 failed=\$?
2757                 echo ""
2758                 exit \$failed
2759         else
2760                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2761                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2762                 if $test ! -d "\$dir"; then
2763                         me=\`basename \$0\`
2764                         echo "\$me: can't locate home directory for: \$name" >&2
2765                         exit 1
2766                 fi
2767                 case "\$1" in
2768                 */*)
2769                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2770                         ;;
2771                 *)
2772                         echo \$dir
2773                         ;;
2774                 esac
2775         fi
2776         ;;
2777 *)
2778         echo \$1
2779         ;;
2780 esac
2781 EOSS
2782 chmod +x filexp
2783 $eunicefix filexp
2784
2785 : now set up to get a file name
2786 cat <<EOS >getfile
2787 $startsh
2788 EOS
2789 cat <<'EOSC' >>getfile
2790 tilde=''
2791 fullpath=''
2792 already=''
2793 skip=''
2794 none_ok=''
2795 exp_file=''
2796 nopath_ok=''
2797 orig_rp="$rp"
2798 orig_dflt="$dflt"
2799
2800 case "$fn" in
2801 *\(*)
2802         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2803         fn=`echo $fn | sed 's/(.*)//'`
2804         ;;
2805 esac
2806
2807 case "$fn" in
2808 *:*)
2809         loc_file=`expr $fn : '.*:\(.*\)'`
2810         fn=`expr $fn : '\(.*\):.*'`
2811         ;;
2812 esac
2813
2814 case "$fn" in
2815 *~*) tilde=true;;
2816 esac
2817 case "$fn" in
2818 */*) fullpath=true;;
2819 esac
2820 case "$fn" in
2821 *+*) skip=true;;
2822 esac
2823 case "$fn" in
2824 *n*) none_ok=true;;
2825 esac
2826 case "$fn" in
2827 *e*) exp_file=true;;
2828 esac
2829 case "$fn" in
2830 *p*) nopath_ok=true;;
2831 esac
2832
2833 case "$fn" in
2834 *f*) type='File';;
2835 *d*) type='Directory';;
2836 *l*) type='Locate';;
2837 esac
2838
2839 what="$type"
2840 case "$what" in
2841 Locate) what='File';;
2842 esac
2843
2844 case "$exp_file" in
2845 '')
2846         case "$d_portable" in
2847         "$define") ;;
2848         *) exp_file=true;;
2849         esac
2850         ;;
2851 esac
2852
2853 cd ..
2854 while test "$type"; do
2855         redo=''
2856         rp="$orig_rp"
2857         dflt="$orig_dflt"
2858         case "$tilde" in
2859         true) rp="$rp (~name ok)";;
2860         esac
2861         . UU/myread
2862         if test -f UU/getfile.ok && \
2863                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2864         then
2865                 value="$ans"
2866                 ansexp="$ans"
2867                 break
2868         fi
2869         case "$ans" in
2870         none)
2871                 value=''
2872                 ansexp=''
2873                 case "$none_ok" in
2874                 true) type='';;
2875                 esac
2876                 ;;
2877         *)
2878                 case "$tilde" in
2879                 '') value="$ans"
2880                         ansexp="$ans";;
2881                 *)
2882                         value=`UU/filexp $ans`
2883                         case $? in
2884                         0)
2885                                 if test "$ans" != "$value"; then
2886                                         echo "(That expands to $value on this system.)"
2887                                 fi
2888                                 ;;
2889                         *) value="$ans";;
2890                         esac
2891                         ansexp="$value"
2892                         case "$exp_file" in
2893                         '') value="$ans";;
2894                         esac
2895                         ;;
2896                 esac
2897                 case "$fullpath" in
2898                 true)
2899                         case "$ansexp" in
2900                         /*) value="$ansexp" ;;
2901                         *)
2902                                 redo=true
2903                                 case "$already" in
2904                                 true)
2905                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2906                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2907                                         ;;
2908                                 *)
2909                                 echo "Please give a full path name, starting with slash." >&4
2910                                         case "$tilde" in
2911                                         true)
2912                                 echo "Note that using ~name is ok provided it expands well." >&4
2913                                                 already=true
2914                                                 ;;
2915                                         esac
2916                                 esac
2917                                 ;;
2918                         esac
2919                         ;;
2920                 esac
2921                 case "$redo" in
2922                 '')
2923                         case "$type" in
2924                         File)
2925                                 if test -f "$ansexp"; then
2926                                         type=''
2927                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2928                                 then
2929                                         echo "($value is not a plain file, but that's ok.)"
2930                                         type=''
2931                                 fi
2932                                 ;;
2933                         Directory)
2934                                 if test -d "$ansexp"; then
2935                                         type=''
2936                                 fi
2937                                 ;;
2938                         Locate)
2939                                 if test -d "$ansexp"; then
2940                                         echo "(Looking for $loc_file in directory $value.)"
2941                                         value="$value/$loc_file"
2942                                         ansexp="$ansexp/$loc_file"
2943                                 fi
2944                                 if test -f "$ansexp"; then
2945                                         type=''
2946                                 fi
2947                                 case "$nopath_ok" in
2948                                 true)   case "$value" in
2949                                         */*) ;;
2950                                         *)      echo "Assuming $value will be in people's path."
2951                                                 type=''
2952                                                 ;;
2953                                         esac
2954                                         ;;
2955                                 esac
2956                                 ;;
2957                         esac
2958
2959                         case "$skip" in
2960                         true) type='';
2961                         esac
2962
2963                         case "$type" in
2964                         '') ;;
2965                         *)
2966                                 if test "$fastread" = yes; then
2967                                         dflt=y
2968                                 else
2969                                         dflt=n
2970                                 fi
2971                                 rp="$what $value doesn't exist.  Use that name anyway?"
2972                                 . UU/myread
2973                                 dflt=''
2974                                 case "$ans" in
2975                                 y*) type='';;
2976                                 *) echo " ";;
2977                                 esac
2978                                 ;;
2979                         esac
2980                         ;;
2981                 esac
2982                 ;;
2983         esac
2984 done
2985 cd UU
2986 ans="$value"
2987 rp="$orig_rp"
2988 dflt="$orig_dflt"
2989 rm -f getfile.ok
2990 EOSC
2991
2992 : determine root of directory hierarchy where package will be installed.
2993 case "$prefix" in
2994 '')
2995         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2996         ;;
2997 *)
2998         dflt="$prefix"
2999         ;;
3000 esac
3001 $cat <<EOM
3002
3003 By default, $package will be installed in $dflt/bin, manual
3004 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3005 all installation directories. Typically set to /usr/local, but you
3006 may choose /usr if you wish to install $package among your system
3007 binaries. If you wish to have binaries under /bin but manual pages
3008 under /usr/local/man, that's ok: you will be prompted separately
3009 for each of the installation directories, the prefix being only used
3010 to set the defaults.
3011
3012 EOM
3013 fn=d~
3014 rp='Installation prefix to use?'
3015 . ./getfile
3016 oldprefix=''
3017 case "$prefix" in
3018 '') ;;
3019 *)
3020         case "$ans" in
3021         "$prefix") ;;
3022         *) oldprefix="$prefix";;
3023         esac
3024         ;;
3025 esac
3026 prefix="$ans"
3027 prefixexp="$ansexp"
3028
3029 : set the prefixit variable, to compute a suitable default value
3030 prefixit='case "$3" in
3031 ""|none)
3032         case "$oldprefix" in
3033         "") eval "$1=\"\$$2\"";;
3034         *)
3035                 case "$3" in
3036                 "") eval "$1=";;
3037                 none)
3038                         eval "tp=\"\$$2\"";
3039                         case "$tp" in
3040                         ""|" ") eval "$1=\"\$$2\"";;
3041                         *) eval "$1=";;
3042                         esac;;
3043                 esac;;
3044         esac;;
3045 *)
3046         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3047         case "$tp" in
3048         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3049         /*-$oldprefix/*|\~*-$oldprefix/*)
3050                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3051         *) eval "$1=\"\$$2\"";;
3052         esac;;
3053 esac'
3054
3055 : set the base revision
3056 baserev=5.0
3057
3058 : get the patchlevel
3059 echo " "
3060 echo "Getting the current patchlevel..." >&4
3061 if $test -r $rsrc/patchlevel.h;then
3062         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3063         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3064 else
3065         patchlevel=0
3066         subversion=0
3067 fi
3068 $echo $n "(You have $package" $c
3069 case "$package" in
3070 "*$baserev")    ;;
3071 *)              $echo $n " $baserev" $c ;;
3072 esac
3073 $echo $n " patchlevel $patchlevel" $c
3074 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3075 echo ".)"
3076
3077 if test 0 -eq "$subversion"; then
3078         version=`LC_ALL=C; export LC_ALL; \
3079                  echo $baserev $patchlevel | \
3080                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3081 else
3082         version=`LC_ALL=C; export LC_ALL; \
3083                  echo $baserev $patchlevel $subversion | \
3084                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3085 fi
3086 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3087 if test "$subversion" -lt 50; then
3088         apiversion=`LC_ALL=C; export LC_ALL; \
3089                  LANGUAGE=C; export LANGUAGE; \
3090                  echo $baserev $patchlevel | \
3091                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3092 else
3093         apiversion="$version"
3094 fi
3095
3096 : determine where private library files go
3097 : Usual default is /usr/local/lib/perl5/$version.
3098 : Also allow things like /opt/perl/lib/$version, since 
3099 : /opt/perl/lib/perl5... would be redundant.
3100 case "$prefix" in
3101 *perl*) set dflt privlib lib/$version ;;
3102 *)       set dflt privlib lib/$package/$version ;;
3103 esac
3104 eval $prefixit
3105 $cat <<EOM
3106
3107 There are some auxiliary files for $package that need to be put into a
3108 private library directory that is accessible by everyone.
3109
3110 EOM
3111 fn=d~+
3112 rp='Pathname where the private library files will reside?'
3113 . ./getfile
3114 if $test "X$privlibexp" != "X$ansexp"; then
3115         installprivlib=''
3116 fi
3117 privlib="$ans"
3118 privlibexp="$ansexp"
3119 if $afs; then
3120         $cat <<EOM
3121
3122 Since you are running AFS, I need to distinguish the directory in which
3123 private files reside from the directory in which they are installed (and from
3124 which they are presumably copied to the former directory by occult means).
3125
3126 EOM
3127         case "$installprivlib" in
3128         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3129         *) dflt="$installprivlib";;
3130         esac
3131         fn=de~
3132         rp='Where will private files be installed?'
3133         . ./getfile
3134         installprivlib="$ans"
3135 else
3136         installprivlib="$privlibexp"
3137 fi
3138
3139 : set the prefixup variable, to restore leading tilda escape
3140 prefixup='case "$prefixexp" in
3141 "$prefix") ;;
3142 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3143 esac'
3144
3145 : determine where public architecture dependent libraries go
3146 set archlib archlib
3147 eval $prefixit
3148 : privlib default is /usr/local/lib/$package/$version
3149 : archlib default is /usr/local/lib/$package/$version/$archname
3150 : privlib may have an optional trailing /share.
3151 tdflt=`echo $privlib | $sed 's,/share$,,'`
3152 tdflt=$tdflt/$archname
3153 case "$archlib" in
3154 '')     dflt=$tdflt
3155         ;;
3156 *)      dflt="$archlib"
3157     ;;
3158 esac
3159 cat <<EOM
3160
3161 $spackage contains architecture-dependent library files.  If you are
3162 sharing libraries in a heterogeneous environment, you might store
3163 these files in a separate location.  Otherwise, you can just include
3164 them with the rest of the public library files.
3165
3166 EOM
3167 fn=d+~
3168 rp='Where do you want to put the public architecture-dependent libraries?'
3169 . ./getfile
3170 archlib="$ans"
3171 archlibexp="$ansexp"
3172
3173 if $afs; then
3174         $cat <<EOM
3175
3176 Since you are running AFS, I need to distinguish the directory in
3177 which architecture-dependent library files reside from the directory
3178 in which they are installed (and from which they are presumably copied
3179 to the former directory by occult means).
3180
3181 EOM
3182         case "$installarchlib" in
3183         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3184         *) dflt="$installarchlib";;
3185         esac
3186         fn=de~
3187         rp='Where will architecture-dependent library files be installed?'
3188         . ./getfile
3189         installarchlib="$ans"
3190 else
3191         installarchlib="$archlibexp"
3192 fi
3193 if $test X"$archlib" = X"$privlib"; then
3194         d_archlib="$undef"
3195 else
3196         d_archlib="$define"
3197 fi
3198
3199 : make some quick guesses about what we are up against
3200 echo " "
3201 $echo $n "Hmm...  $c"
3202 echo exit 1 >bsd
3203 echo exit 1 >usg
3204 echo exit 1 >v7
3205 echo exit 1 >osf1
3206 echo exit 1 >eunice
3207 echo exit 1 >xenix
3208 echo exit 1 >venix
3209 echo exit 1 >os2
3210 d_bsd="$undef"
3211 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3212 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3213 then
3214         echo "Looks kind of like an OSF/1 system, but we'll see..."
3215         echo exit 0 >osf1
3216 elif test `echo abc | tr a-z A-Z` = Abc ; then
3217         xxx=`./loc addbib blurfl $pth`
3218         if $test -f $xxx; then
3219         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3220                 echo exit 0 >bsd
3221                 echo exit 0 >usg
3222         else
3223                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3224                         echo "Looks kind of like an extended USG system, but we'll see..."
3225                 else
3226                         echo "Looks kind of like a USG system, but we'll see..."
3227                 fi
3228                 echo exit 0 >usg
3229         fi
3230 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3231         echo "Looks kind of like a BSD system, but we'll see..."
3232         d_bsd="$define"
3233         echo exit 0 >bsd
3234 else
3235         echo "Looks kind of like a Version 7 system, but we'll see..."
3236         echo exit 0 >v7
3237 fi
3238 case "$eunicefix" in
3239 *unixtovms*)
3240         $cat <<'EOI'
3241 There is, however, a strange, musty smell in the air that reminds me of
3242 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3243 EOI
3244         echo exit 0 >eunice
3245         d_eunice="$define"
3246 : it so happens the Eunice I know will not run shell scripts in Unix format
3247         ;;
3248 *)
3249         echo " "
3250         echo "Congratulations.  You aren't running Eunice."
3251         d_eunice="$undef"
3252         ;;
3253 esac
3254 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3255 case "$p_" in
3256 :) ;;
3257 *)
3258         $cat <<'EOI'
3259 I have the feeling something is not exactly right, however...don't tell me...
3260 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3261 EOI
3262         echo exit 0 >os2
3263         ;;
3264 esac
3265 if test -f /xenix; then
3266         echo "Actually, this looks more like a XENIX system..."
3267         echo exit 0 >xenix
3268         d_xenix="$define"
3269 else
3270         echo " "
3271         echo "It's not Xenix..."
3272         d_xenix="$undef"
3273 fi
3274 chmod +x xenix
3275 $eunicefix xenix
3276 if test -f /venix; then
3277         echo "Actually, this looks more like a VENIX system..."
3278         echo exit 0 >venix
3279 else
3280         echo " "
3281         if ./xenix; then
3282                 : null
3283         else
3284                 echo "Nor is it Venix..."
3285         fi
3286 fi
3287 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3288 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3289 $rm -f foo
3290
3291 : see if setuid scripts can be secure
3292 $cat <<EOM
3293
3294 Some kernels have a bug that prevents setuid #! scripts from being
3295 secure.  Some sites have disabled setuid #! scripts because of this.
3296
3297 First let's decide if your kernel supports secure setuid #! scripts.
3298 (If setuid #! scripts would be secure but have been disabled anyway,
3299 don't say that they are secure if asked.)
3300
3301 EOM
3302
3303 val="$undef"
3304 if $test -d /dev/fd; then
3305         echo "#!$ls" >reflect
3306         chmod +x,u+s reflect
3307         ./reflect >flect 2>&1
3308         if $contains "/dev/fd" flect >/dev/null; then
3309                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3310                 val="$define"
3311         else
3312                 $cat <<EOM
3313 If you are not sure if they are secure, I can check but I'll need a
3314 username and password different from the one you are using right now.
3315 If you don't have such a username or don't want me to test, simply
3316 enter 'none'.
3317
3318 EOM
3319                 rp='Other username to test security of setuid scripts with?'
3320                 dflt='none'
3321                 . ./myread
3322                 case "$ans" in
3323                 n|none)
3324                         case "$d_suidsafe" in
3325                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3326                                 dflt=n;;
3327                         "$undef")
3328                                 echo "Well, the $hint value is *not* secure." >&4
3329                                 dflt=n;;
3330                         *)      echo "Well, the $hint value *is* secure." >&4
3331                                 dflt=y;;
3332                         esac
3333                         ;;
3334                 *)
3335                         $rm -f reflect flect
3336                         echo "#!$ls" >reflect
3337                         chmod +x,u+s reflect
3338                         echo >flect
3339                         chmod a+w flect
3340                         echo '"su" will (probably) prompt you for '"$ans's password."
3341                         su $ans -c './reflect >flect'
3342                         if $contains "/dev/fd" flect >/dev/null; then
3343                                 echo "Okay, it looks like setuid scripts are secure." >&4
3344                                 dflt=y
3345                         else
3346                                 echo "I don't think setuid scripts are secure." >&4
3347                                 dflt=n
3348                         fi
3349                         ;;
3350                 esac
3351                 rp='Does your kernel have *secure* setuid scripts?'
3352                 . ./myread
3353                 case "$ans" in
3354                 [yY]*)  val="$define";;
3355                 *)      val="$undef";;
3356                 esac
3357         fi
3358 else
3359         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3360         echo "(That's for file descriptors, not floppy disks.)"
3361         val="$undef"
3362 fi
3363 set d_suidsafe
3364 eval $setvar
3365
3366 $rm -f reflect flect
3367
3368 : now see if they want to do setuid emulation
3369 echo " "
3370 val="$undef"
3371 case "$d_suidsafe" in
3372 "$define")
3373         val="$undef"
3374         echo "No need to emulate SUID scripts since they are secure here." >& 4
3375         ;;
3376 *)
3377         $cat <<EOM
3378 Some systems have disabled setuid scripts, especially systems where
3379 setuid scripts cannot be secure.  On systems where setuid scripts have
3380 been disabled, the setuid/setgid bits on scripts are currently
3381 useless.  It is possible for $package to detect those bits and emulate
3382 setuid/setgid in a secure fashion.  This emulation will only work if
3383 setuid scripts have been disabled in your kernel.
3384
3385 EOM
3386         case "$d_dosuid" in
3387         "$define") dflt=y ;;
3388         *) dflt=n ;;
3389         esac
3390         rp="Do you want to do setuid/setgid emulation?"
3391         . ./myread
3392         case "$ans" in
3393         [yY]*)  val="$define";;
3394         *)      val="$undef";;
3395         esac
3396         ;;
3397 esac
3398 set d_dosuid
3399 eval $setvar
3400
3401 : determine where manual pages are on this system
3402 echo " "
3403 case "$sysman" in
3404 '') 
3405         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3406         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3407         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3408         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3409         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3410         sysman=`./loc . /usr/man/man1 $syspath`
3411         ;;
3412 esac
3413 if $test -d "$sysman"; then
3414         echo "System manual is in $sysman." >&4
3415 else
3416         echo "Could not find manual pages in source form." >&4
3417 fi
3418
3419 : see what memory models we can support
3420 case "$models" in
3421 '')
3422         $cat >pdp11.c <<'EOP'
3423 int main() {
3424 #ifdef pdp11
3425         exit(0);
3426 #else
3427         exit(1);
3428 #endif
3429 }
3430 EOP
3431         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3432         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3433                 dflt='unsplit split'
3434         else
3435                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3436                 case "$tans" in
3437                 X) dflt='none';;
3438                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3439                                 dflt='small'
3440                         else
3441                                 dflt=''
3442                         fi
3443                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3444                                 dflt="$dflt medium"
3445                         fi
3446                         if $test -d /lib/large || $test -d /usr/lib/large; then
3447                                 dflt="$dflt large"
3448                         fi
3449                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3450                                 dflt="$dflt huge"
3451                         fi
3452                 esac
3453         fi;;
3454 *) dflt="$models";;
3455 esac
3456 $cat <<EOM
3457  
3458 Some systems have different model sizes.  On most systems they are called
3459 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3460 split.  If your system doesn't support different memory models, say "none".
3461 If you wish to force everything to one memory model, say "none" here and
3462 put the appropriate flags later when it asks you for other cc and ld flags.
3463 Venix systems may wish to put "none" and let the compiler figure things out.
3464 (In the following question multiple model names should be space separated.)
3465
3466 The default for most systems is "none".
3467
3468 EOM
3469 rp="Which memory models are supported?"
3470 . ./myread
3471 models="$ans"
3472
3473 case "$models" in
3474 none)
3475         small=''
3476         medium=''
3477         large=''
3478         huge=''
3479         unsplit=''
3480         split=''
3481         ;;
3482 *split)
3483         case "$split" in
3484         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3485                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3486                         dflt='-i'
3487                 else
3488                         dflt='none'
3489                 fi;;
3490         *) dflt="$split";;
3491         esac
3492         rp="What flag indicates separate I and D space?"
3493         . ./myread
3494         tans="$ans"
3495         case "$tans" in
3496         none) tans='';;
3497         esac
3498         split="$tans"
3499         unsplit='';;
3500 *large*|*small*|*medium*|*huge*)
3501         case "$models" in
3502         *large*)
3503                 case "$large" in
3504                 '') dflt='-Ml';;
3505                 *) dflt="$large";;
3506                 esac
3507         rp="What flag indicates large model?"
3508         . ./myread
3509         tans="$ans"
3510         case "$tans" in
3511         none) tans='';
3512         esac
3513         large="$tans";;
3514         *) large='';;
3515         esac
3516         case "$models" in
3517         *huge*) case "$huge" in
3518                 '') dflt='-Mh';;
3519                 *) dflt="$huge";;
3520                 esac
3521                 rp="What flag indicates huge model?"
3522                 . ./myread
3523                 tans="$ans"
3524                 case "$tans" in
3525                 none) tans='';
3526                 esac
3527                 huge="$tans";;
3528         *) huge="$large";;
3529         esac
3530         case "$models" in
3531         *medium*) case "$medium" in
3532                 '') dflt='-Mm';;
3533                 *) dflt="$medium";;
3534                 esac
3535                 rp="What flag indicates medium model?"
3536                 . ./myread
3537                 tans="$ans"
3538                 case "$tans" in
3539                 none) tans='';
3540                 esac
3541                 medium="$tans";;
3542         *) medium="$large";;
3543         esac
3544         case "$models" in
3545         *small*) case "$small" in
3546                 '') dflt='none';;
3547                 *) dflt="$small";;
3548                 esac
3549                 rp="What flag indicates small model?"
3550                 . ./myread
3551                 tans="$ans"
3552                 case "$tans" in
3553                 none) tans='';
3554                 esac
3555                 small="$tans";;
3556         *) small='';;
3557         esac
3558         ;;
3559 *)
3560         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3561         ;;
3562 esac
3563 $rm -f pdp11.* pdp11
3564
3565 : see if we need a special compiler
3566 echo " "
3567 if ./usg; then
3568         case "$cc" in
3569         '') case "$Mcc" in
3570                 /*) dflt='Mcc';;
3571                 *) case "$large" in
3572                         -M*) dflt='cc';;
3573                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3574                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3575                                                 dflt='cc'
3576                                         else
3577                                                 dflt='cc -M'
3578                                         fi
3579                                 else
3580                                         dflt='cc'
3581                                 fi;;
3582                         esac;;
3583                 esac;;
3584         *)  dflt="$cc";;
3585         esac
3586         case "$dflt" in
3587         *M*)    $cat <<'EOM'
3588 On some older systems the default C compiler will not resolve multiple global
3589 references that happen to have the same name.  On some such systems the "Mcc"
3590 command may be used to force these to be resolved.  On other systems a "cc -M"
3591 command is required.  (Note that the -M flag on other systems indicates a
3592 memory model to use!) If you have the Gnu C compiler, you might wish to use
3593 that instead.
3594
3595 EOM
3596         ;;
3597         esac
3598         rp="Use which C compiler?"
3599         . ./myread
3600         cc="$ans"
3601 else
3602         case "$cc" in
3603         '') dflt=cc;;
3604         *) dflt="$cc";;
3605         esac
3606         rp="Use which C compiler?"
3607         . ./myread
3608         cc="$ans"
3609 fi
3610 : Look for a hint-file generated 'call-back-unit'.  Now that the
3611 : user has specified the compiler, we may need to set or change some
3612 : other defaults.
3613 if $test -f cc.cbu; then
3614     . ./cc.cbu
3615 fi
3616 echo " "
3617 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3618 $cat >gccvers.c <<EOM
3619 #include <stdio.h>
3620 int main() {
3621 #ifdef __GNUC__
3622 #ifdef __VERSION__
3623         printf("%s\n", __VERSION__);
3624 #else
3625         printf("%s\n", "1");
3626 #endif
3627 #endif
3628         exit(0);
3629 }
3630 EOM
3631 if $cc -o gccvers gccvers.c; then
3632         gccversion=`./gccvers`
3633         case "$gccversion" in
3634         '') echo "You are not using GNU cc." ;;
3635         *)  echo "You are using GNU cc $gccversion." ;;
3636         esac
3637 else
3638         echo " "
3639         echo "*** WHOA THERE!!! ***" >&4
3640         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3641         case "$knowitall" in
3642         '')
3643         echo "    You'd better start hunting for one and let me know about it." >&4
3644                 exit 1
3645                 ;;
3646         esac
3647 fi
3648 $rm -f gccvers*
3649 case "$gccversion" in
3650 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3651 esac
3652
3653 : What should the include directory be ?
3654 echo " "
3655 $echo $n "Hmm...  $c"
3656 dflt='/usr/include'
3657 incpath=''
3658 mips_type=''
3659 if $test -f /bin/mips && /bin/mips; then
3660         echo "Looks like a MIPS system..."
3661         $cat >usr.c <<'EOCP'
3662 #ifdef SYSTYPE_BSD43
3663 /bsd43
3664 #endif
3665 EOCP
3666         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3667                 dflt='/bsd43/usr/include'
3668                 incpath='/bsd43'
3669                 mips_type='BSD 4.3'
3670         else
3671                 mips_type='System V'
3672         fi
3673         $rm -f usr.c usr.out
3674         echo "and you're compiling with the $mips_type compiler and libraries."
3675         xxx_prompt=y
3676         echo "exit 0" >mips
3677 else
3678         echo "Doesn't look like a MIPS system."
3679         xxx_prompt=n
3680         echo "exit 1" >mips
3681 fi
3682 chmod +x mips
3683 $eunicefix mips
3684 case "$usrinc" in
3685 '') ;;
3686 *) dflt="$usrinc";;
3687 esac
3688 case "$xxx_prompt" in
3689 y)      fn=d/
3690         echo " "
3691         rp='Where are the include files you want to use?'
3692         . ./getfile
3693         usrinc="$ans"
3694         ;;
3695 *)      usrinc="$dflt"
3696         ;;
3697 esac
3698
3699 : see how we invoke the C preprocessor
3700 echo " "
3701 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3702 cat <<'EOT' >testcpp.c
3703 #define ABC abc
3704 #define XYZ xyz
3705 ABC.XYZ
3706 EOT
3707 cd ..
3708 if test ! -f cppstdin; then
3709         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3710 else
3711         echo "Keeping your $hint cppstdin wrapper."
3712 fi
3713 chmod 755 cppstdin
3714 wrapper=`pwd`/cppstdin
3715 ok='false'
3716 cd UU
3717
3718 if $test "X$cppstdin" != "X" && \
3719         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3720         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3721 then
3722         echo "You used to use $cppstdin $cppminus so we'll use that again."
3723         case "$cpprun" in
3724         '') echo "But let's see if we can live without a wrapper..." ;;
3725         *)
3726                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3727                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3728                 then
3729                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3730                         ok='true'
3731                 else
3732                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3733                 fi
3734                 ;;
3735         esac
3736 else
3737         case "$cppstdin" in
3738         '') ;;
3739         *)
3740                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3741                 ;;
3742         esac
3743 fi
3744
3745 if $ok; then
3746         : nothing
3747 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3748         $cc -E <testcpp.c >testcpp.out 2>&1; \
3749         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3750         echo "Yup, it does."
3751         x_cpp="$cc -E"
3752         x_minus='';
3753 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3754         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3755         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3756         echo "Yup, it does."
3757         x_cpp="$cc -E"
3758         x_minus='-';
3759 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3760         $cc -P <testcpp.c >testcpp.out 2>&1; \
3761         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3762         echo "Yipee, that works!"
3763         x_cpp="$cc -P"
3764         x_minus='';
3765 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3766         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3767         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3768         echo "At long last!"
3769         x_cpp="$cc -P"
3770         x_minus='-';
3771 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3772         $cpp <testcpp.c >testcpp.out 2>&1; \
3773         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3774         echo "It works!"
3775         x_cpp="$cpp"
3776         x_minus='';
3777 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3778         $cpp - <testcpp.c >testcpp.out 2>&1; \
3779         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3780         echo "Hooray, it works!  I was beginning to wonder."
3781         x_cpp="$cpp"
3782         x_minus='-';
3783 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3784         $wrapper <testcpp.c >testcpp.out 2>&1; \
3785         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3786         x_cpp="$wrapper"
3787         x_minus=''
3788         echo "Eureka!"
3789 else
3790         dflt=''
3791         rp="No dice.  I can't find a C preprocessor.  Name one:"
3792         . ./myread
3793         x_cpp="$ans"
3794         x_minus=''
3795         $x_cpp <testcpp.c >testcpp.out 2>&1
3796         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3797                 echo "OK, that will do." >&4
3798         else
3799 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3800                 exit 1
3801         fi
3802 fi
3803
3804 case "$ok" in
3805 false)
3806         cppstdin="$x_cpp"
3807         cppminus="$x_minus"
3808         cpprun="$x_cpp"
3809         cpplast="$x_minus"
3810         set X $x_cpp
3811         shift
3812         case "$1" in
3813         "$cpp")
3814                 echo "Perhaps can we force $cc -E using a wrapper..."
3815                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3816                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3817                 then
3818                         echo "Yup, we can."
3819                         cppstdin="$wrapper"
3820                         cppminus='';
3821                 else
3822                         echo "Nope, we'll have to live without it..."
3823                 fi
3824                 ;;
3825         esac
3826         case "$cpprun" in
3827         "$wrapper")
3828                 cpprun=''
3829                 cpplast=''
3830                 ;;
3831         esac
3832         ;;
3833 esac
3834
3835 case "$cppstdin" in
3836 "$wrapper"|'cppstdin') ;;
3837 *) $rm -f $wrapper;;
3838 esac
3839 $rm -f testcpp.c testcpp.out
3840
3841 : Set private lib path
3842 case "$plibpth" in
3843 '') if ./mips; then
3844                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3845         fi;;
3846 esac
3847 case "$libpth" in
3848 ' ') dlist='';;
3849 '') dlist="$loclibpth $plibpth $glibpth";;
3850 *) dlist="$libpth";;
3851 esac
3852
3853 : Now check and see which directories actually exist, avoiding duplicates
3854 libpth=''
3855 for xxx in $dlist
3856 do
3857     if $test -d $xxx; then
3858                 case " $libpth " in
3859                 *" $xxx "*) ;;
3860                 *) libpth="$libpth $xxx";;
3861                 esac
3862     fi
3863 done
3864 $cat <<'EOM'
3865
3866 Some systems have incompatible or broken versions of libraries.  Among
3867 the directories listed in the question below, please remove any you
3868 know not to be holding relevant libraries, and add any that are needed.
3869 Say "none" for none.
3870
3871 EOM
3872 case "$libpth" in
3873 '') dflt='none';;
3874 *)
3875         set X $libpth
3876         shift
3877         dflt=${1+"$@"}
3878         ;;
3879 esac
3880 rp="Directories to use for library searches?"
3881 . ./myread
3882 case "$ans" in
3883 none) libpth=' ';;
3884 *) libpth="$ans";;
3885 esac
3886
3887 : compute shared library extension
3888 case "$so" in
3889 '')
3890         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3891                 dflt='sl'
3892         else
3893                 dflt='so'
3894         fi
3895         ;;
3896 *) dflt="$so";;
3897 esac
3898 $cat <<EOM
3899
3900 On some systems, shared libraries may be available.  Answer 'none' if
3901 you want to suppress searching of shared libraries for the remaining
3902 of this configuration.
3903
3904 EOM
3905 rp='What is the file extension used for shared libraries?'
3906 . ./myread
3907 so="$ans"
3908
3909 : Define several unixisms.
3910 : Hints files or command line option can be used to override them.
3911 : The convoluted testing is in case hints files set either the old
3912 : or the new name.
3913 case "$_exe" in
3914 '')     case "$exe_ext" in
3915     '') ;;
3916         *)      _exe="$exe_ext" ;;
3917         esac
3918         ;;
3919 esac
3920 case "$_a" in
3921 '')     case "$lib_ext" in
3922     '') _a='.a';;
3923         *)      _a="$lib_ext" ;;
3924         esac
3925         ;;
3926 esac
3927 case "$_o" in
3928 '') case "$obj_ext" in
3929         '')     _o='.o';;
3930         *)      _o="$obj_ext";;
3931         esac
3932         ;;
3933 esac
3934 case "$p_" in
3935 '') case "$path_sep" in
3936         '')     p_=':';;
3937         *)      p_="$path_sep";;
3938         esac
3939         ;;
3940 esac
3941 exe_ext=$_exe
3942 lib_ext=$_a
3943 obj_ext=$_o
3944 path_sep=$p_
3945
3946 : Which makefile gets called first.  This is used by make depend.
3947 case "$firstmakefile" in
3948 '') firstmakefile='makefile';;
3949 esac
3950
3951 cat <<EOM
3952
3953 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3954 Configure must be run with -Dusesocks.
3955
3956 Normally you do not need this and you should answer no.
3957
3958 EOM
3959 case "$usesocks" in
3960 $define|true|[yY]*)     dflt='y';;
3961 *) dflt='n';;
3962 esac
3963 rp='Build Perl for SOCKS?'
3964 . ./myread
3965 case "$ans" in
3966 y|Y)    val="$define" ;;     
3967 *)      val="$undef" ;;
3968 esac
3969 set usesocks
3970 eval $setvar
3971
3972 : Looking for optional libraries
3973 echo " "
3974 echo "Checking for optional libraries..." >&4
3975 case "$libs" in
3976 ' '|'') dflt='';;
3977 *) dflt="$libs";;
3978 esac
3979 case "$libswanted" in
3980 '') libswanted='c_s';;
3981 esac
3982 case "$usesocks" in
3983 $define)
3984         libswanted="$libswanted socks5 socks5_sh"
3985         ;;
3986 esac
3987 for thislib in $libswanted; do
3988         
3989         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3990                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3991                 echo "Found -l$thislib (shared)."
3992                 case " $dflt " in
3993                 *"-l$thislib "*);;
3994                 *) dflt="$dflt -l$thislib";;
3995                 esac
3996         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3997                 echo "Found -l$thislib (shared)."
3998                 case " $dflt " in
3999                 *"-l$thislib "*);;
4000                 *) dflt="$dflt -l$thislib";;
4001                 esac
4002         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4003                 echo "Found -l$thislib."
4004                 case " $dflt " in
4005                 *"-l$thislib "*);;
4006                 *) dflt="$dflt -l$thislib";;
4007                 esac
4008         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4009                 echo "Found -l$thislib."
4010                 case " $dflt " in
4011                 *"-l$thislib "*);;
4012                 *) dflt="$dflt -l$thislib";;
4013                 esac
4014         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4015                 echo "Found -l${thislib}_s."
4016                 case " $dflt " in
4017                 *"-l$thislib "*);;
4018                 *) dflt="$dflt -l${thislib}_s";;
4019                 esac
4020         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4021                 echo "Found -l$thislib."
4022                 case " $dflt " in
4023                 *"-l$thislib "*);;
4024                 *) dflt="$dflt -l$thislib";;
4025                 esac
4026         else
4027                 echo "No -l$thislib."
4028         fi
4029 done
4030 set X $dflt
4031 shift
4032 dflt="$*"
4033 case "$libs" in
4034 '') dflt="$dflt";;
4035 *) dflt="$libs";;
4036 esac
4037 case "$dflt" in
4038 ' '|'') dflt='none';;
4039 esac
4040
4041 $cat <<EOM
4042
4043 In order to compile $package on your machine, a number of libraries
4044 are usually needed.  Include any other special libraries here as well.
4045 Say "none" for none.  The default list is almost always right.
4046 EOM
4047
4048 echo " "
4049 rp="What libraries to use?"
4050 . ./myread
4051 case "$ans" in
4052 none) libs=' ';;
4053 *) libs="$ans";;
4054 esac
4055
4056 : determine optimize, if desired, or use for debug flag also
4057 case "$optimize" in
4058 ' '|$undef) dflt='none';;
4059 '') dflt='-O';;
4060 *) dflt="$optimize";;
4061 esac
4062 $cat <<EOH
4063
4064 Some C compilers have problems with their optimizers.  By default, $package
4065 compiles with the -O flag to use the optimizer.  Alternately, you might want
4066 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4067 systems).  Either flag can be specified here.  To use neither flag, specify
4068 the word "none".
4069
4070 EOH
4071 rp="What optimizer/debugger flag should be used?"
4072 . ./myread
4073 optimize="$ans"
4074 case "$optimize" in
4075 'none') optimize=" ";;
4076 esac
4077
4078 dflt=''
4079 : We will not override a previous value, but we might want to
4080 : augment a hint file
4081 case "$hint" in
4082 none|recommended)
4083         case "$gccversion" in
4084         1*) dflt='-fpcc-struct-return' ;;
4085         esac
4086         case "$optimize" in
4087         *-g*) dflt="$dflt -DDEBUGGING";;
4088         esac
4089         case "$gccversion" in
4090         2*) if test -d /etc/conf/kconfig.d &&
4091                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4092                 then
4093                         dflt="$dflt -posix"
4094                 fi
4095                 ;;
4096         esac
4097         ;;
4098 esac
4099
4100 case "$mips_type" in
4101 *BSD*|'') inclwanted="$locincpth $usrinc";;
4102 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4103 esac
4104 for thisincl in $inclwanted; do
4105         if $test -d $thisincl; then
4106                 if $test x$thisincl != x$usrinc; then
4107                         case "$dflt" in
4108                         *$thisincl*);;
4109                         *) dflt="$dflt -I$thisincl";;
4110                         esac
4111                 fi
4112         fi
4113 done
4114
4115 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4116         xxx=true;
4117 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4118         xxx=true;
4119 else
4120         xxx=false;
4121 fi;
4122 if $xxx; then
4123         case "$dflt" in
4124         *$2*);;
4125         *) dflt="$dflt -D$2";;
4126         esac;
4127 fi'
4128
4129 set signal.h LANGUAGE_C; eval $inctest
4130
4131 case "$usesocks" in
4132 $define)
4133         ccflags="$ccflags -DSOCKS"
4134         ;;
4135 esac
4136
4137 case "$hint" in
4138 none|recommended) dflt="$ccflags $dflt" ;;
4139 *) dflt="$ccflags";;
4140 esac
4141
4142 case "$dflt" in
4143 ''|' ') dflt=none;;
4144 esac
4145 $cat <<EOH
4146
4147 Your C compiler may want other flags.  For this question you should include
4148 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4149 but you should NOT include libraries or ld flags like -lwhatever.  If you
4150 want $package to honor its debug switch, you should include -DDEBUGGING here.
4151 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4152
4153 To use no flags, specify the word "none".
4154
4155 EOH
4156 set X $dflt
4157 shift
4158 dflt=${1+"$@"}
4159 rp="Any additional cc flags?"
4160 . ./myread
4161 case "$ans" in
4162 none) ccflags='';;
4163 *) ccflags="$ans";;
4164 esac
4165
4166 : the following weeds options from ccflags that are of no interest to cpp
4167 cppflags="$ccflags"
4168 case "$gccversion" in
4169 1*) cppflags="$cppflags -D__GNUC__"
4170 esac
4171 case "$mips_type" in
4172 '');;
4173 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4174 esac
4175 case "$cppflags" in
4176 '');;
4177 *)
4178         echo " "
4179         echo "Let me guess what the preprocessor flags are..." >&4
4180         set X $cppflags
4181         shift
4182         cppflags=''
4183         $cat >cpp.c <<'EOM'
4184 #define BLURFL foo
4185
4186 BLURFL xx LFRULB
4187 EOM
4188         previous=''
4189         for flag in $*
4190         do
4191                 case "$flag" in
4192                 -*) ftry="$flag";;
4193                 *) ftry="$previous $flag";;
4194                 esac
4195                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4196                         >cpp1.out 2>/dev/null && \
4197                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4198                         >cpp2.out 2>/dev/null && \
4199                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4200                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4201                 then
4202                         cppflags="$cppflags $ftry"
4203                         previous=''
4204                 else
4205                         previous="$flag"
4206                 fi
4207         done
4208         set X $cppflags
4209         shift
4210         cppflags=${1+"$@"}
4211         case "$cppflags" in
4212         *-*)  echo "They appear to be: $cppflags";;
4213         esac
4214         $rm -f cpp.c cpp?.out
4215         ;;
4216 esac
4217
4218 : flags used in final linking phase
4219 case "$ldflags" in
4220 '') if ./venix; then
4221                 dflt='-i -z'
4222         else
4223                 dflt=''
4224         fi
4225         case "$ccflags" in
4226         *-posix*) dflt="$dflt -posix" ;;
4227         esac
4228         ;;
4229 *) dflt="$ldflags";;
4230 esac
4231
4232 : Try to guess additional flags to pick up local libraries.
4233 for thislibdir in $libpth; do
4234         case " $loclibpth " in
4235         *" $thislibdir "*)
4236                 case "$dflt " in 
4237                 *"-L$thislibdir "*) ;;
4238                 *)  dflt="$dflt -L$thislibdir" ;;
4239                 esac
4240                 ;;
4241         esac
4242 done
4243
4244 case "$dflt" in
4245 '') dflt='none' ;;
4246 esac
4247
4248 $cat <<EOH
4249
4250 Your C linker may need flags.  For this question you should
4251 include -L/whatever and any other flags used by the C linker, but you
4252 should NOT include libraries like -lwhatever.
4253
4254 Make sure you include the appropriate -L/path flags if your C linker
4255 does not normally search all of the directories you specified above,
4256 namely
4257         $libpth
4258 To use no flags, specify the word "none".
4259
4260 EOH
4261
4262 rp="Any additional ld flags (NOT including libraries)?"
4263 . ./myread
4264 case "$ans" in
4265 none) ldflags='';;
4266 *) ldflags="$ans";;
4267 esac
4268 rmlist="$rmlist pdp11"
4269
4270 : coherency check
4271 echo " "
4272 echo "Checking your choice of C compiler and flags for coherency..." >&4
4273 $cat > try.c <<'EOF'
4274 #include <stdio.h>
4275 int main() { printf("Ok\n"); exit(0); }
4276 EOF
4277 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4278 shift
4279 $cat >try.msg <<'EOM'
4280 I've tried to compile and run the following simple program:
4281
4282 EOM
4283 $cat try.c >> try.msg
4284
4285 $cat >> try.msg <<EOM
4286
4287 I used the command:
4288
4289         $*
4290         ./try
4291
4292 and I got the following output:
4293
4294 EOM
4295 dflt=y
4296 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4297         if sh -c './try' >>try.msg 2>&1; then
4298                 xxx=`./try`
4299                 case "$xxx" in
4300                 "Ok") dflt=n ;;
4301                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4302                         case " $libs " in
4303                         *" -lsfio "*)
4304                                 cat >> try.msg <<'EOQS'
4305 If $libs contains -lsfio, and sfio is mis-configured, then it
4306 sometimes (apparently) runs and exits with a 0 status, but with no
4307 output!  It may have to do with sfio's use of _exit vs. exit.
4308
4309 EOQS
4310                                 rp="You have a big problem.  Shall I abort Configure"
4311                                 dflt=y
4312                                 ;;
4313                         esac
4314                         ;;
4315                 esac
4316         else
4317                 echo "The program compiled OK, but exited with status $?." >>try.msg
4318                 rp="You have a problem.  Shall I abort Configure"
4319                 dflt=y
4320         fi
4321 else
4322         echo "I can't compile the test program." >>try.msg
4323         rp="You have a BIG problem.  Shall I abort Configure"
4324         dflt=y
4325 fi
4326 case "$dflt" in
4327 y)
4328         $cat try.msg >&4
4329         case "$knowitall" in
4330         '')
4331                 echo "(The supplied flags or libraries might be incorrect.)"
4332                 ;;
4333         *) dflt=n;;
4334         esac
4335         echo " "
4336         . ./myread
4337         case "$ans" in
4338         n*|N*) ;;
4339         *)      echo "Ok.  Stopping Configure." >&4
4340                 exit 1
4341                 ;;
4342         esac
4343         ;;
4344 n) echo "OK, that should do.";;
4345 esac
4346 $rm -f try try.* core
4347
4348 : determine filename position in cpp output
4349 echo " "
4350 echo "Computing filename position in cpp output for #include directives..." >&4
4351 echo '#include <stdio.h>' > foo.c
4352 $cat >fieldn <<EOF
4353 $startsh
4354 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4355 $grep '^[       ]*#.*stdio\.h' | \
4356 while read cline; do
4357         pos=1
4358         set \$cline
4359         while $test \$# -gt 0; do
4360                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4361                         echo "\$pos"
4362                         exit 0
4363                 fi
4364                 shift
4365                 pos=\`expr \$pos + 1\`
4366         done
4367 done
4368 EOF
4369 chmod +x fieldn
4370 fieldn=`./fieldn`
4371 $rm -f foo.c fieldn
4372 case $fieldn in
4373 '') pos='???';;
4374 1) pos=first;;
4375 2) pos=second;;
4376 3) pos=third;;
4377 *) pos="${fieldn}th";;
4378 esac
4379 echo "Your cpp writes the filename in the $pos field of the line."
4380
4381 : locate header file
4382 $cat >findhdr <<EOF
4383 $startsh
4384 wanted=\$1
4385 name=''
4386 for usrincdir in $usrinc
4387 do
4388         if test -f \$usrincdir/\$wanted; then
4389                 echo "\$usrincdir/\$wanted"
4390                 exit 0
4391         fi
4392 done
4393 awkprg='{ print \$$fieldn }'
4394 echo "#include <\$wanted>" > foo\$\$.c
4395 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4396 $grep "^[       ]*#.*\$wanted" | \
4397 while read cline; do
4398         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4399         case "\$name" in
4400         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4401         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4402         *) exit 2;;
4403         esac;
4404 done;
4405 #
4406 # status = 0: grep returned 0 lines, case statement not executed
4407 # status = 1: headerfile found
4408 # status = 2: while loop executed, no headerfile found
4409 #
4410 status=\$?
4411 $rm -f foo\$\$.c;
4412 if test \$status -eq 1; then
4413         exit 0;
4414 fi
4415 exit 1
4416 EOF
4417 chmod +x findhdr
4418
4419 : define an alternate in-header-list? function
4420 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4421 cont=true; xxf="echo \"<\$1> found.\" >&4";
4422 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4423 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4424 esac;
4425 case $# in 4) instead=instead;; *) instead="at last";; esac;
4426 while $test "$cont"; do
4427         xxx=`./findhdr $1`
4428         var=$2; eval "was=\$$2";
4429         if $test "$xxx" && $test -r "$xxx";
4430         then eval $xxf;
4431         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4432                 cont="";
4433         else eval $xxnf;
4434         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4435         set $yyy; shift; shift; yyy=$@;
4436         case $# in 0) cont="";;
4437         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4438                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4439         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4440                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4441         esac;
4442 done;
4443 while $test "$yyy";
4444 do set $yyy; var=$2; eval "was=\$$2";
4445         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4446         set $yyy; shift; shift; yyy=$@;
4447 done'
4448
4449 : see if this is a malloc.h system
4450 set malloc.h i_malloc
4451 eval $inhdr
4452
4453 : see if stdlib is available
4454 set stdlib.h i_stdlib
4455 eval $inhdr
4456
4457 : determine which malloc to compile in
4458 echo " "
4459 case "$usemymalloc" in
4460 ''|[yY]*|true|$define)  dflt='y' ;;
4461 *)      dflt='n' ;;
4462 esac
4463 rp="Do you wish to attempt to use the malloc that comes with $package?"
4464 . ./myread
4465 usemymalloc="$ans"
4466 case "$ans" in
4467 y*|true)
4468         usemymalloc='y'
4469         mallocsrc='malloc.c'
4470         mallocobj="malloc$_o"
4471         d_mymalloc="$define"
4472         case "$libs" in
4473         *-lmalloc*)
4474                 : Remove malloc from list of libraries to use
4475                 echo "Removing unneeded -lmalloc from library list" >&4
4476                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4477                 shift
4478                 libs="$*"
4479                 echo "libs = $libs" >&4
4480                 ;;
4481         esac
4482         ;;
4483 *)
4484         usemymalloc='n'
4485         mallocsrc=''
4486         mallocobj=''
4487         d_mymalloc="$undef"
4488         ;;
4489 esac
4490
4491 : compute the return types of malloc and free
4492 echo " "
4493 $cat >malloc.c <<END
4494 #$i_malloc I_MALLOC
4495 #$i_stdlib I_STDLIB
4496 #include <stdio.h>
4497 #include <sys/types.h>
4498 #ifdef I_MALLOC
4499 #include <malloc.h>
4500 #endif
4501 #ifdef I_STDLIB
4502 #include <stdlib.h>
4503 #endif
4504 #ifdef TRY_MALLOC
4505 void *malloc();
4506 #endif
4507 #ifdef TRY_FREE
4508 void free();
4509 #endif
4510 END
4511 case "$malloctype" in
4512 '')
4513         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4514                 malloctype='void *'
4515         else
4516                 malloctype='char *'
4517         fi
4518         ;;
4519 esac
4520 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4521
4522 case "$freetype" in
4523 '')
4524         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4525                 freetype='void'
4526         else
4527                 freetype='int'
4528         fi
4529         ;;
4530 esac
4531 echo "Your system uses $freetype free(), it would seem." >&4
4532 $rm -f malloc.[co]
4533 : Cruising for prototypes
4534 echo " "
4535 echo "Checking out function prototypes..." >&4
4536 $cat >prototype.c <<'EOCP'
4537 int main(int argc, char *argv[]) {
4538         exit(0);}
4539 EOCP
4540 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4541         echo "Your C compiler appears to support function prototypes."
4542         val="$define"
4543 else
4544         echo "Your C compiler doesn't seem to understand function prototypes."
4545         val="$undef"
4546 fi
4547 set prototype
4548 eval $setvar
4549 $rm -f prototype*
4550
4551 case "$prototype" in
4552 "$define") ;;
4553 *)      ansi2knr='ansi2knr'
4554         echo " "
4555         cat <<EOM >&4
4556
4557 $me:  FATAL ERROR:
4558 This version of $package can only be compiled by a compiler that 
4559 understands function prototypes.  Unfortunately, your C compiler 
4560         $cc $ccflags
4561 doesn't seem to understand them.  Sorry about that.
4562
4563 If GNU cc is available for your system, perhaps you could try that instead.  
4564
4565 Eventually, we hope to support building Perl with pre-ANSI compilers.
4566 If you would like to help in that effort, please contact <perlbug@perl.org>.
4567
4568 Aborting Configure now.
4569 EOM
4570         exit 2
4571         ;;
4572 esac
4573
4574 : determine where public executables go
4575 echo " "
4576 set dflt bin bin
4577 eval $prefixit
4578 fn=d~
4579 rp='Pathname where the public executables will reside?'
4580 . ./getfile
4581 if $test "X$ansexp" != "X$binexp"; then
4582         installbin=''
4583 fi
4584 bin="$ans"
4585 binexp="$ansexp"
4586 if $afs; then
4587         $cat <<EOM
4588
4589 Since you are running AFS, I need to distinguish the directory in which
4590 executables reside from the directory in which they are installed (and from
4591 which they are presumably copied to the former directory by occult means).
4592
4593 EOM
4594         case "$installbin" in
4595         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4596         *) dflt="$installbin";;
4597         esac
4598         fn=de~
4599         rp='Where will public executables be installed?'
4600         . ./getfile
4601         installbin="$ans"
4602 else
4603         installbin="$binexp"
4604 fi
4605
4606 : determine whether to install perl also as /usr/bin/perl
4607
4608 echo " "
4609 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4610         $cat <<EOM
4611 Many scripts expect to perl to be installed as /usr/bin/perl.
4612 I can install the perl you are about to compile also as /usr/bin/perl
4613 (in addition to $installbin/perl).
4614 EOM
4615         case "$installusrbinperl" in
4616         "$undef"|[nN]*) dflt='n';;
4617         *)              dflt='y';;
4618         esac
4619         rp="Do you want to install perl as /usr/bin/perl?"
4620         . ./myread
4621         case "$ans" in
4622         [yY]*)  val="$define";;
4623         *)      val="$undef" ;;
4624         esac
4625 else
4626         val="$undef"
4627 fi
4628 set installusrbinperl
4629 eval $setvar
4630
4631 : define a shorthand compile call
4632 compile='
4633 mc_file=$1;
4634 shift;
4635 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4636 : define a shorthand compile call for compilations that should be ok.
4637 compile_ok='
4638 mc_file=$1;
4639 shift;
4640 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4641
4642 echo " "
4643 echo "Checking for GNU C Library..." >&4
4644 cat >gnulibc.c <<EOM
4645 #include <stdio.h>
4646 int main()
4647 {
4648 #ifdef __GLIBC__
4649     exit(0);
4650 #else
4651     exit(1);
4652 #endif
4653 }
4654 EOM
4655 set gnulibc
4656 if eval $compile_ok && ./gnulibc; then
4657         val="$define"
4658         echo "You are using the GNU C Library"
4659 else
4660         val="$undef"
4661         echo "You are not using the GNU C Library"
4662 fi
4663 $rm -f gnulibc*
4664 set d_gnulibc
4665 eval $setvar
4666
4667 : see if nm is to be used to determine whether a symbol is defined or not
4668 case "$usenm" in
4669 '')
4670         dflt=''
4671         case "$d_gnulibc" in
4672         "$define")
4673                 echo " "
4674                 echo "nm probably won't work on the GNU C Library." >&4
4675                 dflt=n
4676                 ;;
4677         esac
4678         case "$dflt" in
4679         '') 
4680                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4681                         echo " "
4682                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4683                         echo "'nm' won't be sufficient on this sytem." >&4
4684                         dflt=n
4685                 fi
4686                 ;;
4687         esac
4688         case "$dflt" in
4689         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4690                 if $test $dflt -gt 20; then
4691                         dflt=y
4692                 else
4693                         dflt=n
4694                 fi
4695                 ;;
4696         esac
4697         ;;
4698 *)
4699         case "$usenm" in
4700         true|$define) dflt=y;;
4701         *) dflt=n;;
4702         esac
4703         ;;
4704 esac
4705 $cat <<EOM
4706
4707 I can use $nm to extract the symbols from your C libraries. This
4708 is a time consuming task which may generate huge output on the disk (up
4709 to 3 megabytes) but that should make the symbols extraction faster. The
4710 alternative is to skip the 'nm' extraction part and to compile a small
4711 test program instead to determine whether each symbol is present. If
4712 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4713 this may be the best solution.
4714
4715 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4716
4717 EOM
4718 rp="Shall I use $nm to extract C symbols from the libraries?"
4719 . ./myread
4720 case "$ans" in
4721 [Nn]*) usenm=false;;
4722 *) usenm=true;;
4723 esac
4724
4725 runnm=$usenm
4726 case "$reuseval" in
4727 true) runnm=false;;
4728 esac
4729
4730 : nm options which may be necessary
4731 case "$nm_opt" in
4732 '') if $test -f /mach_boot; then
4733                 nm_opt=''       # Mach
4734         elif $test -d /usr/ccs/lib; then
4735                 nm_opt='-p'     # Solaris (and SunOS?)
4736         elif $test -f /dgux; then
4737                 nm_opt='-p'     # DG-UX
4738         elif $test -f /lib64/rld; then
4739                 nm_opt='-p'     # 64-bit Irix
4740         else
4741                 nm_opt=''
4742         fi;;
4743 esac
4744
4745 : nm options which may be necessary for shared libraries but illegal
4746 : for archive libraries.  Thank you, Linux.
4747 case "$nm_so_opt" in
4748 '')     case "$myuname" in
4749         *linux*)
4750                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4751                         nm_so_opt='--dynamic'
4752                 fi
4753                 ;;
4754         esac
4755         ;;
4756 esac
4757
4758 case "$runnm" in
4759 true)
4760 : get list of predefined functions in a handy place
4761 echo " "
4762 case "$libc" in
4763 '') libc=unknown
4764         case "$libs" in
4765         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4766         esac
4767         ;;
4768 esac
4769 libnames='';
4770 case "$libs" in
4771 '') ;;
4772 *)  for thislib in $libs; do
4773         case "$thislib" in
4774         -lc|-lc_s)
4775                 : Handle C library specially below.
4776                 ;;
4777         -l*)
4778                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4779                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4780                         :
4781                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4782                         :
4783                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4784                         :
4785                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4786                         :
4787                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4788                         :
4789                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4790                         :
4791                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4792                         :
4793                 else
4794                         try=''
4795                 fi
4796                 libnames="$libnames $try"
4797                 ;;
4798         *) libnames="$libnames $thislib" ;;
4799         esac
4800         done
4801         ;;
4802 esac
4803 xxx=normal
4804 case "$libc" in
4805 unknown)
4806         set /lib/libc.$so
4807         for xxx in $libpth; do
4808                 $test -r $1 || set $xxx/libc.$so
4809                 : The messy sed command sorts on library version numbers.
4810                 $test -r $1 || \
4811                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4812                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4813                                 h
4814                                 s/[0-9][0-9]*/0000&/g
4815                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4816                                 G
4817                                 s/\n/ /' | \
4818                          sort | $sed -e 's/^.* //'`
4819                 eval set \$$#
4820         done
4821         $test -r $1 || set /usr/ccs/lib/libc.$so
4822         $test -r $1 || set /lib/libsys_s$_a
4823         ;;
4824 *)
4825         set blurfl
4826         ;;
4827 esac
4828 if $test -r "$1"; then
4829         echo "Your (shared) C library seems to be in $1."
4830         libc="$1"
4831 elif $test -r /lib/libc && $test -r /lib/clib; then
4832         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4833         xxx=apollo
4834         libc='/lib/clib /lib/libc'
4835         if $test -r /lib/syslib; then
4836                 echo "(Your math library is in /lib/syslib.)"
4837                 libc="$libc /lib/syslib"
4838         fi
4839 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4840         echo "Your C library seems to be in $libc, as you said before."
4841 elif $test -r $incpath/usr/lib/libc$_a; then
4842         libc=$incpath/usr/lib/libc$_a;
4843         echo "Your C library seems to be in $libc.  That's fine."
4844 elif $test -r /lib/libc$_a; then
4845         libc=/lib/libc$_a;
4846         echo "Your C library seems to be in $libc.  You're normal."
4847 else
4848         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4849                 :
4850         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4851                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4852         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4853                 :
4854         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4855                 :
4856         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4857                 :
4858         else
4859                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4860         fi
4861         if $test -r "$tans"; then
4862                 echo "Your C library seems to be in $tans, of all places."
4863                 libc=$tans
4864         else
4865                 libc='blurfl'
4866         fi
4867 fi
4868 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4869         dflt="$libc"
4870         cat <<EOM
4871
4872 If the guess above is wrong (which it might be if you're using a strange
4873 compiler, or your machine supports multiple models), you can override it here.
4874
4875 EOM
4876 else
4877         dflt=''
4878         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4879         cat >&4 <<EOM
4880 I can't seem to find your C library.  I've looked in the following places:
4881
4882 EOM
4883         $sed 's/^/      /' libpath
4884         cat <<EOM
4885
4886 None of these seems to contain your C library. I need to get its name...
4887
4888 EOM
4889 fi
4890 fn=f
4891 rp='Where is your C library?'
4892 . ./getfile
4893 libc="$ans"
4894
4895 echo " "
4896 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4897 set X `cat libnames`
4898 shift
4899 xxx=files
4900 case $# in 1) xxx=file; esac
4901 echo "Extracting names from the following $xxx for later perusal:" >&4
4902 echo " "
4903 $sed 's/^/      /' libnames >&4
4904 echo " "
4905 $echo $n "This may take a while...$c" >&4
4906
4907 for file in $*; do
4908         case $file in
4909         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4910         *) $nm $nm_opt $file 2>/dev/null;;
4911         esac
4912 done >libc.tmp
4913
4914 $echo $n ".$c"
4915 $grep fprintf libc.tmp > libc.ptf
4916 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4917 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4918 xxx='[ADTSIW]'
4919 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4920         eval $xscan;\
4921         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4922                 eval $xrun
4923 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4924         eval $xscan;\
4925         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4926                 eval $xrun
4927 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4928         eval $xscan;\
4929         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4930                 eval $xrun
4931 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4932         eval $xscan;\
4933         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4934                 eval $xrun
4935 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4936         eval $xscan;\
4937         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4938                 eval $xrun
4939 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4940         eval $xscan;\
4941         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4942                 eval $xrun
4943 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4944                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4945         eval $xscan;\
4946         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4947                 eval $xrun
4948 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4949         eval $xscan;\
4950         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4951                 eval $xrun
4952 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4953         eval $xscan;\
4954         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4955                 eval $xrun
4956 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4957         eval $xscan;\
4958         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4959                 eval $xrun
4960 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4961         eval $xscan;\
4962         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4963                 eval $xrun
4964 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4965         eval $xscan;\
4966         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4967                 eval $xrun
4968 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4969         eval $xscan;\
4970         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4971                 eval $xrun
4972 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4973         eval $xscan;\
4974         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4975                 eval $xrun
4976 else
4977         $nm -p $* 2>/dev/null >libc.tmp
4978         $grep fprintf libc.tmp > libc.ptf
4979         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4980                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4981         then
4982                 nm_opt='-p'
4983                 eval $xrun
4984         else
4985                 echo " "
4986                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4987                 com=''
4988                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4989                         for thisname in $libnames $libc; do
4990                                 $ar t $thisname >>libc.tmp
4991                         done
4992                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4993                         echo "Ok." >&4
4994                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4995                         # Repeat libc to extract forwarders to DLL entries too
4996                         for thisname in $libnames $libc; do
4997                                 $ar tv $thisname >>libc.tmp
4998                                 # Revision 50 of EMX has bug in $ar.
4999                                 # it will not extract forwarders to DLL entries
5000                                 # Use emximp which will extract exactly them.
5001                                 emximp -o tmp.imp $thisname \
5002                                     2>/dev/null && \
5003                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5004                                     < tmp.imp >>libc.tmp
5005                                 $rm tmp.imp
5006                         done
5007                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5008                         echo "Ok." >&4
5009                 else
5010                         echo "$ar didn't seem to work right." >&4
5011                         echo "Maybe this is a Cray...trying bld instead..." >&4
5012                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5013                         then
5014                                 for thisname in $libnames; do
5015                                         bld t $libnames | \
5016                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5017                                         $ar t $thisname >>libc.tmp
5018                                 done
5019                                 echo "Ok." >&4
5020                         else
5021                                 echo "That didn't work either.  Giving up." >&4
5022                                 exit 1
5023                         fi
5024                 fi
5025         fi
5026 fi
5027 nm_extract="$com"
5028 if $test -f /lib/syscalls.exp; then
5029         echo " "
5030         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5031         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5032 fi
5033 ;;
5034 esac
5035 $rm -f libnames libpath
5036
5037 : see if dld is available
5038 set dld.h i_dld
5039 eval $inhdr
5040
5041 : is a C symbol defined?
5042 csym='tlook=$1;
5043 case "$3" in
5044 -v) tf=libc.tmp; tc=""; tdc="";;
5045 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5046 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5047 esac;
5048 tx=yes;
5049 case "$reuseval-$4" in
5050 true-) ;;
5051 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5052 esac;
5053 case "$tx" in
5054 yes)
5055         case "$runnm" in
5056         true)
5057                 if $contains $tlook $tf >/dev/null 2>&1;
5058                 then tval=true;
5059                 else tval=false;
5060                 fi;;
5061         *)
5062                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5063                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5064                 then tval=true;
5065                 else tval=false;
5066                 fi;
5067                 $rm -f t t.c;;
5068         esac;;
5069 *)
5070         case "$tval" in
5071         $define) tval=true;;
5072         *) tval=false;;
5073         esac;;
5074 esac;
5075 eval "$2=$tval"'
5076
5077 : define an is-in-libc? function
5078 inlibc='echo " "; td=$define; tu=$undef;
5079 sym=$1; var=$2; eval "was=\$$2";
5080 tx=yes;
5081 case "$reuseval$was" in
5082 true) ;;
5083 true*) tx=no;;
5084 esac;
5085 case "$tx" in
5086 yes)
5087         set $sym tres -f;
5088         eval $csym;
5089         case "$tres" in
5090         true)
5091                 echo "$sym() found." >&4;
5092                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5093         *)
5094                 echo "$sym() NOT found." >&4;
5095                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5096         esac;;
5097 *)
5098         case "$was" in
5099         $define) echo "$sym() found." >&4;;
5100         *) echo "$sym() NOT found." >&4;;
5101         esac;;
5102 esac'
5103
5104 : see if dlopen exists
5105 xxx_runnm="$runnm"
5106 runnm=false
5107 set dlopen d_dlopen
5108 eval $inlibc
5109 runnm="$xxx_runnm"
5110
5111 : determine which dynamic loading, if any, to compile in
5112 echo " "
5113 dldir="ext/DynaLoader"
5114 case "$usedl" in
5115 $define|y|true)
5116         dflt='y'
5117         usedl="$define"
5118         ;;
5119 $undef|n|false)
5120         dflt='n'
5121         usedl="$undef"
5122         ;;
5123 *) 
5124         dflt='n'
5125         case "$d_dlopen" in
5126             $define) dflt='y' ;;
5127         esac
5128         case "$i_dld" in
5129             $define) dflt='y' ;;
5130         esac
5131         : Does a dl_xxx.xs file exist for this operating system
5132         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5133         ;;
5134 esac
5135 rp="Do you wish to use dynamic loading?"
5136 . ./myread
5137 usedl="$ans"
5138 case "$ans" in
5139 y*) usedl="$define"
5140         case "$dlsrc" in
5141         '')
5142                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5143                         dflt="$dldir/dl_${osname}.xs"
5144                 elif $test "$d_dlopen" = "$define" ; then
5145                         dflt="$dldir/dl_dlopen.xs"
5146                 elif $test "$i_dld" = "$define" ; then
5147                         dflt="$dldir/dl_dld.xs"
5148                 else
5149                         dflt=''
5150                 fi
5151                 ;;
5152         *)      dflt="$dldir/$dlsrc"
5153                 ;;
5154         esac
5155     echo "The following dynamic loading files are available:"
5156         : Can not go over to $dldir because getfile has path hard-coded in.
5157         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5158         rp="Source file to use for dynamic loading"
5159         fn="fne"
5160         # XXX This getfile call will fail the existence check if you try 
5161         # building away from $src (this is not supported yet).
5162         . ./getfile
5163         usedl="$define"
5164         : emulate basename
5165         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5166
5167         $cat << EOM
5168
5169 Some systems may require passing special flags to $cc -c to
5170 compile modules that will be used to create a shared library.
5171 To use no flags, say "none".
5172
5173 EOM
5174     case "$cccdlflags" in
5175     '') case "$gccversion" in
5176                 '') case "$osname" in
5177                         hpux)   dflt='+z' ;;
5178                         next)   dflt='none' ;;
5179                         irix*)  dflt='-KPIC' ;;
5180                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5181                         sunos)  dflt='-pic' ;;
5182                         *)      dflt='none' ;;
5183                     esac
5184                         ;;
5185                 *)  case "$osname" in
5186                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5187                         *)      dflt='-fpic' ;;
5188                     esac ;;
5189             esac ;;
5190         ' ') dflt='none' ;;
5191     *)  dflt="$cccdlflags" ;;
5192     esac
5193     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5194     . ./myread
5195     case "$ans" in
5196     none) cccdlflags=' ' ;;
5197     *) cccdlflags="$ans" ;;
5198     esac
5199
5200     cat << EOM
5201
5202 Some systems use ld to create libraries that can be dynamically loaded,
5203 while other systems (such as those using ELF) use $cc.
5204
5205 EOM
5206         case "$ld" in
5207         '')     $cat >try.c <<'EOM'
5208 /* Test for whether ELF binaries are produced */
5209 #include <fcntl.h>
5210 #include <stdlib.h>
5211 int main() {
5212         char b[4];
5213         int i = open("a.out",O_RDONLY);
5214         if(i == -1) 
5215                 exit(1); /* fail */
5216         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5217                 exit(0); /* succeed (yes, it's ELF) */
5218         else
5219                 exit(1); /* fail */
5220 }
5221 EOM
5222                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5223                         cat <<EOM
5224 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5225 EOM
5226                         dflt="$cc"
5227                 else
5228                         echo "I'll use ld to build dynamic libraries."
5229                         dflt='ld'
5230                 fi
5231                 rm -f try.c a.out
5232                 ;;
5233         *)      dflt="$ld"
5234                 ;;
5235         esac
5236
5237     rp="What command should be used to create dynamic libraries?"
5238     . ./myread
5239         ld="$ans"
5240
5241     cat << EOM
5242
5243 Some systems may require passing special flags to $ld to create a
5244 library that can be dynamically loaded.  If your ld flags include
5245 -L/other/path options to locate libraries outside your loader's normal
5246 search path, you may need to specify those -L options here as well.  To
5247 use no flags, say "none".
5248
5249 EOM
5250     case "$lddlflags" in
5251     '') case "$osname" in
5252                         beos) dflt='-nostart' ;;
5253                         hpux)  dflt='-b' ;;
5254                         linux|irix*)    dflt='-shared' ;;
5255                         next)  dflt='none' ;;
5256                         solaris) dflt='-G' ;;
5257                         sunos) dflt='-assert nodefinitions' ;;
5258                         svr4*|esix*) dflt="-G $ldflags" ;;
5259                 *)     dflt='none' ;;
5260                         esac
5261                         ;;
5262     *) dflt="$lddlflags" ;;
5263     esac
5264
5265         : Try to guess additional flags to pick up local libraries.
5266         : Be careful not to append to a plain 'none'
5267         case "$dflt" in
5268         none) dflt='' ;;
5269         esac
5270         for thisflag in $ldflags; do
5271                 case "$thisflag" in
5272                 -L*)
5273                         case " $dflt " in
5274                         *" $thisflag "*) ;;
5275                         *) dflt="$dflt $thisflag" ;;
5276                         esac
5277                         ;;
5278                 esac
5279         done
5280
5281         case "$dflt" in
5282         ''|' ') dflt='none' ;;
5283         esac
5284
5285     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5286     . ./myread
5287     case "$ans" in
5288     none) lddlflags=' ' ;;
5289     *) lddlflags="$ans" ;;
5290     esac
5291
5292         cat <<EOM
5293
5294 Some systems may require passing special flags to $cc to indicate that
5295 the resulting executable will use dynamic linking.  To use no flags,
5296 say "none".
5297
5298 EOM
5299     case "$ccdlflags" in
5300     '') case "$osname" in
5301                 hpux)   dflt='-Wl,-E' ;;
5302                 linux)  dflt='-rdynamic' ;;
5303                 next)   dflt='none' ;;
5304                 sunos)  dflt='none' ;;
5305                 *)      dflt='none' ;;
5306             esac ;;
5307     ' ')  dflt='none' ;;
5308     *)  dflt="$ccdlflags" ;;
5309     esac
5310     rp="Any special flags to pass to $cc to use dynamic loading?"
5311     . ./myread
5312     case "$ans" in
5313     none) ccdlflags=' ' ;;
5314     *) ccdlflags="$ans" ;;
5315     esac
5316     ;;
5317 *)  usedl="$undef"
5318         ld='ld'
5319     dlsrc='dl_none.xs'
5320     lddlflags=''
5321     ccdlflags=''
5322     ;;
5323 esac
5324
5325 also=''
5326 case "$usedl" in
5327 $undef)
5328         # No dynamic loading being used, so don't bother even to prompt.
5329         useshrplib='false'
5330         ;;
5331 *)      case "$useshrplib" in
5332         '')     case "$osname" in
5333                 svr4*|dgux|dynixptx|esix|powerux|beos)
5334                         dflt=y
5335                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5336                         ;;
5337                 next*)
5338                         case "$osvers" in
5339                         4*)     dflt=y
5340                                 also='Building a shared libperl is needed for MAB support.'
5341                                 ;;
5342                         *)      dflt=n
5343                                 ;;
5344                         esac
5345                         ;;
5346                 *)      dflt=n
5347                         ;;
5348                 esac
5349                 ;;
5350         $define|true|[Yy]*)
5351                 dflt=y
5352                 ;;
5353         *)      dflt=n
5354                 ;;
5355         esac
5356         $cat << EOM
5357
5358 The perl executable is normally obtained by linking perlmain.c with
5359 libperl${_a}, any static extensions (usually just DynaLoader), and
5360 any other libraries needed on this system (such as -lm, etc.).  Since
5361 your system supports dynamic loading, it is probably possible to build
5362 a shared libperl.$so.  If you will have more than one executable linked
5363 to libperl.$so, this will significantly reduce the size of each
5364 executable, but it may have a noticeable affect on performance.  The
5365 default is probably sensible for your system.
5366 $also
5367
5368 EOM
5369         rp="Build a shared libperl.$so (y/n)"
5370         . ./myread
5371         case "$ans" in
5372         true|$define|[Yy]*)
5373                 useshrplib='true'
5374                 # Why does next4 have to be so different?
5375                 case "${osname}${osvers}" in
5376                 next4*|rhapsody*)
5377                         xxx='DYLD_LIBRARY_PATH' ;;
5378                 os2*)   xxx='' ;; # Nothing special needed.
5379                 beos*)  xxx='' ;;
5380                 *)              xxx='LD_LIBRARY_PATH' ;;
5381                 esac
5382                 ;;
5383         *)      useshrplib='false' ;;
5384         esac
5385         ;;
5386 esac
5387
5388 case "$useshrplib" in
5389 true)
5390         case "$libperl" in
5391         '')
5392                 # Figure out a good name for libperl.so.  Since it gets stored in
5393                 # a version-specific architecture-dependent library, the version
5394                 # number isn't really that important, except for making cc/ld happy.
5395                 #
5396                 # A name such as libperl.so.3.1
5397                 majmin="libperl.$so.$patchlevel.$subversion"
5398                 # A name such as libperl.so.301
5399                 majonly=`echo $patchlevel $subversion |
5400                         $awk '{printf "%d%02d", $1, $2}'`
5401                 majonly=libperl.$so.$majonly
5402                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5403                 # rely on figuring it out from the naming of libc.
5404                 case "${osname}${osvers}" in
5405                 next4*)
5406                         dflt=libperl.5.$so
5407                         # XXX How handle the --version stuff for MAB?
5408                         ;;
5409                 linux*)  # ld won't link with a bare -lperl otherwise.
5410                         dflt=libperl.$so
5411                         ;;
5412                 *)      # Try to guess based on whether libc has major.minor.
5413                         case "$libc" in
5414                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5415                         *libc.$so.[0-9]*) dflt=$majonly ;;
5416                         *)      dflt=libperl.$so ;;
5417                         esac
5418                         ;;
5419                 esac
5420                 ;;
5421         *)      dflt=$libperl
5422                 ;;
5423         esac
5424         cat << EOM
5425
5426 I need to select a good name for the shared libperl.  If your system uses
5427 library names with major and minor numbers, then you might want something
5428 like $majmin.  Alternatively, if your system uses a single version
5429 number for shared libraries, then you might want to use $majonly.
5430 Or, your system might be quite happy with a simple libperl.$so.
5431
5432 Since the shared libperl will get installed into a version-specific
5433 architecture-dependent directory, the version number of the shared perl
5434 library probably isn't important, so the default should be o.k.
5435
5436 EOM
5437         rp='What name do you want to give to the shared libperl?'
5438         . ./myread
5439         libperl=$ans
5440         echo "Ok, I'll use $libperl"
5441         ;;
5442 *)
5443         libperl="libperl${_a}"
5444         ;;
5445 esac
5446
5447 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5448 case "$shrpdir" in
5449 '') ;;
5450 *)      $cat >&4 <<EOM
5451 WARNING:  Use of the shrpdir variable for the installation location of
5452 the shared $libperl is not supported.  It was never documented and
5453 will not work in this version.  Let me (perlbug@perl.com)
5454 know of any problems this may cause.
5455
5456 EOM
5457         case "$shrpdir" in
5458         "$archlibexp/CORE")
5459                 $cat >&4 <<EOM
5460 But your current setting of $shrpdir is
5461 the default anyway, so it's harmless.
5462 EOM
5463                 ;;
5464         *)
5465                 $cat >&4 <<EOM
5466 Further, your current attempted setting of $shrpdir
5467 conflicts with the value of $archlibexp/CORE
5468 that installperl will use.
5469 EOM
5470                 ;;
5471         esac
5472         ;;
5473 esac
5474
5475 # How will the perl executable find the installed shared $libperl?
5476 # Add $xxx to ccdlflags.
5477 # If we can't figure out a command-line option, use $shrpenv to
5478 # set env LD_RUN_PATH.  The main perl makefile uses this.
5479 shrpdir=$archlibexp/CORE
5480 xxx=''
5481 tmp_shrpenv=''
5482 if "$useshrplib"; then
5483     case "$osname" in 
5484         aix)
5485                 # We'll set it in Makefile.SH...
5486                 ;;
5487         solaris|netbsd)
5488                 xxx="-R $shrpdir"
5489                 ;;
5490         freebsd)
5491                 xxx="-Wl,-R$shrpdir"
5492                 ;;
5493         linux|irix*|dec_osf)
5494                 xxx="-Wl,-rpath,$shrpdir"
5495                 ;;
5496         next)
5497                 # next doesn't like the default...
5498                 ;;
5499         beos)
5500                 # beos doesn't like the default, either.
5501                 ;;
5502         hpux*)
5503                 # hpux doesn't like the default, either.
5504                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5505                 ;;
5506         *)
5507                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5508                 ;;
5509         esac
5510         case "$xxx" in
5511         '') ;;
5512         *)      
5513                 # Only add $xxx if it isn't already in ccdlflags.
5514                 case " $ccdlflags " in
5515                 *" $xxx "*)     ;;
5516                 *)      ccdlflags="$ccdlflags $xxx"
5517                         cat <<EOM >&4
5518
5519 Adding $xxx to the flags
5520 passed to $ld so that the perl executable will find the 
5521 installed shared $libperl.
5522
5523 EOM
5524                         ;;
5525                 esac
5526                 ;;
5527         esac
5528 fi
5529 # Respect a hint or command-line value.
5530 case "$shrpenv" in
5531 '') shrpenv="$tmp_shrpenv" ;;
5532 esac
5533
5534 : determine where manual pages go
5535 set man1dir man1dir none
5536 eval $prefixit
5537 $cat <<EOM
5538
5539 $spackage has manual pages available in source form.
5540 EOM
5541 case "$nroff" in
5542 nroff)
5543         echo "However, you don't have nroff, so they're probably useless to you."
5544         case "$man1dir" in
5545         '') man1dir="none";;
5546         esac;;
5547 esac
5548 echo "If you don't want the manual sources installed, answer 'none'."
5549 case "$man1dir" in
5550 ' ') dflt=none
5551         ;;
5552 '')
5553         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5554         lookpath="$lookpath $prefixexp/man/p_man/man1"
5555         lookpath="$lookpath $prefixexp/man/u_man/man1"
5556         lookpath="$lookpath $prefixexp/man/man.1"
5557         case "$sysman" in
5558         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5559         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5560         esac
5561         set dflt
5562         eval $prefixup
5563         ;;
5564 *)  dflt="$man1dir"
5565         ;;
5566 esac
5567 echo " "
5568 fn=dn+~
5569 rp="Where do the main $spackage manual pages (source) go?"
5570 . ./getfile
5571 if $test "X$man1direxp" != "X$ansexp"; then
5572         installman1dir=''
5573 fi
5574 man1dir="$ans"
5575 man1direxp="$ansexp"
5576 case "$man1dir" in
5577 '') man1dir=' '
5578         installman1dir='';;
5579 esac
5580 if $afs; then
5581         $cat <<EOM
5582
5583 Since you are running AFS, I need to distinguish the directory in which
5584 manual pages reside from the directory in which they are installed (and from
5585 which they are presumably copied to the former directory by occult means).
5586
5587 EOM
5588         case "$installman1dir" in
5589         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5590         *) dflt="$installman1dir";;
5591         esac
5592         fn=de~
5593         rp='Where will man pages be installed?'
5594         . ./getfile
5595         installman1dir="$ans"
5596 else
5597         installman1dir="$man1direxp"
5598 fi
5599
5600 : What suffix to use on installed man pages
5601
5602 case "$man1dir" in
5603 ' ')
5604         man1ext='0'
5605         ;;
5606 *)
5607         rp="What suffix should be used for the main $spackage man pages?"
5608         case "$man1ext" in
5609         '')     case "$man1dir" in
5610                 *1)  dflt=1 ;;
5611                 *1p) dflt=1p ;;
5612                 *1pm) dflt=1pm ;;
5613                 *l) dflt=l;;
5614                 *n) dflt=n;;
5615                 *o) dflt=o;;
5616                 *p) dflt=p;;
5617                 *C) dflt=C;;
5618                 *L) dflt=L;;
5619                 *L1) dflt=L1;;
5620                 *) dflt=1;;
5621                 esac
5622                 ;;
5623         *)      dflt="$man1ext";;
5624         esac
5625         . ./myread
5626         man1ext="$ans"
5627         ;;
5628 esac
5629
5630 : see if we can have long filenames
5631 echo " "
5632 rmlist="$rmlist /tmp/cf$$"
5633 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5634 first=123456789abcdef
5635 second=/tmp/cf$$/$first
5636 $rm -f $first $second
5637 if (echo hi >$first) 2>/dev/null; then
5638         if $test -f 123456789abcde; then
5639                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5640                 val="$undef"
5641         else
5642                 if (echo hi >$second) 2>/dev/null; then
5643                         if $test -f /tmp/cf$$/123456789abcde; then
5644                                 $cat <<'EOM'
5645 That's peculiar... You can have filenames longer than 14 characters, but only
5646 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5647 I shall consider your system cannot support long filenames at all.
5648 EOM
5649                                 val="$undef"
5650                         else
5651                                 echo 'You can have filenames longer than 14 characters.' >&4
5652                                 val="$define"
5653                         fi
5654                 else
5655                         $cat <<'EOM'
5656 How confusing! Some of your filesystems are sane enough to allow filenames
5657 longer than 14 characters but some others like /tmp can't even think about them.
5658 So, for now on, I shall assume your kernel does not allow them at all.
5659 EOM
5660                         val="$undef"
5661                 fi
5662         fi
5663 else
5664         $cat <<'EOM'
5665 You can't have filenames longer than 14 chars.  You can't even think about them!
5666 EOM
5667         val="$undef"
5668 fi 
5669 set d_flexfnam
5670 eval $setvar
5671 $rm -rf /tmp/cf$$ 123456789abcde*
5672
5673 : determine where library module manual pages go
5674 set man3dir man3dir none
5675 eval $prefixit
5676 $cat <<EOM
5677
5678 $spackage has manual pages for many of the library modules.
5679 EOM
5680
5681 case "$nroff" in
5682 nroff)
5683         $cat <<'EOM'
5684 However, you don't have nroff, so they're probably useless to you.
5685 EOM
5686         case "$man3dir" in
5687         '') man3dir="none";;
5688         esac;;
5689 esac
5690
5691 case "$d_flexfnam" in
5692 undef)
5693         $cat <<'EOM'
5694 However, your system can't handle the long file names like File::Basename.3. 
5695 EOM
5696         case "$man3dir" in
5697         '') man3dir="none";;
5698         esac;;
5699 esac
5700
5701 echo "If you don't want the manual sources installed, answer 'none'."
5702 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5703 case "$man3dir" in
5704 '')     case "$prefix" in 
5705         *$prog*) dflt=`echo $man1dir | 
5706                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5707         *)      dflt="$privlib/man/man3" ;;
5708         esac
5709         ;;
5710 ' ') dflt=none;;
5711 *)      dflt="$man3dir" ;;
5712 esac
5713 echo " "
5714
5715 fn=dn+~
5716 rp="Where do the $package library man pages (source) go?"
5717 . ./getfile
5718 if test "X$man3direxp" != "X$ansexp"; then
5719         installman3dir=''
5720 fi
5721
5722 man3dir="$ans"
5723 man3direxp="$ansexp"
5724 case "$man3dir" in
5725 '') man3dir=' '
5726         installman3dir='';;
5727 esac
5728 if $afs; then
5729         $cat <<EOM
5730
5731 Since you are running AFS, I need to distinguish the directory in which
5732 manual pages reside from the directory in which they are installed (and from
5733 which they are presumably copied to the former directory by occult means).
5734
5735 EOM
5736         case "$installman3dir" in
5737         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5738         *) dflt="$installman3dir";;
5739         esac
5740         fn=de~
5741         rp='Where will man pages be installed?'
5742         . ./getfile
5743         installman3dir="$ans"
5744 else
5745         installman3dir="$man3direxp"
5746 fi
5747
5748 : What suffix to use on installed man pages
5749
5750 case "$man3dir" in
5751 ' ')
5752         man3ext='0'
5753         ;;
5754 *)
5755         rp="What suffix should be used for the $package library man pages?"
5756         case "$man3ext" in
5757         '')     case "$man3dir" in
5758                 *3)  dflt=3 ;;
5759                 *3p) dflt=3p ;;
5760                 *3pm) dflt=3pm ;;
5761                 *l) dflt=l;;
5762                 *n) dflt=n;;
5763                 *o) dflt=o;;
5764                 *p) dflt=p;;
5765                 *C) dflt=C;;
5766                 *L) dflt=L;;
5767                 *L3) dflt=L3;;
5768                 *) dflt=3;;
5769                 esac
5770                 ;;
5771         *)      dflt="$man3ext";;
5772         esac
5773         . ./myread
5774         man3ext="$ans"
5775         ;;
5776 esac
5777
5778 : see if we have to deal with yellow pages, now NIS.
5779 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5780         if $test -f /usr/etc/nibindd; then
5781                 echo " "
5782                 echo "I'm fairly confident you're on a NeXT."
5783                 echo " "
5784                 rp='Do you get the hosts file via NetInfo?'
5785                 dflt=y
5786                 case "$hostcat" in
5787                 nidump*) ;;
5788                 '') ;;
5789                 *) dflt=n;;
5790                 esac
5791                 . ./myread
5792                 case "$ans" in
5793                 y*) hostcat='nidump hosts .';;
5794                 *)      case "$hostcat" in
5795                         nidump*) hostcat='';;
5796                         esac
5797                         ;;
5798                 esac
5799         fi
5800         case "$hostcat" in
5801         nidump*) ;;
5802         *)
5803                 case "$hostcat" in
5804                 *ypcat*) dflt=y;;
5805                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5806                                 dflt=y
5807                         else
5808                                 dflt=n
5809                         fi;;
5810                 *) dflt=n;;
5811                 esac
5812                 echo " "
5813                 rp='Are you getting the hosts file via yellow pages?'
5814                 . ./myread
5815                 case "$ans" in
5816                 y*) hostcat='ypcat hosts';;
5817                 *) hostcat='cat /etc/hosts';;
5818                 esac
5819                 ;;
5820         esac
5821 fi
5822 case "$hostcat" in
5823 '') hostcat='cat /etc/hosts';;
5824 esac
5825 case "$groupcat" in
5826 '') groupcat='cat /etc/group';;
5827 esac
5828 case "$passcat" in
5829 '') passcat='cat /etc/passwd';;
5830 esac
5831
5832 : now get the host name
5833 echo " "
5834 echo "Figuring out host name..." >&4
5835 case "$myhostname" in
5836 '') cont=true
5837         echo 'Maybe "hostname" will work...'
5838         if tans=`sh -c hostname 2>&1` ; then
5839                 myhostname=$tans
5840                 phostname=hostname
5841                 cont=''
5842         fi
5843         ;;
5844 *) cont='';;
5845 esac
5846 if $test "$cont"; then
5847         if ./xenix; then
5848                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5849                 if tans=`cat /etc/systemid 2>&1` ; then
5850                         myhostname=$tans
5851                         phostname='cat /etc/systemid'
5852                         echo "Whadyaknow.  Xenix always was a bit strange..."
5853                         cont=''
5854                 fi
5855         elif $test -r /etc/systemid; then
5856                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5857         fi
5858 fi
5859 if $test "$cont"; then
5860         echo 'No, maybe "uuname -l" will work...'
5861         if tans=`sh -c 'uuname -l' 2>&1` ; then
5862                 myhostname=$tans
5863                 phostname='uuname -l'
5864         else
5865                 echo 'Strange.  Maybe "uname -n" will work...'
5866                 if tans=`sh -c 'uname -n' 2>&1` ; then
5867                         myhostname=$tans
5868                         phostname='uname -n'
5869                 else
5870                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5871                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5872                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5873                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5874                         else
5875                                 case "$myhostname" in
5876                                 '') echo "Does this machine have an identity crisis or something?"
5877                                         phostname='';;
5878                                 *)
5879                                         echo "Well, you said $myhostname before..."
5880                                         phostname='echo $myhostname';;
5881                                 esac
5882                         fi
5883                 fi
5884         fi
5885 fi
5886 : you do not want to know about this
5887 set $myhostname
5888 myhostname=$1
5889
5890 : verify guess
5891 if $test "$myhostname" ; then
5892         dflt=y
5893         rp='Your host name appears to be "'$myhostname'".'" Right?"
5894         . ./myread
5895         case "$ans" in
5896         y*) ;;
5897         *) myhostname='';;
5898         esac
5899 fi
5900
5901 : bad guess or no guess
5902 while $test "X$myhostname" = X ; do
5903         dflt=''
5904         rp="Please type the (one word) name of your host:"
5905         . ./myread
5906         myhostname="$ans"
5907 done
5908
5909 : translate upper to lower if necessary
5910 case "$myhostname" in
5911 *[A-Z]*)
5912         echo "(Normalizing case in your host name)"
5913         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5914         ;;
5915 esac
5916
5917 case "$myhostname" in
5918 *.*)
5919         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5920         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5921         echo "(Trimming domain name from host name--host name is now $myhostname)"
5922         ;;
5923 *) case "$mydomain" in
5924         '')
5925                 {
5926                         test "X$hostcat" = "Xypcat hosts" &&
5927                         ypmatch "$myhostname" hosts 2>/dev/null |\
5928                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5929                         $test -s hosts
5930                 } || {
5931                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5932                                         /[       ]$myhostname[  . ]/p" > hosts
5933                 }
5934                 tmp_re="[       . ]"
5935                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5936                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5937                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5938                         hosts | $sort | $uniq | \
5939                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5940                 case `$echo X$dflt` in
5941                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5942                         dflt=.
5943                         ;;
5944                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5945                         ;;
5946                 esac
5947                 case "$dflt" in
5948                 .)
5949                         tans=`./loc resolv.conf X /etc /usr/etc`
5950                         if $test -f "$tans"; then
5951                                 echo "(Attempting domain name extraction from $tans)"
5952                                 dflt=.`$sed -n -e 's/   / /g' \
5953                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5954                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5955                                 case "$dflt" in
5956                                 .) dflt=.`$sed -n -e 's/        / /g' \
5957                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5958                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5959                                         ;;
5960                                 esac
5961                         fi
5962                         ;;
5963                 esac
5964                 case "$dflt" in
5965                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5966                         dflt=.`sh -c domainname 2>/dev/null`
5967                         case "$dflt" in
5968                         '') dflt='.';;
5969                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5970                         esac
5971                         ;;
5972                 esac
5973                 case "$dflt" in
5974                 .) echo "(Lost all hope -- silly guess then)"
5975                         dflt='.uucp'
5976                         ;;
5977                 esac
5978                 $rm -f hosts
5979                 ;;
5980         *) dflt="$mydomain";;
5981         esac;;
5982 esac
5983 echo " "
5984 rp="What is your domain name?"
5985 . ./myread
5986 tans="$ans"
5987 case "$ans" in
5988 '') ;;
5989 .*) ;;
5990 *) tans=".$tans";;
5991 esac
5992 mydomain="$tans"
5993
5994 : translate upper to lower if necessary
5995 case "$mydomain" in
5996 *[A-Z]*)
5997         echo "(Normalizing case in your domain name)"
5998         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5999         ;;
6000 esac
6001
6002 : a little sanity check here
6003 case "$phostname" in
6004 '') ;;
6005 *)
6006         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6007         $myhostname$mydomain|$myhostname) ;;
6008         *)
6009                 case "$phostname" in
6010                 sed*)
6011                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6012                         ;;
6013                 *)
6014                         echo "(That doesn't agree with your $phostname command, by the way.)"
6015                         ;;
6016                 esac
6017         ;;
6018         esac
6019         ;;
6020 esac
6021
6022 $cat <<EOM
6023
6024 I need to get your e-mail address in Internet format if possible, i.e.
6025 something like user@host.domain. Please answer accurately since I have
6026 no easy means to double check it. The default value provided below
6027 is most probably close to the reality but may not be valid from outside
6028 your organization...
6029
6030 EOM
6031 cont=x
6032 while test "$cont"; do
6033         case "$cf_email" in
6034         '') dflt="$cf_by@$myhostname$mydomain";;
6035         *) dflt="$cf_email";;
6036         esac
6037         rp='What is your e-mail address?'
6038         . ./myread
6039         cf_email="$ans"
6040         case "$cf_email" in
6041         *@*.*) cont='' ;;
6042         *)
6043                 rp='Address does not look like an Internet one.  Use it anyway?'
6044                 case "$fastread" in
6045                 yes) dflt=y ;;
6046                 *) dflt=n ;;
6047                 esac
6048                 . ./myread
6049                 case "$ans" in
6050                 y*) cont='' ;;
6051                 *) echo " " ;;
6052                 esac
6053                 ;;
6054         esac
6055 done
6056
6057 $cat <<EOM
6058
6059 If you or somebody else will be maintaining perl at your site, please
6060 fill in the correct e-mail address here so that they may be contacted
6061 if necessary. Currently, the "perlbug" program included with perl
6062 will send mail to this address in addition to perlbug@perl.com. You may
6063 enter "none" for no administrator.
6064
6065 EOM
6066 case "$perladmin" in
6067 '') dflt="$cf_email";;
6068 *) dflt="$perladmin";;
6069 esac
6070 rp='Perl administrator e-mail address'
6071 . ./myread
6072 perladmin="$ans"
6073
6074 : figure out how to guarantee perl startup
6075 case "$startperl" in
6076 '')
6077         case "$sharpbang" in
6078         *!)
6079                 $cat <<EOH
6080
6081 I can use the #! construct to start perl on your system. This will
6082 make startup of perl scripts faster, but may cause problems if you
6083 want to share those scripts and perl is not in a standard place
6084 ($binexp/perl) on all your platforms. The alternative is to force
6085 a shell by starting the script with a single ':' character.
6086
6087 EOH
6088                 dflt="$binexp/perl"
6089                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6090                 . ./myread
6091                 case "$ans" in
6092                 none)   startperl=": # use perl";;
6093                 *)      startperl="#!$ans"
6094                         if $test 30 -lt `echo "$ans" | wc -c`; then
6095                                 $cat >&4 <<EOM
6096
6097 WARNING:  Some systems limit the #! command to 32 characters.
6098 If you experience difficulty running Perl scripts with #!, try
6099 installing Perl in a directory with a shorter pathname.
6100
6101 EOM
6102                         fi ;;
6103                 esac
6104                 ;;
6105         *) startperl=": # use perl"
6106                 ;;
6107         esac
6108         ;;
6109 esac
6110 echo "I'll use $startperl to start perl scripts."
6111
6112 : figure best path for perl in scripts
6113 case "$perlpath" in
6114 '')
6115         perlpath="$binexp/perl"
6116         case "$startperl" in
6117         *!*) ;;
6118         *)
6119                 $cat <<EOH
6120
6121 I will use the "eval 'exec'" idiom to start Perl on your system.
6122 I can use the full path of your Perl binary for this purpose, but
6123 doing so may cause problems if you want to share those scripts and
6124 Perl is not always in a standard place ($binexp/perl).
6125
6126 EOH
6127                 dflt="$binexp/perl"
6128                 rp="What path shall I use in \"eval 'exec'\"?"
6129                 . ./myread
6130                 perlpath="$ans"
6131                 ;;
6132         esac
6133         ;;
6134 esac
6135 case "$startperl" in
6136 *!*)    ;;
6137 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6138 esac
6139
6140 : determine where public executable scripts go
6141 set scriptdir scriptdir
6142 eval $prefixit
6143 case "$scriptdir" in
6144 '')
6145         dflt="$bin"
6146         : guess some guesses
6147         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6148         $test -d /usr/share/bin && dflt=/usr/share/bin
6149         $test -d /usr/local/script && dflt=/usr/local/script
6150         $test -d $prefixexp/script && dflt=$prefixexp/script
6151         set dflt
6152         eval $prefixup
6153         ;;
6154 *)  dflt="$scriptdir"
6155         ;;
6156 esac
6157 $cat <<EOM
6158  
6159 Some installations have a separate directory just for executable scripts so
6160 that they can mount it across multiple architectures but keep the scripts in
6161 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6162 Or you might just lump your scripts in with all your other executables.
6163  
6164 EOM
6165 fn=d~
6166 rp='Where do you keep publicly executable scripts?'
6167 . ./getfile
6168 if $test "X$ansexp" != "X$scriptdirexp"; then
6169         installscript=''
6170 fi
6171 scriptdir="$ans"
6172 scriptdirexp="$ansexp"
6173 if $afs; then
6174         $cat <<EOM
6175
6176 Since you are running AFS, I need to distinguish the directory in which
6177 scripts reside from the directory in which they are installed (and from
6178 which they are presumably copied to the former directory by occult means).
6179
6180 EOM
6181         case "$installscript" in
6182         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6183         *) dflt="$installscript";;
6184         esac
6185         fn=de~
6186         rp='Where will public scripts be installed?'
6187         . ./getfile
6188         installscript="$ans"
6189 else
6190         installscript="$scriptdirexp"
6191 fi
6192
6193 : determine where site specific libraries go.
6194 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6195 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6196 case "$prefix" in
6197 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6198 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6199 esac
6200 eval $prefixit
6201 $cat <<EOM
6202
6203 The installation process will also create a directory for
6204 site-specific extensions and modules.  Some users find it convenient
6205 to place all site-specific files in this directory rather than in the
6206 main distribution directory.
6207
6208 EOM
6209 fn=d~+
6210 rp='Pathname for the site-specific library files?'
6211 . ./getfile
6212 if $test "X$sitelibexp" != "X$ansexp"; then
6213         installsitelib=''
6214 fi
6215 sitelib="$ans"
6216 sitelibexp="$ansexp"
6217 if $afs; then
6218         $cat <<EOM
6219
6220 Since you are running AFS, I need to distinguish the directory in
6221 which site-specific files reside from the directory in which they are
6222 installed (and from which they are presumably copied to the former
6223 directory by occult means).
6224
6225 EOM
6226         case "$installsitelib" in
6227         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6228         *) dflt="$installsitelib";;
6229         esac
6230         fn=de~
6231         rp='Where will site-specific files be installed?'
6232         . ./getfile
6233         installsitelib="$ans"
6234 else
6235         installsitelib="$sitelibexp"
6236 fi
6237
6238 : determine where site specific architecture-dependent libraries go.
6239 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6240 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6241 : sitelib may have an optional trailing /share.
6242 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6243 tdflt="$tdflt/$archname"
6244 set sitearch sitearch none
6245 eval $prefixit
6246 case "$sitearch" in
6247 '')     dflt="$tdflt" ;;
6248 *)      dflt="$sitearch" ;;
6249 esac
6250 $cat <<EOM
6251
6252 The installation process will also create a directory for
6253 architecture-dependent site-specific extensions and modules.
6254
6255 EOM
6256 fn=nd~+
6257 rp='Pathname for the site-specific architecture-dependent library files?'
6258 . ./getfile
6259 if $test "X$sitearchexp" != "X$ansexp"; then
6260         installsitearch=''
6261 fi
6262 sitearch="$ans"
6263 sitearchexp="$ansexp"
6264 if $afs; then
6265         $cat <<EOM
6266
6267 Since you are running AFS, I need to distinguish the directory in
6268 which site-specific architecture-dependent library files reside from
6269 the directory in which they are installed (and from which they are
6270 presumably copied to the former directory by occult means).
6271
6272 EOM
6273         case "$installsitearch" in
6274         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6275         *) dflt="$installsitearch";;
6276         esac
6277         fn=de~
6278         rp='Where will site-specific architecture-dependent files be installed?'
6279         . ./getfile
6280         installsitearch="$ans"
6281 else
6282         installsitearch="$sitearchexp"
6283 fi
6284
6285 cat <<EOM
6286
6287 Previous version of $package used the standard IO mechanisms as defined
6288 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6289 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6290 the default.  This abstraction layer can use AT&T's sfio (if you already
6291 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6292 problems with some extension modules.  Using PerlIO with stdio is safe,
6293 but it is slower than plain stdio and therefore is not the default.
6294
6295 If this doesn't make any sense to you, just accept the default 'n'.
6296 EOM
6297 case "$useperlio" in
6298 $define|true|[yY]*)     dflt='y';;
6299 *) dflt='n';;
6300 esac
6301 rp='Use the experimental PerlIO abstraction layer?'
6302 . ./myread
6303 case "$ans" in
6304 y|Y) 
6305         val="$define"
6306         ;;     
6307 *)      
6308         echo "Ok, doing things the stdio way"
6309         val="$undef"
6310         ;;
6311 esac
6312 set useperlio
6313 eval $setvar 
6314
6315 : Check how to convert floats to strings.
6316 if test "X$d_Gconvert" = X; then
6317         echo " "
6318         echo "Checking for an efficient way to convert floats to strings."
6319         $cat >try.c <<'EOP'
6320 #ifdef TRY_gconvert
6321 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6322 char *myname = "gconvert";
6323 #endif
6324 #ifdef TRY_gcvt
6325 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6326 char *myname = "gcvt";
6327 #endif
6328 #ifdef TRY_sprintf
6329 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6330 char *myname = "sprintf";
6331 #endif
6332
6333 #include <stdio.h>
6334
6335 int
6336 checkit(expect, got)
6337 char *expect;
6338 char *got;
6339 {
6340     if (strcmp(expect, got)) {
6341                 printf("%s oddity:  Expected %s, got %s\n",
6342                         myname, expect, got);
6343                 exit(1);
6344         }
6345 }
6346
6347 int main()
6348
6349         char buf[64]; 
6350         buf[63] = '\0';
6351
6352         /* This must be 1st test on (which?) platform */
6353         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6354         Gconvert(0.1, 8, 0, buf);
6355         checkit("0.1", buf);
6356
6357         Gconvert(1.0, 8, 0, buf); 
6358         checkit("1", buf);
6359
6360         Gconvert(0.0, 8, 0, buf); 
6361         checkit("0", buf);
6362
6363         Gconvert(-1.0, 8, 0, buf); 
6364         checkit("-1", buf);
6365
6366         /* Some Linux gcvt's give 1.e+5 here. */
6367         Gconvert(100000.0, 8, 0, buf); 
6368         checkit("100000", buf);
6369         
6370         /* Some Linux gcvt's give -1.e+5 here. */
6371         Gconvert(-100000.0, 8, 0, buf); 
6372         checkit("-100000", buf);
6373
6374         exit(0);
6375 }
6376 EOP
6377         case "$d_Gconvert" in
6378         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6379         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6380         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6381         *) xxx_list='gconvert gcvt sprintf' ;;
6382         esac
6383
6384         for xxx_convert in $xxx_list; do
6385                 echo "Trying $xxx_convert"
6386                 $rm -f try try$_o
6387                 set try -DTRY_$xxx_convert
6388                 if eval $compile; then
6389                         echo "$xxx_convert" found. >&4
6390                         if ./try; then
6391                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6392                                 break;
6393                         else
6394                                 echo "...But $xxx_convert didn't work as I expected."
6395                         fi
6396                 else
6397                         echo "$xxx_convert NOT found." >&4
6398                 fi
6399         done
6400                 
6401         case "$xxx_convert" in
6402         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6403         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6404         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6405         esac
6406 fi
6407
6408 : Initialize h_fcntl
6409 h_fcntl=false
6410
6411 : Initialize h_sysfile
6412 h_sysfile=false
6413
6414 : access call always available on UNIX
6415 set access d_access
6416 eval $inlibc
6417
6418 : locate the flags for 'access()'
6419 case "$d_access" in
6420 "$define")
6421         echo " "
6422         $cat >access.c <<'EOCP'
6423 #include <sys/types.h>
6424 #ifdef I_FCNTL
6425 #include <fcntl.h>
6426 #endif
6427 #ifdef I_SYS_FILE
6428 #include <sys/file.h>
6429 #endif
6430 #ifdef I_UNISTD
6431 #include <unistd.h>
6432 #endif
6433 int main() {
6434         exit(R_OK);
6435 }
6436 EOCP
6437         : check sys/file.h first, no particular reason here
6438         if $test `./findhdr sys/file.h` && \
6439                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6440                 h_sysfile=true;
6441                 echo "<sys/file.h> defines the *_OK access constants." >&4
6442         elif $test `./findhdr fcntl.h` && \
6443                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6444                 h_fcntl=true;
6445                 echo "<fcntl.h> defines the *_OK access constants." >&4
6446         elif $test `./findhdr unistd.h` && \
6447                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6448                 echo "<unistd.h> defines the *_OK access constants." >&4
6449         else
6450                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6451         fi
6452         ;;
6453 esac
6454 $rm -f access*
6455
6456 : see if accessx exists
6457 set accessx d_accessx
6458 eval $inlibc
6459
6460 : see if alarm exists
6461 set alarm d_alarm
6462 eval $inlibc
6463
6464 : Look for GNU-cc style attribute checking
6465 echo " "
6466 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6467 $cat >attrib.c <<'EOCP'
6468 #include <stdio.h>
6469 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6470 EOCP
6471 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6472         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6473                 echo "Your C compiler doesn't fully support __attribute__."
6474                 val="$undef"
6475         else
6476                 echo "Your C compiler supports __attribute__."
6477                 val="$define"
6478         fi
6479 else
6480         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6481         val="$undef"
6482 fi
6483 set d_attribut
6484 eval $setvar
6485 $rm -f attrib*
6486
6487 : see if bcmp exists
6488 set bcmp d_bcmp
6489 eval $inlibc
6490
6491 : see if bcopy exists
6492 set bcopy d_bcopy
6493 eval $inlibc
6494
6495 : see if this is a unistd.h system
6496 set unistd.h i_unistd
6497 eval $inhdr
6498
6499 : see if getpgrp exists
6500 set getpgrp d_getpgrp
6501 eval $inlibc
6502
6503 case "$d_getpgrp" in
6504 "$define")
6505         echo " "
6506         echo "Checking to see which flavor of getpgrp is in use..."
6507         $cat >set.c <<EOP
6508 #$i_unistd I_UNISTD
6509 #include <sys/types.h>
6510 #ifdef I_UNISTD
6511 #  include <unistd.h>
6512 #endif
6513 int main()
6514 {
6515         if (getuid() == 0) {
6516                 printf("(I see you are running Configure as super-user...)\n");
6517                 setuid(1);
6518         }
6519 #ifdef TRY_BSD_PGRP
6520         if (getpgrp(1) == 0)
6521                 exit(0);
6522 #else
6523         if (getpgrp() > 0)
6524                 exit(0);
6525 #endif
6526         exit(1);
6527 }
6528 EOP
6529         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6530                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6531                 val="$define"
6532         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6533                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6534                 val="$undef"
6535         else
6536                 echo "I can't seem to compile and run the test program."
6537                 if ./usg; then
6538                         xxx="a USG one, i.e. you use getpgrp()."
6539                 else
6540                         # SVR4 systems can appear rather BSD-ish.
6541                         case "$i_unistd" in
6542                         $undef)
6543                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6544                                 val="$define"
6545                                 ;;
6546                         $define)
6547                                 xxx="probably a USG one, i.e. you use getpgrp()."
6548                                 val="$undef"
6549                                 ;;
6550                         esac
6551                 fi
6552                 echo "Assuming your getpgrp is $xxx" >&4
6553         fi
6554         ;;
6555 *) val="$undef";;
6556 esac
6557 set d_bsdgetpgrp
6558 eval $setvar
6559 $rm -f set set.c
6560
6561 : see if setpgrp exists
6562 set setpgrp d_setpgrp
6563 eval $inlibc
6564
6565 case "$d_setpgrp" in
6566 "$define")
6567         echo " "
6568         echo "Checking to see which flavor of setpgrp is in use..."
6569         $cat >set.c <<EOP
6570 #$i_unistd I_UNISTD
6571 #include <sys/types.h>
6572 #ifdef I_UNISTD
6573 #  include <unistd.h>
6574 #endif
6575 int main()
6576 {
6577         if (getuid() == 0) {
6578                 printf("(I see you are running Configure as super-user...)\n");
6579                 setuid(1);
6580         }
6581 #ifdef TRY_BSD_PGRP
6582         if (-1 == setpgrp(1, 1))
6583                 exit(0);
6584 #else
6585         if (setpgrp() != -1)
6586                 exit(0);
6587 #endif
6588         exit(1);
6589 }
6590 EOP
6591         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6592                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6593                 val="$define"
6594         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6595                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6596                 val="$undef"
6597         else
6598                 echo "(I can't seem to compile and run the test program.)"
6599                 if ./usg; then
6600                         xxx="a USG one, i.e. you use setpgrp()."
6601                 else
6602                         # SVR4 systems can appear rather BSD-ish.
6603                         case "$i_unistd" in
6604                         $undef)
6605                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6606                                 val="$define"
6607                                 ;;
6608                         $define)
6609                                 xxx="probably a USG one, i.e. you use setpgrp()."
6610                                 val="$undef"
6611                                 ;;
6612                         esac
6613                 fi
6614                 echo "Assuming your setpgrp is $xxx" >&4
6615         fi
6616         ;;
6617 *) val="$undef";;
6618 esac
6619 set d_bsdsetpgrp
6620 eval $setvar
6621 $rm -f set set.c
6622 : see if bzero exists
6623 set bzero d_bzero
6624 eval $inlibc
6625
6626 : check for lengths of integral types
6627 echo " "
6628 case "$intsize" in
6629 '')
6630         echo "Checking to see how big your integers are..." >&4
6631         $cat >intsize.c <<'EOCP'
6632 #include <stdio.h>
6633 int main()
6634 {
6635         printf("intsize=%d;\n", sizeof(int));
6636         printf("longsize=%d;\n", sizeof(long));
6637         printf("shortsize=%d;\n", sizeof(short));
6638         exit(0);
6639 }
6640 EOCP
6641         set intsize
6642         if eval $compile_ok && ./intsize > /dev/null; then
6643                 eval `./intsize`
6644                 echo "Your integers are $intsize bytes long."
6645                 echo "Your long integers are $longsize bytes long."
6646                 echo "Your short integers are $shortsize bytes long."
6647         else
6648                 $cat >&4 <<EOM
6649 !
6650 Help! I can't compile and run the intsize test program: please enlighten me!
6651 (This is probably a misconfiguration in your system or libraries, and
6652 you really ought to fix it.  Still, I'll try anyway.)
6653 !
6654 EOM
6655                 dflt=4
6656                 rp="What is the size of an integer (in bytes)?"
6657                 . ./myread
6658                 intsize="$ans"
6659                 dflt=$intsize
6660                 rp="What is the size of a long integer (in bytes)?"
6661                 . ./myread
6662                 longsize="$ans"
6663                 dflt=2
6664                 rp="What is the size of a short integer (in bytes)?"
6665                 . ./myread
6666                 shortsize="$ans"
6667         fi
6668         ;;
6669 esac
6670 $rm -f intsize intsize.*
6671
6672 : see if signal is declared as pointer to function returning int or void
6673 echo " "
6674 xxx=`./findhdr signal.h`
6675 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6676 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6677         echo "You have int (*signal())() instead of void." >&4
6678         val="$undef"
6679 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6680         echo "You have void (*signal())()." >&4
6681         val="$define"
6682 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6683         echo "You have int (*signal())() instead of void." >&4
6684         val="$undef"
6685 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6686         echo "You have void (*signal())()." >&4
6687         val="$define"
6688 else
6689         case "$d_voidsig" in
6690         '')
6691         echo "I can't determine whether signal handler returns void or int..." >&4
6692                 dflt=void
6693                 rp="What type does your signal handler return?"
6694                 . ./myread
6695                 case "$ans" in
6696                 v*) val="$define";;
6697                 *) val="$undef";;
6698                 esac;;
6699         "$define")
6700                 echo "As you already told me, signal handler returns void." >&4
6701                 val="$define"
6702                 ;;
6703         *)      echo "As you already told me, signal handler returns int." >&4
6704                 val="$undef"
6705                 ;;
6706         esac
6707 fi
6708 set d_voidsig
6709 eval $setvar
6710 case "$d_voidsig" in
6711 "$define") signal_t="void";;
6712 *) signal_t="int";;
6713 esac
6714 $rm -f $$.tmp
6715
6716 : check for ability to cast large floats to 32-bit ints.
6717 echo " "
6718 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6719 if $test "$intsize" -ge 4; then
6720         xxx=int
6721 else
6722         xxx=long
6723 fi
6724 $cat >try.c <<EOCP
6725 #include <stdio.h>
6726 #include <sys/types.h>
6727 #include <signal.h>
6728 $signal_t blech(s) int s; { exit(3); }
6729 int main()
6730 {
6731         $xxx i32;
6732         double f, g;
6733         int result = 0;
6734         char str[16];
6735         signal(SIGFPE, blech);
6736
6737         /* Don't let compiler optimize the test away.  Store the number 
6738            in a writable string for gcc to pass to sscanf under HP/UX.
6739         */
6740         sprintf(str, "2147483647");
6741         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6742         g = 10 * f;
6743         i32  = ($xxx) g;
6744
6745         /* x86 processors will probably give 0x8000 0000, which is a
6746        sign change.  We don't want that.  We want to mimic SPARC
6747            behavior here, which is to preserve the sign and give
6748            back 0x7fff ffff.
6749         */
6750         if (i32 != ($xxx) f)
6751                 result |= 1;
6752         exit(result);
6753 }
6754 EOCP
6755 set try
6756 if eval $compile_ok; then
6757         ./try
6758         yyy=$?
6759 else
6760         echo "(I can't seem to compile the test program--assuming it can't)"
6761         yyy=1
6762 fi
6763 case "$yyy" in
6764 0)      val="$define"
6765         echo "Yup, it can."
6766         ;;
6767 *)      val="$undef"
6768         echo "Nope, it can't."
6769         ;;
6770 esac
6771 set d_casti32
6772 eval $setvar
6773 $rm -f try try.*
6774
6775 : check for ability to cast negative floats to unsigned
6776 echo " "
6777 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6778 $cat >try.c <<EOCP
6779 #include <stdio.h>
6780 #include <sys/types.h>
6781 #include <signal.h>
6782 $signal_t blech(s) int s; { exit(7); }
6783 $signal_t blech_in_list(s) int s; { exit(4); }
6784 unsigned long dummy_long(p) unsigned long p; { return p; }
6785 unsigned int dummy_int(p) unsigned int p; { return p; }
6786 unsigned short dummy_short(p) unsigned short p; { return p; }
6787 int main()
6788 {
6789         double f;
6790         unsigned long along;
6791         unsigned int aint;
6792         unsigned short ashort;
6793         int result = 0;
6794         char str[16];
6795         
6796         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6797            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6798            optimized the whole file away
6799         */
6800         /* Store the number in a writable string for gcc to pass to 
6801            sscanf under HP/UX.
6802         */
6803         sprintf(str, "-123");
6804         sscanf(str, "%lf", &f);  /* f = -123.; */
6805
6806         signal(SIGFPE, blech);
6807         along = (unsigned long)f;
6808         aint = (unsigned int)f;
6809         ashort = (unsigned short)f;
6810         if (along != (unsigned long)-123)
6811                 result |= 1;
6812         if (aint != (unsigned int)-123)
6813                 result |= 1;
6814         if (ashort != (unsigned short)-123)
6815                 result |= 1;
6816         sprintf(str, "1073741824.");
6817         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6818         f = f + f;
6819         along = 0;
6820         along = (unsigned long)f;
6821         if (along != 0x80000000)
6822                 result |= 2;
6823         f -= 1.;
6824         along = 0;
6825         along = (unsigned long)f;
6826         if (along != 0x7fffffff)
6827                 result |= 1;
6828         f += 2.;
6829         along = 0;
6830         along = (unsigned long)f;
6831         if (along != 0x80000001)
6832                 result |= 2;
6833         if (result)
6834                 exit(result);
6835         signal(SIGFPE, blech_in_list);
6836         sprintf(str, "123.");
6837         sscanf(str, "%lf", &f);  /* f = 123.; */
6838         along = dummy_long((unsigned long)f);
6839         aint = dummy_int((unsigned int)f);
6840         ashort = dummy_short((unsigned short)f);
6841         if (along != (unsigned long)123)
6842                 result |= 4;
6843         if (aint != (unsigned int)123)
6844                 result |= 4;
6845         if (ashort != (unsigned short)123)
6846                 result |= 4;
6847         exit(result);
6848
6849 }
6850 EOCP
6851 set try
6852 if eval $compile_ok; then
6853         ./try
6854         castflags=$?
6855 else
6856         echo "(I can't seem to compile the test program--assuming it can't)"
6857         castflags=7
6858 fi
6859 case "$castflags" in
6860 0)      val="$define"
6861         echo "Yup, it can."
6862         ;;
6863 *)      val="$undef"
6864         echo "Nope, it can't."
6865         ;;
6866 esac
6867 set d_castneg
6868 eval $setvar
6869 $rm -f try.*
6870
6871 : see if vprintf exists
6872 echo " "
6873 if set vprintf val -f d_vprintf; eval $csym; $val; then
6874         echo 'vprintf() found.' >&4
6875         val="$define"
6876         $cat >vprintf.c <<'EOF'
6877 #include <varargs.h>
6878
6879 int main() { xxx("foo"); }
6880
6881 xxx(va_alist)
6882 va_dcl
6883 {
6884         va_list args;
6885         char buf[10];
6886
6887         va_start(args);
6888         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6889 }
6890 EOF
6891         set vprintf
6892         if eval $compile && ./vprintf; then
6893                 echo "Your vsprintf() returns (int)." >&4
6894                 val2="$undef"
6895         else
6896                 echo "Your vsprintf() returns (char*)." >&4
6897                 val2="$define"
6898         fi
6899 else
6900         echo 'vprintf() NOT found.' >&4
6901                 val="$undef"
6902                 val2="$undef"
6903 fi
6904 set d_vprintf
6905 eval $setvar
6906 val=$val2
6907 set d_charvspr
6908 eval $setvar
6909
6910 : see if chown exists
6911 set chown d_chown
6912 eval $inlibc
6913
6914 : see if chroot exists
6915 set chroot d_chroot
6916 eval $inlibc
6917
6918 : see if chsize exists
6919 set chsize d_chsize
6920 eval $inlibc
6921
6922 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6923 while $test $# -ge 2; do
6924         case "$1" in
6925         $define) echo "#include <$2>";;
6926         esac ;
6927     shift 2;
6928 done > try.c;
6929 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6930 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6931         val="$define";
6932 else
6933         val="$undef";
6934 fi;
6935 set $varname;
6936 eval $setvar;
6937 $rm -f try.c try.o'
6938
6939 : see if this is a sys/uio.h system
6940 set sys/uio.h i_sysuio
6941 eval $inhdr
6942
6943 echo "Checking to see if your system supports struct iovec..." >&4
6944 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6945 eval $hasfield
6946 case "$d_iovec_s" in
6947 "$define")      echo "Yup, it does." >&4
6948                 ;;
6949 *)              echo "Nope, it doesn't." >&4
6950                 ;;
6951 esac
6952
6953 socketlib=''
6954 sockethdr=''
6955 : see whether socket exists
6956 echo " "
6957 $echo $n "Hmm... $c" >&4
6958 if set socket val -f d_socket; eval $csym; $val; then
6959         echo "Looks like you have Berkeley networking support." >&4
6960         d_socket="$define"
6961         if set setsockopt val -f; eval $csym; $val; then
6962                 d_oldsock="$undef"
6963         else
6964                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6965                 d_oldsock="$define"
6966         fi
6967 else
6968         if $contains socklib libc.list >/dev/null 2>&1; then
6969                 echo "Looks like you have Berkeley networking support." >&4
6970                 d_socket="$define"
6971                 : we will have to assume that it supports the 4.2 BSD interface
6972                 d_oldsock="$undef"
6973         else
6974                 echo "You don't have Berkeley networking in libc$_a..." >&4
6975                 if test "X$d_socket" = "X$define"; then
6976                    echo "...but you seem to believe that you have sockets." >&4
6977                 else
6978                         for net in net socket
6979                         do
6980                                 if test -f /usr/lib/lib$net$_a; then
6981                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6982                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6983                                         if $contains socket libc.list >/dev/null 2>&1; then
6984                                                 d_socket="$define"
6985                                                 socketlib="-l$net"
6986                                                 case "$net" in
6987                                                 net)
6988                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6989                                                         sockethdr="-I/usr/netinclude"
6990                                                         ;;
6991                                                 esac
6992                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6993                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6994                                                         d_oldsock="$undef"
6995                                                 else
6996                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6997                                                         d_oldsock="$define"
6998                                                 fi
6999                                                 break
7000                                         fi
7001                                 fi
7002                         done
7003                         if test "X$d_socket" != "X$define"; then
7004                            echo "or anywhere else I see." >&4
7005                            d_socket="$undef"
7006                            d_oldsock="$undef"
7007                         fi
7008                 fi
7009         fi
7010 fi
7011
7012 : see if socketpair exists
7013 set socketpair d_sockpair
7014 eval $inlibc
7015
7016
7017 echo " "
7018 echo "Checking the availability of certain socket constants..." >& 4
7019 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7020         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7021         $cat >try.c <<EOF
7022 #include <sys/types.h>
7023 #include <sys/socket.h>
7024 int main() {
7025     int i = $ENUM;
7026 }
7027 EOF
7028         val="$undef"
7029         set try; if eval $compile; then
7030                 val="$define"
7031         fi
7032         set d_${enum}; eval $setvar
7033         $rm -f try.c try
7034 done
7035
7036 set sendmsg d_sendmsg
7037 eval $inlibc
7038
7039 set recvmsg d_recvmsg
7040 eval $inlibc
7041
7042 echo " "
7043 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7044 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7045 eval $hasfield
7046 case "$d_msghdr_s" in
7047 "$define")      echo "Yup, it does." >&4
7048                 ;;
7049 *)              echo "Nope, it doesn't." >&4
7050                 ;;
7051 esac
7052
7053 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7054 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7055 eval $hasfield
7056 case "$d_cmsghdr_s" in
7057 "$define")      echo "Yup, it does." >&4
7058                 ;;
7059 *)              echo "Nope, it doesn't." >&4
7060                 ;;
7061 esac
7062
7063 : check for const keyword
7064 echo " "
7065 echo 'Checking to see if your C compiler knows about "const"...' >&4
7066 $cat >const.c <<'EOCP'
7067 typedef struct spug { int drokk; } spug;
7068 int main()
7069 {
7070         const char *foo;
7071         const spug y;
7072 }
7073 EOCP
7074 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7075         val="$define"
7076         echo "Yup, it does."
7077 else
7078         val="$undef"
7079         echo "Nope, it doesn't."
7080 fi
7081 set d_const
7082 eval $setvar
7083
7084 : see if crypt exists
7085 echo " "
7086 if set crypt val -f d_crypt; eval $csym; $val; then
7087         echo 'crypt() found.' >&4
7088         val="$define"
7089         cryptlib=''
7090 else
7091         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7092         if $test -z "$cryptlib"; then
7093                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7094         else
7095                 cryptlib=-lcrypt
7096         fi
7097         if $test -z "$cryptlib"; then
7098                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7099         else
7100                 cryptlib=-lcrypt
7101         fi
7102         if $test -z "$cryptlib"; then
7103                 cryptlib=`./loc libcrypt$_a "" $libpth`
7104         else
7105                 cryptlib=-lcrypt
7106         fi
7107         if $test -z "$cryptlib"; then
7108                 echo 'crypt() NOT found.' >&4
7109                 val="$undef"
7110         else
7111                 val="$define"
7112         fi
7113 fi
7114 set d_crypt
7115 eval $setvar
7116
7117 : get csh whereabouts
7118 case "$csh" in
7119 'csh') val="$undef" ;;
7120 *) val="$define" ;;
7121 esac
7122 set d_csh
7123 eval $setvar
7124 : Respect a hint or command line value for full_csh.
7125 case "$full_csh" in
7126 '') full_csh=$csh ;;
7127 esac
7128
7129 : see if cuserid exists
7130 set cuserid d_cuserid
7131 eval $inlibc
7132
7133 : see if this is a limits.h system
7134 set limits.h i_limits
7135 eval $inhdr
7136
7137 : see if this is a float.h system
7138 set float.h i_float
7139 eval $inhdr
7140
7141 : See if number of significant digits in a double precision number is known
7142 echo " "
7143 $cat >dbl_dig.c <<EOM
7144 #$i_limits I_LIMITS
7145 #$i_float I_FLOAT
7146 #ifdef I_LIMITS
7147 #include <limits.h>
7148 #endif
7149 #ifdef I_FLOAT
7150 #include <float.h>
7151 #endif
7152 #ifdef DBL_DIG
7153 printf("Contains DBL_DIG");
7154 #endif
7155 EOM
7156 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7157 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7158         echo "DBL_DIG found." >&4
7159         val="$define"
7160 else
7161         echo "DBL_DIG NOT found." >&4
7162         val="$undef"
7163 fi
7164 $rm -f dbl_dig.?
7165 set d_dbl_dig
7166 eval $setvar
7167
7168
7169 if $test X"$use64bits" = X"$define"; then
7170         : see if dbminit64 exists
7171         set dbminit64 d_dbminit64
7172         eval $inlibc
7173
7174         : see if dbmclose64 exists
7175         set dbmclose64 d_dbmclose64
7176         eval $inlibc
7177
7178         : see if fetch64 exists
7179         set fetch64 d_fetch64
7180         eval $inlibc
7181
7182         : see if store64 exists
7183         set store64 d_store64
7184         eval $inlibc
7185
7186         : see if delete64 exists
7187         set delete64 d_delete64
7188         eval $inlibc
7189
7190         : see if firstkey64 exists
7191         set firstkey64 d_firstkey64
7192         eval $inlibc
7193
7194         : see if nextkey64 exists
7195         set nextkey64 d_nextkey64
7196         eval $inlibc
7197 else
7198         val="$undef"
7199         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7200         do
7201                 set $xxx
7202                 eval $setvar
7203         done
7204 fi
7205
7206 : see if difftime exists
7207 set difftime d_difftime
7208 eval $inlibc
7209
7210 : see if sys/stat.h is available
7211 set sys/stat.h i_sysstat
7212 eval $inhdr
7213
7214 : see if this is a dirent system
7215 echo " "
7216 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7217         val="$define"
7218         echo "<dirent.h> found." >&4
7219 else
7220         val="$undef"
7221         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7222                 echo "<sys/dir.h> found." >&4
7223                 echo " "
7224         else
7225                 xinc=`./findhdr sys/ndir.h`
7226         fi
7227         echo "<dirent.h> NOT found." >&4
7228 fi
7229 set i_dirent
7230 eval $setvar
7231
7232 : Look for type of directory structure.
7233 echo " "
7234 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7235
7236 case "$direntrytype" in
7237 ''|' ')
7238         case "$i_dirent" in
7239         $define) guess1='struct dirent' ;;
7240         *) guess1='struct direct'  ;;
7241         esac
7242         ;;
7243 *)      guess1="$direntrytype"
7244         ;;
7245 esac
7246
7247 case "$guess1" in
7248 'struct dirent') guess2='struct direct' ;;
7249 *) guess2='struct dirent' ;;
7250 esac
7251                 
7252 if $contains "$guess1" try.c >/dev/null 2>&1; then
7253         direntrytype="$guess1"
7254         echo "Your directory entries are $direntrytype." >&4
7255 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7256         direntrytype="$guess2"
7257         echo "Your directory entries seem to be $direntrytype." >&4
7258 else
7259         echo "I don't recognize your system's directory entries." >&4
7260         rp="What type is used for directory entries on this system?"
7261         dflt="$guess1"
7262         . ./myread
7263         direntrytype="$ans"
7264 fi
7265 $rm -f try.c
7266
7267
7268 : see if the directory entry stores field length
7269 echo " "
7270 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7271 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7272         echo "Good, your directory entry keeps length information in d_namlen." >&4
7273         val="$define"
7274 else
7275         echo "Your directory entry does not know about the d_namlen field." >&4
7276         val="$undef"
7277 fi
7278 set d_dirnamlen
7279 eval $setvar
7280 $rm -f try.c
7281
7282
7283 if $test X"$use64bits" = X"$define"; then
7284         : see if fstat64 exists
7285         set fstat64 d_fstat64
7286         eval $inlibc
7287
7288         : see if ftruncate64 exists
7289         set ftruncate64 d_ftruncate64
7290         eval $inlibc
7291
7292         : see if lockf64 exists
7293         set lockf64 d_lockf64
7294         eval $inlibc
7295
7296         : see if llseek exists
7297         set llseek d_llseek
7298         eval $inlibc
7299
7300         : see if lseek64 exists
7301         set lseek64 d_lseek64
7302         eval $inlibc
7303
7304         : see if lstat64 exists
7305         set lstat64 d_lstat64
7306         eval $inlibc
7307
7308         : see if open64 exists
7309         set open64 d_open64
7310         eval $inlibc
7311
7312         : see if opendir64 exists
7313         set opendir64 d_opendir64
7314         eval $inlibc
7315
7316         : see if readdir64 exists
7317         set readdir64 d_readdir64
7318         eval $inlibc
7319
7320         : see if seekdir64 exists
7321         set seekdir64 d_seekdir64
7322         eval $inlibc
7323
7324         : see if stat64 exists
7325         set stat64 d_stat64
7326         eval $inlibc
7327
7328         : see if telldir64 exists
7329         set telldir64 d_telldir64
7330         eval $inlibc
7331
7332         : see if truncate64 exists
7333         set truncate64 d_truncate64
7334         eval $inlibc
7335
7336         : check for off64_t
7337         echo " "
7338         echo $n "Checking to see if your system supports off64_t...$c" >&4
7339         $cat >try.c <<EOCP
7340 #include <sys/types.h>
7341 #include <unistd.h>
7342 off64_t foo() { off64_t x; x = 7; return x; }'
7343 EOCP
7344         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7345                 val="$define"
7346                 echo " Yup, it does." >&4
7347         else
7348                 val="$undef"
7349                 echo " Nope, it doesn't." >&4
7350         fi
7351         $rm -f try.*
7352         set d_off64_t
7353         eval $setvar
7354
7355         : check for offset_t
7356         echo " "
7357         echo $n "Checking to see if your system supports offset_t...$c" >&4
7358         $cat >try.c <<EOCP
7359 #include <sys/types.h>
7360 #include <unistd.h>
7361 offset_t foo() { offset_t x; x = 7; return x; }'
7362 EOCP
7363         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7364                 val="$define"
7365                 echo " Yup, it does." >&4
7366         else
7367                 val="$undef"
7368                 echo " Nope, it doesn't." >&4
7369         fi
7370         $rm -f try.*
7371         set d_offset_t
7372         eval $setvar
7373
7374         : check for ino64_t
7375         echo " "
7376         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7377         val="$undef"
7378         case "$i_sysstat" in
7379         "$define" )
7380                 $cat >try.c <<EOCP
7381 #include <sys/types.h>
7382 #include <sys/stat.h>
7383 ino64_t foo() { ino64_t x; x = 7; return x; }'
7384 EOCP
7385                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7386                         val="$define"
7387                 fi
7388                 $rm -f try.*
7389                 ;;
7390         esac
7391         if $test "X$val" = X"$define"; then
7392                 echo " Yup, it does." >&4
7393         else
7394                 echo " Nope, it doesn't." >&4
7395         fi
7396         set d_ino64_t
7397         eval $setvar
7398
7399         : check for struct flock64
7400         echo " "
7401         echo "Checking to see if your system supports struct flock64..." >&4
7402         if $h_fcntl; then
7403                 set d_flock64_s flock64 l_len define fcntl.h
7404                 eval $hasfield
7405         else
7406                 val="$undef"
7407                 set d_flock64_s
7408                 eval $setvar
7409         fi
7410         case "$d_flock64_s" in
7411         "$define")      echo "Yup, it does." >&4
7412                         ;;
7413         *)              echo "Nope, it doesn't." >&4
7414                         ;;
7415         esac
7416
7417         : check for struct dirent64
7418         echo " "
7419         echo "Checking to see if your system supports struct dirent64..." >&4
7420         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7421         eval $hasfield
7422         case "$d_dirent64_s" in
7423         "$define")      echo "Yup, it does." >&4
7424                         ;;
7425         *)              echo "Nope, it doesn't." >&4
7426                         ;;
7427         esac
7428
7429 else
7430         val="$undef"
7431         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
7432         do
7433                 set $xxx
7434                 eval $setvar
7435         done
7436 fi
7437
7438 : see if dlerror exists
7439 xxx_runnm="$runnm"
7440 runnm=false
7441 set dlerror d_dlerror
7442 eval $inlibc
7443 runnm="$xxx_runnm"
7444
7445 : see if dlfcn is available
7446 set dlfcn.h i_dlfcn
7447 eval $inhdr
7448
7449 case "$usedl" in
7450 $define|y|true)
7451         $cat << EOM
7452
7453 On a few systems, the dynamically loaded modules that perl generates and uses
7454 will need a different extension than shared libs. The default will probably
7455 be appropriate.
7456
7457 EOM
7458         case "$dlext" in
7459         '')     dflt="$so" ;;
7460         *)      dflt="$dlext" ;;
7461         esac
7462         rp='What is the extension of dynamically loaded modules'
7463         . ./myread
7464         dlext="$ans"
7465         ;;
7466 *)
7467         dlext="none"
7468         ;;
7469 esac
7470
7471 : Check if dlsym need a leading underscore
7472 echo " "
7473 val="$undef"
7474
7475 case "$dlsrc" in
7476 dl_dlopen.xs)
7477         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7478         $cat >dyna.c <<'EOM'
7479 fred () { }
7480 EOM
7481
7482 $cat >fred.c<<EOM
7483
7484 #include <stdio.h>
7485 #$i_dlfcn I_DLFCN
7486 #ifdef I_DLFCN
7487 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7488 #else
7489 #include <sys/types.h>
7490 #include <nlist.h>
7491 #include <link.h>
7492 #endif
7493
7494 extern int fred() ;
7495
7496 int main()
7497 {
7498     void * handle ;
7499     void * symbol ;
7500 #ifndef RTLD_LAZY
7501     int mode = 1 ;
7502 #else
7503     int mode = RTLD_LAZY ;
7504 #endif
7505     handle = dlopen("./dyna.$dlext", mode) ;
7506     if (handle == NULL) {
7507         printf ("1\n") ;
7508         fflush (stdout) ;
7509         exit(0);
7510     }
7511     symbol = dlsym(handle, "fred") ;
7512     if (symbol == NULL) {
7513         /* try putting a leading underscore */
7514         symbol = dlsym(handle, "_fred") ;
7515         if (symbol == NULL) {
7516             printf ("2\n") ;
7517             fflush (stdout) ;
7518             exit(0);
7519         }
7520         printf ("3\n") ;
7521     }
7522     else
7523         printf ("4\n") ;
7524     fflush (stdout) ;
7525     exit(0);
7526 }
7527 EOM
7528         : Call the object file tmp-dyna.o in case dlext=o.
7529         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7530                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7531                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7532                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7533                 xxx=`./fred`
7534                 case $xxx in
7535                 1)      echo "Test program failed using dlopen." >&4
7536                         echo "Perhaps you should not use dynamic loading." >&4;;
7537                 2)      echo "Test program failed using dlsym." >&4
7538                         echo "Perhaps you should not use dynamic loading." >&4;;
7539                 3)      echo "dlsym needs a leading underscore" >&4
7540                         val="$define" ;;
7541                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7542                 esac
7543         else
7544                 echo "I can't compile and run the test program." >&4
7545         fi
7546         ;;
7547 esac
7548                 
7549 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7550
7551 set d_dlsymun
7552 eval $setvar
7553
7554 hasproto='varname=$1; func=$2; shift; shift;
7555 while $test $# -ge 2; do
7556         case "$1" in
7557         $define) echo "#include <$2>";;
7558         esac ;
7559     shift 2;
7560 done > try.c;
7561 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7562 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7563         echo "$func() prototype found.";
7564         val="$define";
7565 else
7566         echo "$func() prototype NOT found.";
7567         val="$undef";
7568 fi;
7569 set $varname;
7570 eval $setvar;
7571 $rm -f try.c tryout.c'
7572
7573 : see if prototype for drand48 is available
7574 echo " "
7575 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7576 eval $hasproto
7577
7578 : see if dup2 exists
7579 set dup2 d_dup2
7580 eval $inlibc
7581
7582 : see if eaccess exists
7583 set eaccess d_eaccess
7584 eval $inlibc
7585
7586 : see if endgrent exists
7587 set endgrent d_endgrent
7588 eval $inlibc
7589
7590 : see if endhostent exists
7591 set endhostent d_endhent
7592 eval $inlibc
7593
7594 : see if endnetent exists
7595 set endnetent d_endnent
7596 eval $inlibc
7597
7598 : see if endprotoent exists
7599 set endprotoent d_endpent
7600 eval $inlibc
7601
7602 : see if endpwent exists
7603 set endpwent d_endpwent
7604 eval $inlibc
7605
7606 : see if endservent exists
7607 set endservent d_endsent
7608 eval $inlibc
7609
7610 : see if endspent exists
7611 set endspent d_endspent
7612 eval $inlibc
7613
7614 : Locate the flags for 'open()'
7615 echo " "
7616 $cat >open3.c <<'EOCP'
7617 #include <sys/types.h>
7618 #ifdef I_FCNTL
7619 #include <fcntl.h>
7620 #endif
7621 #ifdef I_SYS_FILE
7622 #include <sys/file.h>
7623 #endif
7624 int main() {
7625         if(O_RDONLY);
7626 #ifdef O_TRUNC
7627         exit(0);
7628 #else
7629         exit(1);
7630 #endif
7631 }
7632 EOCP
7633 : check sys/file.h first to get FREAD on Sun
7634 if $test `./findhdr sys/file.h` && \
7635                 set open3 -DI_SYS_FILE && eval $compile; then
7636         h_sysfile=true;
7637         echo "<sys/file.h> defines the O_* constants..." >&4
7638         if ./open3; then
7639                 echo "and you have the 3 argument form of open()." >&4
7640                 val="$define"
7641         else
7642                 echo "but not the 3 argument form of open().  Oh, well." >&4
7643                 val="$undef"
7644         fi
7645 elif $test `./findhdr fcntl.h` && \
7646                 set open3 -DI_FCNTL && eval $compile; then
7647         h_fcntl=true;
7648         echo "<fcntl.h> defines the O_* constants..." >&4
7649         if ./open3; then
7650                 echo "and you have the 3 argument form of open()." >&4
7651                 val="$define"
7652         else
7653                 echo "but not the 3 argument form of open().  Oh, well." >&4
7654                 val="$undef"
7655         fi
7656 else
7657         val="$undef"
7658         echo "I can't find the O_* constant definitions!  You got problems." >&4
7659 fi
7660 set d_open3
7661 eval $setvar
7662 $rm -f open3*
7663
7664 : check for non-blocking I/O stuff
7665 case "$h_sysfile" in
7666 true) echo "#include <sys/file.h>" > head.c;;
7667 *)
7668         case "$h_fcntl" in
7669         true) echo "#include <fcntl.h>" > head.c;;
7670         *) echo "#include <sys/fcntl.h>" > head.c;;
7671         esac
7672         ;;
7673 esac
7674 echo " "
7675 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7676 case "$o_nonblock" in
7677 '')
7678         $cat head.c > try.c
7679         $cat >>try.c <<'EOCP'
7680 int main() {
7681 #ifdef O_NONBLOCK
7682         printf("O_NONBLOCK\n");
7683         exit(0);
7684 #endif
7685 #ifdef O_NDELAY
7686         printf("O_NDELAY\n");
7687         exit(0);
7688 #endif
7689 #ifdef FNDELAY
7690         printf("FNDELAY\n");
7691         exit(0);
7692 #endif
7693         exit(0);
7694 }
7695 EOCP
7696         set try
7697         if eval $compile_ok; then
7698                 o_nonblock=`./try`
7699                 case "$o_nonblock" in
7700                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7701                 *) echo "Seems like we can use $o_nonblock.";;
7702                 esac
7703         else
7704                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7705         fi
7706         ;;
7707 *) echo "Using $hint value $o_nonblock.";;
7708 esac
7709 $rm -f try try.* .out core
7710
7711 echo " "
7712 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7713 case "$eagain" in
7714 '')
7715         $cat head.c > try.c
7716         $cat >>try.c <<EOCP
7717 #include <errno.h>
7718 #include <sys/types.h>
7719 #include <signal.h>
7720 #define MY_O_NONBLOCK $o_nonblock
7721 #ifndef errno  /* XXX need better Configure test */
7722 extern int errno;
7723 #endif
7724 $signal_t blech(x) int x; { exit(3); }
7725 EOCP
7726         $cat >> try.c <<'EOCP'
7727 int main()
7728 {
7729         int pd[2];
7730         int pu[2];
7731         char buf[1];
7732         char string[100];
7733
7734         pipe(pd);       /* Down: child -> parent */
7735         pipe(pu);       /* Up: parent -> child */
7736         if (0 != fork()) {
7737                 int ret;
7738                 close(pd[1]);   /* Parent reads from pd[0] */
7739                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7740                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7741                         exit(1);
7742                 signal(SIGALRM, blech);
7743                 alarm(5);
7744                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7745                         exit(2);
7746                 sprintf(string, "%d\n", ret);
7747                 write(2, string, strlen(string));
7748                 alarm(0);
7749 #ifdef EAGAIN
7750                 if (errno == EAGAIN) {
7751                         printf("EAGAIN\n");
7752                         goto ok;
7753                 }
7754 #endif
7755 #ifdef EWOULDBLOCK
7756                 if (errno == EWOULDBLOCK)
7757                         printf("EWOULDBLOCK\n");
7758 #endif
7759         ok:
7760                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7761                 sleep(2);                               /* Give it time to close our pipe */
7762                 alarm(5);
7763                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7764                 alarm(0);
7765                 sprintf(string, "%d\n", ret);
7766                 write(3, string, strlen(string));
7767                 exit(0);
7768         }
7769
7770         close(pd[0]);                   /* We write to pd[1] */
7771         close(pu[1]);                   /* We read from pu[0] */
7772         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7773         close(pd[1]);                   /* Pipe pd is now fully closed! */
7774         exit(0);                                /* Bye bye, thank you for playing! */
7775 }
7776 EOCP
7777         set try
7778         if eval $compile_ok; then
7779                 echo "$startsh" >mtry
7780                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7781                 chmod +x mtry
7782                 ./mtry >/dev/null 2>&1
7783                 case $? in
7784                 0) eagain=`$cat try.out`;;
7785                 1) echo "Could not perform non-blocking setting!";;
7786                 2) echo "I did a successful read() for something that was not there!";;
7787                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7788                 *) echo "Something terribly wrong happened during testing.";;
7789                 esac
7790                 rd_nodata=`$cat try.ret`
7791                 echo "A read() system call with no data present returns $rd_nodata."
7792                 case "$rd_nodata" in
7793                 0|-1) ;;
7794                 *)
7795                         echo "(That's peculiar, fixing that to be -1.)"
7796                         rd_nodata=-1
7797                         ;;
7798                 esac
7799                 case "$eagain" in
7800                 '')
7801                         echo "Forcing errno EAGAIN on read() with no data available."
7802                         eagain=EAGAIN
7803                         ;;
7804                 *)
7805                         echo "Your read() sets errno to $eagain when no data is available."
7806                         ;;
7807                 esac
7808                 status=`$cat try.err`
7809                 case "$status" in
7810                 0) echo "And it correctly returns 0 to signal EOF.";;
7811                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7812                 *) echo "However, your read() returns '$status' on EOF??";;
7813                 esac
7814                 val="$define"
7815                 if test "$status" = "$rd_nodata"; then
7816                         echo "WARNING: you can't distinguish between EOF and no data!"
7817                         val="$undef"
7818                 fi
7819         else
7820                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7821                 eagain=EAGAIN
7822         fi
7823         set d_eofnblk
7824         eval $setvar
7825         ;;
7826 *)
7827         echo "Using $hint value $eagain."
7828         echo "Your read() returns $rd_nodata when no data is present."
7829         case "$d_eofnblk" in
7830         "$define") echo "And you can see EOF because read() returns 0.";;
7831         "$undef") echo "But you can't see EOF status from read() returned value.";;
7832         *)
7833                 echo "(Assuming you can't see EOF status from read anyway.)"
7834                 d_eofnblk=$undef
7835                 ;;
7836         esac
7837         ;;
7838 esac
7839 $rm -f try try.* .out core head.c mtry
7840
7841 : see if fchmod exists
7842 set fchmod d_fchmod
7843 eval $inlibc
7844
7845 : see if fchown exists
7846 set fchown d_fchown
7847 eval $inlibc
7848
7849 : see if this is an fcntl system
7850 set fcntl d_fcntl
7851 eval $inlibc
7852
7853 : see if sys/select.h has to be included
7854 set sys/select.h i_sysselct
7855 eval $inhdr
7856
7857 : see if we should include time.h, sys/time.h, or both
7858 echo " "
7859 if test "X$timeincl" = X; then
7860         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7861         $echo $n "I'm now running the test program...$c"
7862         $cat >try.c <<'EOCP'
7863 #include <sys/types.h>
7864 #ifdef I_TIME
7865 #include <time.h>
7866 #endif
7867 #ifdef I_SYSTIME
7868 #ifdef SYSTIMEKERNEL
7869 #define KERNEL
7870 #endif
7871 #include <sys/time.h>
7872 #endif
7873 #ifdef I_SYSSELECT
7874 #include <sys/select.h>
7875 #endif
7876 int main()
7877 {
7878         struct tm foo;
7879 #ifdef S_TIMEVAL
7880         struct timeval bar;
7881 #endif
7882 #ifdef S_TIMEZONE
7883         struct timezone tzp;
7884 #endif
7885         if (foo.tm_sec == foo.tm_sec)
7886                 exit(0);
7887 #ifdef S_TIMEVAL
7888         if (bar.tv_sec == bar.tv_sec)
7889                 exit(0);
7890 #endif
7891         exit(1);
7892 }
7893 EOCP
7894         flags=''
7895         for s_timezone in '-DS_TIMEZONE' ''; do
7896         sysselect=''
7897         for s_timeval in '-DS_TIMEVAL' ''; do
7898         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7899         for i_time in '' '-DI_TIME'; do
7900         for i_systime in '-DI_SYSTIME' ''; do
7901                 case "$flags" in
7902                 '') $echo $n ".$c"
7903                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7904                         if eval $compile; then
7905                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7906                                 shift
7907                                 flags="$*"
7908                                 echo " "
7909                                 $echo $n "Succeeded with $flags$c"
7910                         fi
7911                         ;;
7912                 esac
7913         done
7914         done
7915         done
7916         done
7917         done
7918         timeincl=''
7919         echo " "
7920         case "$flags" in
7921         *SYSTIMEKERNEL*) i_systimek="$define"
7922                 timeincl=`./findhdr sys/time.h`
7923                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7924         *) i_systimek="$undef";;
7925         esac
7926         case "$flags" in
7927         *I_TIME*) i_time="$define"
7928                 timeincl=`./findhdr time.h`" $timeincl"
7929                 echo "We'll include <time.h>." >&4;;
7930         *) i_time="$undef";;
7931         esac
7932         case "$flags" in
7933         *I_SYSTIME*) i_systime="$define"
7934                 timeincl=`./findhdr sys/time.h`" $timeincl"
7935                 echo "We'll include <sys/time.h>." >&4;;
7936         *) i_systime="$undef";;
7937         esac
7938         $rm -f try.c try
7939 fi
7940
7941 : check for fd_set items
7942 $cat <<EOM
7943
7944 Checking to see how well your C compiler handles fd_set and friends ...
7945 EOM
7946 $cat >fd_set.c <<EOCP
7947 #$i_systime I_SYS_TIME
7948 #$i_sysselct I_SYS_SELECT
7949 #$d_socket HAS_SOCKET
7950 #include <sys/types.h>
7951 #ifdef HAS_SOCKET
7952 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7953 #endif
7954 #ifdef I_SYS_TIME
7955 #include <sys/time.h>
7956 #endif
7957 #ifdef I_SYS_SELECT
7958 #include <sys/select.h>
7959 #endif
7960 int main() {
7961         fd_set fds;
7962
7963 #ifdef TRYBITS
7964         if(fds.fds_bits);
7965 #endif
7966
7967 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7968         exit(0);
7969 #else
7970         exit(1);
7971 #endif
7972 }
7973 EOCP
7974 set fd_set -DTRYBITS
7975 if eval $compile; then
7976         d_fds_bits="$define"
7977         d_fd_set="$define"
7978         echo "Well, your system knows about the normal fd_set typedef..." >&4
7979         if ./fd_set; then
7980                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7981                 d_fd_macros="$define"
7982         else
7983                 $cat >&4 <<'EOM'
7984 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7985 EOM
7986                 d_fd_macros="$undef"
7987         fi
7988 else
7989         $cat <<'EOM'
7990 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7991 EOM
7992         set fd_set
7993         if eval $compile; then
7994                 d_fds_bits="$undef"
7995                 d_fd_set="$define"
7996                 echo "Well, your system has some sort of fd_set available..." >&4
7997                 if ./fd_set; then
7998                         echo "and you have the normal fd_set macros." >&4
7999                         d_fd_macros="$define"
8000                 else
8001                         $cat <<'EOM'
8002 but not the normal fd_set macros!  Gross!  More work for me...
8003 EOM
8004                         d_fd_macros="$undef"
8005                 fi
8006         else
8007         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8008                 d_fd_set="$undef"
8009                 d_fds_bits="$undef"
8010                 d_fd_macros="$undef"
8011         fi
8012 fi
8013 $rm -f fd_set*
8014
8015 : see if fgetpos exists
8016 set fgetpos d_fgetpos
8017 eval $inlibc
8018
8019
8020 if $test X"$use64bits" = X"$define"; then
8021         : see if fgetpos64 exists
8022         set fgetpos64 d_fgetpos64
8023         eval $inlibc
8024
8025         : see if fopen64 exists
8026         set freopen64 d_fopen64
8027         eval $inlibc
8028
8029         : see if freopen64 exists
8030         set freopen64 d_freopen64
8031         eval $inlibc
8032
8033         : see if fseek64 exists
8034         set fseek64 d_fseek64
8035         eval $inlibc
8036
8037         : see if fseeko64 exists
8038         set fseeko64 d_fseeko64
8039         eval $inlibc
8040
8041         : see if fsetpos64 exists
8042         set fsetpos64 d_fsetpos64
8043         eval $inlibc
8044
8045         : see if ftell64 exists
8046         set ftell64 d_ftell64
8047         eval $inlibc
8048
8049         : see if ftello64 exists
8050         set ftello64 d_ftello64
8051         eval $inlibc
8052
8053         : see if tmpfile64 exists
8054         set tmpfile64 d_tmpfile64
8055         eval $inlibc
8056 else
8057         val="$undef"
8058         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8059         do
8060                 set $xxx
8061                 eval $setvar
8062         done
8063 fi
8064
8065 : see if flock exists
8066 set flock d_flock
8067 eval $inlibc
8068
8069 : see if fork exists
8070 set fork d_fork
8071 eval $inlibc
8072
8073 : see if pathconf exists
8074 set pathconf d_pathconf
8075 eval $inlibc
8076
8077 : see if fpathconf exists
8078 set fpathconf d_fpathconf
8079 eval $inlibc
8080
8081 : see if fseeko exists
8082 set fseeko d_fseeko
8083 eval $inlibc
8084
8085 : see if fsetpos exists
8086 set fsetpos d_fsetpos
8087 eval $inlibc
8088
8089 : see if this is a sys/param system
8090 set sys/param.h i_sysparam
8091 eval $inhdr
8092
8093 : see if this is a sys/mount.h system
8094 set sys/mount.h i_sysmount
8095 eval $inhdr
8096
8097
8098 : see if statfs exists
8099 set statfs d_statfs
8100 eval $inlibc
8101
8102 : see if fstatfs exists
8103 set fstatfs d_fstatfs
8104 eval $inlibc
8105
8106 : see if statfs knows about mount flags
8107 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8108 eval $hasfield
8109
8110
8111 : see if statvfs exists
8112 set statvfs d_statvfs
8113 eval $inlibc
8114
8115 : see if fstatvfs exists
8116 set fstatvfs d_fstatvfs
8117 eval $inlibc
8118
8119
8120 : see if ftello exists
8121 set ftello d_ftello
8122 eval $inlibc
8123
8124 : see if getgrent exists
8125 set getgrent d_getgrent
8126 eval $inlibc
8127
8128 : see if gethostbyaddr exists
8129 set gethostbyaddr d_gethbyaddr
8130 eval $inlibc
8131
8132 : see if gethostbyname exists
8133 set gethostbyname d_gethbyname
8134 eval $inlibc
8135
8136 : see if gethostent exists
8137 set gethostent d_gethent
8138 eval $inlibc
8139
8140 : see how we will look up host name
8141 echo " "
8142 call=''
8143 if set gethostname val -f d_gethname; eval $csym; $val; then
8144         echo 'gethostname() found.' >&4
8145         d_gethname="$define"
8146         call=gethostname
8147 fi
8148 if set uname val -f d_uname; eval $csym; $val; then
8149         if ./xenix; then
8150                 $cat <<'EOM'
8151 uname() was found, but you're running xenix, and older versions of xenix
8152 have a broken uname(). If you don't really know whether your xenix is old
8153 enough to have a broken system call, use the default answer.
8154
8155 EOM
8156                 dflt=y
8157                 case "$d_uname" in
8158                 "$define") dflt=n;;
8159                 esac
8160                 rp='Is your uname() broken?'
8161                 . ./myread
8162                 case "$ans" in
8163                 n*) d_uname="$define"; call=uname;;
8164                 esac
8165         else
8166                 echo 'uname() found.' >&4
8167                 d_uname="$define"
8168                 case "$call" in
8169                 '') call=uname ;;
8170                 esac
8171         fi
8172 fi
8173 case "$d_gethname" in
8174 '') d_gethname="$undef";;
8175 esac
8176 case "$d_uname" in
8177 '') d_uname="$undef";;
8178 esac
8179 case "$d_uname$d_gethname" in
8180 *define*)
8181         dflt=n
8182         cat <<EOM
8183  
8184 Every now and then someone has a $call() that lies about the hostname
8185 but can't be fixed for political or economic reasons.  If you wish, I can
8186 pretend $call() isn't there and maybe compute hostname at run-time
8187 thanks to the '$phostname' command.
8188
8189 EOM
8190         rp="Shall I ignore $call() from now on?"
8191         . ./myread
8192         case "$ans" in
8193         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8194         esac;;
8195 esac
8196 case "$phostname" in
8197 '') aphostname='';;
8198 *) case "$aphostname" in
8199         /*) ;;
8200         *) set X $phostname
8201                 shift
8202                 file=$1
8203                 shift
8204                 file=`./loc $file $file $pth`
8205                 aphostname=`echo $file $*`
8206                 ;;
8207         esac
8208         ;;
8209 esac
8210 case "$d_uname$d_gethname" in
8211 *define*) ;;
8212 *)
8213         case "$phostname" in
8214         '')
8215                 echo "There will be no way for $package to get your hostname." >&4;;
8216         *)
8217         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8218                 ;;
8219         esac;;
8220 esac
8221 case "$d_phostname" in
8222 '') d_phostname="$undef";;
8223 esac
8224
8225 : see if this is a netdb.h system
8226 set netdb.h i_netdb
8227 eval $inhdr
8228
8229 : see if prototypes for various gethostxxx netdb.h functions are available
8230 echo " "
8231 set d_gethostprotos gethostent $i_netdb netdb.h
8232 eval $hasproto
8233
8234 : see if getlogin exists
8235 set getlogin d_getlogin
8236 eval $inlibc
8237
8238 : see if getmntent exists
8239 set getmntent d_getmntent
8240 eval $inlibc
8241
8242 : see if getnetbyaddr exists
8243 set getnetbyaddr d_getnbyaddr
8244 eval $inlibc
8245
8246 : see if getnetbyname exists
8247 set getnetbyname d_getnbyname
8248 eval $inlibc
8249
8250 : see if getnetent exists
8251 set getnetent d_getnent
8252 eval $inlibc
8253
8254 : see if prototypes for various getnetxxx netdb.h functions are available
8255 echo " "
8256 set d_getnetprotos getnetent $i_netdb netdb.h
8257 eval $hasproto
8258
8259
8260 : see if getprotobyname exists
8261 set getprotobyname d_getpbyname
8262 eval $inlibc
8263
8264 : see if getprotobynumber exists
8265 set getprotobynumber d_getpbynumber
8266 eval $inlibc
8267
8268 : see if getprotoent exists
8269 set getprotoent d_getpent
8270 eval $inlibc
8271
8272 : see if getpgid exists
8273 set getpgid d_getpgid
8274 eval $inlibc
8275
8276 : see if getpgrp2 exists
8277 set getpgrp2 d_getpgrp2
8278 eval $inlibc
8279
8280 : see if getppid exists
8281 set getppid d_getppid
8282 eval $inlibc
8283
8284 : see if getpriority exists
8285 set getpriority d_getprior
8286 eval $inlibc
8287
8288 : see if prototypes for various getprotoxxx netdb.h functions are available
8289 echo " "
8290 set d_getprotoprotos getprotoent $i_netdb netdb.h
8291 eval $hasproto
8292
8293 : see if getpwent exists
8294 set getpwent d_getpwent
8295 eval $inlibc
8296
8297
8298 : see if getservbyname exists
8299 set getservbyname d_getsbyname
8300 eval $inlibc
8301
8302 : see if getservbyport exists
8303 set getservbyport d_getsbyport
8304 eval $inlibc
8305
8306 : see if getservent exists
8307 set getservent d_getsent
8308 eval $inlibc
8309
8310 : see if prototypes for various getservxxx netdb.h functions are available
8311 echo " "
8312 set d_getservprotos getservent $i_netdb netdb.h
8313 eval $hasproto
8314
8315 : see if getspent exists
8316 set getspent d_getspent
8317 eval $inlibc
8318
8319 : see if getspnam exists
8320 set getspnam d_getspnam
8321 eval $inlibc
8322
8323 : see if gettimeofday or ftime exists
8324 set gettimeofday d_gettimeod
8325 eval $inlibc
8326 case "$d_gettimeod" in
8327 "$undef")
8328         set ftime d_ftime 
8329         eval $inlibc
8330         ;;
8331 *)
8332         val="$undef"; set d_ftime; eval $setvar
8333         ;;
8334 esac
8335 case "$d_gettimeod$d_ftime" in
8336 "$undef$undef")
8337         echo " "
8338         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8339         ;;
8340 esac
8341
8342 : see if this is an grp system
8343 set grp.h i_grp
8344 eval $inhdr
8345
8346 case "$i_grp" in
8347 $define)
8348         xxx=`./findhdr grp.h`
8349         $cppstdin $cppflags $cppminus < $xxx >$$.h
8350
8351         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8352                 val="$define"
8353         else
8354                 val="$undef"
8355         fi
8356         set d_grpasswd
8357         eval $setvar
8358
8359         $rm -f $$.h
8360         ;;
8361 *)
8362         val="$undef";
8363         set d_grpasswd; eval $setvar
8364         ;;
8365 esac
8366
8367 : see if hasmntopt exists
8368 set hasmntopt d_hasmntopt
8369 eval $inlibc
8370
8371 : see if this is a netinet/in.h or sys/in.h system
8372 set netinet/in.h i_niin sys/in.h i_sysin
8373 eval $inhdr
8374
8375 : see if arpa/inet.h has to be included
8376 set arpa/inet.h i_arpainet
8377 eval $inhdr
8378
8379 : see if htonl --and friends-- exists
8380 val=''
8381 set htonl val
8382 eval $inlibc
8383
8384 : Maybe they are macros.
8385 case "$val" in
8386 $undef)
8387         $cat >htonl.c <<EOM
8388 #include <stdio.h>
8389 #include <sys/types.h>
8390 #$i_niin I_NETINET_IN
8391 #$i_sysin I_SYS_IN
8392 #$i_arpainet I_ARPA_INET
8393 #ifdef I_NETINET_IN
8394 #include <netinet/in.h>
8395 #endif
8396 #ifdef I_SYS_IN
8397 #include <sys/in.h>
8398 #endif
8399 #ifdef I_ARPA_INET
8400 #include <arpa/inet.h>
8401 #endif
8402 #ifdef htonl
8403 printf("Defined as a macro.");
8404 #endif
8405 EOM
8406         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8407         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8408                 val="$define"
8409                 echo "But it seems to be defined as a macro." >&4
8410         fi
8411         $rm -f htonl.?
8412         ;;
8413 esac
8414 set d_htonl
8415 eval $setvar
8416
8417 : see which of string.h or strings.h is needed
8418 echo " "
8419 strings=`./findhdr string.h`
8420 if $test "$strings" && $test -r "$strings"; then
8421         echo "Using <string.h> instead of <strings.h>." >&4
8422         val="$define"
8423 else
8424         val="$undef"
8425         strings=`./findhdr strings.h`
8426         if $test "$strings" && $test -r "$strings"; then
8427                 echo "Using <strings.h> instead of <string.h>." >&4
8428         else
8429                 echo "No string header found -- You'll surely have problems." >&4
8430         fi
8431 fi
8432 set i_string
8433 eval $setvar
8434 case "$i_string" in
8435 "$undef") strings=`./findhdr strings.h`;;
8436 *)        strings=`./findhdr string.h`;;
8437 esac
8438
8439 : index or strchr
8440 echo " "
8441 if set index val -f; eval $csym; $val; then
8442         if set strchr val -f d_strchr; eval $csym; $val; then
8443                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8444                         val="$define"
8445                         vali="$undef"
8446                         echo "strchr() found." >&4
8447                 else
8448                         val="$undef"
8449                         vali="$define"
8450                         echo "index() found." >&4
8451                 fi
8452         else
8453                 val="$undef"
8454                 vali="$define"
8455                 echo "index() found." >&4
8456         fi
8457 else
8458         if set strchr val -f d_strchr; eval $csym; $val; then
8459                 val="$define"
8460                 vali="$undef"
8461                 echo "strchr() found." >&4
8462         else
8463                 echo "No index() or strchr() found!" >&4
8464                 val="$undef"
8465                 vali="$undef"
8466         fi
8467 fi
8468 set d_strchr; eval $setvar
8469 val="$vali"
8470 set d_index; eval $setvar
8471
8472 : check whether inet_aton exists
8473 set inet_aton d_inetaton
8474 eval $inlibc
8475
8476 : see if inttypes.h is available
8477 : we want a real compile instead of Inhdr because some systems
8478 : have an inttypes.h which includes non-existent headers
8479 echo " "
8480 $cat >try.c <<EOCP
8481 #include <inttypes.h>
8482 int main() {
8483         static int32_t foo32 = 0x12345678;
8484 }
8485 EOCP
8486 set try
8487 if eval $compile; then
8488         echo "<inttypes.h> found." >&4
8489         val="$define"
8490 else
8491         echo "<inttypes.h> NOT found." >&4
8492         val="$undef"
8493 fi
8494 $rm -f try.c try
8495 set i_inttypes
8496 eval $setvar
8497
8498 : check for int64_t
8499 case "$use64bits" in
8500 "$define" )
8501         echo " "
8502         echo $n "Checking to see if your system supports int64_t...$c" >&4
8503         $cat >try.c <<EOCP
8504 #include <sys/types.h>
8505 #$i_inttypes I_INTTYPES
8506 #ifdef I_INTTYPES
8507 #include <inttypes.h>
8508 #endif
8509 int64_t foo() { int64_t x; x = 7; return x; }
8510 EOCP
8511         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8512                 val="$define"
8513                 echo " Yup, it does." >&4
8514         else
8515                 val="$undef"
8516                 echo " Nope, it doesn't." >&4
8517         fi
8518         $rm -f try.*
8519         ;;
8520 *)      val="$undef"
8521         ;;
8522 esac
8523 set d_int64t
8524 eval $setvar
8525
8526
8527 : Look for isascii
8528 echo " "
8529 $cat >isascii.c <<'EOCP'
8530 #include <stdio.h>
8531 #include <ctype.h>
8532 int main() {
8533         int c = 'A';
8534         if (isascii(c))
8535                 exit(0);
8536         else
8537                 exit(1);
8538 }
8539 EOCP
8540 set isascii
8541 if eval $compile; then
8542         echo "isascii() found." >&4
8543         val="$define"
8544 else
8545         echo "isascii() NOT found." >&4
8546         val="$undef"
8547 fi
8548 set d_isascii
8549 eval $setvar
8550 $rm -f isascii*
8551
8552 : see if killpg exists
8553 set killpg d_killpg
8554 eval $inlibc
8555
8556 : see if lchown exists
8557 echo " "
8558 $cat > try.c <<'EOCP'
8559 /* System header to define __stub macros and hopefully few prototypes,
8560     which can conflict with char lchown(); below.  */
8561 #include <assert.h>
8562 /* Override any gcc2 internal prototype to avoid an error.  */
8563 /* We use char because int might match the return type of a gcc2
8564    builtin and then its argument prototype would still apply.  */
8565 char lchown();
8566 int main() {
8567     /*  The GNU C library defines this for functions which it implements
8568         to always fail with ENOSYS.  Some functions are actually named
8569         something starting with __ and the normal name is an alias.  */
8570 #if defined (__stub_lchown) || defined (__stub___lchown)
8571 choke me
8572 #else
8573 lchown();
8574 #endif
8575 ; return 0; }
8576 EOCP
8577 set try
8578 if eval $compile; then
8579     $echo "lchown() found." >&4
8580     val="$define"
8581 else
8582     $echo "lchown() NOT found." >&4
8583     val="$undef"
8584 fi
8585 set d_lchown
8586 eval $setvar
8587
8588 : see if link exists
8589 set link d_link
8590 eval $inlibc
8591
8592 : see if localeconv exists
8593 set localeconv d_locconv
8594 eval $inlibc
8595
8596 : see if lockf exists
8597 set lockf d_lockf
8598 eval $inlibc
8599
8600 : check for length of double
8601 echo " "
8602 case "$doublesize" in
8603 '')
8604         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8605         $cat >try.c <<'EOCP'
8606 #include <stdio.h>
8607 int main()
8608 {
8609         printf("%d\n", sizeof(double));
8610 }
8611 EOCP
8612         set try
8613         if eval $compile_ok; then
8614                 doublesize=`./try`
8615                 $echo " $doublesize bytes." >&4
8616         else
8617                 dflt='8'
8618                 echo "(I can't seem to compile the test program.  Guessing...)"
8619                 rp="What is the size of a double precision number (in bytes)?"
8620                 . ./myread
8621                 doublesize="$ans"
8622         fi
8623         ;;
8624 esac
8625 $rm -f try.c try
8626
8627 : check for long doubles
8628 echo " "
8629 echo $n "Checking to see if your system supports long doubles...$c" >&4
8630 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8631 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8632         val="$define"
8633         echo " Yup, it does." >&4
8634 else
8635         val="$undef"
8636         echo " Nope, it doesn't." >&4
8637 fi
8638 $rm try.*
8639 set d_longdbl
8640 eval $setvar
8641
8642 : check for length of long double
8643 case "${d_longdbl}${longdblsize}" in
8644 $define)
8645         echo " "
8646         $echo $n "Checking to see how big your long doubles are...$c" >&4
8647         $cat >try.c <<'EOCP'
8648 #include <stdio.h>
8649 int main()
8650 {
8651         printf("%d\n", sizeof(long double));
8652 }
8653 EOCP
8654         set try
8655         if eval $compile; then
8656                 longdblsize=`./try`
8657                 $echo " $longdblsize bytes." >&4
8658         else
8659                 dflt='8'
8660                 echo " "
8661                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8662                 rp="What is the size of a long double (in bytes)?"
8663                 . ./myread
8664                 longdblsize="$ans"
8665         fi
8666         if $test "X$doublesize" = "X$longdblsize"; then
8667                 echo "(That isn't any different from an ordinary double.)"
8668         fi      
8669         ;;
8670 esac
8671 $rm -f try.c try
8672
8673 : check for long long
8674 echo " "
8675 echo $n "Checking to see if your system supports long long...$c" >&4
8676 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8677 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8678         val="$define"
8679         echo " Yup, it does." >&4
8680 else
8681         val="$undef"
8682         echo " Nope, it doesn't." >&4
8683 fi
8684 $rm try.*
8685 set d_longlong
8686 eval $setvar
8687
8688 : check for length of long long
8689 case "${d_longlong}${longlongsize}" in
8690 $define)
8691         echo " "
8692         $echo $n "Checking to see how big your long longs are...$c" >&4
8693         $cat >try.c <<'EOCP'
8694 #include <stdio.h>
8695 int main()
8696 {
8697         printf("%d\n", sizeof(long long));
8698 }
8699 EOCP
8700         set try
8701         if eval $compile_ok; then
8702                 longlongsize=`./try`
8703                 $echo " $longlongsize bytes." >&4
8704         else
8705                 dflt='8'
8706                 echo " "
8707                 echo "(I can't seem to compile the test program.  Guessing...)"
8708                 rp="What is the size of a long long (in bytes)?"
8709                 . ./myread
8710                 longlongsize="$ans"
8711         fi
8712         if $test "X$longsize" = "X$longlongsize"; then
8713                 echo "(That isn't any different from an ordinary long.)"
8714         fi      
8715         ;;
8716 esac
8717 $rm -f try.c try
8718
8719 : see if lstat exists
8720 set lstat d_lstat
8721 eval $inlibc
8722
8723 : see if madvise exists
8724 set madvise d_madvise
8725 eval $inlibc
8726
8727 : see if mblen exists
8728 set mblen d_mblen
8729 eval $inlibc
8730
8731 : see if mbstowcs exists
8732 set mbstowcs d_mbstowcs
8733 eval $inlibc
8734
8735 : see if mbtowc exists
8736 set mbtowc d_mbtowc
8737 eval $inlibc
8738
8739 : see if memchr exists
8740 set memchr d_memchr
8741 eval $inlibc
8742
8743 : see if memcmp exists
8744 set memcmp d_memcmp
8745 eval $inlibc
8746
8747 : see if memcpy exists
8748 set memcpy d_memcpy
8749 eval $inlibc
8750
8751 : see if memmove exists
8752 set memmove d_memmove
8753 eval $inlibc
8754
8755 : see if memset exists
8756 set memset d_memset
8757 eval $inlibc
8758
8759 : see if mkdir exists
8760 set mkdir d_mkdir
8761 eval $inlibc
8762
8763 : see if mkfifo exists
8764 set mkfifo d_mkfifo
8765 eval $inlibc
8766
8767 : see if mktime exists
8768 set mktime d_mktime
8769 eval $inlibc
8770
8771 : see if this is a sys/mman.h system
8772 set sys/mman.h i_sysmman
8773 eval $inhdr
8774
8775 : see if mmap exists
8776 set mmap d_mmap
8777 eval $inlibc
8778 : see what shmat returns
8779 : default to something harmless
8780 mmaptype='void *'
8781 case "$i_sysmman$d_mmap" in
8782 "$define$define")
8783         $cat >mmap.c <<'END'
8784 #include <sys/mman.h>
8785 void *mmap();
8786 END
8787         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8788                 mmaptype='void *'
8789         else
8790                 mmaptype='caddr_t'
8791         fi
8792         echo "and it returns ($mmaptype)." >&4
8793         ;;
8794 esac
8795
8796
8797
8798 : see if mprotect exists
8799 set mprotect d_mprotect
8800 eval $inlibc
8801
8802 : see if msgctl exists
8803 set msgctl d_msgctl
8804 eval $inlibc
8805
8806 : see if msgget exists
8807 set msgget d_msgget
8808 eval $inlibc
8809
8810 : see if msgsnd exists
8811 set msgsnd d_msgsnd
8812 eval $inlibc
8813
8814 : see if msgrcv exists
8815 set msgrcv d_msgrcv
8816 eval $inlibc
8817
8818 : see how much of the 'msg*(2)' library is present.
8819 h_msg=true
8820 echo " "
8821 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8822 *"$undef"*) h_msg=false;;
8823 esac
8824 case "$osname" in
8825 freebsd)
8826     case "`ipcs 2>&1`" in
8827     "SVID messages"*"not configured"*)
8828         echo "Your $osname does not have the msg*(2) configured." >&4
8829         h_msg=false
8830         val="$undef"
8831         set msgctl d_msgctl
8832         eval $setvar
8833         set msgget d_msgget
8834         eval $setvar
8835         set msgsnd d_msgsnd
8836         eval $setvar
8837         set msgrcv d_msgrcv
8838         eval $setvar
8839         ;;
8840     esac
8841     ;;
8842 esac
8843 : we could also check for sys/ipc.h ...
8844 if $h_msg && $test `./findhdr sys/msg.h`; then
8845         echo "You have the full msg*(2) library." >&4
8846         val="$define"
8847 else
8848         echo "You don't have the full msg*(2) library." >&4
8849         val="$undef"
8850 fi
8851 set d_msg
8852 eval $setvar
8853
8854 : see if msync exists
8855 set msync d_msync
8856 eval $inlibc
8857
8858 : see if munmap exists
8859 set munmap d_munmap
8860 eval $inlibc
8861
8862 : see if nice exists
8863 set nice d_nice
8864 eval $inlibc
8865
8866 : see if POSIX threads are available
8867 if test "X$usethreads" = "X$define"; then
8868         set pthread.h i_pthread
8869         eval $inhdr
8870 else
8871         i_pthread="$undef"
8872 fi
8873
8874
8875
8876 : how to create joinable pthreads
8877 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8878         echo " "
8879         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8880         $cat >try.c <<'EOCP'
8881 #include <pthread.h>
8882 int main() {
8883     int detachstate = JOINABLE;
8884 }
8885 EOCP
8886         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8887         if eval $compile; then
8888                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8889                 val="$undef" # Yes, undef.
8890                 set d_old_pthread_create_joinable
8891                 eval $setvar
8892                 val=""
8893                 set old_pthread_create_joinable
8894                 eval $setvar
8895         else
8896                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8897                 if eval $compile; then
8898                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8899                         val="$define"
8900                         set d_old_pthread_create_joinable
8901                         eval $setvar
8902                         val=PTHREAD_CREATE_UNDETACHED
8903                         set old_pthread_create_joinable
8904                         eval $setvar
8905                 else            
8906                         set try -DJOINABLE=__UNDETACHED
8907                         if eval $compile; then
8908                                 echo "You seem to use __UNDETACHED." >&4
8909                                 val="$define"
8910                                 set d_old_pthread_create_joinable
8911                                 eval $setvar
8912                                 val=__UNDETACHED
8913                                 set old_pthread_create_joinable
8914                                 eval $setvar
8915                         else
8916                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8917                                 val="$define"
8918                                 set d_old_pthread_create_joinable
8919                                 eval $setvar
8920                                 val=0
8921                                 set old_pthread_create_joinable
8922                                 eval $setvar
8923                         fi
8924                 fi
8925         fi
8926         $rm -f try try.*
8927 else
8928     d_old_pthread_create_joinable="$undef"
8929     old_pthread_create_joinable=""
8930 fi
8931
8932 : see if pause exists
8933 set pause d_pause
8934 eval $inlibc
8935
8936 : see if pipe exists
8937 set pipe d_pipe
8938 eval $inlibc
8939
8940 : see if poll exists
8941 set poll d_poll
8942 eval $inlibc
8943
8944
8945 : see whether the various POSIXish _yields exist
8946 $cat >try.c <<EOP
8947 #include <pthread.h>
8948 #include <stdio.h>
8949 int main() {
8950 #ifdef SCHED_YIELD
8951         sched_yield();
8952 #else
8953 #ifdef PTHREAD_YIELD
8954         pthread_yield();
8955 #else
8956 #ifdef PTHREAD_YIELD_NULL
8957         pthread_yield(NULL);
8958 #endif
8959 #endif
8960 #endif
8961 }
8962 EOP
8963 : see if sched_yield exists
8964 set try -DSCHED_YIELD
8965 if eval $compile; then
8966     val="$define"
8967     sched_yield='sched_yield()'
8968 else
8969     val="$undef"
8970 fi
8971 case "$usethreads" in
8972 $define)
8973         case "$val" in
8974         $define) echo 'sched_yield() found.' >&4        ;;
8975         *)       echo 'sched_yield() NOT found.' >&4    ;;
8976         esac
8977 esac
8978 set d_sched_yield
8979 eval $setvar
8980
8981 : see if pthread_yield exists
8982 set try -DPTHREAD_YIELD
8983 if eval $compile; then
8984     val="$define"
8985     case "$sched_yield" in
8986     '') sched_yield='pthread_yield()' ;;
8987     esac
8988 else
8989     set try -DPTHREAD_YIELD_NULL
8990     if eval $compile; then
8991         val="$define"
8992         case "$sched_yield" in
8993         '') sched_yield='pthread_yield(NULL)' ;;
8994         esac
8995     else
8996         val="$undef"
8997     fi
8998 fi
8999 case "$usethreads" in
9000 $define)
9001         case "$val" in
9002         $define) echo 'pthread_yield() found.' >&4      ;;
9003         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9004         esac
9005         ;;
9006 esac
9007 set d_pthread_yield
9008 eval $setvar
9009
9010 case "$sched_yield" in
9011 '') sched_yield=undef ;;
9012 esac
9013
9014 $rm -f try try.*
9015
9016 : see if this is a pwd.h system
9017 set pwd.h i_pwd
9018 eval $inhdr
9019
9020 case "$i_pwd" in
9021 $define)
9022         xxx=`./findhdr pwd.h`
9023         $cppstdin $cppflags $cppminus < $xxx >$$.h
9024
9025         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9026                 val="$define"
9027         else
9028                 val="$undef"
9029         fi
9030         set d_pwquota
9031         eval $setvar
9032
9033         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9034                 val="$define"
9035         else
9036                 val="$undef"
9037         fi
9038         set d_pwage
9039         eval $setvar
9040
9041         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9042                 val="$define"
9043         else
9044                 val="$undef"
9045         fi
9046         set d_pwchange
9047         eval $setvar
9048
9049         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9050                 val="$define"
9051         else
9052                 val="$undef"
9053         fi
9054         set d_pwclass
9055         eval $setvar
9056
9057         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9058                 val="$define"
9059         else
9060                 val="$undef"
9061         fi
9062         set d_pwexpire
9063         eval $setvar
9064
9065         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9066                 val="$define"
9067         else
9068                 val="$undef"
9069         fi
9070         set d_pwcomment
9071         eval $setvar
9072
9073         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9074                 val="$define"
9075         else
9076                 val="$undef"
9077         fi
9078         set d_pwgecos
9079         eval $setvar
9080
9081         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9082                 val="$define"
9083         else
9084                 val="$undef"
9085         fi
9086         set d_pwpasswd
9087         eval $setvar
9088
9089         $rm -f $$.h
9090         ;;
9091 *)
9092         val="$undef"; 
9093         set d_pwquota; eval $setvar
9094         set d_pwage; eval $setvar
9095         set d_pwchange; eval $setvar
9096         set d_pwclass; eval $setvar
9097         set d_pwexpire; eval $setvar
9098         set d_pwcomment; eval $setvar
9099         set d_pwgecos; eval $setvar
9100         set d_pwpasswd; eval $setvar
9101         ;;
9102 esac
9103
9104 : see if readdir and friends exist
9105 set readdir d_readdir
9106 eval $inlibc
9107 set seekdir d_seekdir
9108 eval $inlibc
9109 set telldir d_telldir
9110 eval $inlibc
9111 set rewinddir d_rewinddir
9112 eval $inlibc
9113
9114 : see if readlink exists
9115 set readlink d_readlink
9116 eval $inlibc
9117
9118 : see if readv exists
9119 set readv d_readv
9120 eval $inlibc
9121
9122 : see if rename exists
9123 set rename d_rename
9124 eval $inlibc
9125
9126 : see if rmdir exists
9127 set rmdir d_rmdir
9128 eval $inlibc
9129
9130 : see if memory.h is available.
9131 val=''
9132 set memory.h val
9133 eval $inhdr
9134
9135 : See if it conflicts with string.h
9136 case "$val" in
9137 $define)
9138         case "$strings" in
9139         '') ;;
9140         *)
9141                 $cppstdin $cppflags $cppminus < $strings > mem.h
9142                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9143                         echo " "
9144                         echo "We won't be including <memory.h>."
9145                         val="$undef"
9146                 fi
9147                 $rm -f mem.h
9148                 ;;
9149         esac
9150 esac
9151 set i_memory
9152 eval $setvar
9153
9154 : can bcopy handle overlapping blocks?
9155 val="$undef"
9156 case "$d_bcopy" in
9157 "$define")
9158         echo " "
9159         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9160         $cat >try.c <<EOCP
9161 #$i_memory I_MEMORY
9162 #$i_stdlib I_STDLIB
9163 #$i_string I_STRING
9164 #$i_unistd I_UNISTD
9165 EOCP
9166         $cat >>try.c <<'EOCP'
9167 #include <stdio.h>
9168 #ifdef I_MEMORY
9169 #  include <memory.h>
9170 #endif
9171 #ifdef I_STDLIB
9172 #  include <stdlib.h>
9173 #endif
9174 #ifdef I_STRING
9175 #  include <string.h>
9176 #else
9177 #  include <strings.h>
9178 #endif
9179 #ifdef I_UNISTD
9180 #  include <unistd.h>  /* Needed for NetBSD */
9181 #endif
9182 int main()
9183 {
9184 char buf[128], abc[128];
9185 char *b;
9186 int len;
9187 int off;
9188 int align;
9189
9190 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9191
9192 for (align = 7; align >= 0; align--) {
9193         for (len = 36; len; len--) {
9194                 b = buf+align;
9195                 bcopy(abc, b, len);
9196                 for (off = 1; off <= len; off++) {
9197                         bcopy(b, b+off, len);
9198                         bcopy(b+off, b, len);
9199                         if (bcmp(b, abc, len))
9200                                 exit(1);
9201                 }
9202         }
9203 }
9204 exit(0);
9205 }
9206 EOCP
9207         set try
9208         if eval $compile_ok; then
9209                 if ./try 2>/dev/null; then
9210                         echo "Yes, it can."
9211                         val="$define"
9212                 else
9213                         echo "It can't, sorry."
9214                         case "$d_memmove" in
9215                         "$define") echo "But that's Ok since you have memmove()." ;;
9216                         esac
9217                 fi
9218         else
9219                 echo "(I can't compile the test program, so we'll assume not...)"
9220                 case "$d_memmove" in
9221                 "$define") echo "But that's Ok since you have memmove()." ;;
9222                 esac
9223         fi
9224         ;;
9225 esac
9226 $rm -f try.* try core
9227 set d_safebcpy
9228 eval $setvar
9229
9230 : can memcpy handle overlapping blocks?
9231 val="$undef"
9232 case "$d_memcpy" in
9233 "$define")
9234         echo " "
9235         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9236         $cat >try.c <<EOCP
9237 #$i_memory I_MEMORY
9238 #$i_stdlib I_STDLIB
9239 #$i_string I_STRING
9240 #$i_unistd I_UNISTD
9241 EOCP
9242         $cat >>try.c <<'EOCP'
9243 #include <stdio.h>
9244 #ifdef I_MEMORY
9245 #  include <memory.h>
9246 #endif
9247 #ifdef I_STDLIB
9248 #  include <stdlib.h>
9249 #endif
9250 #ifdef I_STRING
9251 #  include <string.h>
9252 #else
9253 #  include <strings.h>
9254 #endif
9255 #ifdef I_UNISTD
9256 #  include <unistd.h>  /* Needed for NetBSD */
9257 #endif
9258 int main()
9259 {
9260 char buf[128], abc[128];
9261 char *b;
9262 int len;
9263 int off;
9264 int align;
9265
9266 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9267    try to store the string in read-only memory. */
9268 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9269
9270 for (align = 7; align >= 0; align--) {
9271         for (len = 36; len; len--) {
9272                 b = buf+align;
9273                 memcpy(b, abc, len);
9274                 for (off = 1; off <= len; off++) {
9275                         memcpy(b+off, b, len);
9276                         memcpy(b, b+off, len);
9277                         if (memcmp(b, abc, len))
9278                                 exit(1);
9279                 }
9280         }
9281 }
9282 exit(0);
9283 }
9284 EOCP
9285         set try
9286         if eval $compile_ok; then
9287                 if ./try 2>/dev/null; then
9288                         echo "Yes, it can."
9289                         val="$define"
9290                 else
9291                         echo "It can't, sorry."
9292                         case "$d_memmove" in
9293                         "$define") echo "But that's Ok since you have memmove()." ;;
9294                         esac
9295                 fi
9296         else
9297                 echo "(I can't compile the test program, so we'll assume not...)"
9298                 case "$d_memmove" in
9299                 "$define") echo "But that's Ok since you have memmove()." ;;
9300                 esac
9301         fi
9302         ;;
9303 esac
9304 $rm -f try.* try core
9305 set d_safemcpy
9306 eval $setvar
9307
9308 : can memcmp be trusted to compare relative magnitude?
9309 val="$undef"
9310 case "$d_memcmp" in
9311 "$define")
9312         echo " "
9313         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9314         $cat >try.c <<EOCP
9315 #$i_memory I_MEMORY
9316 #$i_stdlib I_STDLIB
9317 #$i_string I_STRING
9318 #$i_unistd I_UNISTD
9319 EOCP
9320         $cat >>try.c <<'EOCP'
9321 #include <stdio.h>
9322 #ifdef I_MEMORY
9323 #  include <memory.h>
9324 #endif
9325 #ifdef I_STDLIB
9326 #  include <stdlib.h>
9327 #endif
9328 #ifdef I_STRING
9329 #  include <string.h>
9330 #else
9331 #  include <strings.h>
9332 #endif
9333 #ifdef I_UNISTD
9334 #  include <unistd.h>  /* Needed for NetBSD */
9335 #endif
9336 int main()
9337 {
9338 char a = -1;
9339 char b = 0;
9340 if ((a < b) && memcmp(&a, &b, 1) < 0)
9341         exit(1);
9342 exit(0);
9343 }
9344 EOCP
9345         set try
9346         if eval $compile_ok; then
9347                 if ./try 2>/dev/null; then
9348                         echo "Yes, it can."
9349                         val="$define"
9350                 else
9351                         echo "No, it can't (it uses signed chars)."
9352                 fi
9353         else
9354                 echo "(I can't compile the test program, so we'll assume not...)"
9355         fi
9356         ;;
9357 esac
9358 $rm -f try.* try core
9359 set d_sanemcmp
9360 eval $setvar
9361
9362 : see if select exists
9363 set select d_select
9364 eval $inlibc
9365
9366 : see if semctl exists
9367 set semctl d_semctl
9368 eval $inlibc
9369
9370 : see if semget exists
9371 set semget d_semget
9372 eval $inlibc
9373
9374 : see if semop exists
9375 set semop d_semop
9376 eval $inlibc
9377
9378 : see how much of the 'sem*(2)' library is present.
9379 h_sem=true
9380 echo " "
9381 case "$d_semctl$d_semget$d_semop" in
9382 *"$undef"*) h_sem=false;;
9383 esac
9384 case "$osname" in
9385 freebsd)
9386     case "`ipcs 2>&1`" in
9387     "SVID messages"*"not configured"*)
9388         echo "Your $osname does not have the sem*(2) configured." >&4
9389         h_sem=false
9390         val="$undef"
9391         set semctl d_semctl
9392         eval $setvar
9393         set semget d_semget
9394         eval $setvar
9395         set semop d_semop
9396         eval $setvar
9397         ;;
9398     esac
9399     ;;
9400 esac
9401 : we could also check for sys/ipc.h ...
9402 if $h_sem && $test `./findhdr sys/sem.h`; then
9403         echo "You have the full sem*(2) library." >&4
9404         val="$define"
9405 else
9406         echo "You don't have the full sem*(2) library." >&4
9407         val="$undef"
9408 fi
9409 set d_sem
9410 eval $setvar
9411
9412 : see whether sys/sem.h defines union semun
9413 echo " "
9414 $cat > try.c <<'END'
9415 #include <sys/types.h>
9416 #include <sys/ipc.h>
9417 #include <sys/sem.h>
9418 int main () { union semun semun; semun.buf = 0; }
9419 END
9420 set try
9421 if eval $compile; then
9422     echo "You have union semun in <sys/sem.h>." >&4
9423     val="$define"
9424 else
9425     echo "You do not have union semun in <sys/sem.h>." >&4
9426     val="$undef"
9427 fi
9428 $rm -f try try.c try.h
9429 set d_union_semun
9430 eval $setvar
9431
9432 : see how to do semctl IPC_STAT
9433 case "$d_sem" in
9434 $define)
9435     : see whether semctl IPC_STAT can use union semun
9436     echo " "
9437     $cat > try.h <<END
9438 #ifndef S_IRUSR
9439 #   ifdef S_IREAD
9440 #       define S_IRUSR S_IREAD
9441 #       define S_IWUSR S_IWRITE
9442 #       define S_IXUSR S_IEXEC
9443 #   else
9444 #       define S_IRUSR 0400
9445 #       define S_IWUSR 0200
9446 #       define S_IXUSR 0100
9447 #   endif
9448 #   define S_IRGRP (S_IRUSR>>3)
9449 #   define S_IWGRP (S_IWUSR>>3)
9450 #   define S_IXGRP (S_IXUSR>>3)
9451 #   define S_IROTH (S_IRUSR>>6)
9452 #   define S_IWOTH (S_IWUSR>>6)
9453 #   define S_IXOTH (S_IXUSR>>6)
9454 #endif
9455 #ifndef S_IRWXU
9456 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9457 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9458 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9459 #endif
9460 END
9461
9462     $cat > try.c <<END
9463 #include <sys/types.h>
9464 #include <sys/ipc.h>
9465 #include <sys/sem.h>
9466 #include <sys/stat.h>
9467 #include <stdio.h>
9468 #include <errno.h>
9469 #include "try.h"
9470 #ifndef errno
9471 extern int errno;
9472 #endif
9473 #$d_union_semun HAS_UNION_SEMUN
9474 int main() {
9475     union semun
9476 #ifndef HAS_UNION_SEMUN
9477     {
9478         int val;
9479         struct semid_ds *buf;
9480         unsigned short *array;
9481     }
9482 #endif
9483     arg;
9484     int sem, st;
9485
9486 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9487     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9488     if (sem > -1) {
9489         struct semid_ds argbuf;
9490         arg.buf = &argbuf;
9491 #       ifdef IPC_STAT
9492         st = semctl(sem, 0, IPC_STAT, arg);
9493         if (st == 0)
9494             printf("semun\n");
9495         else
9496 #       endif /* IPC_STAT */
9497             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9498 #       ifdef IPC_RMID
9499         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9500 #       endif /* IPC_RMID */
9501             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9502     } else
9503 #endif /* IPC_PRIVATE && ... */
9504         printf("semget failed: errno = %d\n", errno);
9505   return 0;
9506 }
9507 END
9508     val="$undef"
9509     set try
9510     if eval $compile; then
9511         xxx=`./try`
9512         case "$xxx" in
9513         semun) val="$define" ;;
9514         esac
9515     fi
9516     $rm -f try try.c
9517     set d_semctl_semun
9518     eval $setvar
9519     case "$d_semctl_semun" in
9520     $define)
9521         echo "You can use union semun for semctl IPC_STAT." >&4
9522         also='also'
9523         ;;
9524     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9525         also=''
9526         ;;
9527     esac
9528
9529     : see whether semctl IPC_STAT can use struct semid_ds pointer
9530     $cat > try.c <<'END'
9531 #include <sys/types.h>
9532 #include <sys/ipc.h>
9533 #include <sys/sem.h>
9534 #include <sys/stat.h>
9535 #include "try.h"
9536 #include <stdio.h>
9537 #include <errno.h>
9538 #ifndef errno
9539 extern int errno;
9540 #endif
9541 int main() {
9542     struct semid_ds arg;
9543     int sem, st;
9544
9545 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9546     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9547     if (sem > -1) {
9548 #       ifdef IPC_STAT
9549         st = semctl(sem, 0, IPC_STAT, &arg);
9550         if (st == 0)
9551             printf("semid_ds\n");
9552         else
9553 #       endif /* IPC_STAT */
9554             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9555 #       ifdef IPC_RMID
9556         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9557 #       endif /* IPC_RMID */
9558             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9559     } else
9560 #endif /* IPC_PRIVATE && ... */
9561         printf("semget failed: errno = %d\n", errno);
9562
9563     return 0;
9564 }
9565 END
9566     val="$undef"
9567     set try
9568     if eval $compile; then
9569         xxx=`./try`
9570         case "$xxx" in
9571         semid_ds) val="$define" ;;
9572         esac
9573     fi
9574     $rm -f try try.c
9575     set d_semctl_semid_ds
9576     eval $setvar
9577     case "$d_semctl_semid_ds" in
9578     $define)
9579         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9580         ;;
9581     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9582         ;;
9583     esac
9584     $rm -f try.h
9585     ;;
9586 *)  val="$undef"
9587
9588     # We do not have the full sem*(2) library, so assume we can not
9589     # use either.
9590
9591     set d_semctl_semun
9592     eval $setvar
9593
9594     set d_semctl_semid_ds
9595     eval $setvar
9596     ;;
9597 esac
9598
9599 : see if setegid exists
9600 set setegid d_setegid
9601 eval $inlibc
9602
9603 : see if seteuid exists
9604 set seteuid d_seteuid
9605 eval $inlibc
9606
9607 : see if setgrent exists
9608 set setgrent d_setgrent
9609 eval $inlibc
9610
9611 : see if sethostent exists
9612 set sethostent d_sethent
9613 eval $inlibc
9614
9615 : see if setlinebuf exists
9616 set setlinebuf d_setlinebuf
9617 eval $inlibc
9618
9619 : see if setlocale exists
9620 set setlocale d_setlocale
9621 eval $inlibc
9622
9623 : see if setnetent exists
9624 set setnetent d_setnent
9625 eval $inlibc
9626
9627 : see if setprotoent exists
9628 set setprotoent d_setpent
9629 eval $inlibc
9630
9631 : see if setpgid exists
9632 set setpgid d_setpgid
9633 eval $inlibc
9634
9635 : see if setpgrp2 exists
9636 set setpgrp2 d_setpgrp2
9637 eval $inlibc
9638
9639 : see if setpriority exists
9640 set setpriority d_setprior
9641 eval $inlibc
9642
9643 : see if setpwent exists
9644 set setpwent d_setpwent
9645 eval $inlibc
9646
9647 : see if setregid exists
9648 set setregid d_setregid
9649 eval $inlibc
9650 set setresgid d_setresgid
9651 eval $inlibc
9652
9653 : see if setreuid exists
9654 set setreuid d_setreuid
9655 eval $inlibc
9656 set setresuid d_setresuid
9657 eval $inlibc
9658
9659 : see if setrgid exists
9660 set setrgid d_setrgid
9661 eval $inlibc
9662
9663 : see if setruid exists
9664 set setruid d_setruid
9665 eval $inlibc
9666
9667 : see if setservent exists
9668 set setservent d_setsent
9669 eval $inlibc
9670
9671 : see if setsid exists
9672 set setsid d_setsid
9673 eval $inlibc
9674
9675 : see if setspent exists
9676 set setspent d_setspent
9677 eval $inlibc
9678
9679 : see if setvbuf exists
9680 set setvbuf d_setvbuf
9681 eval $inlibc
9682
9683 : see if sfio.h is available
9684 set sfio.h i_sfio
9685 eval $inhdr
9686
9687
9688 : see if sfio library is available
9689 case "$i_sfio" in
9690 $define)
9691         val=''
9692         set sfreserve val
9693         eval $inlibc
9694         ;;
9695 *)
9696         val="$undef"
9697         ;;
9698 esac
9699 : Ok, but do we want to use it.
9700 case "$val" in
9701 $define)
9702         case "$usesfio" in
9703         true|$define|[yY]*) dflt='y';;
9704         *) dflt='n';;
9705         esac
9706         echo "$package can use the sfio library, but it is experimental."
9707         rp="You seem to have sfio available, do you want to try using it?"
9708         . ./myread
9709         case "$ans" in
9710         y|Y) ;;
9711         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9712                 val="$undef"
9713                 : Remove sfio from list of libraries to use
9714                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9715                 shift
9716                 libs="$*"
9717                 echo "libs = $libs" >&4
9718                 ;;
9719         esac
9720         ;;
9721 *)      case "$usesfio" in
9722         true|$define|[yY]*)
9723                 echo "Sorry, cannot find sfio on this machine" >&4
9724                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9725                 ;;
9726         esac
9727         ;;
9728 esac
9729 set d_sfio
9730 eval $setvar
9731 case "$d_sfio" in
9732 $define) usesfio='true';;
9733 *) usesfio='false';;
9734 esac
9735
9736 : see if shmctl exists
9737 set shmctl d_shmctl
9738 eval $inlibc
9739
9740 : see if shmget exists
9741 set shmget d_shmget
9742 eval $inlibc
9743
9744 : see if shmat exists
9745 set shmat d_shmat
9746 eval $inlibc
9747 : see what shmat returns
9748 case "$d_shmat" in
9749 "$define")
9750         $cat >shmat.c <<'END'
9751 #include <sys/shm.h>
9752 void *shmat();
9753 END
9754         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9755                 shmattype='void *'
9756         else
9757                 shmattype='char *'
9758         fi
9759         echo "and it returns ($shmattype)." >&4
9760         : see if a prototype for shmat is available
9761         xxx=`./findhdr sys/shm.h`
9762         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9763         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9764                 val="$define"
9765         else
9766                 val="$undef"
9767         fi
9768         $rm -f shmat.[co]
9769         ;;
9770 *)
9771         val="$undef"
9772         ;;
9773 esac
9774 set d_shmatprototype
9775 eval $setvar
9776
9777 : see if shmdt exists
9778 set shmdt d_shmdt
9779 eval $inlibc
9780
9781 : see how much of the 'shm*(2)' library is present.
9782 h_shm=true
9783 echo " "
9784 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9785 *"$undef"*) h_shm=false;;
9786 esac
9787 case "$osname" in
9788 freebsd)
9789     case "`ipcs 2>&1`" in
9790     "SVID shared memory"*"not configured"*)
9791         echo "Your $osname does not have the shm*(2) configured." >&4
9792         h_shm=false
9793         val="$undef"
9794         set shmctl d_shmctl
9795         evat $setvar
9796         set shmget d_shmget
9797         evat $setvar
9798         set shmat d_shmat
9799         evat $setvar
9800         set shmdt d_shmdt
9801         evat $setvar
9802         ;;
9803     esac
9804     ;;
9805 esac
9806 : we could also check for sys/ipc.h ...
9807 if $h_shm && $test `./findhdr sys/shm.h`; then
9808         echo "You have the full shm*(2) library." >&4
9809         val="$define"
9810 else
9811         echo "You don't have the full shm*(2) library." >&4
9812         val="$undef"
9813 fi
9814 set d_shm
9815 eval $setvar
9816
9817 echo " "
9818 : see if we have sigaction
9819 if set sigaction val -f d_sigaction; eval $csym; $val; then
9820         echo 'sigaction() found.' >&4
9821         $cat > try.c <<'EOP'
9822 #include <stdio.h>
9823 #include <sys/types.h>
9824 #include <signal.h>
9825 int main()
9826 {
9827     struct sigaction act, oact;
9828 }
9829 EOP
9830         set try
9831         if eval $compile_ok; then
9832                 val="$define"
9833         else
9834                 echo "But you don't seem to have a useable struct sigaction." >&4
9835                 val="$undef"
9836         fi
9837 else
9838         echo 'sigaction NOT found.' >&4
9839         val="$undef"
9840 fi
9841 set d_sigaction; eval $setvar
9842 $rm -f try try$_o try.c
9843
9844 : see if sigsetjmp exists
9845 echo " "
9846 case "$d_sigsetjmp" in
9847 '')
9848         $cat >try.c <<'EOP'
9849 #include <setjmp.h>
9850 sigjmp_buf env;
9851 int set = 1;
9852 int main()
9853 {
9854         if (sigsetjmp(env,1))
9855                 exit(set);
9856         set = 0;
9857         siglongjmp(env, 1);
9858         exit(1);
9859 }
9860 EOP
9861         set try
9862         if eval $compile; then
9863                 if ./try >/dev/null 2>&1; then
9864                         echo "POSIX sigsetjmp found." >&4
9865                         val="$define"
9866                 else
9867                         $cat >&4 <<EOM
9868 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9869 I'll ignore them.
9870 EOM
9871                         val="$undef"
9872                 fi
9873         else
9874                 echo "sigsetjmp not found." >&4
9875                 val="$undef"
9876         fi
9877         ;;
9878 *) val="$d_sigsetjmp"
9879         case "$d_sigsetjmp" in
9880         $define) echo "POSIX sigsetjmp found." >&4;;
9881         $undef) echo "sigsetjmp not found." >&4;;
9882         esac
9883         ;;
9884 esac
9885 set d_sigsetjmp
9886 eval $setvar
9887 $rm -f try.c try
9888
9889 : see if stat knows about block sizes
9890 echo " "
9891 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9892 eval $hasfield
9893
9894 : see if _ptr and _cnt from stdio act std
9895 echo " "
9896 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9897         echo "(Looks like you have stdio.h from Linux.)"
9898         case "$stdio_ptr" in
9899         '') stdio_ptr='((fp)->_IO_read_ptr)'
9900                 ptr_lval=$define
9901                 ;;
9902         *)      ptr_lval=$d_stdio_ptr_lval;;
9903         esac
9904         case "$stdio_cnt" in
9905         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9906                 cnt_lval=$undef
9907                 ;;
9908         *)      cnt_lval=$d_stdio_cnt_lval;;
9909         esac
9910         case "$stdio_base" in
9911         '') stdio_base='((fp)->_IO_read_base)';;
9912         esac
9913         case "$stdio_bufsiz" in
9914         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9915         esac
9916 else
9917         case "$stdio_ptr" in
9918         '') stdio_ptr='((fp)->_ptr)'
9919                 ptr_lval=$define
9920                 ;;
9921         *)      ptr_lval=$d_stdio_ptr_lval;;
9922         esac
9923         case "$stdio_cnt" in
9924         '') stdio_cnt='((fp)->_cnt)'
9925                 cnt_lval=$define
9926                 ;;
9927         *)      cnt_lval=$d_stdio_cnt_lval;;
9928         esac
9929         case "$stdio_base" in
9930         '') stdio_base='((fp)->_base)';;
9931         esac
9932         case "$stdio_bufsiz" in
9933         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9934         esac
9935 fi
9936 : test whether _ptr and _cnt really work
9937 echo "Checking how std your stdio is..." >&4
9938 $cat >try.c <<EOP
9939 #include <stdio.h>
9940 #define FILE_ptr(fp)    $stdio_ptr
9941 #define FILE_cnt(fp)    $stdio_cnt
9942 int main() {
9943         FILE *fp = fopen("try.c", "r");
9944         char c = getc(fp);
9945         if (
9946                 18 <= FILE_cnt(fp) &&
9947                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9948         )
9949                 exit(0);
9950         exit(1);
9951 }
9952 EOP
9953 val="$undef"
9954 set try
9955 if eval $compile; then
9956         if ./try; then
9957                 echo "Your stdio acts pretty std."
9958                 val="$define"
9959         else
9960                 echo "Your stdio isn't very std."
9961         fi
9962 else
9963         echo "Your stdio doesn't appear very std."
9964 fi
9965 $rm -f try.c try
9966 set d_stdstdio
9967 eval $setvar
9968
9969 : Can _ptr be used as an lvalue?
9970 case "$d_stdstdio$ptr_lval" in
9971 $define$define) val=$define ;;
9972 *) val=$undef ;;
9973 esac
9974 set d_stdio_ptr_lval
9975 eval $setvar
9976
9977 : Can _cnt be used as an lvalue?
9978 case "$d_stdstdio$cnt_lval" in
9979 $define$define) val=$define ;;
9980 *) val=$undef ;;
9981 esac
9982 set d_stdio_cnt_lval
9983 eval $setvar
9984
9985 : see if _base is also standard
9986 val="$undef"
9987 case "$d_stdstdio" in
9988 $define)
9989         $cat >try.c <<EOP
9990 #include <stdio.h>
9991 #define FILE_base(fp)   $stdio_base
9992 #define FILE_bufsiz(fp) $stdio_bufsiz
9993 int main() {
9994         FILE *fp = fopen("try.c", "r");
9995         char c = getc(fp);
9996         if (
9997                 19 <= FILE_bufsiz(fp) &&
9998                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9999         )
10000                 exit(0);
10001         exit(1);
10002 }
10003 EOP
10004         set try
10005         if eval $compile; then
10006                 if ./try; then
10007                         echo "And its _base field acts std."
10008                         val="$define"
10009                 else
10010                         echo "But its _base field isn't std."
10011                 fi
10012         else
10013                 echo "However, it seems to be lacking the _base field."
10014         fi
10015         $rm -f try.c try
10016         ;;
10017 esac
10018 set d_stdiobase
10019 eval $setvar
10020
10021 $cat >&4 <<EOM
10022 Checking how to access stdio streams by file descriptor number...
10023 EOM
10024 case "$stdio_stream_array" in
10025 '')     $cat >try.c <<EOCP
10026 #include <stdio.h>
10027 int main() {
10028   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10029     printf("yes\n");
10030 }
10031 EOCP
10032         for s in _iob __iob __sF
10033         do
10034                 set try -DSTDIO_STREAM_ARRAY=$s
10035                 if eval $compile; then
10036                         case "`./try$exe_ext`" in
10037                         yes)    stdio_stream_array=$s; break ;;
10038                         esac
10039                 fi
10040         done
10041         $rm -f try.* try$exe_ext
10042 esac
10043 case "$stdio_stream_array" in
10044 '')     $cat >&4 <<EOM
10045 I can't figure out how to access stdio streams by file descriptor number.
10046 EOM
10047         d_stdio_stream_array="$undef"
10048         ;;
10049 *)      $cat >&4 <<EOM
10050 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10051 EOM
10052         d_stdio_stream_array="$define"
10053         ;;
10054 esac
10055
10056 : see if strcoll exists
10057 set strcoll d_strcoll
10058 eval $inlibc
10059
10060 : check for structure copying
10061 echo " "
10062 echo "Checking to see if your C compiler can copy structs..." >&4
10063 $cat >try.c <<'EOCP'
10064 int main()
10065 {
10066         struct blurfl {
10067                 int dyick;
10068         } foo, bar;
10069
10070         foo = bar;
10071 }
10072 EOCP
10073 if $cc -c try.c >/dev/null 2>&1 ; then
10074         val="$define"
10075         echo "Yup, it can."
10076 else
10077         val="$undef"
10078         echo "Nope, it can't."
10079 fi
10080 set d_strctcpy
10081 eval $setvar
10082 $rm -f try.*
10083
10084 : see if strerror and/or sys_errlist[] exist
10085 echo " "
10086 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10087     if set strerror val -f d_strerror; eval $csym; $val; then
10088                 echo 'strerror() found.' >&4
10089                 d_strerror="$define"
10090                 d_strerrm='strerror(e)'
10091                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10092                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10093                         d_syserrlst="$define"
10094                 else
10095                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10096                         d_syserrlst="$undef"
10097                 fi
10098     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10099                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10100                 echo 'strerror() found in string header.' >&4
10101                 d_strerror="$define"
10102                 d_strerrm='strerror(e)'
10103                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10104                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10105                                 d_syserrlst="$define"
10106                 else
10107                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10108                         d_syserrlst="$undef"
10109                 fi
10110     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10111                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10112                 d_strerror="$undef"
10113                 d_syserrlst="$define"
10114                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10115     else
10116                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10117                 d_strerror="$undef"
10118                 d_syserrlst="$undef"
10119                 d_strerrm='"unknown"'
10120     fi
10121 fi
10122
10123 : see if strtod exists
10124 set strtod d_strtod
10125 eval $inlibc
10126
10127 : see if strtol exists
10128 set strtol d_strtol
10129 eval $inlibc
10130
10131 : see if strtoul exists
10132 set strtoul d_strtoul
10133 eval $inlibc
10134
10135 : see if strxfrm exists
10136 set strxfrm d_strxfrm
10137 eval $inlibc
10138
10139 : see if symlink exists
10140 set symlink d_symlink
10141 eval $inlibc
10142
10143 : see if syscall exists
10144 set syscall d_syscall
10145 eval $inlibc
10146
10147 : see if sysconf exists
10148 set sysconf d_sysconf
10149 eval $inlibc
10150
10151 : see if system exists
10152 set system d_system
10153 eval $inlibc
10154
10155 : see if tcgetpgrp exists
10156 set tcgetpgrp d_tcgetpgrp
10157 eval $inlibc
10158
10159 : see if tcsetpgrp exists
10160 set tcsetpgrp d_tcsetpgrp
10161 eval $inlibc
10162
10163 : see if sys/types.h has to be included
10164 set sys/types.h i_systypes
10165 eval $inhdr
10166
10167 : see if prototype for telldir is available
10168 echo " "
10169 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10170 eval $hasproto
10171
10172 : define an is-a-typedef? function
10173 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10174 case "$inclist" in
10175 "") inclist="sys/types.h";;
10176 esac;
10177 eval "varval=\$$var";
10178 case "$varval" in
10179 "")
10180         $rm -f temp.c;
10181         for inc in $inclist; do
10182                 echo "#include <$inc>" >>temp.c;
10183         done;
10184         echo "#ifdef $type" >> temp.c;
10185         echo "printf(\"We have $type\");" >> temp.c;
10186         echo "#endif" >> temp.c;
10187         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10188         if $contains $type temp.E >/dev/null 2>&1; then
10189                 eval "$var=\$type";
10190         else
10191                 eval "$var=\$def";
10192         fi;
10193         $rm -f temp.?;;
10194 *) eval "$var=\$varval";;
10195 esac'
10196
10197 : define an is-a-typedef? function that prompts if the type is not available.
10198 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10199 case "$inclist" in
10200 "") inclist="sys/types.h";;
10201 esac;
10202 eval "varval=\$$var";
10203 case "$varval" in
10204 "")
10205         $rm -f temp.c;
10206         for inc in $inclist; do
10207                 echo "#include <$inc>" >>temp.c;
10208         done;
10209         echo "#ifdef $type" >> temp.c;
10210         echo "printf(\"We have $type\");" >> temp.c;
10211         echo "#endif" >> temp.c;
10212         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10213         echo " " ;
10214         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10215         if $contains $type temp.E >/dev/null 2>&1; then
10216                 echo "$type found." >&4;
10217                 eval "$var=\$type";
10218         else
10219                 echo "$type NOT found." >&4;
10220                 dflt="$def";
10221                 . ./myread ;
10222                 eval "$var=\$ans";
10223         fi;
10224         $rm -f temp.?;;
10225 *) eval "$var=\$varval";;
10226 esac'
10227
10228 : see if this is a sys/times.h system
10229 set sys/times.h i_systimes
10230 eval $inhdr
10231
10232 : see if times exists
10233 echo " "
10234 if set times val -f d_times; eval $csym; $val; then
10235         echo 'times() found.' >&4
10236         d_times="$define"
10237         inc=''
10238         case "$i_systimes" in
10239         "$define") inc='sys/times.h';;
10240         esac
10241         rp="What is the type returned by times() on this system?"
10242         set clock_t clocktype long stdio.h sys/types.h $inc
10243         eval $typedef_ask
10244 else
10245         echo 'times() NOT found, hope that will do.' >&4
10246         d_times="$undef"
10247         clocktype='int'
10248 fi
10249
10250 : see if truncate exists
10251 set truncate d_truncate
10252 eval $inlibc
10253
10254 : see if tzname[] exists
10255 echo " "
10256 if set tzname val -a d_tzname; eval $csym; $val; then
10257         val="$define"
10258         echo 'tzname[] found.' >&4
10259 else
10260         val="$undef"
10261         echo 'tzname[] NOT found.' >&4
10262 fi
10263 set d_tzname
10264 eval $setvar
10265
10266 : see if umask exists
10267 set umask d_umask
10268 eval $inlibc
10269
10270 : backward compatibility for d_hvfork
10271 if test X$d_hvfork != X; then
10272         d_vfork="$d_hvfork"
10273         d_hvfork=''
10274 fi
10275 : see if there is a vfork
10276 val=''
10277 set vfork val
10278 eval $inlibc
10279
10280 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10281 : perl on Solaris 2.x, and probably elsewhere.
10282 case "$val" in
10283 $define)
10284         echo " "
10285         case "$usevfork" in
10286         false) dflt='n';;
10287         *) dflt='y';;
10288         esac
10289         cat <<'EOM'
10290  
10291 Perl can only use a vfork() that doesn't suffer from strict
10292 restrictions on calling functions or modifying global data in
10293 the child.  For example, glibc-2.1 contains such a vfork()
10294 that is unsuitable.  If your system provides a proper fork()
10295 call, chances are that you do NOT want perl to use vfork().
10296
10297 EOM
10298         rp="Do you still want to use vfork()?"
10299         . ./myread
10300         case "$ans" in
10301         y|Y) ;;
10302         *)
10303                 echo "Ok, we won't use vfork()."
10304                 val="$undef"
10305                 ;;
10306         esac
10307         ;;
10308 esac
10309 set d_vfork
10310 eval $setvar
10311 case "$d_vfork" in
10312 $define) usevfork='true';;
10313 *) usevfork='false';;
10314 esac
10315
10316 : see if this is an sysdir system
10317 set sys/dir.h i_sysdir
10318 eval $inhdr
10319
10320 : see if this is an sysndir system
10321 set sys/ndir.h i_sysndir
10322 eval $inhdr
10323
10324 : see if closedir exists
10325 set closedir d_closedir
10326 eval $inlibc
10327
10328 case "$d_closedir" in
10329 "$define")
10330         echo " "
10331         echo "Checking whether closedir() returns a status..." >&4
10332         cat > closedir.c <<EOM
10333 #$i_dirent I_DIRENT             /**/
10334 #$i_sysdir I_SYS_DIR            /**/
10335 #$i_sysndir I_SYS_NDIR          /**/
10336 #$i_systypes I_SYS_TYPES        /**/
10337
10338 #if defined(I_SYS_TYPES)
10339 #include <sys/types.h>
10340 #endif
10341 #if defined(I_DIRENT)
10342 #include <dirent.h>
10343 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10344 #include <sys/dir.h>
10345 #endif
10346 #else
10347 #ifdef I_SYS_NDIR
10348 #include <sys/ndir.h>
10349 #else
10350 #ifdef I_SYS_DIR
10351 #ifdef hp9000s500
10352 #include <ndir.h>       /* may be wrong in the future */
10353 #else
10354 #include <sys/dir.h>
10355 #endif
10356 #endif
10357 #endif
10358 #endif 
10359 int main() { return closedir(opendir(".")); }
10360 EOM
10361         set closedir
10362         if eval $compile_ok; then
10363                 if ./closedir > /dev/null 2>&1 ; then
10364                         echo "Yes, it does."
10365                         val="$undef"
10366                 else
10367                         echo "No, it doesn't."
10368                         val="$define"
10369                 fi
10370         else
10371                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10372                 val="$define"
10373         fi
10374         ;;
10375 *)
10376         val="$undef";
10377         ;;
10378 esac
10379 set d_void_closedir
10380 eval $setvar
10381 $rm -f closedir*
10382 : check for volatile keyword
10383 echo " "
10384 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10385 $cat >try.c <<'EOCP'
10386 int main()
10387 {
10388         typedef struct _goo_struct goo_struct;
10389         goo_struct * volatile goo = ((goo_struct *)0);
10390         struct _goo_struct {
10391                 long long_int;
10392                 int reg_int;
10393                 char char_var;
10394         };
10395         typedef unsigned short foo_t;
10396         char *volatile foo;
10397         volatile int bar;
10398         volatile foo_t blech;
10399         foo = foo;
10400 }
10401 EOCP
10402 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10403         val="$define"
10404         echo "Yup, it does."
10405 else
10406         val="$undef"
10407         echo "Nope, it doesn't."
10408 fi
10409 set d_volatile
10410 eval $setvar
10411 $rm -f try.*
10412
10413 : see if there is a wait4
10414 set wait4 d_wait4
10415 eval $inlibc
10416
10417 : see if waitpid exists
10418 set waitpid d_waitpid
10419 eval $inlibc
10420
10421 : see if wcstombs exists
10422 set wcstombs d_wcstombs
10423 eval $inlibc
10424
10425 : see if wctomb exists
10426 set wctomb d_wctomb
10427 eval $inlibc
10428
10429 : see if writev exists
10430 set writev d_writev
10431 eval $inlibc
10432
10433 : preserve RCS keywords in files with variable substitution, grrr
10434 Date='$Date'
10435 Id='$Id'
10436 Log='$Log'
10437 RCSfile='$RCSfile'
10438 Revision='$Revision'
10439
10440 case "$crosscompile" in
10441 ''|[nN]*) crosscompile="$undef" ;;
10442 esac
10443
10444 case "$osname" in
10445 next|rhapsody) multiarch="$define" ;;
10446 esac
10447 case "$multiarch" in
10448 ''|[nN]*) multiarch="$undef" ;;
10449 esac
10450
10451 : check for alignment requirements
10452 echo " "
10453 case "$crosscompile$multiarch" in
10454 *$define*)
10455         $cat <<EOM
10456 You seem to be either cross-compiling or doing a multiarchitecture build,
10457 skipping the memory alignment check.
10458
10459 EOM
10460         case "$alignbytes" in
10461         '') alignbytes=8 ;;
10462         esac
10463         ;;
10464 *)
10465         case "$alignbytes" in
10466         '') echo "Checking alignment constraints..." >&4
10467                 $cat >try.c <<'EOCP'
10468 struct foobar {
10469         char foo;
10470         double bar;
10471 } try_algn;
10472 int main()
10473 {
10474         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10475 }
10476 EOCP
10477                 set try
10478                 if eval $compile_ok; then
10479                         dflt=`./try`
10480                 else
10481                         dflt='8'
10482                         echo "(I can't seem to compile the test program...)"
10483                 fi
10484                 ;;
10485         *) dflt="$alignbytes"
10486                 ;;
10487         esac
10488         rp="Doubles must be aligned on a how-many-byte boundary?"
10489         . ./myread
10490         alignbytes="$ans"
10491         $rm -f try.c try
10492         ;;
10493 esac
10494
10495
10496 : check for ordering of bytes in a long
10497 echo " "
10498 case "$crosscompile$multiarch" in
10499 *$define*)
10500         $cat <<EOM
10501 You seem to be either cross-compiling or doing a multiarchitecture build,
10502 skipping the byteorder check.
10503
10504 EOM
10505         byteorder=''
10506         ;;
10507 *)
10508         case "$byteorder" in
10509         '')
10510                 $cat <<'EOM'
10511 In the following, larger digits indicate more significance.  A big-endian
10512 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10513 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10514 machines may have weird orders like 3412.  A Cray will report 87654321. If
10515 the test program works the default is probably right.
10516 I'm now running the test program...
10517 EOM
10518                 $cat >try.c <<'EOCP'
10519 #include <stdio.h>
10520 int main()
10521 {
10522         int i;
10523         union {
10524                 unsigned long l;
10525                 char c[sizeof(long)];
10526         } u;
10527
10528         if (sizeof(long) > 4)
10529                 u.l = (0x08070605L << 32) | 0x04030201L;
10530         else
10531                 u.l = 0x04030201L;
10532         for (i = 0; i < sizeof(long); i++)
10533                 printf("%c", u.c[i]+'0');
10534         printf("\n");
10535         exit(0);
10536 }
10537 EOCP
10538                 xxx_prompt=y
10539                 set try
10540                 if eval $compile && ./try > /dev/null; then
10541                         dflt=`./try`
10542                         case "$dflt" in
10543                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10544                                 echo "(The test program ran ok.)"
10545                                 echo "byteorder=$dflt"
10546                                 xxx_prompt=n
10547                         ;;
10548                         ????|????????) echo "(The test program ran ok.)" ;;
10549                         *) echo "(The test program didn't run right for some reason.)" ;;
10550                         esac
10551                 else
10552                         dflt='4321'
10553                         cat <<'EOM'
10554 (I can't seem to compile the test program.  Guessing big-endian...)
10555 EOM
10556                 fi
10557                 case "$xxx_prompt" in
10558                 y)
10559                         rp="What is the order of bytes in a long?"
10560                         . ./myread
10561                         byteorder="$ans"
10562                         ;;
10563                 *)      byteorder=$dflt
10564                         ;;
10565                 esac
10566                 ;;
10567         esac
10568         $rm -f try.c try
10569         ;;
10570 esac
10571
10572
10573 : how do we catenate cpp tokens here?
10574 echo " "
10575 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10576 $cat >cpp_stuff.c <<'EOCP'
10577 #define RCAT(a,b)a/**/b
10578 #define ACAT(a,b)a ## b
10579 RCAT(Rei,ser)
10580 ACAT(Cir,cus)
10581 EOCP
10582 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10583 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10584         echo "Oh!  Smells like ANSI's been here." >&4
10585         echo "We can catify or stringify, separately or together!"
10586         cpp_stuff=42
10587 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10588         echo "Ah, yes!  The good old days!" >&4
10589         echo "However, in the good old days we don't know how to stringify and"
10590         echo "catify at the same time."
10591         cpp_stuff=1
10592 else
10593         $cat >&4 <<EOM
10594 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10595 to have to edit the values of CAT[2-5] in config.h...
10596 EOM
10597         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10598 fi
10599 $rm -f cpp_stuff.*
10600
10601 : see if this is a db.h system
10602 set db.h i_db
10603 eval $inhdr
10604
10605 case "$i_db" in
10606 $define)
10607         : Check db version.
10608         echo " "
10609         echo "Checking Berkeley DB version ..." >&4
10610         $cat >try.c <<EOCP
10611 #$d_const HASCONST
10612 #ifndef HASCONST
10613 #define const
10614 #endif
10615 #include <sys/types.h>
10616 #include <stdio.h>
10617 #include <db.h>
10618 int main()
10619 {
10620 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10621     int Major, Minor, Patch ;
10622     unsigned long Version ;
10623     (void)db_version(&Major, &Minor, &Patch) ;
10624     printf("You have Berkeley DB Version 2 or greater\n");
10625
10626     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10627                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10628     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10629                 Major, Minor, Patch) ;
10630
10631     /* check that db.h & libdb are compatible */
10632     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10633         printf("db.h and libdb are incompatible\n") ;
10634         exit(3);        
10635     }
10636
10637     printf("db.h and libdb are compatible\n") ;
10638
10639     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10640                 + DB_VERSION_PATCH ;
10641
10642     /* needs to be >= 2.3.4 */
10643     if (Version < 2003004) {
10644     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10645         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10646         exit(2);        
10647     }
10648
10649     exit(0);
10650 #else
10651 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10652     printf("You have Berkeley DB Version 1\n");
10653     exit(0);    /* DB version < 2: the coast is clear. */
10654 #else
10655     exit(1);    /* <db.h> not Berkeley DB? */
10656 #endif
10657 #endif
10658 }
10659 EOCP
10660         set try
10661         if eval $compile && ./try; then
10662                 echo 'Looks OK.' >&4
10663         else
10664                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10665                 i_db=$undef
10666                 case " $libs " in
10667                 *"-ldb "*)
10668                         : Remove db from list of libraries to use
10669                         echo "Removing unusable -ldb from library list" >&4
10670                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10671                         shift
10672                         libs="$*"
10673                         echo "libs = $libs" >&4
10674                         ;;
10675                 esac
10676         fi
10677         $rm -f try.*
10678         ;;
10679 esac
10680
10681 case "$i_db" in
10682 define)
10683         : Check the return type needed for hash 
10684         echo " "
10685         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10686         $cat >try.c <<EOCP
10687 #$d_const HASCONST
10688 #ifndef HASCONST
10689 #define const
10690 #endif
10691 #include <sys/types.h>
10692 #include <db.h>
10693
10694 #ifndef DB_VERSION_MAJOR
10695 u_int32_t hash_cb (ptr, size)
10696 const void *ptr;
10697 size_t size;
10698 {
10699 }
10700 HASHINFO info;
10701 int main()
10702 {
10703         info.hash = hash_cb;
10704 }
10705 #endif
10706 EOCP
10707         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10708                 if $contains warning try.out >>/dev/null 2>&1 ; then
10709                         db_hashtype='int'
10710                 else
10711                         db_hashtype='u_int32_t'
10712                 fi
10713         else
10714                 : XXX Maybe we should just give up here.
10715                 db_hashtype=u_int32_t
10716                 $cat try.out >&4
10717                 echo "Help:  I can't seem to compile the db test program." >&4
10718                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10719         fi
10720         $rm -f try.*
10721         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10722         ;;
10723 *)      db_hashtype=u_int32_t
10724         ;;
10725 esac
10726 case "$i_db" in
10727 define)
10728         : Check the return type needed for prefix 
10729         echo " "
10730         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10731         cat >try.c <<EOCP
10732 #$d_const HASCONST
10733 #ifndef HASCONST
10734 #define const
10735 #endif
10736 #include <sys/types.h>
10737 #include <db.h>
10738
10739 #ifndef DB_VERSION_MAJOR
10740 size_t prefix_cb (key1, key2)
10741 const DBT *key1;
10742 const DBT *key2;
10743 {
10744 }
10745 BTREEINFO info;
10746 int main()
10747 {
10748         info.prefix = prefix_cb;
10749 }
10750 #endif
10751 EOCP
10752         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10753                 if $contains warning try.out >>/dev/null 2>&1 ; then
10754                         db_prefixtype='int'
10755                 else
10756                         db_prefixtype='size_t'
10757                 fi
10758         else
10759                 db_prefixtype='size_t'
10760                 : XXX Maybe we should just give up here.
10761                 $cat try.out >&4
10762                 echo "Help:  I can't seem to compile the db test program." >&4
10763                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10764         fi
10765         $rm -f try.*
10766         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10767         ;;
10768 *)      db_prefixtype='size_t'
10769         ;;
10770 esac
10771
10772 : check for void type
10773 echo " "
10774 echo "Checking to see how well your C compiler groks the void type..." >&4
10775 case "$voidflags" in
10776 '')
10777         $cat >try.c <<'EOCP'
10778 #if TRY & 1
10779 void sub() {
10780 #else
10781 sub() {
10782 #endif
10783         extern void moo();      /* function returning void */
10784         void (*goo)();          /* ptr to func returning void */
10785 #if TRY & 8
10786         void *hue;              /* generic ptr */
10787 #endif
10788 #if TRY & 2
10789         void (*foo[10])();
10790 #endif
10791
10792 #if TRY & 4
10793         if(goo == moo) {
10794                 exit(0);
10795         }
10796 #endif
10797         exit(0);
10798 }
10799 int main() { sub(); }
10800 EOCP
10801         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10802                 voidflags=$defvoidused
10803         echo "Good.  It appears to support void to the level $package wants.">&4
10804                 if $contains warning .out >/dev/null 2>&1; then
10805                         echo "However, you might get some warnings that look like this:"
10806                         $cat .out
10807                 fi
10808         else
10809 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10810                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10811                         echo "It supports 1..."
10812                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10813                                 echo "It also supports 2..."
10814                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10815                                         voidflags=7
10816                                         echo "And it supports 4 but not 8 definitely."
10817                                 else
10818                                         echo "It doesn't support 4..."
10819                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10820                                                 voidflags=11
10821                                                 echo "But it supports 8."
10822                                         else
10823                                                 voidflags=3
10824                                                 echo "Neither does it support 8."
10825                                         fi
10826                                 fi
10827                         else
10828                                 echo "It does not support 2..."
10829                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10830                                         voidflags=13
10831                                         echo "But it supports 4 and 8."
10832                                 else
10833                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10834                                                 voidflags=5
10835                                                 echo "And it supports 4 but has not heard about 8."
10836                                         else
10837                                                 echo "However it supports 8 but not 4."
10838                                         fi
10839                                 fi
10840                         fi
10841                 else
10842                         echo "There is no support at all for void."
10843                         voidflags=0
10844                 fi
10845         fi
10846 esac
10847 case "$voidflags" in
10848 "$defvoidused") ;;
10849 *)      $cat >&4 <<'EOM'
10850   Support flag bits are:
10851     1: basic void declarations.
10852     2: arrays of pointers to functions returning void.
10853     4: operations between pointers to and addresses of void functions.
10854     8: generic void pointers.
10855 EOM
10856         dflt="$voidflags";
10857         rp="Your void support flags add up to what?"
10858         . ./myread
10859         voidflags="$ans"
10860         ;;
10861 esac
10862 $rm -f try.* .out
10863
10864
10865 : How can we generate normalized random numbers ?
10866 echo " "
10867 echo "Looking for a random number function..." >&4
10868 case "$randfunc" in
10869 '')
10870         if set drand48 val -f; eval $csym; $val; then
10871                 dflt="drand48"
10872                 echo "Good, found drand48()." >&4
10873         elif set random val -f; eval $csym; $val; then
10874                 dflt="random"
10875                 echo "OK, found random()." >&4
10876         else
10877                 dflt="rand"
10878                 echo "Yick, looks like I have to use rand()." >&4
10879         fi
10880         echo " "
10881         ;;
10882 *)
10883         dflt="$randfunc"
10884         ;;
10885 esac
10886 cont=true
10887
10888 case "$ccflags" in
10889 *-Dmy_rand=*|*-Dmy_srand=*)
10890         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10891         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10892         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10893         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10894         ;;
10895 esac
10896
10897 while $test "$cont"; do
10898         rp="Use which function to generate random numbers?"
10899         . ./myread
10900         if $test "$ans" = "$dflt"; then
10901                 : null
10902         else
10903                 randbits=''
10904         fi
10905         randfunc="$ans"
10906         if set $ans val -f; eval $csym; $val; then
10907                 cont=''
10908         else
10909                 dflt=y
10910                 rp="I cannot find function $ans. Use that name anyway?"
10911                 . ./myread
10912                 dflt=rand
10913                 case "$ans" in
10914                         [yY]*) cont='';;
10915                 esac
10916         fi
10917         case "$cont" in
10918         '')
10919                 case "$randfunc" in
10920                 drand48)
10921                         drand01="drand48()"
10922                         seedfunc="srand48"
10923                         randbits=48
10924                         randseedtype=long
10925                         ;;
10926                 rand|random)
10927                         case "$randbits" in
10928                         '')
10929 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10930                                 $cat >try.c <<EOCP
10931 #$i_unistd I_UNISTD
10932 #$i_stdlib I_STDLIB
10933 #include <stdio.h>
10934 #ifdef I_UNISTD
10935 #  include <unistd.h>
10936 #endif
10937 #ifdef I_STDLIB
10938 #  include <stdlib.h>
10939 #endif
10940 int main()
10941 {
10942         register int i;
10943         register unsigned long tmp;
10944         register unsigned long max = 0L;
10945
10946         for (i = 1000; i; i--) {
10947                 tmp = (unsigned long) $randfunc();
10948                 if (tmp > max) max = tmp;
10949         }
10950         for (i = 0; max; i++)
10951                 max /= 2;
10952         printf("%d\n",i);
10953 }
10954 EOCP
10955                                 set try
10956                                 if eval $compile_ok; then
10957                                         dflt=`try`
10958                                 else
10959                                         dflt='?'
10960                                         echo "(I can't seem to compile the test program...)"
10961                                 fi
10962                                 ;;
10963                         *)
10964                                 dflt="$randbits"
10965                                 ;;
10966                         esac
10967                         rp="How many bits does your $randfunc() function produce?"
10968                         . ./myread
10969                         randbits="$ans"
10970                         $rm -f try.c try
10971                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10972                         seedfunc="s$randfunc"
10973                         randseedtype=unsigned
10974                         ;;
10975                 *)
10976                         dflt="31"
10977                         rp="How many bits does your $randfunc() function produce?"
10978                         . ./myread
10979                         randbits="$ans"
10980                         seedfunc="s$randfunc"
10981                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10982                         if set $seedfunc val -f; eval $csym; $val; then
10983                                 echo "(Using $seedfunc() to seed random generator)"
10984                         else
10985                                 echo "(Warning: no $seedfunc() to seed random generator)"
10986                                 seedfunc=rand
10987                         fi
10988                         randseedtype=unsigned
10989                         ;;
10990                 esac
10991                 ;;
10992         esac
10993 done
10994
10995 echo " "
10996 echo "Determining whether or not we are on an EBCDIC system..." >&4
10997 $cat >tebcdic.c <<'EOM'
10998 int main()
10999 {
11000   if ('M'==0xd4) return 0;
11001   return 1;
11002 }
11003 EOM
11004
11005 val=$undef
11006 set tebcdic
11007 if eval $compile_ok; then
11008         if ./tebcdic; then
11009                 echo "You have EBCDIC." >&4
11010                 val="$define"
11011         else
11012                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
11013         fi
11014 else
11015         echo "I'm unable to compile the test program." >&4
11016         echo "I'll assume ASCII or some ISO Latin." >&4
11017 fi
11018 $rm -f tebcdic.c tebcdic
11019 set ebcdic
11020 eval $setvar
11021
11022 echo " "
11023 $cat >&4 <<EOM
11024 Checking how to flush all pending stdio output...
11025 EOM
11026 # I only know how to find the first 32 possibly open files on SunOS.
11027 # See also hints/sunos_4_1.sh and util.c  --AD
11028 case "$osname" in
11029 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11030 esac
11031 $cat >>try.c <<EOCP
11032 #include <stdio.h>
11033 #$i_unistd I_UNISTD
11034 #ifdef I_UNISTD
11035 # include <unistd.h>
11036 #endif
11037 #$d_sysconf HAS_SYSCONF
11038 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11039 #ifdef HAS_STDIO_STREAM_ARRAY
11040 # define STDIO_STREAM_ARRAY $stdio_stream_array
11041 #endif
11042 int main() {
11043   FILE* p = fopen("try.out", "w");
11044 #ifdef TRY_FPUTC
11045   fputc('x', p);
11046 #else
11047 # ifdef TRY_FPRINTF
11048   fprintf(p, "x");
11049 # endif
11050 #endif
11051 #ifdef TRY_FFLUSH_NULL
11052   fflush(NULL);
11053 #endif
11054 #ifdef TRY_FFLUSH_ALL
11055   {
11056     long open_max = -1;
11057 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11058     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11059 # else
11060 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11061     open_max = sysconf(_SC_OPEN_MAX);
11062 #  else
11063 #   ifdef FOPEN_MAX
11064     open_max = FOPEN_MAX;
11065 #   else
11066 #    ifdef OPEN_MAX
11067     open_max = OPEN_MAX;
11068 #    else
11069 #     ifdef _NFILE
11070     open_max = _NFILE;
11071 #     endif
11072 #    endif
11073 #   endif
11074 #  endif
11075 # endif 
11076 # ifdef HAS_STDIO_STREAM_ARRAY
11077     if (open_max > 0) {
11078       long i;
11079       for (i = 0; i < open_max; i++)
11080             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11081                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11082                 STDIO_STREAM_ARRAY[i]._flag)
11083                 fflush(&STDIO_STREAM_ARRAY[i]);
11084     }   
11085   }
11086 # endif
11087 #endif
11088   _exit(42);
11089 }
11090 EOCP
11091 : first we have to find out how _not_ to flush
11092 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11093     output=''
11094     set try -DTRY_FPUTC
11095     if eval $compile; then
11096             $rm -f try.out
11097             ./try$exe_ext 2>/dev/null
11098             if $test ! -s try.out -a "X$?" = X42; then
11099                 output=-DTRY_FPUTC
11100             fi
11101     fi
11102     case "$output" in
11103     '')
11104             set try -DTRY_FPRINTF
11105             $rm -f try.out
11106             if eval $compile; then
11107                     $rm -f try.out
11108                     ./try$exe_ext 2>/dev/null
11109                     if $test ! -s try.out -a "X$?" = X42; then
11110                         output=-DTRY_FPRINTF
11111                     fi
11112             fi
11113         ;;
11114     esac
11115 fi
11116 : check for fflush NULL behaviour
11117 case "$fflushNULL" in
11118 '')     set try -DTRY_FFLUSH_NULL $output
11119         if eval $compile; then
11120                 $rm -f try.out
11121                 ./try$exe_ext 2>/dev/null
11122                 code="$?"
11123                 if $test -s try.out -a "X$code" = X42; then
11124                         fflushNULL="`$cat try.out`"
11125                 else
11126                         if $test "X$code" != X42; then
11127                                 $cat >&4 <<EOM
11128 (If this test failed, don't worry, we'll try another method shortly.)
11129 EOM
11130                         fi
11131                 fi
11132         fi
11133         $rm -f core try.core core.try.*
11134         case "$fflushNULL" in
11135         x)      $cat >&4 <<EOM
11136 Your fflush(NULL) works okay.
11137 EOM
11138                 fflushNULL="$define"
11139                 ;;
11140         '')     $cat >&4 <<EOM
11141 Your fflush(NULL) isn't working (contrary to ANSI C).
11142 EOM
11143                 fflushNULL="$undef"
11144                 ;;
11145         *)      $cat >&4 <<EOM
11146 Cannot figure out whether your fflush(NULL) works or not.
11147 I'm assuming it doesn't (contrary to ANSI C).
11148 EOM
11149                 fflushNULL="$undef"
11150                 ;;
11151         esac
11152         ;;
11153 $define|true|[yY]*)
11154         fflushNULL="$define"
11155         ;;
11156 *)
11157         fflushNULL="$undef"
11158         ;;
11159 esac
11160 : check explicit looping only if NULL did not work
11161 case "$fflushNULL" in
11162 "$undef")
11163         : check for fflush all behaviour
11164         case "$fflushall" in
11165         '')     set try -DTRY_FFLUSH_ALL $output
11166                 if eval $compile; then
11167                         $cat >&4 <<EOM
11168 (Now testing the other method--but note that also this may fail.)
11169 EOM
11170                         $rm -f try.out
11171                         ./try$exe_ext 2>/dev/null
11172                         if $test -s try.out -a "X$?" = X42; then
11173                                 fflushall="`$cat try.out`"
11174                         fi
11175                 fi
11176                 $rm -f core try.core core.try.*
11177                 case "$fflushall" in
11178                 x)      $cat >&4 <<EOM
11179 Whew. Flushing explicitly all the stdio streams works.
11180 EOM
11181                         fflushall="$define"
11182                         ;;
11183                 '')     $cat >&4 <<EOM
11184 Sigh. Flushing explicitly all the stdio streams doesn't work.
11185 EOM
11186                         fflushall="$undef"
11187                         ;;
11188                 *)      $cat >&4 <<EOM
11189 Cannot figure out whether flushing stdio streams explicitly works or not.
11190 I'm assuming it doesn't.
11191 EOM
11192                         fflushall="$undef"
11193                         ;;
11194                 esac
11195                 ;;
11196         "$define"|true|[yY]*)
11197                 fflushall="$define"
11198                 ;;
11199         *)
11200                 fflushall="$undef"
11201                 ;;
11202         esac
11203         ;;
11204 *)      fflushall="$undef"      
11205         ;;
11206 esac
11207 case "$fflushNULL$fflushall" in
11208 undefundef)
11209         $cat <<EOM
11210 I cannot figure out how to flush pending stdio output.
11211 EOM
11212         ;;
11213 esac
11214 $rm -f try.* try$exe_ext
11215
11216 : see what type file positions are declared as in the library
11217 rp="What is the type for file position used by fsetpos()?"
11218 set fpos_t fpostype long stdio.h sys/types.h
11219 eval $typedef_ask
11220
11221 : Store the full pathname to the ar program for use in the C program
11222 : Respect a hint or command line value for full_ar.
11223 case "$full_ar" in
11224 '') full_ar=$ar ;;
11225 esac
11226
11227 : Store the full pathname to the sed program for use in the C program
11228 full_sed=$sed
11229
11230 : see what type gids are declared as in the kernel
11231 echo " "
11232 echo "Looking for the type for group ids returned by getgid()."
11233 set gid_t gidtype xxx stdio.h sys/types.h
11234 eval $typedef
11235 case "$gidtype" in
11236 xxx)
11237         xxx=`./findhdr sys/user.h`
11238         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11239         case $1 in
11240         unsigned) dflt="$1 $2" ;;
11241         *) dflt="$1" ;;
11242         esac
11243         ;;
11244 *) dflt="$gidtype";;
11245 esac
11246 case "$gidtype" in
11247 gid_t) echo "gid_t found." ;;
11248 *)      rp="What is the type for group ids returned by getgid()?"
11249         . ./myread
11250         gidtype="$ans"
11251         ;;
11252 esac
11253
11254 : see if getgroups exists
11255 set getgroups d_getgrps
11256 eval $inlibc
11257
11258 : see if setgroups exists
11259 set setgroups d_setgrps
11260 eval $inlibc
11261
11262
11263 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11264 echo " "
11265 case "$d_getgrps$d_setgrps" in
11266 *define*)
11267         case "$groupstype" in
11268         '') dflt="$gidtype" ;;
11269         *)  dflt="$groupstype" ;;
11270         esac
11271         $cat <<EOM
11272 What type of pointer is the second argument to getgroups() and setgroups()?
11273 Usually this is the same as group ids, $gidtype, but not always.
11274
11275 EOM
11276         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11277         . ./myread
11278         groupstype="$ans"
11279         ;;
11280 *)  groupstype="$gidtype";;
11281 esac
11282
11283 : see what type lseek is declared as in the kernel
11284 rp="What is the type used for lseek's offset on this system?"
11285 set off_t lseektype long stdio.h sys/types.h
11286 eval $typedef_ask
11287
11288 echo " "
11289 $echo $n "Checking to see how big your file offsets are...$c" >&4
11290 $cat >try.c <<EOCP
11291 #include <sys/types.h>
11292 #include <stdio.h>
11293 int main()
11294 {
11295         printf("%d\n", sizeof($lseektype));
11296 }
11297 EOCP
11298 set try
11299 if eval $compile_ok; then
11300         lseeksize=`./try`
11301         $echo " $lseeksize bytes." >&4
11302 else
11303         dflt='4'
11304         echo " "
11305         echo "(I can't seem to compile the test program.  Guessing...)"
11306         rp="What is the size of your file offsets (in bytes)?"
11307         . ./myread
11308         lseeksize="$ans"
11309 fi
11310 $rm -f try.c try
11311
11312 echo " "
11313 echo "Checking if your $make program sets \$(MAKE)..." >&4
11314 case "$make_set_make" in
11315 '')
11316         $sed 's/^X //' > testmake.mak << 'EOF'
11317 Xall:
11318 X       @echo 'maketemp="$(MAKE)"'
11319 EOF
11320         case "`$make -f testmake.mak 2>/dev/null`" in
11321         *maketemp=*) make_set_make='#' ;;
11322         *)      make_set_make="MAKE=$make" ;;
11323         esac
11324         $rm -f testmake.mak
11325         ;;
11326 esac
11327 case "$make_set_make" in
11328 '#') echo "Yup, it does.";;
11329 *) echo "Nope, it doesn't.";;
11330 esac
11331
11332 : see what type is used for mode_t
11333 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11334 set mode_t modetype int stdio.h sys/types.h
11335 eval $typedef_ask
11336
11337 : define a fucntion to check prototypes
11338 $cat > protochk <<EOSH
11339 $startsh
11340 cc="$cc"
11341 optimize="$optimize"
11342 ccflags="$ccflags"
11343 prototype="$prototype"
11344 define="$define"
11345 rm=$rm
11346 EOSH
11347
11348 $cat >> protochk <<'EOSH'
11349
11350 $rm -f try.c
11351 foo="$1"
11352 shift
11353 while test $# -ge 2; do
11354         case "$1" in
11355                 $define) echo "#include <$2>" >> try.c ;;
11356                 literal) echo "$2" >> try.c ;;
11357         esac
11358     shift 2
11359 done
11360 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11361 cat >> try.c <<'EOCP'
11362 #ifdef CAN_PROTOTYPE
11363 #define _(args) args
11364 #else
11365 #define _(args) ()
11366 #endif
11367 EOCP
11368 echo "$foo" >> try.c
11369 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11370 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11371 status=$?
11372 $rm -f try.[co]
11373 exit $status
11374 EOSH
11375 chmod +x protochk
11376 $eunicefix protochk
11377
11378 : see what type is used for size_t
11379 rp="What is the type used for the length parameter for string functions?"
11380 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11381 eval $typedef_ask
11382
11383 : check for type of arguments to gethostbyaddr. 
11384 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11385         case "$d_gethbyaddr" in
11386         $define)
11387                 $cat <<EOM
11388
11389 Checking to see what type of arguments are accepted by gethostbyaddr().
11390 EOM
11391                 hdrs="$define sys/types.h
11392                         $d_socket sys/socket.h 
11393                         $i_niin netinet/in.h 
11394                         $i_netdb netdb.h
11395                         $i_unistd unistd.h"
11396                 : The first arg can 'char *' or 'void *'
11397                 : The second arg is some of integral type
11398                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11399                         for yyy in size_t long int; do
11400                                 case "$netdb_host_type" in
11401                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11402                                         if ./protochk "$try" $hdrs; then
11403                                                 echo "Your system accepts $xxx for the first arg."
11404                                                 echo "...and $yyy for the second arg."
11405                                                 netdb_host_type="$xxx"
11406                                                 netdb_hlen_type="$yyy"
11407                                         fi
11408                                         ;;
11409                                 esac
11410                         done
11411                 done
11412                 : In case none of those worked, prompt the user.
11413                 case "$netdb_host_type" in
11414                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11415                         dflt='char *'
11416                         . ./myread
11417                         netdb_host_type=$ans
11418                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11419                         dflt="$sizetype"
11420                         . ./myread
11421                         netdb_hlen_type=$ans
11422                         ;;
11423                 esac
11424                 ;;
11425         *)      : no gethostbyaddr, so pick harmless defaults
11426                 netdb_host_type='char *'
11427                 netdb_hlen_type="$sizetype"
11428                 ;;
11429         esac
11430         # Remove the "const" if needed. -- but then we'll have a 
11431         # prototype clash!
11432         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11433 fi
11434
11435 : check for type of argument to gethostbyname. 
11436 if test "X$netdb_name_type" = X ; then
11437         case "$d_gethbyname" in
11438         $define)
11439                 $cat <<EOM
11440
11441 Checking to see what type of argument is accepted by gethostbyname().
11442 EOM
11443                 hdrs="$define sys/types.h
11444                         $d_socket sys/socket.h 
11445                         $i_niin netinet/in.h 
11446                         $i_netdb netdb.h
11447                         $i_unistd unistd.h"
11448                 for xxx in "const char *" "char *"; do
11449                         case "$netdb_name_type" in
11450                         '')     try="extern struct hostent *gethostbyname($xxx);"
11451                                 if ./protochk "$try" $hdrs; then
11452                                         echo "Your system accepts $xxx."
11453                                         netdb_name_type="$xxx"
11454                                 fi
11455                                 ;;
11456                         esac
11457                 done
11458                 : In case none of those worked, prompt the user.
11459                 case "$netdb_name_type" in
11460                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11461                         dflt='char *'
11462                         . ./myread
11463                         netdb_name_type=$ans
11464                         ;;
11465                 esac
11466                 ;;
11467         *)      : no gethostbyname, so pick harmless default
11468                 netdb_name_type='char *'
11469                 ;;
11470         esac
11471 fi
11472
11473 : check for type of 1st argument to getnetbyaddr. 
11474 if test "X$netdb_net_type" = X ; then
11475         case "$d_getnbyaddr" in
11476         $define)
11477                 $cat <<EOM
11478
11479 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11480 EOM
11481                 hdrs="$define sys/types.h
11482                         $d_socket sys/socket.h 
11483                         $i_niin netinet/in.h 
11484                         $i_netdb netdb.h
11485                         $i_unistd unistd.h"
11486                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11487                         case "$netdb_net_type" in
11488                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11489                                 if ./protochk "$try" $hdrs; then
11490                                         echo "Your system accepts $xxx."
11491                                         netdb_net_type="$xxx"
11492                                 fi
11493                                 ;;
11494                         esac
11495                 done
11496                 : In case none of those worked, prompt the user.
11497                 case "$netdb_net_type" in
11498                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11499                         dflt='long'
11500                         . ./myread
11501                         netdb_net_type=$ans
11502                         ;;
11503                 esac
11504                 ;;
11505         *)      : no getnetbyaddr, so pick harmless default
11506                 netdb_net_type='long'
11507                 ;;
11508         esac
11509 fi
11510 : locate the preferred pager for this system
11511 case "$pager" in
11512 '')
11513         dflt=''
11514         case "$pg" in
11515         /*) dflt=$pg;;
11516         esac
11517         case "$more" in
11518         /*) dflt=$more;;
11519         esac
11520         case "$less" in
11521         /*) dflt=$less;;
11522         esac
11523         case "$dflt" in
11524         '') dflt=/usr/ucb/more;;
11525         esac
11526         ;;
11527 *) dflt="$pager";;
11528 esac
11529 echo " "
11530 fn=f/
11531 rp='What pager is used on your system?'
11532 . ./getfile
11533 pager="$ans"
11534
11535 : see what type pids are declared as in the kernel
11536 rp="What is the type of process ids on this system?"
11537 set pid_t pidtype int stdio.h sys/types.h
11538 eval $typedef_ask
11539
11540 : check for length of pointer
11541 echo " "
11542 case "$ptrsize" in
11543 '')
11544         $echo $n "Checking to see how big your pointers are...$c" >&4
11545         if test "$voidflags" -gt 7; then
11546                 echo '#define VOID_PTR char *' > try.c
11547         else
11548                 echo '#define VOID_PTR void *' > try.c
11549         fi
11550         $cat >>try.c <<'EOCP'
11551 #include <stdio.h>
11552 int main()
11553 {
11554         printf("%d\n", sizeof(VOID_PTR));
11555         exit(0);
11556 }
11557 EOCP
11558         set try
11559         if eval $compile_ok; then
11560                 ptrsize=`./try`
11561                 $echo " $ptrsize bytes." >&4
11562         else
11563                 dflt='4'
11564                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11565                 rp="What is the size of a pointer (in bytes)?"
11566                 . ./myread
11567                 ptrsize="$ans"
11568         fi
11569         ;;
11570 esac
11571 $rm -f try.c try
11572
11573 : see if ar generates random libraries by itself
11574 echo " "
11575 echo "Checking how to generate random libraries on your machine..." >&4
11576 echo 'int bar1() { return bar2(); }' > bar1.c
11577 echo 'int bar2() { return 2; }' > bar2.c
11578 $cat > foo.c <<'EOP'
11579 int main() { printf("%d\n", bar1()); exit(0); }
11580 EOP
11581 $cc $ccflags -c bar1.c >/dev/null 2>&1
11582 $cc $ccflags -c bar2.c >/dev/null 2>&1
11583 $cc $ccflags -c foo.c >/dev/null 2>&1
11584 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11585 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11586         ./foobar >/dev/null 2>&1; then
11587         echo "$ar appears to generate random libraries itself."
11588         orderlib=false
11589         ranlib=":"
11590 elif $ar ts bar$_a >/dev/null 2>&1 &&
11591         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11592         ./foobar >/dev/null 2>&1; then
11593                 echo "a table of contents needs to be added with '$ar ts'."
11594                 orderlib=false
11595                 ranlib="$ar ts"
11596 else
11597         case "$ranlib" in
11598         :) ranlib='';;
11599         '')
11600                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11601                 $test -f $ranlib || ranlib=''
11602                 ;;
11603         esac
11604         if $test -n "$ranlib"; then
11605                 echo "your system has '$ranlib'; we'll use that."
11606                 orderlib=false
11607         else
11608                 echo "your system doesn't seem to support random libraries"
11609                 echo "so we'll use lorder and tsort to order the libraries."
11610                 orderlib=true
11611                 ranlib=":"
11612         fi
11613 fi
11614 $rm -f foo* bar* 
11615
11616 : check for type of arguments to select. 
11617 case "$selecttype" in
11618 '') case "$d_select" in
11619         $define)
11620                 $cat <<EOM
11621 Checking to see what type of arguments are accepted by select().
11622 EOM
11623                 hdrs="$define sys/types.h
11624                         $i_systime sys/time.h 
11625                         $i_sysselct sys/select.h
11626                         $d_socket sys/socket.h"
11627                 : The first arg can be int, unsigned, or size_t
11628                 : The last arg may or may not be 'const'
11629                 val=''
11630                 : void pointer has been seen but using that
11631                 : breaks the selectminbits test
11632                 for xxx in 'fd_set *' 'int *'; do
11633                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11634                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11635                                         case "$val" in
11636                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11637                                                 if ./protochk "$try" $hdrs; then
11638                                                         echo "Your system accepts $xxx."
11639                                                         val="$xxx"
11640                                                 fi
11641                                                 ;;
11642                                         esac
11643                                 done
11644                         done
11645                 done
11646                 case "$val" in
11647                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11648                         case "$d_fd_set" in
11649                                 $define) dflt="fd_set *" ;;
11650                                 *)              dflt="int *" ;;
11651                         esac
11652                         . ./myread
11653                         val=$ans
11654                         ;;
11655                 esac
11656                 selecttype="$val"
11657                 ;;
11658         *)      : no select, so pick a harmless default
11659                 selecttype='int *'
11660                 ;;
11661         esac
11662         ;;
11663 esac
11664
11665 : check for the select 'width'
11666 case "$selectminbits" in
11667 '') case "$d_select" in
11668         $define)
11669                 $cat <<EOM
11670
11671 Checking to see on how many bits at a time your select() operates...
11672 EOM
11673                 $cat >try.c <<EOCP
11674 #include <sys/types.h>
11675 #$i_time I_TIME
11676 #$i_systime I_SYS_TIME
11677 #$i_systimek I_SYS_TIME_KERNEL
11678 #ifdef I_TIME
11679 #   include <time.h>
11680 #endif
11681 #ifdef I_SYS_TIME
11682 #   ifdef I_SYS_TIME_KERNEL
11683 #       define KERNEL
11684 #   endif
11685 #   include <sys/time.h>
11686 #   ifdef I_SYS_TIME_KERNEL
11687 #       undef KERNEL
11688 #   endif
11689 #endif
11690 #$i_sysselct I_SYS_SELECT
11691 #ifdef I_SYS_SELECT
11692 #include <sys/select.h>
11693 #endif
11694 #$d_socket HAS_SOCKET
11695 #ifdef HAS_SOCKET
11696 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11697 #endif
11698 #include <stdio.h>
11699 $selecttype b;
11700 #define S sizeof(*(b))
11701 #define MINBITS 64
11702 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11703 #define NBITS  (NBYTES * 8)
11704 int main() {
11705     char s[NBYTES];
11706     struct timeval t;
11707     int i;
11708     FILE* fp;
11709     int fd;
11710
11711     fclose(stdin);
11712     fp = fopen("try.c", "r");
11713     if (fp == 0)
11714       exit(1);
11715     fd = fileno(fp);
11716     if (fd < 0)
11717       exit(2);
11718     b = ($selecttype)s;
11719     for (i = 0; i < NBITS; i++)
11720         FD_SET(i, b);
11721     t.tv_sec  = 0;
11722     t.tv_usec = 0;
11723     select(fd + 1, b, 0, 0, &t);
11724     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11725     printf("%d\n", i + 1);
11726     return 0;
11727 }
11728 EOCP
11729                 set try
11730                 if eval $compile_ok; then
11731                         selectminbits=`./try`
11732                         case "$selectminbits" in
11733                         '')     cat >&4 <<EOM
11734 Cannot figure out on how many bits at a time your select() operates.
11735 I'll play safe and guess it is 32 bits.
11736 EOM
11737                                 selectminbits=32
11738                                 bits="32 bits"
11739                                 ;;
11740                         1)      bits="1 bit" ;;
11741                         *)      bits="$selectminbits bits" ;;
11742                         esac
11743                         echo "Your select() operates on $bits at a time." >&4
11744                 else
11745                         rp='What is the minimum number of bits your select() operates on?'
11746                         case "$byteorder" in
11747                         1234|12345678)  dflt=32 ;;
11748                         *)              dflt=1  ;;
11749                         esac
11750                         . ./myread
11751                         val=$ans
11752                         selectminbits="$val"
11753                 fi
11754                 $rm -f try.* try
11755                 ;;
11756         *)      : no select, so pick a harmless default
11757                 selectminbits='32'
11758                 ;;
11759         esac
11760         ;;
11761 esac
11762
11763 : Trace out the files included by signal.h, then look for SIGxxx names.
11764 : Remove SIGARRAYSIZE used by HPUX.
11765 : Remove SIGSTKSIZE used by Linux.
11766 : Remove SIGSTKSZ used by Posix.
11767 : Remove SIGTYP void lines used by OS2.
11768 xxx=`echo '#include <signal.h>' |
11769         $cppstdin $cppminus $cppflags 2>/dev/null |
11770         $grep '^[       ]*#.*include' | 
11771         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11772 : Check this list of files to be sure we have parsed the cpp output ok.
11773 : This will also avoid potentially non-existent files, such 
11774 : as ../foo/bar.h
11775 xxxfiles=''
11776 for xx in $xxx /dev/null ; do
11777         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11778 done
11779 : If we have found no files, at least try signal.h
11780 case "$xxxfiles" in
11781 '')     xxxfiles=`./findhdr signal.h` ;;
11782 esac
11783 xxx=`awk '
11784 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11785         print substr($2, 4, 20)
11786 }
11787 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11788         print substr($3, 4, 20)
11789 }' $xxxfiles`
11790 : Append some common names just in case the awk scan failed.
11791 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11792 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11793 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11794 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11795 : generate a few handy files for later
11796 $cat > signal.c <<'EOCP'
11797 #include <sys/types.h>
11798 #include <signal.h>
11799 #include <stdio.h>
11800 int main() {
11801
11802 /* Strange style to avoid deeply-nested #if/#else/#endif */
11803 #ifndef NSIG
11804 #  ifdef _NSIG
11805 #    define NSIG (_NSIG)
11806 #  endif
11807 #endif
11808
11809 #ifndef NSIG
11810 #  ifdef SIGMAX
11811 #    define NSIG (SIGMAX+1)
11812 #  endif
11813 #endif
11814
11815 #ifndef NSIG
11816 #  ifdef SIG_MAX
11817 #    define NSIG (SIG_MAX+1)
11818 #  endif
11819 #endif
11820
11821 #ifndef NSIG
11822 #  ifdef MAXSIG
11823 #    define NSIG (MAXSIG+1)
11824 #  endif
11825 #endif
11826
11827 #ifndef NSIG
11828 #  ifdef MAX_SIG
11829 #    define NSIG (MAX_SIG+1)
11830 #  endif
11831 #endif
11832
11833 #ifndef NSIG
11834 #  ifdef SIGARRAYSIZE
11835 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11836 #  endif
11837 #endif
11838
11839 #ifndef NSIG
11840 #  ifdef _sys_nsig
11841 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11842 #  endif
11843 #endif
11844
11845 /* Default to some arbitrary number that's big enough to get most
11846    of the common signals.
11847 */
11848 #ifndef NSIG
11849 #    define NSIG 50
11850 #endif
11851
11852 printf("NSIG %d\n", NSIG);
11853
11854 #ifndef JUST_NSIG
11855
11856 EOCP
11857
11858 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11859 {
11860         printf "#ifdef SIG"; printf $1; printf "\n"
11861         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11862         printf $1; printf ");\n"
11863         printf "#endif\n"
11864 }
11865 END {
11866         printf "#endif /* JUST_NSIG */\n";
11867         printf "}\n";
11868 }
11869 ' >>signal.c
11870 $cat >signal.awk <<'EOP'
11871 BEGIN { ndups = 0 }
11872 $1 ~ /^NSIG$/ { nsig = $2 }
11873 ($1 !~ /^NSIG$/) && (NF == 2) {
11874     if ($2 > maxsig) { maxsig = $2 }
11875     if (sig_name[$2]) {
11876         dup_name[ndups] = $1
11877         dup_num[ndups] = $2
11878         ndups++ 
11879     }
11880     else {
11881         sig_name[$2] = $1
11882         sig_num[$2] = $2
11883     }
11884 }
11885 END { 
11886     if (nsig == 0) {
11887         nsig = maxsig + 1
11888     }
11889     printf("NSIG %d\n", nsig);
11890     for (n = 1; n < nsig; n++) {
11891         if (sig_name[n]) {
11892             printf("%s %d\n", sig_name[n], sig_num[n])
11893         }
11894         else {
11895             printf("NUM%d %d\n", n, n) 
11896         }
11897     }
11898     for (n = 0; n < ndups; n++) {
11899         printf("%s %d\n", dup_name[n], dup_num[n])
11900     }
11901 }
11902 EOP
11903 $cat >signal_cmd <<EOS
11904 $startsh
11905 if $test -s signal.lst; then
11906     echo "Using your existing signal.lst file"
11907         exit 0
11908 fi
11909 xxx="$xxx"
11910 EOS
11911 $cat >>signal_cmd <<'EOS'
11912
11913 set signal
11914 if eval $compile_ok; then
11915         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11916 else
11917         echo "(I can't seem be able to compile the whole test program)" >&4
11918         echo "(I'll try it in little pieces.)" >&4
11919         set signal -DJUST_NSIG
11920         if eval $compile_ok; then
11921                 ./signal$_exe > signal.nsg
11922                 $cat signal.nsg
11923         else
11924                 echo "I can't seem to figure out how many signals you have." >&4
11925                 echo "Guessing 50." >&4
11926                 echo 'NSIG 50' > signal.nsg
11927         fi
11928         : Now look at all the signal names, one at a time.
11929         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11930                 $cat > signal.c <<EOCP
11931 #include <sys/types.h>
11932 #include <signal.h>
11933 #include <stdio.h>
11934 int main() {
11935 printf("$xx %d\n", SIG${xx});
11936 return 0;
11937 }
11938 EOCP
11939                 set signal
11940                 if eval $compile; then
11941                         echo "SIG${xx} found."
11942                         ./signal$_exe  >> signal.ls1
11943                 else
11944                         echo "SIG${xx} NOT found."
11945                 fi
11946         done
11947         if $test -s signal.ls1; then
11948                 $cat signal.nsg signal.ls1 |
11949                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11950         fi
11951
11952 fi
11953 if $test -s signal.lst; then
11954         :
11955 else
11956         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11957         echo 'kill -l' >signal
11958         set X `csh -f <signal`
11959         $rm -f signal
11960         shift
11961         case $# in
11962         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11963         esac
11964         echo $@ | $tr ' ' $trnl | \
11965             $awk '{ printf "%s %d\n", $1, ++s; }
11966                   END { printf "NSIG %d\n", ++s }' >signal.lst
11967 fi
11968 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11969 EOS
11970 chmod a+x signal_cmd
11971 $eunicefix signal_cmd
11972
11973 : generate list of signal names
11974 echo " "
11975 case "$sig_name_init" in
11976 '') doinit=yes ;;
11977 *)  case "$sig_num_init" in
11978     ''|*,*) doinit=yes ;;
11979     esac ;;
11980 esac
11981 case "$doinit" in
11982 yes)
11983         echo "Generating a list of signal names and numbers..." >&4
11984         . ./signal_cmd
11985         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11986         sig_name=`$awk 'BEGIN { printf "ZERO " }
11987                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11988         sig_num=`$awk  'BEGIN { printf "0 " }
11989                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11990         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11991                              !/^NSIG/   { printf "\"%s\", ", $1 }
11992                              END        { printf "0\n" }' signal.lst`
11993         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11994                              !/^NSIG/   { printf "%d, ", $2}
11995                              END        { printf "0\n"}' signal.lst`
11996         ;;
11997 esac
11998 echo "The following $sig_count signals are available:"
11999 echo " "
12000 echo $sig_name | $awk \
12001 'BEGIN { linelen = 0 }
12002 {
12003         for (i = 1; i <= NF; i++) {
12004                 name = "SIG" $i " "
12005                 linelen = linelen + length(name)
12006                 if (linelen > 70) {
12007                         printf "\n"
12008                         linelen = length(name)
12009                 }
12010                 printf "%s", name
12011         }
12012         printf "\n"
12013 }'
12014 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12015
12016 : see what type is used for signed size_t
12017 set ssize_t ssizetype int stdio.h sys/types.h
12018 eval $typedef
12019 dflt="$ssizetype"
12020 $cat > ssize.c <<EOM
12021 #include <stdio.h>
12022 #include <sys/types.h>
12023 #define Size_t $sizetype
12024 #define SSize_t $dflt
12025 int main()
12026 {
12027         if (sizeof(Size_t) == sizeof(SSize_t))
12028                 printf("$dflt\n");
12029         else if (sizeof(Size_t) == sizeof(int))
12030                 printf("int\n");
12031         else 
12032                 printf("long\n");
12033         exit(0);
12034 }
12035 EOM
12036 echo " "
12037 set ssize
12038 if eval $compile_ok && ./ssize > /dev/null; then
12039         ssizetype=`./ssize`
12040         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12041 else
12042         $cat >&4 <<EOM
12043 Help! I can't compile and run the ssize_t test program: please enlighten me!
12044 (This is probably a misconfiguration in your system or libraries, and
12045 you really ought to fix it.  Still, I'll try anyway.)
12046
12047 I need a type that is the same size as $sizetype, but is guaranteed to
12048 be signed.  Common values are ssize_t, int and long.
12049
12050 EOM
12051         rp="What signed type is the same size as $sizetype?"
12052         . ./myread
12053         ssizetype="$ans"
12054 fi
12055 $rm -f ssize ssize.*
12056
12057 : see what type of char stdio uses.
12058 echo " "
12059 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12060         echo "Your stdio uses unsigned chars." >&4
12061         stdchar="unsigned char"
12062 else
12063         echo "Your stdio uses signed chars." >&4
12064         stdchar="char"
12065 fi
12066
12067 : see if time exists
12068 echo " "
12069 if test "X$d_time" = X -o X"$timetype" = X; then
12070     if set time val -f d_time; eval $csym; $val; then
12071                 echo 'time() found.' >&4
12072                 val="$define"
12073                 rp="What is the type returned by time() on this system?"
12074                 set time_t timetype long stdio.h sys/types.h
12075                 eval $typedef_ask
12076     else
12077                 echo 'time() not found, hope that will do.' >&4
12078                 val="$undef"
12079                 timetype='int';
12080     fi
12081     set d_time
12082     eval $setvar
12083 fi
12084
12085 : see what type uids are declared as in the kernel
12086 echo " "
12087 echo "Looking for the type for user ids returned by getuid()."
12088 set uid_t uidtype xxx stdio.h sys/types.h
12089 eval $typedef
12090 case "$uidtype" in
12091 xxx)
12092         xxx=`./findhdr sys/user.h`
12093         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12094         case $1 in
12095         unsigned) dflt="$1 $2" ;;
12096         *) dflt="$1" ;;
12097         esac
12098         ;;
12099 *) dflt="$uidtype";;
12100 esac
12101 case "$uidtype" in
12102 uid_t)  echo "uid_t found." ;;
12103 *)      rp="What is the type for user ids returned by getuid()?"
12104         . ./myread
12105         uidtype="$ans"
12106         ;;
12107 esac
12108
12109 : see if dbm.h is available
12110 : see if dbmclose exists
12111 set dbmclose d_dbmclose
12112 eval $inlibc
12113
12114 case "$d_dbmclose" in
12115 $define)
12116         set dbm.h i_dbm
12117         eval $inhdr
12118         case "$i_dbm" in
12119         $define)
12120                 val="$undef"
12121                 set i_rpcsvcdbm
12122                 eval $setvar
12123                 ;;
12124         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12125                 eval $inhdr
12126                 ;;
12127         esac
12128         ;;
12129 *)      echo "We won't be including <dbm.h>"
12130         val="$undef"
12131         set i_dbm
12132         eval $setvar
12133         val="$undef"
12134         set i_rpcsvcdbm
12135         eval $setvar
12136         ;;
12137 esac
12138
12139 : see if this is a sys/file.h system
12140 val=''
12141 set sys/file.h val
12142 eval $inhdr
12143
12144 : do we need to include sys/file.h ?
12145 case "$val" in
12146 "$define")
12147         echo " "
12148         if $h_sysfile; then
12149                 val="$define"
12150                 echo "We'll be including <sys/file.h>." >&4
12151         else
12152                 val="$undef"
12153                 echo "We won't be including <sys/file.h>." >&4
12154         fi
12155         ;;
12156 *)
12157         h_sysfile=false
12158         ;;
12159 esac
12160 set i_sysfile
12161 eval $setvar
12162
12163 : see if fcntl.h is there
12164 val=''
12165 set fcntl.h val
12166 eval $inhdr
12167
12168 : see if we can include fcntl.h
12169 case "$val" in
12170 "$define")
12171         echo " "
12172         if $h_fcntl; then
12173                 val="$define"
12174                 echo "We'll be including <fcntl.h>." >&4
12175         else
12176                 val="$undef"
12177                 if $h_sysfile; then
12178         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12179                 else
12180                         echo "We won't be including <fcntl.h>." >&4
12181                 fi
12182         fi
12183         ;;
12184 *)
12185         h_fcntl=false
12186         val="$undef"
12187         ;;
12188 esac
12189 set i_fcntl
12190 eval $setvar
12191
12192 : see if locale.h is available
12193 set locale.h i_locale
12194 eval $inhdr
12195
12196 : see if mach cthreads are available
12197 if test "X$usethreads" = "X$define"; then
12198         set mach/cthreads.h i_machcthr
12199         eval $inhdr
12200 else
12201         i_machcthr="$undef"
12202 fi
12203
12204
12205
12206 : see if this is a math.h system
12207 set math.h i_math
12208 eval $inhdr
12209
12210 : see if this is a mntent.h system
12211 set mntent.h i_mntent
12212 eval $inhdr
12213
12214 : see if ndbm.h is available
12215 set ndbm.h t_ndbm
12216 eval $inhdr
12217 case "$t_ndbm" in
12218 $define)
12219         : see if dbm_open exists
12220         set dbm_open d_dbm_open
12221         eval $inlibc
12222         case "$d_dbm_open" in
12223         $undef)
12224                 t_ndbm="$undef"
12225                 echo "We won't be including <ndbm.h>"
12226                 ;;
12227         esac
12228         ;;
12229 esac
12230 val="$t_ndbm"
12231 set i_ndbm
12232 eval $setvar
12233
12234 : see if net/errno.h is available
12235 val=''
12236 set net/errno.h val
12237 eval $inhdr
12238
12239 : Unfortunately, it causes problems on some systems.  Arrgh.
12240 case "$val" in
12241 $define)
12242         cat > try.c <<'EOM'
12243 #include <stdio.h>
12244 #include <errno.h>
12245 #include <net/errno.h>
12246 int func()
12247 {
12248         return ENOTSOCK;
12249 }
12250 EOM
12251         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12252                 echo "We'll be including <net/errno.h>." >&4
12253         else
12254                 echo "We won't be including <net/errno.h>." >&4
12255                 val="$undef"
12256         fi
12257         $rm -f try.* try
12258         ;;
12259 esac
12260 set i_neterrno
12261 eval $setvar
12262
12263 : see if netinet/tcp.h is available
12264 set netinet/tcp.h i_netinettcp
12265 eval $inhdr
12266
12267 : see if this is a poll.h system
12268 set poll.h i_poll
12269 eval $inhdr
12270
12271 : get C preprocessor symbols handy
12272 echo " "
12273 $echo $n "Hmm... $c"
12274 echo $al | $tr ' ' $trnl >Cppsym.know
12275 $cat <<EOSS >Cppsym
12276 $startsh
12277 case "\$1" in
12278 -l) list=true
12279         shift
12280         ;;
12281 esac
12282 unknown=''
12283 case "\$list\$#" in
12284 1|2)
12285         for sym do
12286                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12287                         exit 0
12288                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12289                         :
12290                 else
12291                         unknown="\$unknown \$sym"
12292                 fi
12293         done
12294         set X \$unknown
12295         shift
12296         ;;
12297 esac
12298 case \$# in
12299 0) exit 1;;
12300 esac
12301 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12302 #ifdef \1\\
12303 exit 0; _ _ _ _\1\\      \1\\
12304 #endif\\
12305 /' >Cppsym\$\$
12306 echo "exit 1; _ _ _" >>Cppsym\$\$
12307 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12308 case "\$list" in
12309 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12310 *)
12311         sh Cppsym2\$\$
12312         status=\$?
12313         ;;
12314 esac
12315 $rm -f Cppsym\$\$ Cppsym2\$\$
12316 exit \$status
12317 EOSS
12318 chmod +x Cppsym
12319 $eunicefix Cppsym
12320 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12321
12322 : now check the C compiler for additional symbols
12323 postprocess_cc_v=''
12324 case "$osname" in
12325 aix) postprocess_cc_v="|$tr , ' '" ;;
12326 esac
12327 $cat >ccsym <<EOS
12328 $startsh
12329 $cat >tmp.c <<EOF
12330 extern int foo;
12331 EOF
12332 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12333 do
12334         case "\$i" in
12335         -D*) echo "\$i" | $sed 's/^-D//';;
12336         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12337         esac
12338 done
12339 $rm -f try.c
12340 EOS
12341 postprocess_cc_v=''
12342 chmod +x ccsym
12343 $eunicefix ccsym
12344 ./ccsym > ccsym1.raw
12345 if $test -s ccsym1.raw; then
12346        $sort ccsym1.raw | $uniq >ccsym.raw
12347 else
12348        mv ccsym1.raw ccsym.raw
12349 fi
12350
12351 $awk '/\=/ { print $0; next }
12352         { print $0"=1" }' ccsym.raw >ccsym.list
12353 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12354 $comm -13 ccsym.true ccsym.list >ccsym.own
12355 $comm -12 ccsym.true ccsym.list >ccsym.com
12356 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12357 also=''
12358 if $test -z ccsym.raw; then
12359         echo "Your C compiler doesn't seem to define any symbols!" >&4
12360         echo " "
12361         echo "However, your C preprocessor defines the following symbols:"
12362         $cat Cppsym.true
12363         ccsymbols=''
12364         cppsymbols=`$cat Cppsym.true`
12365         cppsymbols=`echo $cppsymbols`
12366         cppccsymbols="$cppsymbols"
12367 else
12368         if $test -s ccsym.com; then
12369                 echo "Your C compiler and pre-processor define these symbols:"
12370                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12371                 also='also '
12372                 symbols='ones'
12373                 cppccsymbols=`$cat ccsym.com`
12374                 cppccsymbols=`echo $cppccsymbols`
12375                 $test "$silent" || sleep 1
12376         fi
12377         if $test -s ccsym.cpp; then
12378                 $test "$also" && echo " "
12379                 echo "Your C pre-processor ${also}defines the following symbols:"
12380                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12381                 also='further '
12382                 cppsymbols=`$cat ccsym.cpp`
12383                 cppsymbols=`echo $cppsymbols`
12384                 $test "$silent" || sleep 1
12385         fi
12386         if $test -s ccsym.own; then
12387                 $test "$also" && echo " "
12388                 echo "Your C compiler ${also}defines the following cpp symbols:"
12389                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12390                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12391                 ccsymbols=`$cat ccsym.own`
12392                 ccsymbols=`echo $ccsymbols`
12393                 $test "$silent" || sleep 1
12394         fi
12395 fi
12396 $rm -f ccsym*
12397
12398 : see if this is a termio system
12399 val="$undef"
12400 val2="$undef"
12401 val3="$undef"
12402 if $test `./findhdr termios.h`; then
12403         set tcsetattr i_termios
12404         eval $inlibc
12405         val3="$i_termios"
12406 fi
12407 echo " "
12408 case "$val3" in
12409 "$define") echo "You have POSIX termios.h... good!" >&4;;
12410 *) if ./Cppsym pyr; then
12411                 case "`/bin/universe`" in
12412                 ucb) if $test `./findhdr sgtty.h`; then
12413                                 val2="$define"
12414                                 echo "<sgtty.h> found." >&4
12415                         else
12416                                 echo "System is pyramid with BSD universe."
12417                                 echo "<sgtty.h> not found--you could have problems." >&4
12418                         fi;;
12419                 *) if $test `./findhdr termio.h`; then
12420                                 val="$define"
12421                                 echo "<termio.h> found." >&4
12422                         else
12423                                 echo "System is pyramid with USG universe."
12424                                 echo "<termio.h> not found--you could have problems." >&4
12425                         fi;;
12426                 esac
12427         elif ./usg; then
12428                 if $test `./findhdr termio.h`; then
12429                         echo "<termio.h> found." >&4
12430                         val="$define"
12431                 elif $test `./findhdr sgtty.h`; then
12432                         echo "<sgtty.h> found." >&4
12433                         val2="$define"
12434                 else
12435 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12436                 fi
12437         else
12438                 if $test `./findhdr sgtty.h`; then
12439                         echo "<sgtty.h> found." >&4
12440                         val2="$define"
12441                 elif $test `./findhdr termio.h`; then
12442                         echo "<termio.h> found." >&4
12443                         val="$define"
12444                 else
12445 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12446                 fi
12447         fi;;
12448 esac
12449 set i_termio; eval $setvar
12450 val=$val2; set i_sgtty; eval $setvar
12451 val=$val3; set i_termios; eval $setvar
12452
12453 : see if this is a shadow.h system
12454 set shadow.h i_shadow
12455 eval $inhdr
12456
12457 : see if this is a socks.h system
12458 set socks.h i_socks
12459 eval $inhdr
12460
12461 : see if stdarg is available
12462 echo " "
12463 if $test `./findhdr stdarg.h`; then
12464         echo "<stdarg.h> found." >&4
12465         valstd="$define"
12466 else
12467         echo "<stdarg.h> NOT found." >&4
12468         valstd="$undef"
12469 fi
12470
12471 : see if varags is available
12472 echo " "
12473 if $test `./findhdr varargs.h`; then
12474         echo "<varargs.h> found." >&4
12475 else
12476         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12477 fi
12478
12479 : set up the varargs testing programs
12480 $cat > varargs.c <<EOP
12481 #ifdef I_STDARG
12482 #include <stdarg.h>
12483 #endif
12484 #ifdef I_VARARGS
12485 #include <varargs.h>
12486 #endif
12487
12488 #ifdef I_STDARG
12489 int f(char *p, ...)
12490 #else
12491 int f(va_alist)
12492 va_dcl
12493 #endif
12494 {
12495         va_list ap;
12496 #ifndef I_STDARG
12497         char *p;
12498 #endif
12499 #ifdef I_STDARG
12500         va_start(ap,p);
12501 #else
12502         va_start(ap);
12503         p = va_arg(ap, char *);
12504 #endif
12505         va_end(ap);
12506 }
12507 EOP
12508 $cat > varargs <<EOP
12509 $startsh
12510 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12511         echo "true"
12512 else
12513         echo "false"
12514 fi
12515 $rm -f varargs$_o
12516 EOP
12517 chmod +x varargs
12518
12519 : now check which varargs header should be included
12520 echo " "
12521 i_varhdr=''
12522 case "$valstd" in
12523 "$define")
12524         if `./varargs I_STDARG`; then
12525                 val='stdarg.h'
12526         elif `./varargs I_VARARGS`; then
12527                 val='varargs.h'
12528         fi
12529         ;;
12530 *)
12531         if `./varargs I_VARARGS`; then
12532                 val='varargs.h'
12533         fi
12534         ;;
12535 esac
12536 case "$val" in
12537 '')
12538 echo "I could not find the definition for va_dcl... You have problems..." >&4
12539         val="$undef"; set i_stdarg; eval $setvar
12540         val="$undef"; set i_varargs; eval $setvar
12541         ;;
12542 *) 
12543         set i_varhdr
12544         eval $setvar
12545         case "$i_varhdr" in
12546         stdarg.h)
12547                 val="$define"; set i_stdarg; eval $setvar
12548                 val="$undef"; set i_varargs; eval $setvar
12549                 ;;
12550         varargs.h)
12551                 val="$undef"; set i_stdarg; eval $setvar
12552                 val="$define"; set i_varargs; eval $setvar
12553                 ;;
12554         esac
12555         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12556 esac
12557 $rm -f varargs*
12558
12559 : see if stddef is available
12560 set stddef.h i_stddef
12561 eval $inhdr
12562
12563 : see if sys/access.h is available
12564 set sys/access.h i_sysaccess
12565 eval $inhdr
12566
12567 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12568 set sys/filio.h i_sysfilio
12569 eval $inhdr
12570 echo " "
12571 if $test `./findhdr sys/ioctl.h`; then
12572         val="$define"
12573         echo '<sys/ioctl.h> found.' >&4
12574 else
12575         val="$undef"
12576         if $test $i_sysfilio = "$define"; then
12577             echo '<sys/ioctl.h> NOT found.' >&4
12578         else
12579                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12580                 $test $i_termio = "$define" && xxx="termio.h"
12581                 $test $i_termios = "$define" && xxx="termios.h"
12582 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12583         fi
12584 fi
12585 set i_sysioctl
12586 eval $setvar
12587
12588 : see if sys/resource.h has to be included
12589 set sys/resource.h i_sysresrc
12590 eval $inhdr
12591
12592 : see if sys/security.h is available
12593 set sys/security.h i_syssecrt
12594 eval $inhdr
12595
12596 : see if this is a sys/statvfs.h system
12597 set sys/statvfs.h i_sysstatvfs
12598 eval $inhdr
12599
12600 : see if this is a sys/un.h system
12601 set sys/un.h i_sysun
12602 eval $inhdr
12603
12604 : see if this is a syswait system
12605 set sys/wait.h i_syswait
12606 eval $inhdr
12607
12608 : see if this is an utime system
12609 set utime.h i_utime
12610 eval $inhdr
12611
12612 : see if this is a values.h system
12613 set values.h i_values
12614 eval $inhdr
12615
12616 : see if this is a vfork system
12617 case "$d_vfork" in
12618 "$define")
12619         set vfork.h i_vfork
12620         eval $inhdr
12621         ;;
12622 *)
12623         i_vfork="$undef"
12624         ;;
12625 esac
12626
12627 : see if gdbm.h is available
12628 set gdbm.h t_gdbm
12629 eval $inhdr
12630 case "$t_gdbm" in
12631 $define)
12632         : see if gdbm_open exists
12633         set gdbm_open d_gdbm_open
12634         eval $inlibc
12635         case "$d_gdbm_open" in
12636         $undef)
12637                 t_gdbm="$undef"
12638                 echo "We won't be including <gdbm.h>"
12639                 ;;
12640         esac
12641         ;;
12642 esac
12643 val="$t_gdbm"
12644 set i_gdbm
12645 eval $setvar
12646
12647 echo " "
12648 echo "Looking for extensions..." >&4
12649 : If we are using the old config.sh, known_extensions may contain
12650 : old or inaccurate or duplicate values.
12651 known_extensions=''
12652 nonxs_extensions=''
12653 : We do not use find because it might not be available.
12654 : We do not just use MANIFEST because the user may have dropped
12655 : some additional extensions into the source tree and expect them
12656 : to be built.
12657
12658 : Function to recursively find available extensions, ignoring DynaLoader
12659 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12660 find_extensions='
12661     for xxx in *; do
12662        case "$xxx" in
12663            DynaLoader|dynaload) ;;
12664            *)
12665            if $test -f $xxx/$xxx.xs; then
12666                known_extensions="$known_extensions $1$xxx";
12667            elif $test -f $xxx/Makefile.PL; then
12668                nonxs_extensions="$nonxs_extensions $1$xxx";
12669            else
12670                if $test -d $xxx -a $# -lt 10; then
12671                    set $1$xxx/ $*;
12672                    cd $xxx;
12673                    eval $find_extensions;
12674                    cd ..;
12675                    shift;
12676                fi
12677            fi
12678            ;;
12679        esac
12680     done'
12681 tdir=`pwd`
12682 cd $rsrc/ext
12683 set
12684 shift
12685 eval $find_extensions
12686 set X $nonxs_extensions
12687 shift
12688 nonxs_extensions="$*"
12689 set X $known_extensions
12690 shift
12691 known_extensions="$*"
12692 cd $tdir
12693
12694 : Now see which are supported on this system.
12695 avail_ext=''
12696 for xxx in $known_extensions ; do
12697         case "$xxx" in
12698         DB_File|db_file)
12699                 case "$i_db" in
12700                 $define) avail_ext="$avail_ext $xxx" ;;
12701                 esac
12702                 ;;
12703         GDBM_File|gdbm_fil)
12704                 case "$i_gdbm" in 
12705                 $define) avail_ext="$avail_ext $xxx" ;;
12706                 esac
12707                 ;;
12708         NDBM_File|ndbm_fil)
12709                 case "$i_ndbm" in
12710                 $define) avail_ext="$avail_ext $xxx" ;;
12711                 esac
12712                 ;;
12713         ODBM_File|odbm_fil) 
12714                 case "${i_dbm}${i_rpcsvcdbm}" in
12715                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12716                 esac
12717                 ;;
12718         POSIX|posix)
12719                 case "$useposix" in
12720                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12721                 esac
12722                 ;;
12723         Opcode|opcode)
12724                 case "$useopcode" in
12725                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12726                 esac
12727                 ;;
12728         Socket|socket)
12729                 case "$d_socket" in 
12730                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12731                 esac
12732                 ;;
12733         Thread|thread)
12734                 case "$usethreads" in 
12735                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12736                 esac
12737                 ;;
12738         IPC/SysV|ipc/sysv)
12739                 : XXX Do we need a useipcsysv variable here
12740                 case "${d_msg}${d_sem}${d_shm}" in 
12741                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12742                 esac
12743                 ;;
12744         *)      avail_ext="$avail_ext $xxx"
12745                 ;;
12746         esac
12747 done
12748
12749 set X $avail_ext
12750 shift
12751 avail_ext="$*"
12752
12753 : Now see which nonxs extensions are supported on this system.
12754 : For now assume all are.
12755 nonxs_ext=''
12756 for xxx in $nonxs_extensions ; do
12757         case "$xxx" in
12758         *)      nonxs_ext="$nonxs_ext $xxx"
12759                 ;;
12760         esac
12761 done
12762
12763 set X $nonxs_ext
12764 shift
12765 nonxs_ext="$*"
12766
12767 case $usedl in
12768 $define)
12769         $cat <<EOM
12770 A number of extensions are supplied with $package.  You may choose to
12771 compile these extensions for dynamic loading (the default), compile
12772 them into the $package executable (static loading), or not include
12773 them at all.  Answer "none" to include no extensions.
12774 Note that DynaLoader is always built and need not be mentioned here.
12775
12776 EOM
12777         case "$dynamic_ext" in
12778         '') dflt="$avail_ext" ;;
12779         *)      dflt="$dynamic_ext"
12780                 # Perhaps we are reusing an old out-of-date config.sh.
12781                 case "$hint" in
12782                 previous)
12783                         if test X"$dynamic_ext" != X"$avail_ext"; then
12784                                 $cat <<EOM
12785 NOTICE:  Your previous config.sh list may be incorrect. 
12786 The extensions now available to you are 
12787         ${avail_ext}
12788 but the default list from your previous config.sh is
12789         ${dynamic_ext} 
12790
12791 EOM
12792                         fi
12793                         ;;
12794                 esac
12795                 ;;
12796         esac
12797         case "$dflt" in
12798         '')     dflt=none;;
12799         esac
12800         rp="What extensions do you wish to load dynamically?"
12801         . ./myread
12802         case "$ans" in
12803         none) dynamic_ext=' ' ;;
12804         *) dynamic_ext="$ans" ;;
12805         esac
12806
12807         case "$static_ext" in
12808         '')
12809                 : Exclude those already listed in dynamic linking
12810                 dflt=''
12811                 for xxx in $avail_ext; do
12812                         case " $dynamic_ext " in
12813                         *" $xxx "*) ;;
12814                         *) dflt="$dflt $xxx" ;;
12815                         esac
12816                 done
12817                 set X $dflt
12818                 shift
12819                 dflt="$*"
12820                 ;;
12821         *)  dflt="$static_ext" 
12822                 ;;
12823         esac
12824
12825         case "$dflt" in
12826         '')     dflt=none;;
12827         esac
12828         rp="What extensions do you wish to load statically?"
12829         . ./myread
12830         case "$ans" in
12831         none) static_ext=' ' ;;
12832         *) static_ext="$ans" ;;
12833         esac
12834         ;;
12835 *)
12836         $cat <<EOM
12837 A number of extensions are supplied with $package.  Answer "none" 
12838 to include no extensions. 
12839 Note that DynaLoader is always built and need not be mentioned here.
12840
12841 EOM
12842         case "$static_ext" in
12843         '') dflt="$avail_ext" ;;
12844         *)      dflt="$static_ext"
12845                 # Perhaps we are reusing an old out-of-date config.sh.
12846                 case "$hint" in
12847                 previous)
12848                         if test X"$static_ext" != X"$avail_ext"; then
12849                                 $cat <<EOM
12850 NOTICE:  Your previous config.sh list may be incorrect. 
12851 The extensions now available to you are 
12852         ${avail_ext}
12853 but the default list from your previous config.sh is
12854         ${static_ext} 
12855
12856 EOM
12857                         fi
12858                         ;;
12859                 esac
12860                 ;;
12861         esac
12862         : Exclude those that are not xs extensions
12863         case "$dflt" in
12864         '')     dflt=none;;
12865         esac
12866         rp="What extensions do you wish to include?"
12867         . ./myread
12868         case "$ans" in
12869         none) static_ext=' ' ;;
12870         *) static_ext="$ans" ;;
12871         esac
12872         ;;
12873 esac
12874
12875 set X $dynamic_ext $static_ext $nonxs_ext
12876 shift
12877 extensions="$*"
12878
12879 : Remove build directory name from cppstdin so it can be used from
12880 : either the present location or the final installed location.
12881 echo " "
12882 : Get out of the UU directory to get correct path name.
12883 cd ..
12884 case "$cppstdin" in
12885 `pwd`/cppstdin)
12886         echo "Stripping down cppstdin path name"
12887         cppstdin=cppstdin
12888         ;;
12889 esac
12890 cd UU
12891
12892 : end of configuration questions
12893 echo " "
12894 echo "End of configuration questions."
12895 echo " "
12896
12897 : back to where it started
12898 if test -d ../UU; then
12899         cd ..
12900 fi
12901
12902 : configuration may be patched via a 'config.over' file
12903 if $test -f config.over; then
12904         echo " "
12905         dflt=y
12906         rp='I see a config.over file.  Do you wish to load it?'
12907         . UU/myread
12908         case "$ans" in
12909         n*) echo "OK, I'll ignore it.";;
12910         *)      . ./config.over
12911                 echo "Configuration override changes have been loaded."
12912                 ;;
12913         esac
12914 fi
12915
12916 : in case they want portability, strip down executable paths
12917 case "$d_portable" in
12918 "$define")
12919         echo " "
12920         echo "Stripping down executable paths..." >&4
12921         for file in $loclist $trylist; do
12922                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12923                         eval $file="\$file"
12924                 fi
12925         done
12926         ;;
12927 esac
12928
12929 : create config.sh file
12930 echo " "
12931 echo "Creating config.sh..." >&4
12932 $spitshell <<EOT >config.sh
12933 $startsh
12934 #
12935 # This file was produced by running the Configure script. It holds all the
12936 # definitions figured out by Configure. Should you modify one of these values,
12937 # do not forget to propagate your changes by running "Configure -der". You may
12938 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12939 #
12940
12941 # Package name      : $package
12942 # Source directory  : $src
12943 # Configuration time: $cf_time
12944 # Configured by     : $cf_by
12945 # Target system     : $myuname
12946
12947 Author='$Author'
12948 Date='$Date'
12949 Header='$Header'
12950 Id='$Id'
12951 Locker='$Locker'
12952 Log='$Log'
12953 Mcc='$Mcc'
12954 RCSfile='$RCSfile'
12955 Revision='$Revision'
12956 Source='$Source'
12957 State='$State'
12958 _a='$_a'
12959 _exe='$_exe'
12960 _o='$_o'
12961 afs='$afs'
12962 alignbytes='$alignbytes'
12963 ansi2knr='$ansi2knr'
12964 aphostname='$aphostname'
12965 apiversion='$apiversion'
12966 ar='$ar'
12967 archlib='$archlib'
12968 archlibexp='$archlibexp'
12969 archname64='$archname64'
12970 archname='$archname'
12971 archobjs='$archobjs'
12972 awk='$awk'
12973 baserev='$baserev'
12974 bash='$bash'
12975 bin='$bin'
12976 binexp='$binexp'
12977 bison='$bison'
12978 byacc='$byacc'
12979 byteorder='$byteorder'
12980 c='$c'
12981 castflags='$castflags'
12982 cat='$cat'
12983 cc='$cc'
12984 cccdlflags='$cccdlflags'
12985 ccdlflags='$ccdlflags'
12986 ccflags='$ccflags'
12987 ccsymbols='$ccsymbols'
12988 cf_by='$cf_by'
12989 cf_email='$cf_email'
12990 cf_time='$cf_time'
12991 chgrp='$chgrp'
12992 chmod='$chmod'
12993 chown='$chown'
12994 clocktype='$clocktype'
12995 comm='$comm'
12996 compress='$compress'
12997 contains='$contains'
12998 cp='$cp'
12999 cpio='$cpio'
13000 cpp='$cpp'
13001 cpp_stuff='$cpp_stuff'
13002 cppccsymbols='$cppccsymbols'
13003 cppflags='$cppflags'
13004 cpplast='$cpplast'
13005 cppminus='$cppminus'
13006 cpprun='$cpprun'
13007 cppstdin='$cppstdin'
13008 cppsymbols='$cppsymbols'
13009 crosscompile='$crosscompile'
13010 cryptlib='$cryptlib'
13011 csh='$csh'
13012 d_Gconvert='$d_Gconvert'
13013 d_access='$d_access'
13014 d_accessx='$d_accessx'
13015 d_alarm='$d_alarm'
13016 d_archlib='$d_archlib'
13017 d_attribut='$d_attribut'
13018 d_bcmp='$d_bcmp'
13019 d_bcopy='$d_bcopy'
13020 d_bsd='$d_bsd'
13021 d_bsdgetpgrp='$d_bsdgetpgrp'
13022 d_bsdsetpgrp='$d_bsdsetpgrp'
13023 d_bzero='$d_bzero'
13024 d_casti32='$d_casti32'
13025 d_castneg='$d_castneg'
13026 d_charvspr='$d_charvspr'
13027 d_chown='$d_chown'
13028 d_chroot='$d_chroot'
13029 d_chsize='$d_chsize'
13030 d_closedir='$d_closedir'
13031 d_cmsghdr_s='$d_cmsghdr_s'
13032 d_const='$d_const'
13033 d_crypt='$d_crypt'
13034 d_csh='$d_csh'
13035 d_cuserid='$d_cuserid'
13036 d_dbl_dig='$d_dbl_dig'
13037 d_dbmclose64='$d_dbmclose64'
13038 d_dbminit64='$d_dbminit64'
13039 d_delete64='$d_delete64'
13040 d_difftime='$d_difftime'
13041 d_dirent64_s='$d_dirent64_s'
13042 d_dirnamlen='$d_dirnamlen'
13043 d_dlerror='$d_dlerror'
13044 d_dlopen='$d_dlopen'
13045 d_dlsymun='$d_dlsymun'
13046 d_dosuid='$d_dosuid'
13047 d_drand48proto='$d_drand48proto'
13048 d_dup2='$d_dup2'
13049 d_eaccess='$d_eaccess'
13050 d_endgrent='$d_endgrent'
13051 d_endhent='$d_endhent'
13052 d_endnent='$d_endnent'
13053 d_endpent='$d_endpent'
13054 d_endpwent='$d_endpwent'
13055 d_endsent='$d_endsent'
13056 d_endspent='$d_endspent'
13057 d_eofnblk='$d_eofnblk'
13058 d_eunice='$d_eunice'
13059 d_fchmod='$d_fchmod'
13060 d_fchown='$d_fchown'
13061 d_fcntl='$d_fcntl'
13062 d_fd_macros='$d_fd_macros'
13063 d_fd_set='$d_fd_set'
13064 d_fds_bits='$d_fds_bits'
13065 d_fetch64='$d_fetch64'
13066 d_fgetpos64='$d_fgetpos64'
13067 d_fgetpos='$d_fgetpos'
13068 d_firstkey64='$d_firstkey64'
13069 d_flexfnam='$d_flexfnam'
13070 d_flock64_s='$d_flock64_s'
13071 d_flock='$d_flock'
13072 d_fopen64='$d_fopen64'
13073 d_fork='$d_fork'
13074 d_fpathconf='$d_fpathconf'
13075 d_freopen64='$d_freopen64'
13076 d_fseek64='$d_fseek64'
13077 d_fseeko64='$d_fseeko64'
13078 d_fseeko='$d_fseeko'
13079 d_fsetpos64='$d_fsetpos64'
13080 d_fsetpos='$d_fsetpos'
13081 d_fstat64='$d_fstat64'
13082 d_fstatfs='$d_fstatfs'
13083 d_fstatvfs='$d_fstatvfs'
13084 d_ftell64='$d_ftell64'
13085 d_ftello64='$d_ftello64'
13086 d_ftello='$d_ftello'
13087 d_ftime='$d_ftime'
13088 d_ftruncate64='$d_ftruncate64'
13089 d_getgrent='$d_getgrent'
13090 d_getgrps='$d_getgrps'
13091 d_gethbyaddr='$d_gethbyaddr'
13092 d_gethbyname='$d_gethbyname'
13093 d_gethent='$d_gethent'
13094 d_gethname='$d_gethname'
13095 d_gethostprotos='$d_gethostprotos'
13096 d_getlogin='$d_getlogin'
13097 d_getmntent='$d_getmntent'
13098 d_getnbyaddr='$d_getnbyaddr'
13099 d_getnbyname='$d_getnbyname'
13100 d_getnent='$d_getnent'
13101 d_getnetprotos='$d_getnetprotos'
13102 d_getpbyname='$d_getpbyname'
13103 d_getpbynumber='$d_getpbynumber'
13104 d_getpent='$d_getpent'
13105 d_getpgid='$d_getpgid'
13106 d_getpgrp2='$d_getpgrp2'
13107 d_getpgrp='$d_getpgrp'
13108 d_getppid='$d_getppid'
13109 d_getprior='$d_getprior'
13110 d_getprotoprotos='$d_getprotoprotos'
13111 d_getpwent='$d_getpwent'
13112 d_getsbyname='$d_getsbyname'
13113 d_getsbyport='$d_getsbyport'
13114 d_getsent='$d_getsent'
13115 d_getservprotos='$d_getservprotos'
13116 d_getspent='$d_getspent'
13117 d_getspnam='$d_getspnam'
13118 d_gettimeod='$d_gettimeod'
13119 d_gnulibc='$d_gnulibc'
13120 d_grpasswd='$d_grpasswd'
13121 d_hasmntopt='$d_hasmntopt'
13122 d_htonl='$d_htonl'
13123 d_index='$d_index'
13124 d_inetaton='$d_inetaton'
13125 d_ino64_t='$d_ino64_t'
13126 d_int64t='$d_int64t'
13127 d_iovec_s='$d_iovec_s'
13128 d_isascii='$d_isascii'
13129 d_killpg='$d_killpg'
13130 d_lchown='$d_lchown'
13131 d_link='$d_link'
13132 d_llseek='$d_llseek'
13133 d_locconv='$d_locconv'
13134 d_lockf64='$d_lockf64'
13135 d_lockf='$d_lockf'
13136 d_longdbl='$d_longdbl'
13137 d_longlong='$d_longlong'
13138 d_lseek64='$d_lseek64'
13139 d_lstat64='$d_lstat64'
13140 d_lstat='$d_lstat'
13141 d_madvise='$d_madvise'
13142 d_mblen='$d_mblen'
13143 d_mbstowcs='$d_mbstowcs'
13144 d_mbtowc='$d_mbtowc'
13145 d_memchr='$d_memchr'
13146 d_memcmp='$d_memcmp'
13147 d_memcpy='$d_memcpy'
13148 d_memmove='$d_memmove'
13149 d_memset='$d_memset'
13150 d_mkdir='$d_mkdir'
13151 d_mkfifo='$d_mkfifo'
13152 d_mktime='$d_mktime'
13153 d_mmap='$d_mmap'
13154 d_mprotect='$d_mprotect'
13155 d_msg='$d_msg'
13156 d_msg_ctrunc='$d_msg_ctrunc'
13157 d_msg_dontroute='$d_msg_dontroute'
13158 d_msg_oob='$d_msg_oob'
13159 d_msg_peek='$d_msg_peek'
13160 d_msg_proxy='$d_msg_proxy'
13161 d_msgctl='$d_msgctl'
13162 d_msgget='$d_msgget'
13163 d_msghdr_s='$d_msghdr_s'
13164 d_msgrcv='$d_msgrcv'
13165 d_msgsnd='$d_msgsnd'
13166 d_msync='$d_msync'
13167 d_munmap='$d_munmap'
13168 d_mymalloc='$d_mymalloc'
13169 d_nextkey64='$d_nextkey64'
13170 d_nice='$d_nice'
13171 d_off64_t='$d_off64_t'
13172 d_offset_t='$d_offset_t'
13173 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13174 d_oldpthreads='$d_oldpthreads'
13175 d_oldsock='$d_oldsock'
13176 d_open3='$d_open3'
13177 d_open64='$d_open64'
13178 d_opendir64='$d_opendir64'
13179 d_pathconf='$d_pathconf'
13180 d_pause='$d_pause'
13181 d_phostname='$d_phostname'
13182 d_pipe='$d_pipe'
13183 d_poll='$d_poll'
13184 d_portable='$d_portable'
13185 d_pthread_yield='$d_pthread_yield'
13186 d_pwage='$d_pwage'
13187 d_pwchange='$d_pwchange'
13188 d_pwclass='$d_pwclass'
13189 d_pwcomment='$d_pwcomment'
13190 d_pwexpire='$d_pwexpire'
13191 d_pwgecos='$d_pwgecos'
13192 d_pwpasswd='$d_pwpasswd'
13193 d_pwquota='$d_pwquota'
13194 d_readdir64='$d_readdir64'
13195 d_readdir='$d_readdir'
13196 d_readlink='$d_readlink'
13197 d_readv='$d_readv'
13198 d_recvmsg='$d_recvmsg'
13199 d_rename='$d_rename'
13200 d_rewinddir='$d_rewinddir'
13201 d_rmdir='$d_rmdir'
13202 d_safebcpy='$d_safebcpy'
13203 d_safemcpy='$d_safemcpy'
13204 d_sanemcmp='$d_sanemcmp'
13205 d_sched_yield='$d_sched_yield'
13206 d_scm_rights='$d_scm_rights'
13207 d_seekdir64='$d_seekdir64'
13208 d_seekdir='$d_seekdir'
13209 d_select='$d_select'
13210 d_sem='$d_sem'
13211 d_semctl='$d_semctl'
13212 d_semctl_semid_ds='$d_semctl_semid_ds'
13213 d_semctl_semun='$d_semctl_semun'
13214 d_semget='$d_semget'
13215 d_semop='$d_semop'
13216 d_sendmsg='$d_sendmsg'
13217 d_setegid='$d_setegid'
13218 d_seteuid='$d_seteuid'
13219 d_setgrent='$d_setgrent'
13220 d_setgrps='$d_setgrps'
13221 d_sethent='$d_sethent'
13222 d_setlinebuf='$d_setlinebuf'
13223 d_setlocale='$d_setlocale'
13224 d_setnent='$d_setnent'
13225 d_setpent='$d_setpent'
13226 d_setpgid='$d_setpgid'
13227 d_setpgrp2='$d_setpgrp2'
13228 d_setpgrp='$d_setpgrp'
13229 d_setprior='$d_setprior'
13230 d_setpwent='$d_setpwent'
13231 d_setregid='$d_setregid'
13232 d_setresgid='$d_setresgid'
13233 d_setresuid='$d_setresuid'
13234 d_setreuid='$d_setreuid'
13235 d_setrgid='$d_setrgid'
13236 d_setruid='$d_setruid'
13237 d_setsent='$d_setsent'
13238 d_setsid='$d_setsid'
13239 d_setspent='$d_setspent'
13240 d_setvbuf='$d_setvbuf'
13241 d_sfio='$d_sfio'
13242 d_shm='$d_shm'
13243 d_shmat='$d_shmat'
13244 d_shmatprototype='$d_shmatprototype'
13245 d_shmctl='$d_shmctl'
13246 d_shmdt='$d_shmdt'
13247 d_shmget='$d_shmget'
13248 d_sigaction='$d_sigaction'
13249 d_sigsetjmp='$d_sigsetjmp'
13250 d_socket='$d_socket'
13251 d_sockpair='$d_sockpair'
13252 d_stat64='$d_stat64'
13253 d_statblks='$d_statblks'
13254 d_statfs='$d_statfs'
13255 d_statfsflags='$d_statfsflags'
13256 d_statvfs='$d_statvfs'
13257 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13258 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13259 d_stdio_stream_array='$d_stdio_stream_array'
13260 d_stdiobase='$d_stdiobase'
13261 d_stdstdio='$d_stdstdio'
13262 d_store64='$d_store64'
13263 d_strchr='$d_strchr'
13264 d_strcoll='$d_strcoll'
13265 d_strctcpy='$d_strctcpy'
13266 d_strerrm='$d_strerrm'
13267 d_strerror='$d_strerror'
13268 d_strtod='$d_strtod'
13269 d_strtol='$d_strtol'
13270 d_strtoul='$d_strtoul'
13271 d_strxfrm='$d_strxfrm'
13272 d_suidsafe='$d_suidsafe'
13273 d_symlink='$d_symlink'
13274 d_syscall='$d_syscall'
13275 d_sysconf='$d_sysconf'
13276 d_sysernlst='$d_sysernlst'
13277 d_syserrlst='$d_syserrlst'
13278 d_system='$d_system'
13279 d_tcgetpgrp='$d_tcgetpgrp'
13280 d_tcsetpgrp='$d_tcsetpgrp'
13281 d_telldir64='$d_telldir64'
13282 d_telldir='$d_telldir'
13283 d_telldirproto='$d_telldirproto'
13284 d_time='$d_time'
13285 d_times='$d_times'
13286 d_tmpfile64='$d_tmpfile64'
13287 d_truncate64='$d_truncate64'
13288 d_truncate='$d_truncate'
13289 d_tzname='$d_tzname'
13290 d_umask='$d_umask'
13291 d_uname='$d_uname'
13292 d_union_semun='$d_union_semun'
13293 d_vfork='$d_vfork'
13294 d_void_closedir='$d_void_closedir'
13295 d_voidsig='$d_voidsig'
13296 d_voidtty='$d_voidtty'
13297 d_volatile='$d_volatile'
13298 d_vprintf='$d_vprintf'
13299 d_wait4='$d_wait4'
13300 d_waitpid='$d_waitpid'
13301 d_wcstombs='$d_wcstombs'
13302 d_wctomb='$d_wctomb'
13303 d_writev='$d_writev'
13304 d_xenix='$d_xenix'
13305 date='$date'
13306 db_hashtype='$db_hashtype'
13307 db_prefixtype='$db_prefixtype'
13308 defvoidused='$defvoidused'
13309 direntrytype='$direntrytype'
13310 dlext='$dlext'
13311 dlsrc='$dlsrc'
13312 doublesize='$doublesize'
13313 drand01='$drand01'
13314 dynamic_ext='$dynamic_ext'
13315 eagain='$eagain'
13316 ebcdic='$ebcdic'
13317 echo='$echo'
13318 egrep='$egrep'
13319 emacs='$emacs'
13320 eunicefix='$eunicefix'
13321 exe_ext='$exe_ext'
13322 expr='$expr'
13323 extensions='$extensions'
13324 fflushNULL='$fflushNULL'
13325 fflushall='$fflushall'
13326 find='$find'
13327 firstmakefile='$firstmakefile'
13328 flex='$flex'
13329 fpostype='$fpostype'
13330 freetype='$freetype'
13331 full_ar='$full_ar'
13332 full_csh='$full_csh'
13333 full_sed='$full_sed'
13334 gccversion='$gccversion'
13335 gidtype='$gidtype'
13336 glibpth='$glibpth'
13337 grep='$grep'
13338 groupcat='$groupcat'
13339 groupstype='$groupstype'
13340 gzip='$gzip'
13341 h_fcntl='$h_fcntl'
13342 h_sysfile='$h_sysfile'
13343 hint='$hint'
13344 hostcat='$hostcat'
13345 huge='$huge'
13346 i_arpainet='$i_arpainet'
13347 i_bsdioctl='$i_bsdioctl'
13348 i_db='$i_db'
13349 i_dbm='$i_dbm'
13350 i_dirent='$i_dirent'
13351 i_dld='$i_dld'
13352 i_dlfcn='$i_dlfcn'
13353 i_fcntl='$i_fcntl'
13354 i_float='$i_float'
13355 i_gdbm='$i_gdbm'
13356 i_grp='$i_grp'
13357 i_inttypes='$i_inttypes'
13358 i_limits='$i_limits'
13359 i_locale='$i_locale'
13360 i_machcthr='$i_machcthr'
13361 i_malloc='$i_malloc'
13362 i_math='$i_math'
13363 i_memory='$i_memory'
13364 i_mntent='$i_mntent'
13365 i_ndbm='$i_ndbm'
13366 i_netdb='$i_netdb'
13367 i_neterrno='$i_neterrno'
13368 i_netinettcp='$i_netinettcp'
13369 i_niin='$i_niin'
13370 i_poll='$i_poll'
13371 i_pthread='$i_pthread'
13372 i_pwd='$i_pwd'
13373 i_rpcsvcdbm='$i_rpcsvcdbm'
13374 i_sfio='$i_sfio'
13375 i_sgtty='$i_sgtty'
13376 i_shadow='$i_shadow'
13377 i_socks='$i_socks'
13378 i_stdarg='$i_stdarg'
13379 i_stddef='$i_stddef'
13380 i_stdlib='$i_stdlib'
13381 i_string='$i_string'
13382 i_sysaccess='$i_sysaccess'
13383 i_sysdir='$i_sysdir'
13384 i_sysfile='$i_sysfile'
13385 i_sysfilio='$i_sysfilio'
13386 i_sysin='$i_sysin'
13387 i_sysioctl='$i_sysioctl'
13388 i_sysmman='$i_sysmman'
13389 i_sysmount='$i_sysmount'
13390 i_sysndir='$i_sysndir'
13391 i_sysparam='$i_sysparam'
13392 i_sysresrc='$i_sysresrc'
13393 i_syssecrt='$i_syssecrt'
13394 i_sysselct='$i_sysselct'
13395 i_syssockio='$i_syssockio'
13396 i_sysstat='$i_sysstat'
13397 i_sysstatvfs='$i_sysstatvfs'
13398 i_systime='$i_systime'
13399 i_systimek='$i_systimek'
13400 i_systimes='$i_systimes'
13401 i_systypes='$i_systypes'
13402 i_sysuio='$i_sysuio'
13403 i_sysun='$i_sysun'
13404 i_syswait='$i_syswait'
13405 i_termio='$i_termio'
13406 i_termios='$i_termios'
13407 i_time='$i_time'
13408 i_unistd='$i_unistd'
13409 i_utime='$i_utime'
13410 i_values='$i_values'
13411 i_varargs='$i_varargs'
13412 i_varhdr='$i_varhdr'
13413 i_vfork='$i_vfork'
13414 ignore_versioned_solibs='$ignore_versioned_solibs'
13415 incpath='$incpath'
13416 inews='$inews'
13417 installarchlib='$installarchlib'
13418 installbin='$installbin'
13419 installman1dir='$installman1dir'
13420 installman3dir='$installman3dir'
13421 installprivlib='$installprivlib'
13422 installscript='$installscript'
13423 installsitearch='$installsitearch'
13424 installsitelib='$installsitelib'
13425 installusrbinperl='$installusrbinperl'
13426 intsize='$intsize'
13427 known_extensions='$known_extensions'
13428 ksh='$ksh'
13429 large='$large'
13430 ld='$ld'
13431 lddlflags='$lddlflags'
13432 ldflags='$ldflags'
13433 less='$less'
13434 lib_ext='$lib_ext'
13435 libc='$libc'
13436 libperl='$libperl'
13437 libpth='$libpth'
13438 libs='$libs'
13439 libswanted='$libswanted'
13440 line='$line'
13441 lint='$lint'
13442 lkflags='$lkflags'
13443 ln='$ln'
13444 lns='$lns'
13445 locincpth='$locincpth'
13446 loclibpth='$loclibpth'
13447 longdblsize='$longdblsize'
13448 longlongsize='$longlongsize'
13449 longsize='$longsize'
13450 lp='$lp'
13451 lpr='$lpr'
13452 ls='$ls'
13453 lseeksize='$lseeksize'
13454 lseektype='$lseektype'
13455 mail='$mail'
13456 mailx='$mailx'
13457 make='$make'
13458 make_set_make='$make_set_make'
13459 mallocobj='$mallocobj'
13460 mallocsrc='$mallocsrc'
13461 malloctype='$malloctype'
13462 man1dir='$man1dir'
13463 man1direxp='$man1direxp'
13464 man1ext='$man1ext'
13465 man3dir='$man3dir'
13466 man3direxp='$man3direxp'
13467 man3ext='$man3ext'
13468 medium='$medium'
13469 mips='$mips'
13470 mips_type='$mips_type'
13471 mkdir='$mkdir'
13472 mmaptype='$mmaptype'
13473 models='$models'
13474 modetype='$modetype'
13475 more='$more'
13476 multiarch='$multiarch'
13477 mv='$mv'
13478 myarchname='$myarchname'
13479 mydomain='$mydomain'
13480 myhostname='$myhostname'
13481 myuname='$myuname'
13482 n='$n'
13483 netdb_hlen_type='$netdb_hlen_type'
13484 netdb_host_type='$netdb_host_type'
13485 netdb_name_type='$netdb_name_type'
13486 netdb_net_type='$netdb_net_type'
13487 nm='$nm'
13488 nm_opt='$nm_opt'
13489 nm_so_opt='$nm_so_opt'
13490 nonxs_ext='$nonxs_ext'
13491 nroff='$nroff'
13492 o_nonblock='$o_nonblock'
13493 obj_ext='$obj_ext'
13494 old_pthread_create_joinable='$old_pthread_create_joinable'
13495 optimize='$optimize'
13496 orderlib='$orderlib'
13497 osname='$osname'
13498 osvers='$osvers'
13499 package='$package'
13500 pager='$pager'
13501 passcat='$passcat'
13502 patchlevel='$patchlevel'
13503 path_sep='$path_sep'
13504 perl='$perl'
13505 perladmin='$perladmin'
13506 perlpath='$perlpath'
13507 pg='$pg'
13508 phostname='$phostname'
13509 pidtype='$pidtype'
13510 plibpth='$plibpth'
13511 pmake='$pmake'
13512 pr='$pr'
13513 prefix='$prefix'
13514 prefixexp='$prefixexp'
13515 privlib='$privlib'
13516 privlibexp='$privlibexp'
13517 prototype='$prototype'
13518 ptrsize='$ptrsize'
13519 randbits='$randbits'
13520 randfunc='$randfunc'
13521 randseedtype='$randseedtype'
13522 ranlib='$ranlib'
13523 rd_nodata='$rd_nodata'
13524 rm='$rm'
13525 rmail='$rmail'
13526 runnm='$runnm'
13527 sched_yield='$sched_yield'
13528 scriptdir='$scriptdir'
13529 scriptdirexp='$scriptdirexp'
13530 sed='$sed'
13531 seedfunc='$seedfunc'
13532 selectminbits='$selectminbits'
13533 selecttype='$selecttype'
13534 sendmail='$sendmail'
13535 sh='$sh'
13536 shar='$shar'
13537 sharpbang='$sharpbang'
13538 shmattype='$shmattype'
13539 shortsize='$shortsize'
13540 shrpenv='$shrpenv'
13541 shsharp='$shsharp'
13542 sig_count='$sig_count'
13543 sig_name='$sig_name'
13544 sig_name_init='$sig_name_init'
13545 sig_num='$sig_num'
13546 sig_num_init='$sig_num_init'
13547 signal_t='$signal_t'
13548 sitearch='$sitearch'
13549 sitearchexp='$sitearchexp'
13550 sitelib='$sitelib'
13551 sitelibexp='$sitelibexp'
13552 sizetype='$sizetype'
13553 sleep='$sleep'
13554 smail='$smail'
13555 small='$small'
13556 so='$so'
13557 sockethdr='$sockethdr'
13558 socketlib='$socketlib'
13559 sort='$sort'
13560 spackage='$spackage'
13561 spitshell='$spitshell'
13562 split='$split'
13563 src='$src'
13564 ssizetype='$ssizetype'
13565 startperl='$startperl'
13566 startsh='$startsh'
13567 static_ext='$static_ext'
13568 stdchar='$stdchar'
13569 stdio_base='$stdio_base'
13570 stdio_bufsiz='$stdio_bufsiz'
13571 stdio_cnt='$stdio_cnt'
13572 stdio_filbuf='$stdio_filbuf'
13573 stdio_ptr='$stdio_ptr'
13574 stdio_stream_array='$stdio_stream_array'
13575 strings='$strings'
13576 submit='$submit'
13577 subversion='$subversion'
13578 sysman='$sysman'
13579 tail='$tail'
13580 tar='$tar'
13581 tbl='$tbl'
13582 tee='$tee'
13583 test='$test'
13584 timeincl='$timeincl'
13585 timetype='$timetype'
13586 touch='$touch'
13587 tr='$tr'
13588 trnl='$trnl'
13589 troff='$troff'
13590 uidtype='$uidtype'
13591 uname='$uname'
13592 uniq='$uniq'
13593 use64bits='$use64bits'
13594 usedl='$usedl'
13595 usemultiplicity='$usemultiplicity'
13596 usemymalloc='$usemymalloc'
13597 usenm='$usenm'
13598 useopcode='$useopcode'
13599 useperlio='$useperlio'
13600 useposix='$useposix'
13601 usesfio='$usesfio'
13602 useshrplib='$useshrplib'
13603 usesocks='$usesocks'
13604 usethreads='$usethreads'
13605 usevfork='$usevfork'
13606 usrinc='$usrinc'
13607 uuname='$uuname'
13608 version='$version'
13609 vi='$vi'
13610 voidflags='$voidflags'
13611 xlibpth='$xlibpth'
13612 zcat='$zcat'
13613 zip='$zip'
13614 EOT
13615
13616 : Add in command line options if available
13617 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13618
13619 : add special variables
13620 $test -f $src/patchlevel.h && \
13621 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13622 echo "CONFIGDOTSH=true" >>config.sh
13623
13624 : propagate old symbols
13625 if $test -f UU/config.sh; then
13626         <UU/config.sh sort | uniq >UU/oldconfig.sh
13627         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13628         sort | uniq -u >UU/oldsyms
13629         set X `cat UU/oldsyms`
13630         shift
13631         case $# in
13632         0) ;;
13633         *)
13634                 cat <<EOM
13635 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13636 EOM
13637                 echo "# Variables propagated from previous config.sh file." >>config.sh
13638                 for sym in `cat UU/oldsyms`; do
13639                         echo "    Propagating $hint variable "'$'"$sym..."
13640                         eval 'tmp="$'"${sym}"'"'
13641                         echo "$tmp" | \
13642                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13643                 done
13644                 ;;
13645         esac
13646 fi
13647
13648 : Finish up by extracting the .SH files
13649 case "$alldone" in
13650 exit)
13651         $rm -rf UU
13652         echo "Done."
13653         exit 0
13654         ;;
13655 cont)
13656         ;;
13657 '')
13658         dflt=''
13659         nostick=true
13660         $cat <<EOM
13661
13662 If you'd like to make any changes to the config.sh file before I begin
13663 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13664
13665 EOM
13666         rp="Press return or use a shell escape to edit config.sh:"
13667         . UU/myread
13668         nostick=''
13669         case "$ans" in
13670         '') ;;
13671         *) : in case they cannot read
13672                 sh 1>&4 -c "$ans";;
13673         esac
13674         ;;
13675 esac
13676
13677 : if this fails, just run all the .SH files by hand
13678 . ./config.sh
13679
13680 echo " "
13681 exec 1>&4
13682 . ./UU/extract
13683
13684 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13685         dflt=y
13686         case "$silent" in
13687         true) ;;
13688         *)
13689                 $cat <<EOM
13690
13691 Now you need to generate make dependencies by running "$make depend".
13692 You might prefer to run it in background: "$make depend > makedepend.out &"
13693 It can take a while, so you might not want to run it right now.
13694
13695 EOM
13696                 ;;
13697         esac
13698         rp="Run $make depend now?"
13699         . UU/myread
13700         case "$ans" in
13701         y*)
13702                 $make depend && echo "Now you must run a $make."
13703                 ;;
13704         *)
13705                 echo "You must run '$make depend' then '$make'."
13706                 ;;
13707         esac
13708 elif test -f [Mm]akefile; then
13709         echo " "
13710         echo "Now you must run a $make."
13711 else
13712         echo "Done."
13713 fi
13714
13715 if $test -f Policy.sh; then
13716     $cat <<EOM
13717
13718 If you compile $package on a different machine or from a different object
13719 directory, copy the Policy.sh file from this object directory to the
13720 new one before you run Configure -- this will help you with most of
13721 the policy defaults.
13722
13723 EOM
13724 fi
13725 if $test -f config.msg; then
13726     echo "Hmm.  I also noted the following information while running:"
13727     echo " "
13728     $cat config.msg >&4
13729     $rm -f config.msg
13730 fi
13731 $rm -f kit*isdone ark*isdone
13732 $rm -rf UU
13733
13734 : End of Configure
13735