add do-not-edit caveats for files generated by opcode.pl
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Mon Jul  5 22:55:23 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
4420 : define an alternate in-header-list? function
4421 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4422 cont=true; xxf="echo \"<\$1> found.\" >&4";
4423 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4424 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4425 esac;
4426 case $# in 4) instead=instead;; *) instead="at last";; esac;
4427 while $test "$cont"; do
4428         xxx=`./findhdr $1`
4429         var=$2; eval "was=\$$2";
4430         if $test "$xxx" && $test -r "$xxx";
4431         then eval $xxf;
4432         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4433                 cont="";
4434         else eval $xxnf;
4435         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4436         set $yyy; shift; shift; yyy=$@;
4437         case $# in 0) cont="";;
4438         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4439                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4440         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4441                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4442         esac;
4443 done;
4444 while $test "$yyy";
4445 do set $yyy; var=$2; eval "was=\$$2";
4446         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4447         set $yyy; shift; shift; yyy=$@;
4448 done'
4449
4450 : see if this is a malloc.h system
4451 set malloc.h i_malloc
4452 eval $inhdr
4453
4454 : see if stdlib is available
4455 set stdlib.h i_stdlib
4456 eval $inhdr
4457
4458 : determine which malloc to compile in
4459 echo " "
4460 case "$usemymalloc" in
4461 ''|[yY]*|true|$define)  dflt='y' ;;
4462 *)      dflt='n' ;;
4463 esac
4464 rp="Do you wish to attempt to use the malloc that comes with $package?"
4465 . ./myread
4466 usemymalloc="$ans"
4467 case "$ans" in
4468 y*|true)
4469         usemymalloc='y'
4470         mallocsrc='malloc.c'
4471         mallocobj="malloc$_o"
4472         d_mymalloc="$define"
4473         case "$libs" in
4474         *-lmalloc*)
4475                 : Remove malloc from list of libraries to use
4476                 echo "Removing unneeded -lmalloc from library list" >&4
4477                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4478                 shift
4479                 libs="$*"
4480                 echo "libs = $libs" >&4
4481                 ;;
4482         esac
4483         ;;
4484 *)
4485         usemymalloc='n'
4486         mallocsrc=''
4487         mallocobj=''
4488         d_mymalloc="$undef"
4489         ;;
4490 esac
4491
4492 : compute the return types of malloc and free
4493 echo " "
4494 $cat >malloc.c <<END
4495 #$i_malloc I_MALLOC
4496 #$i_stdlib I_STDLIB
4497 #include <stdio.h>
4498 #include <sys/types.h>
4499 #ifdef I_MALLOC
4500 #include <malloc.h>
4501 #endif
4502 #ifdef I_STDLIB
4503 #include <stdlib.h>
4504 #endif
4505 #ifdef TRY_MALLOC
4506 void *malloc();
4507 #endif
4508 #ifdef TRY_FREE
4509 void free();
4510 #endif
4511 END
4512 case "$malloctype" in
4513 '')
4514         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4515                 malloctype='void *'
4516         else
4517                 malloctype='char *'
4518         fi
4519         ;;
4520 esac
4521 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4522
4523 case "$freetype" in
4524 '')
4525         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4526                 freetype='void'
4527         else
4528                 freetype='int'
4529         fi
4530         ;;
4531 esac
4532 echo "Your system uses $freetype free(), it would seem." >&4
4533 $rm -f malloc.[co]
4534 : Cruising for prototypes
4535 echo " "
4536 echo "Checking out function prototypes..." >&4
4537 $cat >prototype.c <<'EOCP'
4538 int main(int argc, char *argv[]) {
4539         exit(0);}
4540 EOCP
4541 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4542         echo "Your C compiler appears to support function prototypes."
4543         val="$define"
4544 else
4545         echo "Your C compiler doesn't seem to understand function prototypes."
4546         val="$undef"
4547 fi
4548 set prototype
4549 eval $setvar
4550 $rm -f prototype*
4551
4552 case "$prototype" in
4553 "$define") ;;
4554 *)      ansi2knr='ansi2knr'
4555         echo " "
4556         cat <<EOM >&4
4557
4558 $me:  FATAL ERROR:
4559 This version of $package can only be compiled by a compiler that 
4560 understands function prototypes.  Unfortunately, your C compiler 
4561         $cc $ccflags
4562 doesn't seem to understand them.  Sorry about that.
4563
4564 If GNU cc is available for your system, perhaps you could try that instead.  
4565
4566 Eventually, we hope to support building Perl with pre-ANSI compilers.
4567 If you would like to help in that effort, please contact <perlbug@perl.org>.
4568
4569 Aborting Configure now.
4570 EOM
4571         exit 2
4572         ;;
4573 esac
4574
4575 : determine where public executables go
4576 echo " "
4577 set dflt bin bin
4578 eval $prefixit
4579 fn=d~
4580 rp='Pathname where the public executables will reside?'
4581 . ./getfile
4582 if $test "X$ansexp" != "X$binexp"; then
4583         installbin=''
4584 fi
4585 bin="$ans"
4586 binexp="$ansexp"
4587 if $afs; then
4588         $cat <<EOM
4589
4590 Since you are running AFS, I need to distinguish the directory in which
4591 executables reside from the directory in which they are installed (and from
4592 which they are presumably copied to the former directory by occult means).
4593
4594 EOM
4595         case "$installbin" in
4596         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4597         *) dflt="$installbin";;
4598         esac
4599         fn=de~
4600         rp='Where will public executables be installed?'
4601         . ./getfile
4602         installbin="$ans"
4603 else
4604         installbin="$binexp"
4605 fi
4606
4607 : determine whether to install perl also as /usr/bin/perl
4608
4609 echo " "
4610 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4611         $cat <<EOM
4612 Many scripts expect to perl to be installed as /usr/bin/perl.
4613 I can install the perl you are about to compile also as /usr/bin/perl
4614 (in addition to $installbin/perl).
4615 EOM
4616         case "$installusrbinperl" in
4617         "$undef"|[nN]*) dflt='n';;
4618         *)              dflt='y';;
4619         esac
4620         rp="Do you want to install perl as /usr/bin/perl?"
4621         . ./myread
4622         case "$ans" in
4623         [yY]*)  val="$define";;
4624         *)      val="$undef" ;;
4625         esac
4626 else
4627         val="$undef"
4628 fi
4629 set installusrbinperl
4630 eval $setvar
4631
4632 : define a shorthand compile call
4633 compile='
4634 mc_file=$1;
4635 shift;
4636 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4637 : define a shorthand compile call for compilations that should be ok.
4638 compile_ok='
4639 mc_file=$1;
4640 shift;
4641 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4642
4643 echo " "
4644 echo "Checking for GNU C Library..." >&4
4645 cat >gnulibc.c <<EOM
4646 #include <stdio.h>
4647 int main()
4648 {
4649 #ifdef __GLIBC__
4650     exit(0);
4651 #else
4652     exit(1);
4653 #endif
4654 }
4655 EOM
4656 set gnulibc
4657 if eval $compile_ok && ./gnulibc; then
4658         val="$define"
4659         echo "You are using the GNU C Library"
4660 else
4661         val="$undef"
4662         echo "You are not using the GNU C Library"
4663 fi
4664 $rm -f gnulibc*
4665 set d_gnulibc
4666 eval $setvar
4667
4668 : see if nm is to be used to determine whether a symbol is defined or not
4669 case "$usenm" in
4670 '')
4671         dflt=''
4672         case "$d_gnulibc" in
4673         "$define")
4674                 echo " "
4675                 echo "nm probably won't work on the GNU C Library." >&4
4676                 dflt=n
4677                 ;;
4678         esac
4679         case "$dflt" in
4680         '') 
4681                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4682                         echo " "
4683                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4684                         echo "'nm' won't be sufficient on this sytem." >&4
4685                         dflt=n
4686                 fi
4687                 ;;
4688         esac
4689         case "$dflt" in
4690         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4691                 if $test $dflt -gt 20; then
4692                         dflt=y
4693                 else
4694                         dflt=n
4695                 fi
4696                 ;;
4697         esac
4698         ;;
4699 *)
4700         case "$usenm" in
4701         true|$define) dflt=y;;
4702         *) dflt=n;;
4703         esac
4704         ;;
4705 esac
4706 $cat <<EOM
4707
4708 I can use $nm to extract the symbols from your C libraries. This
4709 is a time consuming task which may generate huge output on the disk (up
4710 to 3 megabytes) but that should make the symbols extraction faster. The
4711 alternative is to skip the 'nm' extraction part and to compile a small
4712 test program instead to determine whether each symbol is present. If
4713 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4714 this may be the best solution.
4715
4716 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4717
4718 EOM
4719 rp="Shall I use $nm to extract C symbols from the libraries?"
4720 . ./myread
4721 case "$ans" in
4722 [Nn]*) usenm=false;;
4723 *) usenm=true;;
4724 esac
4725
4726 runnm=$usenm
4727 case "$reuseval" in
4728 true) runnm=false;;
4729 esac
4730
4731 : nm options which may be necessary
4732 case "$nm_opt" in
4733 '') if $test -f /mach_boot; then
4734                 nm_opt=''       # Mach
4735         elif $test -d /usr/ccs/lib; then
4736                 nm_opt='-p'     # Solaris (and SunOS?)
4737         elif $test -f /dgux; then
4738                 nm_opt='-p'     # DG-UX
4739         elif $test -f /lib64/rld; then
4740                 nm_opt='-p'     # 64-bit Irix
4741         else
4742                 nm_opt=''
4743         fi;;
4744 esac
4745
4746 : nm options which may be necessary for shared libraries but illegal
4747 : for archive libraries.  Thank you, Linux.
4748 case "$nm_so_opt" in
4749 '')     case "$myuname" in
4750         *linux*)
4751                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4752                         nm_so_opt='--dynamic'
4753                 fi
4754                 ;;
4755         esac
4756         ;;
4757 esac
4758
4759 case "$runnm" in
4760 true)
4761 : get list of predefined functions in a handy place
4762 echo " "
4763 case "$libc" in
4764 '') libc=unknown
4765         case "$libs" in
4766         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4767         esac
4768         ;;
4769 esac
4770 libnames='';
4771 case "$libs" in
4772 '') ;;
4773 *)  for thislib in $libs; do
4774         case "$thislib" in
4775         -lc|-lc_s)
4776                 : Handle C library specially below.
4777                 ;;
4778         -l*)
4779                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4780                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4781                         :
4782                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4783                         :
4784                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4785                         :
4786                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4787                         :
4788                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4789                         :
4790                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4791                         :
4792                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4793                         :
4794                 else
4795                         try=''
4796                 fi
4797                 libnames="$libnames $try"
4798                 ;;
4799         *) libnames="$libnames $thislib" ;;
4800         esac
4801         done
4802         ;;
4803 esac
4804 xxx=normal
4805 case "$libc" in
4806 unknown)
4807         set /lib/libc.$so
4808         for xxx in $libpth; do
4809                 $test -r $1 || set $xxx/libc.$so
4810                 : The messy sed command sorts on library version numbers.
4811                 $test -r $1 || \
4812                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4813                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4814                                 h
4815                                 s/[0-9][0-9]*/0000&/g
4816                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4817                                 G
4818                                 s/\n/ /' | \
4819                          sort | $sed -e 's/^.* //'`
4820                 eval set \$$#
4821         done
4822         $test -r $1 || set /usr/ccs/lib/libc.$so
4823         $test -r $1 || set /lib/libsys_s$_a
4824         ;;
4825 *)
4826         set blurfl
4827         ;;
4828 esac
4829 if $test -r "$1"; then
4830         echo "Your (shared) C library seems to be in $1."
4831         libc="$1"
4832 elif $test -r /lib/libc && $test -r /lib/clib; then
4833         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4834         xxx=apollo
4835         libc='/lib/clib /lib/libc'
4836         if $test -r /lib/syslib; then
4837                 echo "(Your math library is in /lib/syslib.)"
4838                 libc="$libc /lib/syslib"
4839         fi
4840 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4841         echo "Your C library seems to be in $libc, as you said before."
4842 elif $test -r $incpath/usr/lib/libc$_a; then
4843         libc=$incpath/usr/lib/libc$_a;
4844         echo "Your C library seems to be in $libc.  That's fine."
4845 elif $test -r /lib/libc$_a; then
4846         libc=/lib/libc$_a;
4847         echo "Your C library seems to be in $libc.  You're normal."
4848 else
4849         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4850                 :
4851         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4852                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4853         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4854                 :
4855         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4856                 :
4857         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4858                 :
4859         else
4860                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4861         fi
4862         if $test -r "$tans"; then
4863                 echo "Your C library seems to be in $tans, of all places."
4864                 libc=$tans
4865         else
4866                 libc='blurfl'
4867         fi
4868 fi
4869 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4870         dflt="$libc"
4871         cat <<EOM
4872
4873 If the guess above is wrong (which it might be if you're using a strange
4874 compiler, or your machine supports multiple models), you can override it here.
4875
4876 EOM
4877 else
4878         dflt=''
4879         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4880         cat >&4 <<EOM
4881 I can't seem to find your C library.  I've looked in the following places:
4882
4883 EOM
4884         $sed 's/^/      /' libpath
4885         cat <<EOM
4886
4887 None of these seems to contain your C library. I need to get its name...
4888
4889 EOM
4890 fi
4891 fn=f
4892 rp='Where is your C library?'
4893 . ./getfile
4894 libc="$ans"
4895
4896 echo " "
4897 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4898 set X `cat libnames`
4899 shift
4900 xxx=files
4901 case $# in 1) xxx=file; esac
4902 echo "Extracting names from the following $xxx for later perusal:" >&4
4903 echo " "
4904 $sed 's/^/      /' libnames >&4
4905 echo " "
4906 $echo $n "This may take a while...$c" >&4
4907
4908 for file in $*; do
4909         case $file in
4910         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4911         *) $nm $nm_opt $file 2>/dev/null;;
4912         esac
4913 done >libc.tmp
4914
4915 $echo $n ".$c"
4916 $grep fprintf libc.tmp > libc.ptf
4917 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4918 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4919 xxx='[ADTSIW]'
4920 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4921         eval $xscan;\
4922         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4923                 eval $xrun
4924 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4925         eval $xscan;\
4926         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4927                 eval $xrun
4928 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4929         eval $xscan;\
4930         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4931                 eval $xrun
4932 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4933         eval $xscan;\
4934         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4935                 eval $xrun
4936 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4937         eval $xscan;\
4938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4939                 eval $xrun
4940 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4941         eval $xscan;\
4942         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4943                 eval $xrun
4944 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4945                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4946         eval $xscan;\
4947         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4948                 eval $xrun
4949 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4950         eval $xscan;\
4951         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4952                 eval $xrun
4953 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4954         eval $xscan;\
4955         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4956                 eval $xrun
4957 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4958         eval $xscan;\
4959         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4960                 eval $xrun
4961 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4962         eval $xscan;\
4963         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4964                 eval $xrun
4965 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4966         eval $xscan;\
4967         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4968                 eval $xrun
4969 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4970         eval $xscan;\
4971         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4972                 eval $xrun
4973 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4974         eval $xscan;\
4975         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4976                 eval $xrun
4977 else
4978         $nm -p $* 2>/dev/null >libc.tmp
4979         $grep fprintf libc.tmp > libc.ptf
4980         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4981                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4982         then
4983                 nm_opt='-p'
4984                 eval $xrun
4985         else
4986                 echo " "
4987                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4988                 com=''
4989                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4990                         for thisname in $libnames $libc; do
4991                                 $ar t $thisname >>libc.tmp
4992                         done
4993                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4994                         echo "Ok." >&4
4995                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4996                         # Repeat libc to extract forwarders to DLL entries too
4997                         for thisname in $libnames $libc; do
4998                                 $ar tv $thisname >>libc.tmp
4999                                 # Revision 50 of EMX has bug in $ar.
5000                                 # it will not extract forwarders to DLL entries
5001                                 # Use emximp which will extract exactly them.
5002                                 emximp -o tmp.imp $thisname \
5003                                     2>/dev/null && \
5004                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5005                                     < tmp.imp >>libc.tmp
5006                                 $rm tmp.imp
5007                         done
5008                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5009                         echo "Ok." >&4
5010                 else
5011                         echo "$ar didn't seem to work right." >&4
5012                         echo "Maybe this is a Cray...trying bld instead..." >&4
5013                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5014                         then
5015                                 for thisname in $libnames; do
5016                                         bld t $libnames | \
5017                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5018                                         $ar t $thisname >>libc.tmp
5019                                 done
5020                                 echo "Ok." >&4
5021                         else
5022                                 echo "That didn't work either.  Giving up." >&4
5023                                 exit 1
5024                         fi
5025                 fi
5026         fi
5027 fi
5028 nm_extract="$com"
5029 if $test -f /lib/syscalls.exp; then
5030         echo " "
5031         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5032         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5033 fi
5034 ;;
5035 esac
5036 $rm -f libnames libpath
5037
5038 : see if dld is available
5039 set dld.h i_dld
5040 eval $inhdr
5041
5042 : is a C symbol defined?
5043 csym='tlook=$1;
5044 case "$3" in
5045 -v) tf=libc.tmp; tc=""; tdc="";;
5046 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5047 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5048 esac;
5049 tx=yes;
5050 case "$reuseval-$4" in
5051 true-) ;;
5052 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5053 esac;
5054 case "$tx" in
5055 yes)
5056         case "$runnm" in
5057         true)
5058                 if $contains $tlook $tf >/dev/null 2>&1;
5059                 then tval=true;
5060                 else tval=false;
5061                 fi;;
5062         *)
5063                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5064                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5065                 then tval=true;
5066                 else tval=false;
5067                 fi;
5068                 $rm -f t t.c;;
5069         esac;;
5070 *)
5071         case "$tval" in
5072         $define) tval=true;;
5073         *) tval=false;;
5074         esac;;
5075 esac;
5076 eval "$2=$tval"'
5077
5078 : define an is-in-libc? function
5079 inlibc='echo " "; td=$define; tu=$undef;
5080 sym=$1; var=$2; eval "was=\$$2";
5081 tx=yes;
5082 case "$reuseval$was" in
5083 true) ;;
5084 true*) tx=no;;
5085 esac;
5086 case "$tx" in
5087 yes)
5088         set $sym tres -f;
5089         eval $csym;
5090         case "$tres" in
5091         true)
5092                 echo "$sym() found." >&4;
5093                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5094         *)
5095                 echo "$sym() NOT found." >&4;
5096                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5097         esac;;
5098 *)
5099         case "$was" in
5100         $define) echo "$sym() found." >&4;;
5101         *) echo "$sym() NOT found." >&4;;
5102         esac;;
5103 esac'
5104
5105 : see if dlopen exists
5106 xxx_runnm="$runnm"
5107 runnm=false
5108 set dlopen d_dlopen
5109 eval $inlibc
5110 runnm="$xxx_runnm"
5111
5112 : determine which dynamic loading, if any, to compile in
5113 echo " "
5114 dldir="ext/DynaLoader"
5115 case "$usedl" in
5116 $define|y|true)
5117         dflt='y'
5118         usedl="$define"
5119         ;;
5120 $undef|n|false)
5121         dflt='n'
5122         usedl="$undef"
5123         ;;
5124 *) 
5125         dflt='n'
5126         case "$d_dlopen" in
5127             $define) dflt='y' ;;
5128         esac
5129         case "$i_dld" in
5130             $define) dflt='y' ;;
5131         esac
5132         : Does a dl_xxx.xs file exist for this operating system
5133         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5134         ;;
5135 esac
5136 rp="Do you wish to use dynamic loading?"
5137 . ./myread
5138 usedl="$ans"
5139 case "$ans" in
5140 y*) usedl="$define"
5141         case "$dlsrc" in
5142         '')
5143                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5144                         dflt="$dldir/dl_${osname}.xs"
5145                 elif $test "$d_dlopen" = "$define" ; then
5146                         dflt="$dldir/dl_dlopen.xs"
5147                 elif $test "$i_dld" = "$define" ; then
5148                         dflt="$dldir/dl_dld.xs"
5149                 else
5150                         dflt=''
5151                 fi
5152                 ;;
5153         *)      dflt="$dldir/$dlsrc"
5154                 ;;
5155         esac
5156     echo "The following dynamic loading files are available:"
5157         : Can not go over to $dldir because getfile has path hard-coded in.
5158         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5159         rp="Source file to use for dynamic loading"
5160         fn="fne"
5161         # XXX This getfile call will fail the existence check if you try 
5162         # building away from $src (this is not supported yet).
5163         . ./getfile
5164         usedl="$define"
5165         : emulate basename
5166         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5167
5168         $cat << EOM
5169
5170 Some systems may require passing special flags to $cc -c to
5171 compile modules that will be used to create a shared library.
5172 To use no flags, say "none".
5173
5174 EOM
5175     case "$cccdlflags" in
5176     '') case "$gccversion" in
5177                 '') case "$osname" in
5178                         hpux)   dflt='+z' ;;
5179                         next)   dflt='none' ;;
5180                         irix*)  dflt='-KPIC' ;;
5181                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5182                         sunos)  dflt='-pic' ;;
5183                         *)      dflt='none' ;;
5184                     esac
5185                         ;;
5186                 *)  case "$osname" in
5187                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5188                         *)      dflt='-fpic' ;;
5189                     esac ;;
5190             esac ;;
5191         ' ') dflt='none' ;;
5192     *)  dflt="$cccdlflags" ;;
5193     esac
5194     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5195     . ./myread
5196     case "$ans" in
5197     none) cccdlflags=' ' ;;
5198     *) cccdlflags="$ans" ;;
5199     esac
5200
5201     cat << EOM
5202
5203 Some systems use ld to create libraries that can be dynamically loaded,
5204 while other systems (such as those using ELF) use $cc.
5205
5206 EOM
5207         case "$ld" in
5208         '')     $cat >try.c <<'EOM'
5209 /* Test for whether ELF binaries are produced */
5210 #include <fcntl.h>
5211 #include <stdlib.h>
5212 int main() {
5213         char b[4];
5214         int i = open("a.out",O_RDONLY);
5215         if(i == -1) 
5216                 exit(1); /* fail */
5217         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5218                 exit(0); /* succeed (yes, it's ELF) */
5219         else
5220                 exit(1); /* fail */
5221 }
5222 EOM
5223                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5224                         cat <<EOM
5225 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5226 EOM
5227                         dflt="$cc"
5228                 else
5229                         echo "I'll use ld to build dynamic libraries."
5230                         dflt='ld'
5231                 fi
5232                 rm -f try.c a.out
5233                 ;;
5234         *)      dflt="$ld"
5235                 ;;
5236         esac
5237
5238     rp="What command should be used to create dynamic libraries?"
5239     . ./myread
5240         ld="$ans"
5241
5242     cat << EOM
5243
5244 Some systems may require passing special flags to $ld to create a
5245 library that can be dynamically loaded.  If your ld flags include
5246 -L/other/path options to locate libraries outside your loader's normal
5247 search path, you may need to specify those -L options here as well.  To
5248 use no flags, say "none".
5249
5250 EOM
5251     case "$lddlflags" in
5252     '') case "$osname" in
5253                         beos) dflt='-nostart' ;;
5254                         hpux)  dflt='-b' ;;
5255                         linux|irix*)    dflt='-shared' ;;
5256                         next)  dflt='none' ;;
5257                         solaris) dflt='-G' ;;
5258                         sunos) dflt='-assert nodefinitions' ;;
5259                         svr4*|esix*) dflt="-G $ldflags" ;;
5260                 *)     dflt='none' ;;
5261                         esac
5262                         ;;
5263     *) dflt="$lddlflags" ;;
5264     esac
5265
5266         : Try to guess additional flags to pick up local libraries.
5267         : Be careful not to append to a plain 'none'
5268         case "$dflt" in
5269         none) dflt='' ;;
5270         esac
5271         for thisflag in $ldflags; do
5272                 case "$thisflag" in
5273                 -L*)
5274                         case " $dflt " in
5275                         *" $thisflag "*) ;;
5276                         *) dflt="$dflt $thisflag" ;;
5277                         esac
5278                         ;;
5279                 esac
5280         done
5281
5282         case "$dflt" in
5283         ''|' ') dflt='none' ;;
5284         esac
5285
5286     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5287     . ./myread
5288     case "$ans" in
5289     none) lddlflags=' ' ;;
5290     *) lddlflags="$ans" ;;
5291     esac
5292
5293         cat <<EOM
5294
5295 Some systems may require passing special flags to $cc to indicate that
5296 the resulting executable will use dynamic linking.  To use no flags,
5297 say "none".
5298
5299 EOM
5300     case "$ccdlflags" in
5301     '') case "$osname" in
5302                 hpux)   dflt='-Wl,-E' ;;
5303                 linux)  dflt='-rdynamic' ;;
5304                 next)   dflt='none' ;;
5305                 sunos)  dflt='none' ;;
5306                 *)      dflt='none' ;;
5307             esac ;;
5308     ' ')  dflt='none' ;;
5309     *)  dflt="$ccdlflags" ;;
5310     esac
5311     rp="Any special flags to pass to $cc to use dynamic loading?"
5312     . ./myread
5313     case "$ans" in
5314     none) ccdlflags=' ' ;;
5315     *) ccdlflags="$ans" ;;
5316     esac
5317     ;;
5318 *)  usedl="$undef"
5319         ld='ld'
5320     dlsrc='dl_none.xs'
5321     lddlflags=''
5322     ccdlflags=''
5323     ;;
5324 esac
5325
5326 also=''
5327 case "$usedl" in
5328 $undef)
5329         # No dynamic loading being used, so don't bother even to prompt.
5330         useshrplib='false'
5331         ;;
5332 *)      case "$useshrplib" in
5333         '')     case "$osname" in
5334                 svr4*|dgux|dynixptx|esix|powerux|beos)
5335                         dflt=y
5336                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5337                         ;;
5338                 next*)
5339                         case "$osvers" in
5340                         4*)     dflt=y
5341                                 also='Building a shared libperl is needed for MAB support.'
5342                                 ;;
5343                         *)      dflt=n
5344                                 ;;
5345                         esac
5346                         ;;
5347                 *)      dflt=n
5348                         ;;
5349                 esac
5350                 ;;
5351         $define|true|[Yy]*)
5352                 dflt=y
5353                 ;;
5354         *)      dflt=n
5355                 ;;
5356         esac
5357         $cat << EOM
5358
5359 The perl executable is normally obtained by linking perlmain.c with
5360 libperl${_a}, any static extensions (usually just DynaLoader), and
5361 any other libraries needed on this system (such as -lm, etc.).  Since
5362 your system supports dynamic loading, it is probably possible to build
5363 a shared libperl.$so.  If you will have more than one executable linked
5364 to libperl.$so, this will significantly reduce the size of each
5365 executable, but it may have a noticeable affect on performance.  The
5366 default is probably sensible for your system.
5367 $also
5368
5369 EOM
5370         rp="Build a shared libperl.$so (y/n)"
5371         . ./myread
5372         case "$ans" in
5373         true|$define|[Yy]*)
5374                 useshrplib='true'
5375                 # Why does next4 have to be so different?
5376                 case "${osname}${osvers}" in
5377                 next4*|rhapsody*)
5378                         xxx='DYLD_LIBRARY_PATH' ;;
5379                 os2*)   xxx='' ;; # Nothing special needed.
5380                 beos*)  xxx='' ;;
5381                 *)              xxx='LD_LIBRARY_PATH' ;;
5382                 esac
5383                 ;;
5384         *)      useshrplib='false' ;;
5385         esac
5386         ;;
5387 esac
5388
5389 case "$useshrplib" in
5390 true)
5391         case "$libperl" in
5392         '')
5393                 # Figure out a good name for libperl.so.  Since it gets stored in
5394                 # a version-specific architecture-dependent library, the version
5395                 # number isn't really that important, except for making cc/ld happy.
5396                 #
5397                 # A name such as libperl.so.3.1
5398                 majmin="libperl.$so.$patchlevel.$subversion"
5399                 # A name such as libperl.so.301
5400                 majonly=`echo $patchlevel $subversion |
5401                         $awk '{printf "%d%02d", $1, $2}'`
5402                 majonly=libperl.$so.$majonly
5403                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5404                 # rely on figuring it out from the naming of libc.
5405                 case "${osname}${osvers}" in
5406                 next4*)
5407                         dflt=libperl.5.$so
5408                         # XXX How handle the --version stuff for MAB?
5409                         ;;
5410                 linux*)  # ld won't link with a bare -lperl otherwise.
5411                         dflt=libperl.$so
5412                         ;;
5413                 *)      # Try to guess based on whether libc has major.minor.
5414                         case "$libc" in
5415                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5416                         *libc.$so.[0-9]*) dflt=$majonly ;;
5417                         *)      dflt=libperl.$so ;;
5418                         esac
5419                         ;;
5420                 esac
5421                 ;;
5422         *)      dflt=$libperl
5423                 ;;
5424         esac
5425         cat << EOM
5426
5427 I need to select a good name for the shared libperl.  If your system uses
5428 library names with major and minor numbers, then you might want something
5429 like $majmin.  Alternatively, if your system uses a single version
5430 number for shared libraries, then you might want to use $majonly.
5431 Or, your system might be quite happy with a simple libperl.$so.
5432
5433 Since the shared libperl will get installed into a version-specific
5434 architecture-dependent directory, the version number of the shared perl
5435 library probably isn't important, so the default should be o.k.
5436
5437 EOM
5438         rp='What name do you want to give to the shared libperl?'
5439         . ./myread
5440         libperl=$ans
5441         echo "Ok, I'll use $libperl"
5442         ;;
5443 *)
5444         libperl="libperl${_a}"
5445         ;;
5446 esac
5447
5448 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5449 case "$shrpdir" in
5450 '') ;;
5451 *)      $cat >&4 <<EOM
5452 WARNING:  Use of the shrpdir variable for the installation location of
5453 the shared $libperl is not supported.  It was never documented and
5454 will not work in this version.  Let me (perlbug@perl.com)
5455 know of any problems this may cause.
5456
5457 EOM
5458         case "$shrpdir" in
5459         "$archlibexp/CORE")
5460                 $cat >&4 <<EOM
5461 But your current setting of $shrpdir is
5462 the default anyway, so it's harmless.
5463 EOM
5464                 ;;
5465         *)
5466                 $cat >&4 <<EOM
5467 Further, your current attempted setting of $shrpdir
5468 conflicts with the value of $archlibexp/CORE
5469 that installperl will use.
5470 EOM
5471                 ;;
5472         esac
5473         ;;
5474 esac
5475
5476 # How will the perl executable find the installed shared $libperl?
5477 # Add $xxx to ccdlflags.
5478 # If we can't figure out a command-line option, use $shrpenv to
5479 # set env LD_RUN_PATH.  The main perl makefile uses this.
5480 shrpdir=$archlibexp/CORE
5481 xxx=''
5482 tmp_shrpenv=''
5483 if "$useshrplib"; then
5484     case "$osname" in 
5485         aix)
5486                 # We'll set it in Makefile.SH...
5487                 ;;
5488         solaris|netbsd)
5489                 xxx="-R $shrpdir"
5490                 ;;
5491         freebsd)
5492                 xxx="-Wl,-R$shrpdir"
5493                 ;;
5494         linux|irix*|dec_osf)
5495                 xxx="-Wl,-rpath,$shrpdir"
5496                 ;;
5497         next)
5498                 # next doesn't like the default...
5499                 ;;
5500         beos)
5501                 # beos doesn't like the default, either.
5502                 ;;
5503         hpux*)
5504                 # hpux doesn't like the default, either.
5505                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5506                 ;;
5507         *)
5508                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5509                 ;;
5510         esac
5511         case "$xxx" in
5512         '') ;;
5513         *)      
5514                 # Only add $xxx if it isn't already in ccdlflags.
5515                 case " $ccdlflags " in
5516                 *" $xxx "*)     ;;
5517                 *)      ccdlflags="$ccdlflags $xxx"
5518                         cat <<EOM >&4
5519
5520 Adding $xxx to the flags
5521 passed to $ld so that the perl executable will find the 
5522 installed shared $libperl.
5523
5524 EOM
5525                         ;;
5526                 esac
5527                 ;;
5528         esac
5529 fi
5530 # Respect a hint or command-line value.
5531 case "$shrpenv" in
5532 '') shrpenv="$tmp_shrpenv" ;;
5533 esac
5534
5535 : determine where manual pages go
5536 set man1dir man1dir none
5537 eval $prefixit
5538 $cat <<EOM
5539
5540 $spackage has manual pages available in source form.
5541 EOM
5542 case "$nroff" in
5543 nroff)
5544         echo "However, you don't have nroff, so they're probably useless to you."
5545         case "$man1dir" in
5546         '') man1dir="none";;
5547         esac;;
5548 esac
5549 echo "If you don't want the manual sources installed, answer 'none'."
5550 case "$man1dir" in
5551 ' ') dflt=none
5552         ;;
5553 '')
5554         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5555         lookpath="$lookpath $prefixexp/man/p_man/man1"
5556         lookpath="$lookpath $prefixexp/man/u_man/man1"
5557         lookpath="$lookpath $prefixexp/man/man.1"
5558         case "$sysman" in
5559         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5560         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5561         esac
5562         set dflt
5563         eval $prefixup
5564         ;;
5565 *)  dflt="$man1dir"
5566         ;;
5567 esac
5568 echo " "
5569 fn=dn+~
5570 rp="Where do the main $spackage manual pages (source) go?"
5571 . ./getfile
5572 if $test "X$man1direxp" != "X$ansexp"; then
5573         installman1dir=''
5574 fi
5575 man1dir="$ans"
5576 man1direxp="$ansexp"
5577 case "$man1dir" in
5578 '') man1dir=' '
5579         installman1dir='';;
5580 esac
5581 if $afs; then
5582         $cat <<EOM
5583
5584 Since you are running AFS, I need to distinguish the directory in which
5585 manual pages reside from the directory in which they are installed (and from
5586 which they are presumably copied to the former directory by occult means).
5587
5588 EOM
5589         case "$installman1dir" in
5590         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5591         *) dflt="$installman1dir";;
5592         esac
5593         fn=de~
5594         rp='Where will man pages be installed?'
5595         . ./getfile
5596         installman1dir="$ans"
5597 else
5598         installman1dir="$man1direxp"
5599 fi
5600
5601 : What suffix to use on installed man pages
5602
5603 case "$man1dir" in
5604 ' ')
5605         man1ext='0'
5606         ;;
5607 *)
5608         rp="What suffix should be used for the main $spackage man pages?"
5609         case "$man1ext" in
5610         '')     case "$man1dir" in
5611                 *1)  dflt=1 ;;
5612                 *1p) dflt=1p ;;
5613                 *1pm) dflt=1pm ;;
5614                 *l) dflt=l;;
5615                 *n) dflt=n;;
5616                 *o) dflt=o;;
5617                 *p) dflt=p;;
5618                 *C) dflt=C;;
5619                 *L) dflt=L;;
5620                 *L1) dflt=L1;;
5621                 *) dflt=1;;
5622                 esac
5623                 ;;
5624         *)      dflt="$man1ext";;
5625         esac
5626         . ./myread
5627         man1ext="$ans"
5628         ;;
5629 esac
5630
5631 : see if we can have long filenames
5632 echo " "
5633 rmlist="$rmlist /tmp/cf$$"
5634 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5635 first=123456789abcdef
5636 second=/tmp/cf$$/$first
5637 $rm -f $first $second
5638 if (echo hi >$first) 2>/dev/null; then
5639         if $test -f 123456789abcde; then
5640                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5641                 val="$undef"
5642         else
5643                 if (echo hi >$second) 2>/dev/null; then
5644                         if $test -f /tmp/cf$$/123456789abcde; then
5645                                 $cat <<'EOM'
5646 That's peculiar... You can have filenames longer than 14 characters, but only
5647 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5648 I shall consider your system cannot support long filenames at all.
5649 EOM
5650                                 val="$undef"
5651                         else
5652                                 echo 'You can have filenames longer than 14 characters.' >&4
5653                                 val="$define"
5654                         fi
5655                 else
5656                         $cat <<'EOM'
5657 How confusing! Some of your filesystems are sane enough to allow filenames
5658 longer than 14 characters but some others like /tmp can't even think about them.
5659 So, for now on, I shall assume your kernel does not allow them at all.
5660 EOM
5661                         val="$undef"
5662                 fi
5663         fi
5664 else
5665         $cat <<'EOM'
5666 You can't have filenames longer than 14 chars.  You can't even think about them!
5667 EOM
5668         val="$undef"
5669 fi 
5670 set d_flexfnam
5671 eval $setvar
5672 $rm -rf /tmp/cf$$ 123456789abcde*
5673
5674 : determine where library module manual pages go
5675 set man3dir man3dir none
5676 eval $prefixit
5677 $cat <<EOM
5678
5679 $spackage has manual pages for many of the library modules.
5680 EOM
5681
5682 case "$nroff" in
5683 nroff)
5684         $cat <<'EOM'
5685 However, you don't have nroff, so they're probably useless to you.
5686 EOM
5687         case "$man3dir" in
5688         '') man3dir="none";;
5689         esac;;
5690 esac
5691
5692 case "$d_flexfnam" in
5693 undef)
5694         $cat <<'EOM'
5695 However, your system can't handle the long file names like File::Basename.3. 
5696 EOM
5697         case "$man3dir" in
5698         '') man3dir="none";;
5699         esac;;
5700 esac
5701
5702 echo "If you don't want the manual sources installed, answer 'none'."
5703 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5704 case "$man3dir" in
5705 '')     case "$prefix" in 
5706         *$prog*) dflt=`echo $man1dir | 
5707                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5708         *)      dflt="$privlib/man/man3" ;;
5709         esac
5710         ;;
5711 ' ') dflt=none;;
5712 *)      dflt="$man3dir" ;;
5713 esac
5714 echo " "
5715
5716 fn=dn+~
5717 rp="Where do the $package library man pages (source) go?"
5718 . ./getfile
5719 if test "X$man3direxp" != "X$ansexp"; then
5720         installman3dir=''
5721 fi
5722
5723 man3dir="$ans"
5724 man3direxp="$ansexp"
5725 case "$man3dir" in
5726 '') man3dir=' '
5727         installman3dir='';;
5728 esac
5729 if $afs; then
5730         $cat <<EOM
5731
5732 Since you are running AFS, I need to distinguish the directory in which
5733 manual pages reside from the directory in which they are installed (and from
5734 which they are presumably copied to the former directory by occult means).
5735
5736 EOM
5737         case "$installman3dir" in
5738         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5739         *) dflt="$installman3dir";;
5740         esac
5741         fn=de~
5742         rp='Where will man pages be installed?'
5743         . ./getfile
5744         installman3dir="$ans"
5745 else
5746         installman3dir="$man3direxp"
5747 fi
5748
5749 : What suffix to use on installed man pages
5750
5751 case "$man3dir" in
5752 ' ')
5753         man3ext='0'
5754         ;;
5755 *)
5756         rp="What suffix should be used for the $package library man pages?"
5757         case "$man3ext" in
5758         '')     case "$man3dir" in
5759                 *3)  dflt=3 ;;
5760                 *3p) dflt=3p ;;
5761                 *3pm) dflt=3pm ;;
5762                 *l) dflt=l;;
5763                 *n) dflt=n;;
5764                 *o) dflt=o;;
5765                 *p) dflt=p;;
5766                 *C) dflt=C;;
5767                 *L) dflt=L;;
5768                 *L3) dflt=L3;;
5769                 *) dflt=3;;
5770                 esac
5771                 ;;
5772         *)      dflt="$man3ext";;
5773         esac
5774         . ./myread
5775         man3ext="$ans"
5776         ;;
5777 esac
5778
5779 : see if we have to deal with yellow pages, now NIS.
5780 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5781         if $test -f /usr/etc/nibindd; then
5782                 echo " "
5783                 echo "I'm fairly confident you're on a NeXT."
5784                 echo " "
5785                 rp='Do you get the hosts file via NetInfo?'
5786                 dflt=y
5787                 case "$hostcat" in
5788                 nidump*) ;;
5789                 '') ;;
5790                 *) dflt=n;;
5791                 esac
5792                 . ./myread
5793                 case "$ans" in
5794                 y*) hostcat='nidump hosts .';;
5795                 *)      case "$hostcat" in
5796                         nidump*) hostcat='';;
5797                         esac
5798                         ;;
5799                 esac
5800         fi
5801         case "$hostcat" in
5802         nidump*) ;;
5803         *)
5804                 case "$hostcat" in
5805                 *ypcat*) dflt=y;;
5806                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5807                                 dflt=y
5808                         else
5809                                 dflt=n
5810                         fi;;
5811                 *) dflt=n;;
5812                 esac
5813                 echo " "
5814                 rp='Are you getting the hosts file via yellow pages?'
5815                 . ./myread
5816                 case "$ans" in
5817                 y*) hostcat='ypcat hosts';;
5818                 *) hostcat='cat /etc/hosts';;
5819                 esac
5820                 ;;
5821         esac
5822 fi
5823 case "$hostcat" in
5824 '') hostcat='cat /etc/hosts';;
5825 esac
5826 case "$groupcat" in
5827 '') groupcat='cat /etc/group';;
5828 esac
5829 case "$passcat" in
5830 '') passcat='cat /etc/passwd';;
5831 esac
5832
5833 : now get the host name
5834 echo " "
5835 echo "Figuring out host name..." >&4
5836 case "$myhostname" in
5837 '') cont=true
5838         echo 'Maybe "hostname" will work...'
5839         if tans=`sh -c hostname 2>&1` ; then
5840                 myhostname=$tans
5841                 phostname=hostname
5842                 cont=''
5843         fi
5844         ;;
5845 *) cont='';;
5846 esac
5847 if $test "$cont"; then
5848         if ./xenix; then
5849                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5850                 if tans=`cat /etc/systemid 2>&1` ; then
5851                         myhostname=$tans
5852                         phostname='cat /etc/systemid'
5853                         echo "Whadyaknow.  Xenix always was a bit strange..."
5854                         cont=''
5855                 fi
5856         elif $test -r /etc/systemid; then
5857                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5858         fi
5859 fi
5860 if $test "$cont"; then
5861         echo 'No, maybe "uuname -l" will work...'
5862         if tans=`sh -c 'uuname -l' 2>&1` ; then
5863                 myhostname=$tans
5864                 phostname='uuname -l'
5865         else
5866                 echo 'Strange.  Maybe "uname -n" will work...'
5867                 if tans=`sh -c 'uname -n' 2>&1` ; then
5868                         myhostname=$tans
5869                         phostname='uname -n'
5870                 else
5871                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5872                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5873                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5874                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5875                         else
5876                                 case "$myhostname" in
5877                                 '') echo "Does this machine have an identity crisis or something?"
5878                                         phostname='';;
5879                                 *)
5880                                         echo "Well, you said $myhostname before..."
5881                                         phostname='echo $myhostname';;
5882                                 esac
5883                         fi
5884                 fi
5885         fi
5886 fi
5887 : you do not want to know about this
5888 set $myhostname
5889 myhostname=$1
5890
5891 : verify guess
5892 if $test "$myhostname" ; then
5893         dflt=y
5894         rp='Your host name appears to be "'$myhostname'".'" Right?"
5895         . ./myread
5896         case "$ans" in
5897         y*) ;;
5898         *) myhostname='';;
5899         esac
5900 fi
5901
5902 : bad guess or no guess
5903 while $test "X$myhostname" = X ; do
5904         dflt=''
5905         rp="Please type the (one word) name of your host:"
5906         . ./myread
5907         myhostname="$ans"
5908 done
5909
5910 : translate upper to lower if necessary
5911 case "$myhostname" in
5912 *[A-Z]*)
5913         echo "(Normalizing case in your host name)"
5914         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5915         ;;
5916 esac
5917
5918 case "$myhostname" in
5919 *.*)
5920         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5921         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5922         echo "(Trimming domain name from host name--host name is now $myhostname)"
5923         ;;
5924 *) case "$mydomain" in
5925         '')
5926                 {
5927                         test "X$hostcat" = "Xypcat hosts" &&
5928                         ypmatch "$myhostname" hosts 2>/dev/null |\
5929                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5930                         $test -s hosts
5931                 } || {
5932                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5933                                         /[       ]$myhostname[  . ]/p" > hosts
5934                 }
5935                 tmp_re="[       . ]"
5936                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5937                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5938                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5939                         hosts | $sort | $uniq | \
5940                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5941                 case `$echo X$dflt` in
5942                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5943                         dflt=.
5944                         ;;
5945                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5946                         ;;
5947                 esac
5948                 case "$dflt" in
5949                 .)
5950                         tans=`./loc resolv.conf X /etc /usr/etc`
5951                         if $test -f "$tans"; then
5952                                 echo "(Attempting domain name extraction from $tans)"
5953                                 dflt=.`$sed -n -e 's/   / /g' \
5954                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5955                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5956                                 case "$dflt" in
5957                                 .) dflt=.`$sed -n -e 's/        / /g' \
5958                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5959                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5960                                         ;;
5961                                 esac
5962                         fi
5963                         ;;
5964                 esac
5965                 case "$dflt" in
5966                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5967                         dflt=.`sh -c domainname 2>/dev/null`
5968                         case "$dflt" in
5969                         '') dflt='.';;
5970                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5971                         esac
5972                         ;;
5973                 esac
5974                 case "$dflt" in
5975                 .) echo "(Lost all hope -- silly guess then)"
5976                         dflt='.uucp'
5977                         ;;
5978                 esac
5979                 $rm -f hosts
5980                 ;;
5981         *) dflt="$mydomain";;
5982         esac;;
5983 esac
5984 echo " "
5985 rp="What is your domain name?"
5986 . ./myread
5987 tans="$ans"
5988 case "$ans" in
5989 '') ;;
5990 .*) ;;
5991 *) tans=".$tans";;
5992 esac
5993 mydomain="$tans"
5994
5995 : translate upper to lower if necessary
5996 case "$mydomain" in
5997 *[A-Z]*)
5998         echo "(Normalizing case in your domain name)"
5999         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6000         ;;
6001 esac
6002
6003 : a little sanity check here
6004 case "$phostname" in
6005 '') ;;
6006 *)
6007         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6008         $myhostname$mydomain|$myhostname) ;;
6009         *)
6010                 case "$phostname" in
6011                 sed*)
6012                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6013                         ;;
6014                 *)
6015                         echo "(That doesn't agree with your $phostname command, by the way.)"
6016                         ;;
6017                 esac
6018         ;;
6019         esac
6020         ;;
6021 esac
6022
6023 $cat <<EOM
6024
6025 I need to get your e-mail address in Internet format if possible, i.e.
6026 something like user@host.domain. Please answer accurately since I have
6027 no easy means to double check it. The default value provided below
6028 is most probably close to the reality but may not be valid from outside
6029 your organization...
6030
6031 EOM
6032 cont=x
6033 while test "$cont"; do
6034         case "$cf_email" in
6035         '') dflt="$cf_by@$myhostname$mydomain";;
6036         *) dflt="$cf_email";;
6037         esac
6038         rp='What is your e-mail address?'
6039         . ./myread
6040         cf_email="$ans"
6041         case "$cf_email" in
6042         *@*.*) cont='' ;;
6043         *)
6044                 rp='Address does not look like an Internet one.  Use it anyway?'
6045                 case "$fastread" in
6046                 yes) dflt=y ;;
6047                 *) dflt=n ;;
6048                 esac
6049                 . ./myread
6050                 case "$ans" in
6051                 y*) cont='' ;;
6052                 *) echo " " ;;
6053                 esac
6054                 ;;
6055         esac
6056 done
6057
6058 $cat <<EOM
6059
6060 If you or somebody else will be maintaining perl at your site, please
6061 fill in the correct e-mail address here so that they may be contacted
6062 if necessary. Currently, the "perlbug" program included with perl
6063 will send mail to this address in addition to perlbug@perl.com. You may
6064 enter "none" for no administrator.
6065
6066 EOM
6067 case "$perladmin" in
6068 '') dflt="$cf_email";;
6069 *) dflt="$perladmin";;
6070 esac
6071 rp='Perl administrator e-mail address'
6072 . ./myread
6073 perladmin="$ans"
6074
6075 : figure out how to guarantee perl startup
6076 case "$startperl" in
6077 '')
6078         case "$sharpbang" in
6079         *!)
6080                 $cat <<EOH
6081
6082 I can use the #! construct to start perl on your system. This will
6083 make startup of perl scripts faster, but may cause problems if you
6084 want to share those scripts and perl is not in a standard place
6085 ($binexp/perl) on all your platforms. The alternative is to force
6086 a shell by starting the script with a single ':' character.
6087
6088 EOH
6089                 dflt="$binexp/perl"
6090                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6091                 . ./myread
6092                 case "$ans" in
6093                 none)   startperl=": # use perl";;
6094                 *)      startperl="#!$ans"
6095                         if $test 30 -lt `echo "$ans" | wc -c`; then
6096                                 $cat >&4 <<EOM
6097
6098 WARNING:  Some systems limit the #! command to 32 characters.
6099 If you experience difficulty running Perl scripts with #!, try
6100 installing Perl in a directory with a shorter pathname.
6101
6102 EOM
6103                         fi ;;
6104                 esac
6105                 ;;
6106         *) startperl=": # use perl"
6107                 ;;
6108         esac
6109         ;;
6110 esac
6111 echo "I'll use $startperl to start perl scripts."
6112
6113 : figure best path for perl in scripts
6114 case "$perlpath" in
6115 '')
6116         perlpath="$binexp/perl"
6117         case "$startperl" in
6118         *!*) ;;
6119         *)
6120                 $cat <<EOH
6121
6122 I will use the "eval 'exec'" idiom to start Perl on your system.
6123 I can use the full path of your Perl binary for this purpose, but
6124 doing so may cause problems if you want to share those scripts and
6125 Perl is not always in a standard place ($binexp/perl).
6126
6127 EOH
6128                 dflt="$binexp/perl"
6129                 rp="What path shall I use in \"eval 'exec'\"?"
6130                 . ./myread
6131                 perlpath="$ans"
6132                 ;;
6133         esac
6134         ;;
6135 esac
6136 case "$startperl" in
6137 *!*)    ;;
6138 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6139 esac
6140
6141 : determine where public executable scripts go
6142 set scriptdir scriptdir
6143 eval $prefixit
6144 case "$scriptdir" in
6145 '')
6146         dflt="$bin"
6147         : guess some guesses
6148         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6149         $test -d /usr/share/bin && dflt=/usr/share/bin
6150         $test -d /usr/local/script && dflt=/usr/local/script
6151         $test -d $prefixexp/script && dflt=$prefixexp/script
6152         set dflt
6153         eval $prefixup
6154         ;;
6155 *)  dflt="$scriptdir"
6156         ;;
6157 esac
6158 $cat <<EOM
6159  
6160 Some installations have a separate directory just for executable scripts so
6161 that they can mount it across multiple architectures but keep the scripts in
6162 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6163 Or you might just lump your scripts in with all your other executables.
6164  
6165 EOM
6166 fn=d~
6167 rp='Where do you keep publicly executable scripts?'
6168 . ./getfile
6169 if $test "X$ansexp" != "X$scriptdirexp"; then
6170         installscript=''
6171 fi
6172 scriptdir="$ans"
6173 scriptdirexp="$ansexp"
6174 if $afs; then
6175         $cat <<EOM
6176
6177 Since you are running AFS, I need to distinguish the directory in which
6178 scripts reside from the directory in which they are installed (and from
6179 which they are presumably copied to the former directory by occult means).
6180
6181 EOM
6182         case "$installscript" in
6183         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6184         *) dflt="$installscript";;
6185         esac
6186         fn=de~
6187         rp='Where will public scripts be installed?'
6188         . ./getfile
6189         installscript="$ans"
6190 else
6191         installscript="$scriptdirexp"
6192 fi
6193
6194 : determine where site specific libraries go.
6195 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6196 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6197 case "$prefix" in
6198 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6199 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6200 esac
6201 eval $prefixit
6202 $cat <<EOM
6203
6204 The installation process will also create a directory for
6205 site-specific extensions and modules.  Some users find it convenient
6206 to place all site-specific files in this directory rather than in the
6207 main distribution directory.
6208
6209 EOM
6210 fn=d~+
6211 rp='Pathname for the site-specific library files?'
6212 . ./getfile
6213 if $test "X$sitelibexp" != "X$ansexp"; then
6214         installsitelib=''
6215 fi
6216 sitelib="$ans"
6217 sitelibexp="$ansexp"
6218 if $afs; then
6219         $cat <<EOM
6220
6221 Since you are running AFS, I need to distinguish the directory in
6222 which site-specific files reside from the directory in which they are
6223 installed (and from which they are presumably copied to the former
6224 directory by occult means).
6225
6226 EOM
6227         case "$installsitelib" in
6228         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6229         *) dflt="$installsitelib";;
6230         esac
6231         fn=de~
6232         rp='Where will site-specific files be installed?'
6233         . ./getfile
6234         installsitelib="$ans"
6235 else
6236         installsitelib="$sitelibexp"
6237 fi
6238
6239 : determine where site specific architecture-dependent libraries go.
6240 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6241 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6242 : sitelib may have an optional trailing /share.
6243 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6244 tdflt="$tdflt/$archname"
6245 set sitearch sitearch none
6246 eval $prefixit
6247 case "$sitearch" in
6248 '')     dflt="$tdflt" ;;
6249 *)      dflt="$sitearch" ;;
6250 esac
6251 $cat <<EOM
6252
6253 The installation process will also create a directory for
6254 architecture-dependent site-specific extensions and modules.
6255
6256 EOM
6257 fn=nd~+
6258 rp='Pathname for the site-specific architecture-dependent library files?'
6259 . ./getfile
6260 if $test "X$sitearchexp" != "X$ansexp"; then
6261         installsitearch=''
6262 fi
6263 sitearch="$ans"
6264 sitearchexp="$ansexp"
6265 if $afs; then
6266         $cat <<EOM
6267
6268 Since you are running AFS, I need to distinguish the directory in
6269 which site-specific architecture-dependent library files reside from
6270 the directory in which they are installed (and from which they are
6271 presumably copied to the former directory by occult means).
6272
6273 EOM
6274         case "$installsitearch" in
6275         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6276         *) dflt="$installsitearch";;
6277         esac
6278         fn=de~
6279         rp='Where will site-specific architecture-dependent files be installed?'
6280         . ./getfile
6281         installsitearch="$ans"
6282 else
6283         installsitearch="$sitearchexp"
6284 fi
6285
6286 cat <<EOM
6287
6288 Previous version of $package used the standard IO mechanisms as defined
6289 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6290 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6291 the default.  This abstraction layer can use AT&T's sfio (if you already
6292 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6293 problems with some extension modules.  Using PerlIO with stdio is safe,
6294 but it is slower than plain stdio and therefore is not the default.
6295
6296 If this doesn't make any sense to you, just accept the default 'n'.
6297 EOM
6298 case "$useperlio" in
6299 $define|true|[yY]*)     dflt='y';;
6300 *) dflt='n';;
6301 esac
6302 rp='Use the experimental PerlIO abstraction layer?'
6303 . ./myread
6304 case "$ans" in
6305 y|Y) 
6306         val="$define"
6307         ;;     
6308 *)      
6309         echo "Ok, doing things the stdio way"
6310         val="$undef"
6311         ;;
6312 esac
6313 set useperlio
6314 eval $setvar 
6315
6316 : Check how to convert floats to strings.
6317 if test "X$d_Gconvert" = X; then
6318         echo " "
6319         echo "Checking for an efficient way to convert floats to strings."
6320         $cat >try.c <<'EOP'
6321 #ifdef TRY_gconvert
6322 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6323 char *myname = "gconvert";
6324 #endif
6325 #ifdef TRY_gcvt
6326 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6327 char *myname = "gcvt";
6328 #endif
6329 #ifdef TRY_sprintf
6330 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6331 char *myname = "sprintf";
6332 #endif
6333
6334 #include <stdio.h>
6335
6336 int
6337 checkit(expect, got)
6338 char *expect;
6339 char *got;
6340 {
6341     if (strcmp(expect, got)) {
6342                 printf("%s oddity:  Expected %s, got %s\n",
6343                         myname, expect, got);
6344                 exit(1);
6345         }
6346 }
6347
6348 int main()
6349
6350         char buf[64]; 
6351         buf[63] = '\0';
6352
6353         /* This must be 1st test on (which?) platform */
6354         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6355         Gconvert(0.1, 8, 0, buf);
6356         checkit("0.1", buf);
6357
6358         Gconvert(1.0, 8, 0, buf); 
6359         checkit("1", buf);
6360
6361         Gconvert(0.0, 8, 0, buf); 
6362         checkit("0", buf);
6363
6364         Gconvert(-1.0, 8, 0, buf); 
6365         checkit("-1", buf);
6366
6367         /* Some Linux gcvt's give 1.e+5 here. */
6368         Gconvert(100000.0, 8, 0, buf); 
6369         checkit("100000", buf);
6370         
6371         /* Some Linux gcvt's give -1.e+5 here. */
6372         Gconvert(-100000.0, 8, 0, buf); 
6373         checkit("-100000", buf);
6374
6375         exit(0);
6376 }
6377 EOP
6378         case "$d_Gconvert" in
6379         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6380         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6381         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6382         *) xxx_list='gconvert gcvt sprintf' ;;
6383         esac
6384
6385         for xxx_convert in $xxx_list; do
6386                 echo "Trying $xxx_convert"
6387                 $rm -f try try$_o
6388                 set try -DTRY_$xxx_convert
6389                 if eval $compile; then
6390                         echo "$xxx_convert" found. >&4
6391                         if ./try; then
6392                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6393                                 break;
6394                         else
6395                                 echo "...But $xxx_convert didn't work as I expected."
6396                         fi
6397                 else
6398                         echo "$xxx_convert NOT found." >&4
6399                 fi
6400         done
6401                 
6402         case "$xxx_convert" in
6403         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6404         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6405         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6406         esac
6407 fi
6408
6409 : Initialize h_fcntl
6410 h_fcntl=false
6411
6412 : Initialize h_sysfile
6413 h_sysfile=false
6414
6415 : access call always available on UNIX
6416 set access d_access
6417 eval $inlibc
6418
6419 : locate the flags for 'access()'
6420 case "$d_access" in
6421 "$define")
6422         echo " "
6423         $cat >access.c <<'EOCP'
6424 #include <sys/types.h>
6425 #ifdef I_FCNTL
6426 #include <fcntl.h>
6427 #endif
6428 #ifdef I_SYS_FILE
6429 #include <sys/file.h>
6430 #endif
6431 #ifdef I_UNISTD
6432 #include <unistd.h>
6433 #endif
6434 int main() {
6435         exit(R_OK);
6436 }
6437 EOCP
6438         : check sys/file.h first, no particular reason here
6439         if $test `./findhdr sys/file.h` && \
6440                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6441                 h_sysfile=true;
6442                 echo "<sys/file.h> defines the *_OK access constants." >&4
6443         elif $test `./findhdr fcntl.h` && \
6444                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6445                 h_fcntl=true;
6446                 echo "<fcntl.h> defines the *_OK access constants." >&4
6447         elif $test `./findhdr unistd.h` && \
6448                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6449                 echo "<unistd.h> defines the *_OK access constants." >&4
6450         else
6451                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6452         fi
6453         ;;
6454 esac
6455 $rm -f access*
6456
6457 : see if accessx exists
6458 set accessx d_accessx
6459 eval $inlibc
6460
6461 : see if alarm exists
6462 set alarm d_alarm
6463 eval $inlibc
6464
6465 : Look for GNU-cc style attribute checking
6466 echo " "
6467 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6468 $cat >attrib.c <<'EOCP'
6469 #include <stdio.h>
6470 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6471 EOCP
6472 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6473         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6474                 echo "Your C compiler doesn't fully support __attribute__."
6475                 val="$undef"
6476         else
6477                 echo "Your C compiler supports __attribute__."
6478                 val="$define"
6479         fi
6480 else
6481         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6482         val="$undef"
6483 fi
6484 set d_attribut
6485 eval $setvar
6486 $rm -f attrib*
6487
6488 : see if bcmp exists
6489 set bcmp d_bcmp
6490 eval $inlibc
6491
6492 : see if bcopy exists
6493 set bcopy d_bcopy
6494 eval $inlibc
6495
6496 : see if this is a unistd.h system
6497 set unistd.h i_unistd
6498 eval $inhdr
6499
6500 : see if getpgrp exists
6501 set getpgrp d_getpgrp
6502 eval $inlibc
6503
6504 case "$d_getpgrp" in
6505 "$define")
6506         echo " "
6507         echo "Checking to see which flavor of getpgrp is in use..."
6508         $cat >set.c <<EOP
6509 #$i_unistd I_UNISTD
6510 #include <sys/types.h>
6511 #ifdef I_UNISTD
6512 #  include <unistd.h>
6513 #endif
6514 int main()
6515 {
6516         if (getuid() == 0) {
6517                 printf("(I see you are running Configure as super-user...)\n");
6518                 setuid(1);
6519         }
6520 #ifdef TRY_BSD_PGRP
6521         if (getpgrp(1) == 0)
6522                 exit(0);
6523 #else
6524         if (getpgrp() > 0)
6525                 exit(0);
6526 #endif
6527         exit(1);
6528 }
6529 EOP
6530         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6531                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6532                 val="$define"
6533         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6534                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6535                 val="$undef"
6536         else
6537                 echo "I can't seem to compile and run the test program."
6538                 if ./usg; then
6539                         xxx="a USG one, i.e. you use getpgrp()."
6540                 else
6541                         # SVR4 systems can appear rather BSD-ish.
6542                         case "$i_unistd" in
6543                         $undef)
6544                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6545                                 val="$define"
6546                                 ;;
6547                         $define)
6548                                 xxx="probably a USG one, i.e. you use getpgrp()."
6549                                 val="$undef"
6550                                 ;;
6551                         esac
6552                 fi
6553                 echo "Assuming your getpgrp is $xxx" >&4
6554         fi
6555         ;;
6556 *) val="$undef";;
6557 esac
6558 set d_bsdgetpgrp
6559 eval $setvar
6560 $rm -f set set.c
6561
6562 : see if setpgrp exists
6563 set setpgrp d_setpgrp
6564 eval $inlibc
6565
6566 case "$d_setpgrp" in
6567 "$define")
6568         echo " "
6569         echo "Checking to see which flavor of setpgrp is in use..."
6570         $cat >set.c <<EOP
6571 #$i_unistd I_UNISTD
6572 #include <sys/types.h>
6573 #ifdef I_UNISTD
6574 #  include <unistd.h>
6575 #endif
6576 int main()
6577 {
6578         if (getuid() == 0) {
6579                 printf("(I see you are running Configure as super-user...)\n");
6580                 setuid(1);
6581         }
6582 #ifdef TRY_BSD_PGRP
6583         if (-1 == setpgrp(1, 1))
6584                 exit(0);
6585 #else
6586         if (setpgrp() != -1)
6587                 exit(0);
6588 #endif
6589         exit(1);
6590 }
6591 EOP
6592         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6593                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6594                 val="$define"
6595         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6596                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6597                 val="$undef"
6598         else
6599                 echo "(I can't seem to compile and run the test program.)"
6600                 if ./usg; then
6601                         xxx="a USG one, i.e. you use setpgrp()."
6602                 else
6603                         # SVR4 systems can appear rather BSD-ish.
6604                         case "$i_unistd" in
6605                         $undef)
6606                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6607                                 val="$define"
6608                                 ;;
6609                         $define)
6610                                 xxx="probably a USG one, i.e. you use setpgrp()."
6611                                 val="$undef"
6612                                 ;;
6613                         esac
6614                 fi
6615                 echo "Assuming your setpgrp is $xxx" >&4
6616         fi
6617         ;;
6618 *) val="$undef";;
6619 esac
6620 set d_bsdsetpgrp
6621 eval $setvar
6622 $rm -f set set.c
6623 : see if bzero exists
6624 set bzero d_bzero
6625 eval $inlibc
6626
6627 : check for lengths of integral types
6628 echo " "
6629 case "$intsize" in
6630 '')
6631         echo "Checking to see how big your integers are..." >&4
6632         $cat >intsize.c <<'EOCP'
6633 #include <stdio.h>
6634 int main()
6635 {
6636         printf("intsize=%d;\n", sizeof(int));
6637         printf("longsize=%d;\n", sizeof(long));
6638         printf("shortsize=%d;\n", sizeof(short));
6639         exit(0);
6640 }
6641 EOCP
6642         set intsize
6643         if eval $compile_ok && ./intsize > /dev/null; then
6644                 eval `./intsize`
6645                 echo "Your integers are $intsize bytes long."
6646                 echo "Your long integers are $longsize bytes long."
6647                 echo "Your short integers are $shortsize bytes long."
6648         else
6649                 $cat >&4 <<EOM
6650 !
6651 Help! I can't compile and run the intsize test program: please enlighten me!
6652 (This is probably a misconfiguration in your system or libraries, and
6653 you really ought to fix it.  Still, I'll try anyway.)
6654 !
6655 EOM
6656                 dflt=4
6657                 rp="What is the size of an integer (in bytes)?"
6658                 . ./myread
6659                 intsize="$ans"
6660                 dflt=$intsize
6661                 rp="What is the size of a long integer (in bytes)?"
6662                 . ./myread
6663                 longsize="$ans"
6664                 dflt=2
6665                 rp="What is the size of a short integer (in bytes)?"
6666                 . ./myread
6667                 shortsize="$ans"
6668         fi
6669         ;;
6670 esac
6671 $rm -f intsize intsize.*
6672
6673 : see if signal is declared as pointer to function returning int or void
6674 echo " "
6675 xxx=`./findhdr signal.h`
6676 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6677 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6678         echo "You have int (*signal())() instead of void." >&4
6679         val="$undef"
6680 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6681         echo "You have void (*signal())()." >&4
6682         val="$define"
6683 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6684         echo "You have int (*signal())() instead of void." >&4
6685         val="$undef"
6686 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6687         echo "You have void (*signal())()." >&4
6688         val="$define"
6689 else
6690         case "$d_voidsig" in
6691         '')
6692         echo "I can't determine whether signal handler returns void or int..." >&4
6693                 dflt=void
6694                 rp="What type does your signal handler return?"
6695                 . ./myread
6696                 case "$ans" in
6697                 v*) val="$define";;
6698                 *) val="$undef";;
6699                 esac;;
6700         "$define")
6701                 echo "As you already told me, signal handler returns void." >&4
6702                 val="$define"
6703                 ;;
6704         *)      echo "As you already told me, signal handler returns int." >&4
6705                 val="$undef"
6706                 ;;
6707         esac
6708 fi
6709 set d_voidsig
6710 eval $setvar
6711 case "$d_voidsig" in
6712 "$define") signal_t="void";;
6713 *) signal_t="int";;
6714 esac
6715 $rm -f $$.tmp
6716
6717 : check for ability to cast large floats to 32-bit ints.
6718 echo " "
6719 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6720 if $test "$intsize" -ge 4; then
6721         xxx=int
6722 else
6723         xxx=long
6724 fi
6725 $cat >try.c <<EOCP
6726 #include <stdio.h>
6727 #include <sys/types.h>
6728 #include <signal.h>
6729 $signal_t blech(s) int s; { exit(3); }
6730 int main()
6731 {
6732         $xxx i32;
6733         double f, g;
6734         int result = 0;
6735         char str[16];
6736         signal(SIGFPE, blech);
6737
6738         /* Don't let compiler optimize the test away.  Store the number 
6739            in a writable string for gcc to pass to sscanf under HP/UX.
6740         */
6741         sprintf(str, "2147483647");
6742         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6743         g = 10 * f;
6744         i32  = ($xxx) g;
6745
6746         /* x86 processors will probably give 0x8000 0000, which is a
6747        sign change.  We don't want that.  We want to mimic SPARC
6748            behavior here, which is to preserve the sign and give
6749            back 0x7fff ffff.
6750         */
6751         if (i32 != ($xxx) f)
6752                 result |= 1;
6753         exit(result);
6754 }
6755 EOCP
6756 set try
6757 if eval $compile_ok; then
6758         ./try
6759         yyy=$?
6760 else
6761         echo "(I can't seem to compile the test program--assuming it can't)"
6762         yyy=1
6763 fi
6764 case "$yyy" in
6765 0)      val="$define"
6766         echo "Yup, it can."
6767         ;;
6768 *)      val="$undef"
6769         echo "Nope, it can't."
6770         ;;
6771 esac
6772 set d_casti32
6773 eval $setvar
6774 $rm -f try try.*
6775
6776 : check for ability to cast negative floats to unsigned
6777 echo " "
6778 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6779 $cat >try.c <<EOCP
6780 #include <stdio.h>
6781 #include <sys/types.h>
6782 #include <signal.h>
6783 $signal_t blech(s) int s; { exit(7); }
6784 $signal_t blech_in_list(s) int s; { exit(4); }
6785 unsigned long dummy_long(p) unsigned long p; { return p; }
6786 unsigned int dummy_int(p) unsigned int p; { return p; }
6787 unsigned short dummy_short(p) unsigned short p; { return p; }
6788 int main()
6789 {
6790         double f;
6791         unsigned long along;
6792         unsigned int aint;
6793         unsigned short ashort;
6794         int result = 0;
6795         char str[16];
6796         
6797         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6798            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6799            optimized the whole file away
6800         */
6801         /* Store the number in a writable string for gcc to pass to 
6802            sscanf under HP/UX.
6803         */
6804         sprintf(str, "-123");
6805         sscanf(str, "%lf", &f);  /* f = -123.; */
6806
6807         signal(SIGFPE, blech);
6808         along = (unsigned long)f;
6809         aint = (unsigned int)f;
6810         ashort = (unsigned short)f;
6811         if (along != (unsigned long)-123)
6812                 result |= 1;
6813         if (aint != (unsigned int)-123)
6814                 result |= 1;
6815         if (ashort != (unsigned short)-123)
6816                 result |= 1;
6817         sprintf(str, "1073741824.");
6818         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6819         f = f + f;
6820         along = 0;
6821         along = (unsigned long)f;
6822         if (along != 0x80000000)
6823                 result |= 2;
6824         f -= 1.;
6825         along = 0;
6826         along = (unsigned long)f;
6827         if (along != 0x7fffffff)
6828                 result |= 1;
6829         f += 2.;
6830         along = 0;
6831         along = (unsigned long)f;
6832         if (along != 0x80000001)
6833                 result |= 2;
6834         if (result)
6835                 exit(result);
6836         signal(SIGFPE, blech_in_list);
6837         sprintf(str, "123.");
6838         sscanf(str, "%lf", &f);  /* f = 123.; */
6839         along = dummy_long((unsigned long)f);
6840         aint = dummy_int((unsigned int)f);
6841         ashort = dummy_short((unsigned short)f);
6842         if (along != (unsigned long)123)
6843                 result |= 4;
6844         if (aint != (unsigned int)123)
6845                 result |= 4;
6846         if (ashort != (unsigned short)123)
6847                 result |= 4;
6848         exit(result);
6849
6850 }
6851 EOCP
6852 set try
6853 if eval $compile_ok; then
6854         ./try
6855         castflags=$?
6856 else
6857         echo "(I can't seem to compile the test program--assuming it can't)"
6858         castflags=7
6859 fi
6860 case "$castflags" in
6861 0)      val="$define"
6862         echo "Yup, it can."
6863         ;;
6864 *)      val="$undef"
6865         echo "Nope, it can't."
6866         ;;
6867 esac
6868 set d_castneg
6869 eval $setvar
6870 $rm -f try.*
6871
6872 : see if vprintf exists
6873 echo " "
6874 if set vprintf val -f d_vprintf; eval $csym; $val; then
6875         echo 'vprintf() found.' >&4
6876         val="$define"
6877         $cat >vprintf.c <<'EOF'
6878 #include <varargs.h>
6879
6880 int main() { xxx("foo"); }
6881
6882 xxx(va_alist)
6883 va_dcl
6884 {
6885         va_list args;
6886         char buf[10];
6887
6888         va_start(args);
6889         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6890 }
6891 EOF
6892         set vprintf
6893         if eval $compile && ./vprintf; then
6894                 echo "Your vsprintf() returns (int)." >&4
6895                 val2="$undef"
6896         else
6897                 echo "Your vsprintf() returns (char*)." >&4
6898                 val2="$define"
6899         fi
6900 else
6901         echo 'vprintf() NOT found.' >&4
6902                 val="$undef"
6903                 val2="$undef"
6904 fi
6905 set d_vprintf
6906 eval $setvar
6907 val=$val2
6908 set d_charvspr
6909 eval $setvar
6910
6911 : see if chown exists
6912 set chown d_chown
6913 eval $inlibc
6914
6915 : see if chroot exists
6916 set chroot d_chroot
6917 eval $inlibc
6918
6919 : see if chsize exists
6920 set chsize d_chsize
6921 eval $inlibc
6922
6923 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6924 while $test $# -ge 2; do
6925         case "$1" in
6926         $define) echo "#include <$2>";;
6927         esac ;
6928     shift 2;
6929 done > try.c;
6930 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6931 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6932         val="$define";
6933 else
6934         val="$undef";
6935 fi;
6936 set $varname;
6937 eval $setvar;
6938 $rm -f try.c try.o'
6939
6940 : see if this is a sys/uio.h system
6941 set sys/uio.h i_sysuio
6942 eval $inhdr
6943
6944 echo "Checking to see if your system supports struct iovec..." >&4
6945 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6946 eval $hasfield
6947 case "$d_iovec_s" in
6948 "$define")      echo "Yup, it does." >&4
6949                 ;;
6950 *)              echo "Nope, it doesn't." >&4
6951                 ;;
6952 esac
6953
6954 socketlib=''
6955 sockethdr=''
6956 : see whether socket exists
6957 echo " "
6958 $echo $n "Hmm... $c" >&4
6959 if set socket val -f d_socket; eval $csym; $val; then
6960         echo "Looks like you have Berkeley networking support." >&4
6961         d_socket="$define"
6962         if set setsockopt val -f; eval $csym; $val; then
6963                 d_oldsock="$undef"
6964         else
6965                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6966                 d_oldsock="$define"
6967         fi
6968 else
6969         if $contains socklib libc.list >/dev/null 2>&1; then
6970                 echo "Looks like you have Berkeley networking support." >&4
6971                 d_socket="$define"
6972                 : we will have to assume that it supports the 4.2 BSD interface
6973                 d_oldsock="$undef"
6974         else
6975                 echo "You don't have Berkeley networking in libc$_a..." >&4
6976                 if test "X$d_socket" = "X$define"; then
6977                    echo "...but you seem to believe that you have sockets." >&4
6978                 else
6979                         for net in net socket
6980                         do
6981                                 if test -f /usr/lib/lib$net$_a; then
6982                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6983                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6984                                         if $contains socket libc.list >/dev/null 2>&1; then
6985                                                 d_socket="$define"
6986                                                 socketlib="-l$net"
6987                                                 case "$net" in
6988                                                 net)
6989                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6990                                                         sockethdr="-I/usr/netinclude"
6991                                                         ;;
6992                                                 esac
6993                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6994                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6995                                                         d_oldsock="$undef"
6996                                                 else
6997                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6998                                                         d_oldsock="$define"
6999                                                 fi
7000                                                 break
7001                                         fi
7002                                 fi
7003                         done
7004                         if test "X$d_socket" != "X$define"; then
7005                            echo "or anywhere else I see." >&4
7006                            d_socket="$undef"
7007                            d_oldsock="$undef"
7008                         fi
7009                 fi
7010         fi
7011 fi
7012
7013 : see if socketpair exists
7014 set socketpair d_sockpair
7015 eval $inlibc
7016
7017
7018 echo " "
7019 echo "Checking the availability of certain socket constants..." >& 4
7020 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7021         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7022         $cat >try.c <<EOF
7023 #include <sys/types.h>
7024 #include <sys/socket.h>
7025 int main() {
7026     int i = $ENUM;
7027 }
7028 EOF
7029         val="$undef"
7030         set try; if eval $compile; then
7031                 val="$define"
7032         fi
7033         set d_${enum}; eval $setvar
7034         $rm -f try.c try
7035 done
7036
7037 set sendmsg d_sendmsg
7038 eval $inlibc
7039
7040 set recvmsg d_recvmsg
7041 eval $inlibc
7042
7043 echo " "
7044 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7045 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7046 eval $hasfield
7047 case "$d_msghdr_s" in
7048 "$define")      echo "Yup, it does." >&4
7049                 ;;
7050 *)              echo "Nope, it doesn't." >&4
7051                 ;;
7052 esac
7053
7054 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7055 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7056 eval $hasfield
7057 case "$d_cmsghdr_s" in
7058 "$define")      echo "Yup, it does." >&4
7059                 ;;
7060 *)              echo "Nope, it doesn't." >&4
7061                 ;;
7062 esac
7063
7064 : check for const keyword
7065 echo " "
7066 echo 'Checking to see if your C compiler knows about "const"...' >&4
7067 $cat >const.c <<'EOCP'
7068 typedef struct spug { int drokk; } spug;
7069 int main()
7070 {
7071         const char *foo;
7072         const spug y;
7073 }
7074 EOCP
7075 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7076         val="$define"
7077         echo "Yup, it does."
7078 else
7079         val="$undef"
7080         echo "Nope, it doesn't."
7081 fi
7082 set d_const
7083 eval $setvar
7084
7085 : see if crypt exists
7086 echo " "
7087 if set crypt val -f d_crypt; eval $csym; $val; then
7088         echo 'crypt() found.' >&4
7089         val="$define"
7090         cryptlib=''
7091 else
7092         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7093         if $test -z "$cryptlib"; then
7094                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7095         else
7096                 cryptlib=-lcrypt
7097         fi
7098         if $test -z "$cryptlib"; then
7099                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7100         else
7101                 cryptlib=-lcrypt
7102         fi
7103         if $test -z "$cryptlib"; then
7104                 cryptlib=`./loc libcrypt$_a "" $libpth`
7105         else
7106                 cryptlib=-lcrypt
7107         fi
7108         if $test -z "$cryptlib"; then
7109                 echo 'crypt() NOT found.' >&4
7110                 val="$undef"
7111         else
7112                 val="$define"
7113         fi
7114 fi
7115 set d_crypt
7116 eval $setvar
7117
7118 : get csh whereabouts
7119 case "$csh" in
7120 'csh') val="$undef" ;;
7121 *) val="$define" ;;
7122 esac
7123 set d_csh
7124 eval $setvar
7125 : Respect a hint or command line value for full_csh.
7126 case "$full_csh" in
7127 '') full_csh=$csh ;;
7128 esac
7129
7130 : see if cuserid exists
7131 set cuserid d_cuserid
7132 eval $inlibc
7133
7134 : see if this is a limits.h system
7135 set limits.h i_limits
7136 eval $inhdr
7137
7138 : see if this is a float.h system
7139 set float.h i_float
7140 eval $inhdr
7141
7142 : See if number of significant digits in a double precision number is known
7143 echo " "
7144 $cat >dbl_dig.c <<EOM
7145 #$i_limits I_LIMITS
7146 #$i_float I_FLOAT
7147 #ifdef I_LIMITS
7148 #include <limits.h>
7149 #endif
7150 #ifdef I_FLOAT
7151 #include <float.h>
7152 #endif
7153 #ifdef DBL_DIG
7154 printf("Contains DBL_DIG");
7155 #endif
7156 EOM
7157 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7158 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7159         echo "DBL_DIG found." >&4
7160         val="$define"
7161 else
7162         echo "DBL_DIG NOT found." >&4
7163         val="$undef"
7164 fi
7165 $rm -f dbl_dig.?
7166 set d_dbl_dig
7167 eval $setvar
7168
7169
7170 if $test X"$use64bits" = X"$define"; then
7171         : see if dbminit64 exists
7172         set dbminit64 d_dbminit64
7173         eval $inlibc
7174
7175         : see if dbmclose64 exists
7176         set dbmclose64 d_dbmclose64
7177         eval $inlibc
7178
7179         : see if fetch64 exists
7180         set fetch64 d_fetch64
7181         eval $inlibc
7182
7183         : see if store64 exists
7184         set store64 d_store64
7185         eval $inlibc
7186
7187         : see if delete64 exists
7188         set delete64 d_delete64
7189         eval $inlibc
7190
7191         : see if firstkey64 exists
7192         set firstkey64 d_firstkey64
7193         eval $inlibc
7194
7195         : see if nextkey64 exists
7196         set nextkey64 d_nextkey64
7197         eval $inlibc
7198 else
7199         val="$undef"
7200         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7201         do
7202                 set $xxx
7203                 eval $setvar
7204         done
7205 fi
7206
7207 : see if difftime exists
7208 set difftime d_difftime
7209 eval $inlibc
7210
7211 : see if sys/stat.h is available
7212 set sys/stat.h i_sysstat
7213 eval $inhdr
7214
7215 : see if this is a dirent system
7216 echo " "
7217 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7218         val="$define"
7219         echo "<dirent.h> found." >&4
7220 else
7221         val="$undef"
7222         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7223                 echo "<sys/dir.h> found." >&4
7224                 echo " "
7225         else
7226                 xinc=`./findhdr sys/ndir.h`
7227         fi
7228         echo "<dirent.h> NOT found." >&4
7229 fi
7230 set i_dirent
7231 eval $setvar
7232
7233 : Look for type of directory structure.
7234 echo " "
7235 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7236
7237 case "$direntrytype" in
7238 ''|' ')
7239         case "$i_dirent" in
7240         $define) guess1='struct dirent' ;;
7241         *) guess1='struct direct'  ;;
7242         esac
7243         ;;
7244 *)      guess1="$direntrytype"
7245         ;;
7246 esac
7247
7248 case "$guess1" in
7249 'struct dirent') guess2='struct direct' ;;
7250 *) guess2='struct dirent' ;;
7251 esac
7252                 
7253 if $contains "$guess1" try.c >/dev/null 2>&1; then
7254         direntrytype="$guess1"
7255         echo "Your directory entries are $direntrytype." >&4
7256 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7257         direntrytype="$guess2"
7258         echo "Your directory entries seem to be $direntrytype." >&4
7259 else
7260         echo "I don't recognize your system's directory entries." >&4
7261         rp="What type is used for directory entries on this system?"
7262         dflt="$guess1"
7263         . ./myread
7264         direntrytype="$ans"
7265 fi
7266 $rm -f try.c
7267
7268
7269 : see if the directory entry stores field length
7270 echo " "
7271 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7272 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7273         echo "Good, your directory entry keeps length information in d_namlen." >&4
7274         val="$define"
7275 else
7276         echo "Your directory entry does not know about the d_namlen field." >&4
7277         val="$undef"
7278 fi
7279 set d_dirnamlen
7280 eval $setvar
7281 $rm -f try.c
7282
7283
7284 if $test X"$use64bits" = X"$define"; then
7285         : see if fstat64 exists
7286         set fstat64 d_fstat64
7287         eval $inlibc
7288
7289         : see if ftruncate64 exists
7290         set ftruncate64 d_ftruncate64
7291         eval $inlibc
7292
7293         : see if lockf64 exists
7294         set lockf64 d_lockf64
7295         eval $inlibc
7296
7297         : see if llseek exists
7298         set llseek d_llseek
7299         eval $inlibc
7300
7301         : see if lseek64 exists
7302         set lseek64 d_lseek64
7303         eval $inlibc
7304
7305         : see if lstat64 exists
7306         set lstat64 d_lstat64
7307         eval $inlibc
7308
7309         : see if open64 exists
7310         set open64 d_open64
7311         eval $inlibc
7312
7313         : see if opendir64 exists
7314         set opendir64 d_opendir64
7315         eval $inlibc
7316
7317         : see if readdir64 exists
7318         set readdir64 d_readdir64
7319         eval $inlibc
7320
7321         : see if seekdir64 exists
7322         set seekdir64 d_seekdir64
7323         eval $inlibc
7324
7325         : see if stat64 exists
7326         set stat64 d_stat64
7327         eval $inlibc
7328
7329         : see if telldir64 exists
7330         set telldir64 d_telldir64
7331         eval $inlibc
7332
7333         : see if truncate64 exists
7334         set truncate64 d_truncate64
7335         eval $inlibc
7336
7337         : check for off64_t
7338         echo " "
7339         echo $n "Checking to see if your system supports off64_t...$c" >&4
7340         $cat >try.c <<EOCP
7341 #include <sys/types.h>
7342 #include <unistd.h>
7343 off64_t foo() { off64_t x; x = 7; return x; }'
7344 EOCP
7345         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7346                 val="$define"
7347                 echo " Yup, it does." >&4
7348         else
7349                 val="$undef"
7350                 echo " Nope, it doesn't." >&4
7351         fi
7352         $rm -f try.*
7353         set d_off64_t
7354         eval $setvar
7355
7356         : check for offset_t
7357         echo " "
7358         echo $n "Checking to see if your system supports offset_t...$c" >&4
7359         $cat >try.c <<EOCP
7360 #include <sys/types.h>
7361 #include <unistd.h>
7362 offset_t foo() { offset_t x; x = 7; return x; }'
7363 EOCP
7364         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7365                 val="$define"
7366                 echo " Yup, it does." >&4
7367         else
7368                 val="$undef"
7369                 echo " Nope, it doesn't." >&4
7370         fi
7371         $rm -f try.*
7372         set d_offset_t
7373         eval $setvar
7374
7375         : check for ino64_t
7376         echo " "
7377         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7378         val="$undef"
7379         case "$i_sysstat" in
7380         "$define" )
7381                 $cat >try.c <<EOCP
7382 #include <sys/types.h>
7383 #include <sys/stat.h>
7384 ino64_t foo() { ino64_t x; x = 7; return x; }'
7385 EOCP
7386                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7387                         val="$define"
7388                 fi
7389                 $rm -f try.*
7390                 ;;
7391         esac
7392         if $test "X$val" = X"$define"; then
7393                 echo " Yup, it does." >&4
7394         else
7395                 echo " Nope, it doesn't." >&4
7396         fi
7397         set d_ino64_t
7398         eval $setvar
7399
7400         : check for struct flock64
7401         echo " "
7402         echo "Checking to see if your system supports struct flock64..." >&4
7403         if $h_fcntl; then
7404                 set d_flock64_s flock64 l_len define fcntl.h
7405                 eval $hasfield
7406         else
7407                 val="$undef"
7408                 set d_flock64_s
7409                 eval $setvar
7410         fi
7411         case "$d_flock64_s" in
7412         "$define")      echo "Yup, it does." >&4
7413                         ;;
7414         *)              echo "Nope, it doesn't." >&4
7415                         ;;
7416         esac
7417
7418         : check for struct dirent64
7419         echo " "
7420         echo "Checking to see if your system supports struct dirent64..." >&4
7421         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7422         eval $hasfield
7423         case "$d_dirent64_s" in
7424         "$define")      echo "Yup, it does." >&4
7425                         ;;
7426         *)              echo "Nope, it doesn't." >&4
7427                         ;;
7428         esac
7429
7430 else
7431         val="$undef"
7432         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
7433         do
7434                 set $xxx
7435                 eval $setvar
7436         done
7437 fi
7438
7439 : see if dlerror exists
7440 xxx_runnm="$runnm"
7441 runnm=false
7442 set dlerror d_dlerror
7443 eval $inlibc
7444 runnm="$xxx_runnm"
7445
7446 : see if dlfcn is available
7447 set dlfcn.h i_dlfcn
7448 eval $inhdr
7449
7450 case "$usedl" in
7451 $define|y|true)
7452         $cat << EOM
7453
7454 On a few systems, the dynamically loaded modules that perl generates and uses
7455 will need a different extension than shared libs. The default will probably
7456 be appropriate.
7457
7458 EOM
7459         case "$dlext" in
7460         '')     dflt="$so" ;;
7461         *)      dflt="$dlext" ;;
7462         esac
7463         rp='What is the extension of dynamically loaded modules'
7464         . ./myread
7465         dlext="$ans"
7466         ;;
7467 *)
7468         dlext="none"
7469         ;;
7470 esac
7471
7472 : Check if dlsym need a leading underscore
7473 echo " "
7474 val="$undef"
7475
7476 case "$dlsrc" in
7477 dl_dlopen.xs)
7478         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7479         $cat >dyna.c <<'EOM'
7480 fred () { }
7481 EOM
7482
7483 $cat >fred.c<<EOM
7484
7485 #include <stdio.h>
7486 #$i_dlfcn I_DLFCN
7487 #ifdef I_DLFCN
7488 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7489 #else
7490 #include <sys/types.h>
7491 #include <nlist.h>
7492 #include <link.h>
7493 #endif
7494
7495 extern int fred() ;
7496
7497 int main()
7498 {
7499     void * handle ;
7500     void * symbol ;
7501 #ifndef RTLD_LAZY
7502     int mode = 1 ;
7503 #else
7504     int mode = RTLD_LAZY ;
7505 #endif
7506     handle = dlopen("./dyna.$dlext", mode) ;
7507     if (handle == NULL) {
7508         printf ("1\n") ;
7509         fflush (stdout) ;
7510         exit(0);
7511     }
7512     symbol = dlsym(handle, "fred") ;
7513     if (symbol == NULL) {
7514         /* try putting a leading underscore */
7515         symbol = dlsym(handle, "_fred") ;
7516         if (symbol == NULL) {
7517             printf ("2\n") ;
7518             fflush (stdout) ;
7519             exit(0);
7520         }
7521         printf ("3\n") ;
7522     }
7523     else
7524         printf ("4\n") ;
7525     fflush (stdout) ;
7526     exit(0);
7527 }
7528 EOM
7529         : Call the object file tmp-dyna.o in case dlext=o.
7530         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7531                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7532                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7533                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7534                 xxx=`./fred`
7535                 case $xxx in
7536                 1)      echo "Test program failed using dlopen." >&4
7537                         echo "Perhaps you should not use dynamic loading." >&4;;
7538                 2)      echo "Test program failed using dlsym." >&4
7539                         echo "Perhaps you should not use dynamic loading." >&4;;
7540                 3)      echo "dlsym needs a leading underscore" >&4
7541                         val="$define" ;;
7542                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7543                 esac
7544         else
7545                 echo "I can't compile and run the test program." >&4
7546         fi
7547         ;;
7548 esac
7549                 
7550 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7551
7552 set d_dlsymun
7553 eval $setvar
7554
7555 hasproto='varname=$1; func=$2; shift; shift;
7556 while $test $# -ge 2; do
7557         case "$1" in
7558         $define) echo "#include <$2>";;
7559         esac ;
7560     shift 2;
7561 done > try.c;
7562 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7563 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7564         echo "$func() prototype found.";
7565         val="$define";
7566 else
7567         echo "$func() prototype NOT found.";
7568         val="$undef";
7569 fi;
7570 set $varname;
7571 eval $setvar;
7572 $rm -f try.c tryout.c'
7573
7574 : see if prototype for drand48 is available
7575 echo " "
7576 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7577 eval $hasproto
7578
7579 : see if dup2 exists
7580 set dup2 d_dup2
7581 eval $inlibc
7582
7583 : see if eaccess exists
7584 set eaccess d_eaccess
7585 eval $inlibc
7586
7587 : see if endgrent exists
7588 set endgrent d_endgrent
7589 eval $inlibc
7590
7591 : see if endhostent exists
7592 set endhostent d_endhent
7593 eval $inlibc
7594
7595 : see if endnetent exists
7596 set endnetent d_endnent
7597 eval $inlibc
7598
7599 : see if endprotoent exists
7600 set endprotoent d_endpent
7601 eval $inlibc
7602
7603 : see if endpwent exists
7604 set endpwent d_endpwent
7605 eval $inlibc
7606
7607 : see if endservent exists
7608 set endservent d_endsent
7609 eval $inlibc
7610
7611 : see if endspent exists
7612 set endspent d_endspent
7613 eval $inlibc
7614
7615 : Locate the flags for 'open()'
7616 echo " "
7617 $cat >open3.c <<'EOCP'
7618 #include <sys/types.h>
7619 #ifdef I_FCNTL
7620 #include <fcntl.h>
7621 #endif
7622 #ifdef I_SYS_FILE
7623 #include <sys/file.h>
7624 #endif
7625 int main() {
7626         if(O_RDONLY);
7627 #ifdef O_TRUNC
7628         exit(0);
7629 #else
7630         exit(1);
7631 #endif
7632 }
7633 EOCP
7634 : check sys/file.h first to get FREAD on Sun
7635 if $test `./findhdr sys/file.h` && \
7636                 set open3 -DI_SYS_FILE && eval $compile; then
7637         h_sysfile=true;
7638         echo "<sys/file.h> defines the O_* constants..." >&4
7639         if ./open3; then
7640                 echo "and you have the 3 argument form of open()." >&4
7641                 val="$define"
7642         else
7643                 echo "but not the 3 argument form of open().  Oh, well." >&4
7644                 val="$undef"
7645         fi
7646 elif $test `./findhdr fcntl.h` && \
7647                 set open3 -DI_FCNTL && eval $compile; then
7648         h_fcntl=true;
7649         echo "<fcntl.h> defines the O_* constants..." >&4
7650         if ./open3; then
7651                 echo "and you have the 3 argument form of open()." >&4
7652                 val="$define"
7653         else
7654                 echo "but not the 3 argument form of open().  Oh, well." >&4
7655                 val="$undef"
7656         fi
7657 else
7658         val="$undef"
7659         echo "I can't find the O_* constant definitions!  You got problems." >&4
7660 fi
7661 set d_open3
7662 eval $setvar
7663 $rm -f open3*
7664
7665 : check for non-blocking I/O stuff
7666 case "$h_sysfile" in
7667 true) echo "#include <sys/file.h>" > head.c;;
7668 *)
7669         case "$h_fcntl" in
7670         true) echo "#include <fcntl.h>" > head.c;;
7671         *) echo "#include <sys/fcntl.h>" > head.c;;
7672         esac
7673         ;;
7674 esac
7675 echo " "
7676 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7677 case "$o_nonblock" in
7678 '')
7679         $cat head.c > try.c
7680         $cat >>try.c <<'EOCP'
7681 int main() {
7682 #ifdef O_NONBLOCK
7683         printf("O_NONBLOCK\n");
7684         exit(0);
7685 #endif
7686 #ifdef O_NDELAY
7687         printf("O_NDELAY\n");
7688         exit(0);
7689 #endif
7690 #ifdef FNDELAY
7691         printf("FNDELAY\n");
7692         exit(0);
7693 #endif
7694         exit(0);
7695 }
7696 EOCP
7697         set try
7698         if eval $compile_ok; then
7699                 o_nonblock=`./try`
7700                 case "$o_nonblock" in
7701                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7702                 *) echo "Seems like we can use $o_nonblock.";;
7703                 esac
7704         else
7705                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7706         fi
7707         ;;
7708 *) echo "Using $hint value $o_nonblock.";;
7709 esac
7710 $rm -f try try.* .out core
7711
7712 echo " "
7713 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7714 case "$eagain" in
7715 '')
7716         $cat head.c > try.c
7717         $cat >>try.c <<EOCP
7718 #include <errno.h>
7719 #include <sys/types.h>
7720 #include <signal.h>
7721 #define MY_O_NONBLOCK $o_nonblock
7722 #ifndef errno  /* XXX need better Configure test */
7723 extern int errno;
7724 #endif
7725 $signal_t blech(x) int x; { exit(3); }
7726 EOCP
7727         $cat >> try.c <<'EOCP'
7728 int main()
7729 {
7730         int pd[2];
7731         int pu[2];
7732         char buf[1];
7733         char string[100];
7734
7735         pipe(pd);       /* Down: child -> parent */
7736         pipe(pu);       /* Up: parent -> child */
7737         if (0 != fork()) {
7738                 int ret;
7739                 close(pd[1]);   /* Parent reads from pd[0] */
7740                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7741                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7742                         exit(1);
7743                 signal(SIGALRM, blech);
7744                 alarm(5);
7745                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7746                         exit(2);
7747                 sprintf(string, "%d\n", ret);
7748                 write(2, string, strlen(string));
7749                 alarm(0);
7750 #ifdef EAGAIN
7751                 if (errno == EAGAIN) {
7752                         printf("EAGAIN\n");
7753                         goto ok;
7754                 }
7755 #endif
7756 #ifdef EWOULDBLOCK
7757                 if (errno == EWOULDBLOCK)
7758                         printf("EWOULDBLOCK\n");
7759 #endif
7760         ok:
7761                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7762                 sleep(2);                               /* Give it time to close our pipe */
7763                 alarm(5);
7764                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7765                 alarm(0);
7766                 sprintf(string, "%d\n", ret);
7767                 write(3, string, strlen(string));
7768                 exit(0);
7769         }
7770
7771         close(pd[0]);                   /* We write to pd[1] */
7772         close(pu[1]);                   /* We read from pu[0] */
7773         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7774         close(pd[1]);                   /* Pipe pd is now fully closed! */
7775         exit(0);                                /* Bye bye, thank you for playing! */
7776 }
7777 EOCP
7778         set try
7779         if eval $compile_ok; then
7780                 echo "$startsh" >mtry
7781                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7782                 chmod +x mtry
7783                 ./mtry >/dev/null 2>&1
7784                 case $? in
7785                 0) eagain=`$cat try.out`;;
7786                 1) echo "Could not perform non-blocking setting!";;
7787                 2) echo "I did a successful read() for something that was not there!";;
7788                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7789                 *) echo "Something terribly wrong happened during testing.";;
7790                 esac
7791                 rd_nodata=`$cat try.ret`
7792                 echo "A read() system call with no data present returns $rd_nodata."
7793                 case "$rd_nodata" in
7794                 0|-1) ;;
7795                 *)
7796                         echo "(That's peculiar, fixing that to be -1.)"
7797                         rd_nodata=-1
7798                         ;;
7799                 esac
7800                 case "$eagain" in
7801                 '')
7802                         echo "Forcing errno EAGAIN on read() with no data available."
7803                         eagain=EAGAIN
7804                         ;;
7805                 *)
7806                         echo "Your read() sets errno to $eagain when no data is available."
7807                         ;;
7808                 esac
7809                 status=`$cat try.err`
7810                 case "$status" in
7811                 0) echo "And it correctly returns 0 to signal EOF.";;
7812                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7813                 *) echo "However, your read() returns '$status' on EOF??";;
7814                 esac
7815                 val="$define"
7816                 if test "$status" = "$rd_nodata"; then
7817                         echo "WARNING: you can't distinguish between EOF and no data!"
7818                         val="$undef"
7819                 fi
7820         else
7821                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7822                 eagain=EAGAIN
7823         fi
7824         set d_eofnblk
7825         eval $setvar
7826         ;;
7827 *)
7828         echo "Using $hint value $eagain."
7829         echo "Your read() returns $rd_nodata when no data is present."
7830         case "$d_eofnblk" in
7831         "$define") echo "And you can see EOF because read() returns 0.";;
7832         "$undef") echo "But you can't see EOF status from read() returned value.";;
7833         *)
7834                 echo "(Assuming you can't see EOF status from read anyway.)"
7835                 d_eofnblk=$undef
7836                 ;;
7837         esac
7838         ;;
7839 esac
7840 $rm -f try try.* .out core head.c mtry
7841
7842 : see if fchmod exists
7843 set fchmod d_fchmod
7844 eval $inlibc
7845
7846 : see if fchown exists
7847 set fchown d_fchown
7848 eval $inlibc
7849
7850 : see if this is an fcntl system
7851 set fcntl d_fcntl
7852 eval $inlibc
7853
7854 : see if sys/select.h has to be included
7855 set sys/select.h i_sysselct
7856 eval $inhdr
7857
7858 : see if we should include time.h, sys/time.h, or both
7859 echo " "
7860 if test "X$timeincl" = X; then
7861         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7862         $echo $n "I'm now running the test program...$c"
7863         $cat >try.c <<'EOCP'
7864 #include <sys/types.h>
7865 #ifdef I_TIME
7866 #include <time.h>
7867 #endif
7868 #ifdef I_SYSTIME
7869 #ifdef SYSTIMEKERNEL
7870 #define KERNEL
7871 #endif
7872 #include <sys/time.h>
7873 #endif
7874 #ifdef I_SYSSELECT
7875 #include <sys/select.h>
7876 #endif
7877 int main()
7878 {
7879         struct tm foo;
7880 #ifdef S_TIMEVAL
7881         struct timeval bar;
7882 #endif
7883 #ifdef S_TIMEZONE
7884         struct timezone tzp;
7885 #endif
7886         if (foo.tm_sec == foo.tm_sec)
7887                 exit(0);
7888 #ifdef S_TIMEVAL
7889         if (bar.tv_sec == bar.tv_sec)
7890                 exit(0);
7891 #endif
7892         exit(1);
7893 }
7894 EOCP
7895         flags=''
7896         for s_timezone in '-DS_TIMEZONE' ''; do
7897         sysselect=''
7898         for s_timeval in '-DS_TIMEVAL' ''; do
7899         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7900         for i_time in '' '-DI_TIME'; do
7901         for i_systime in '-DI_SYSTIME' ''; do
7902                 case "$flags" in
7903                 '') $echo $n ".$c"
7904                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7905                         if eval $compile; then
7906                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7907                                 shift
7908                                 flags="$*"
7909                                 echo " "
7910                                 $echo $n "Succeeded with $flags$c"
7911                         fi
7912                         ;;
7913                 esac
7914         done
7915         done
7916         done
7917         done
7918         done
7919         timeincl=''
7920         echo " "
7921         case "$flags" in
7922         *SYSTIMEKERNEL*) i_systimek="$define"
7923                 timeincl=`./findhdr sys/time.h`
7924                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7925         *) i_systimek="$undef";;
7926         esac
7927         case "$flags" in
7928         *I_TIME*) i_time="$define"
7929                 timeincl=`./findhdr time.h`" $timeincl"
7930                 echo "We'll include <time.h>." >&4;;
7931         *) i_time="$undef";;
7932         esac
7933         case "$flags" in
7934         *I_SYSTIME*) i_systime="$define"
7935                 timeincl=`./findhdr sys/time.h`" $timeincl"
7936                 echo "We'll include <sys/time.h>." >&4;;
7937         *) i_systime="$undef";;
7938         esac
7939         $rm -f try.c try
7940 fi
7941
7942 : check for fd_set items
7943 $cat <<EOM
7944
7945 Checking to see how well your C compiler handles fd_set and friends ...
7946 EOM
7947 $cat >fd_set.c <<EOCP
7948 #$i_systime I_SYS_TIME
7949 #$i_sysselct I_SYS_SELECT
7950 #$d_socket HAS_SOCKET
7951 #include <sys/types.h>
7952 #ifdef HAS_SOCKET
7953 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7954 #endif
7955 #ifdef I_SYS_TIME
7956 #include <sys/time.h>
7957 #endif
7958 #ifdef I_SYS_SELECT
7959 #include <sys/select.h>
7960 #endif
7961 int main() {
7962         fd_set fds;
7963
7964 #ifdef TRYBITS
7965         if(fds.fds_bits);
7966 #endif
7967
7968 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7969         exit(0);
7970 #else
7971         exit(1);
7972 #endif
7973 }
7974 EOCP
7975 set fd_set -DTRYBITS
7976 if eval $compile; then
7977         d_fds_bits="$define"
7978         d_fd_set="$define"
7979         echo "Well, your system knows about the normal fd_set typedef..." >&4
7980         if ./fd_set; then
7981                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7982                 d_fd_macros="$define"
7983         else
7984                 $cat >&4 <<'EOM'
7985 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7986 EOM
7987                 d_fd_macros="$undef"
7988         fi
7989 else
7990         $cat <<'EOM'
7991 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7992 EOM
7993         set fd_set
7994         if eval $compile; then
7995                 d_fds_bits="$undef"
7996                 d_fd_set="$define"
7997                 echo "Well, your system has some sort of fd_set available..." >&4
7998                 if ./fd_set; then
7999                         echo "and you have the normal fd_set macros." >&4
8000                         d_fd_macros="$define"
8001                 else
8002                         $cat <<'EOM'
8003 but not the normal fd_set macros!  Gross!  More work for me...
8004 EOM
8005                         d_fd_macros="$undef"
8006                 fi
8007         else
8008         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8009                 d_fd_set="$undef"
8010                 d_fds_bits="$undef"
8011                 d_fd_macros="$undef"
8012         fi
8013 fi
8014 $rm -f fd_set*
8015
8016 : see if fgetpos exists
8017 set fgetpos d_fgetpos
8018 eval $inlibc
8019
8020
8021 if $test X"$use64bits" = X"$define"; then
8022         : see if fgetpos64 exists
8023         set fgetpos64 d_fgetpos64
8024         eval $inlibc
8025
8026         : see if fopen64 exists
8027         set freopen64 d_fopen64
8028         eval $inlibc
8029
8030         : see if freopen64 exists
8031         set freopen64 d_freopen64
8032         eval $inlibc
8033
8034         : see if fseek64 exists
8035         set fseek64 d_fseek64
8036         eval $inlibc
8037
8038         : see if fseeko64 exists
8039         set fseeko64 d_fseeko64
8040         eval $inlibc
8041
8042         : see if fsetpos64 exists
8043         set fsetpos64 d_fsetpos64
8044         eval $inlibc
8045
8046         : see if ftell64 exists
8047         set ftell64 d_ftell64
8048         eval $inlibc
8049
8050         : see if ftello64 exists
8051         set ftello64 d_ftello64
8052         eval $inlibc
8053
8054         : see if tmpfile64 exists
8055         set tmpfile64 d_tmpfile64
8056         eval $inlibc
8057 else
8058         val="$undef"
8059         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8060         do
8061                 set $xxx
8062                 eval $setvar
8063         done
8064 fi
8065
8066 : see if flock exists
8067 set flock d_flock
8068 eval $inlibc
8069
8070 : see if fork exists
8071 set fork d_fork
8072 eval $inlibc
8073
8074 : see if pathconf exists
8075 set pathconf d_pathconf
8076 eval $inlibc
8077
8078 : see if fpathconf exists
8079 set fpathconf d_fpathconf
8080 eval $inlibc
8081
8082 : see if fseeko exists
8083 set fseeko d_fseeko
8084 eval $inlibc
8085
8086 : see if fsetpos exists
8087 set fsetpos d_fsetpos
8088 eval $inlibc
8089
8090 : see if this is a sys/param system
8091 set sys/param.h i_sysparam
8092 eval $inhdr
8093
8094 : see if this is a sys/mount.h system
8095 set sys/mount.h i_sysmount
8096 eval $inhdr
8097
8098
8099 : see if statfs exists
8100 set statfs d_statfs
8101 eval $inlibc
8102
8103 : see if fstatfs exists
8104 set fstatfs d_fstatfs
8105 eval $inlibc
8106
8107 : see if statfs knows about mount flags
8108 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8109 eval $hasfield
8110
8111
8112 : see if statvfs exists
8113 set statvfs d_statvfs
8114 eval $inlibc
8115
8116 : see if fstatvfs exists
8117 set fstatvfs d_fstatvfs
8118 eval $inlibc
8119
8120
8121 : see if ftello exists
8122 set ftello d_ftello
8123 eval $inlibc
8124
8125 : see if getgrent exists
8126 set getgrent d_getgrent
8127 eval $inlibc
8128
8129 : see if gethostbyaddr exists
8130 set gethostbyaddr d_gethbyaddr
8131 eval $inlibc
8132
8133 : see if gethostbyname exists
8134 set gethostbyname d_gethbyname
8135 eval $inlibc
8136
8137 : see if gethostent exists
8138 set gethostent d_gethent
8139 eval $inlibc
8140
8141 : see how we will look up host name
8142 echo " "
8143 call=''
8144 if set gethostname val -f d_gethname; eval $csym; $val; then
8145         echo 'gethostname() found.' >&4
8146         d_gethname="$define"
8147         call=gethostname
8148 fi
8149 if set uname val -f d_uname; eval $csym; $val; then
8150         if ./xenix; then
8151                 $cat <<'EOM'
8152 uname() was found, but you're running xenix, and older versions of xenix
8153 have a broken uname(). If you don't really know whether your xenix is old
8154 enough to have a broken system call, use the default answer.
8155
8156 EOM
8157                 dflt=y
8158                 case "$d_uname" in
8159                 "$define") dflt=n;;
8160                 esac
8161                 rp='Is your uname() broken?'
8162                 . ./myread
8163                 case "$ans" in
8164                 n*) d_uname="$define"; call=uname;;
8165                 esac
8166         else
8167                 echo 'uname() found.' >&4
8168                 d_uname="$define"
8169                 case "$call" in
8170                 '') call=uname ;;
8171                 esac
8172         fi
8173 fi
8174 case "$d_gethname" in
8175 '') d_gethname="$undef";;
8176 esac
8177 case "$d_uname" in
8178 '') d_uname="$undef";;
8179 esac
8180 case "$d_uname$d_gethname" in
8181 *define*)
8182         dflt=n
8183         cat <<EOM
8184  
8185 Every now and then someone has a $call() that lies about the hostname
8186 but can't be fixed for political or economic reasons.  If you wish, I can
8187 pretend $call() isn't there and maybe compute hostname at run-time
8188 thanks to the '$phostname' command.
8189
8190 EOM
8191         rp="Shall I ignore $call() from now on?"
8192         . ./myread
8193         case "$ans" in
8194         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8195         esac;;
8196 esac
8197 case "$phostname" in
8198 '') aphostname='';;
8199 *) case "$aphostname" in
8200         /*) ;;
8201         *) set X $phostname
8202                 shift
8203                 file=$1
8204                 shift
8205                 file=`./loc $file $file $pth`
8206                 aphostname=`echo $file $*`
8207                 ;;
8208         esac
8209         ;;
8210 esac
8211 case "$d_uname$d_gethname" in
8212 *define*) ;;
8213 *)
8214         case "$phostname" in
8215         '')
8216                 echo "There will be no way for $package to get your hostname." >&4;;
8217         *)
8218         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8219                 ;;
8220         esac;;
8221 esac
8222 case "$d_phostname" in
8223 '') d_phostname="$undef";;
8224 esac
8225
8226 : see if this is a netdb.h system
8227 set netdb.h i_netdb
8228 eval $inhdr
8229
8230 : see if prototypes for various gethostxxx netdb.h functions are available
8231 echo " "
8232 set d_gethostprotos gethostent $i_netdb netdb.h
8233 eval $hasproto
8234
8235 : see if getlogin exists
8236 set getlogin d_getlogin
8237 eval $inlibc
8238
8239 : see if getmntent exists
8240 set getmntent d_getmntent
8241 eval $inlibc
8242
8243 : see if getnetbyaddr exists
8244 set getnetbyaddr d_getnbyaddr
8245 eval $inlibc
8246
8247 : see if getnetbyname exists
8248 set getnetbyname d_getnbyname
8249 eval $inlibc
8250
8251 : see if getnetent exists
8252 set getnetent d_getnent
8253 eval $inlibc
8254
8255 : see if prototypes for various getnetxxx netdb.h functions are available
8256 echo " "
8257 set d_getnetprotos getnetent $i_netdb netdb.h
8258 eval $hasproto
8259
8260
8261 : see if getprotobyname exists
8262 set getprotobyname d_getpbyname
8263 eval $inlibc
8264
8265 : see if getprotobynumber exists
8266 set getprotobynumber d_getpbynumber
8267 eval $inlibc
8268
8269 : see if getprotoent exists
8270 set getprotoent d_getpent
8271 eval $inlibc
8272
8273 : see if getpgid exists
8274 set getpgid d_getpgid
8275 eval $inlibc
8276
8277 : see if getpgrp2 exists
8278 set getpgrp2 d_getpgrp2
8279 eval $inlibc
8280
8281 : see if getppid exists
8282 set getppid d_getppid
8283 eval $inlibc
8284
8285 : see if getpriority exists
8286 set getpriority d_getprior
8287 eval $inlibc
8288
8289 : see if prototypes for various getprotoxxx netdb.h functions are available
8290 echo " "
8291 set d_getprotoprotos getprotoent $i_netdb netdb.h
8292 eval $hasproto
8293
8294 : see if getpwent exists
8295 set getpwent d_getpwent
8296 eval $inlibc
8297
8298
8299 : see if getservbyname exists
8300 set getservbyname d_getsbyname
8301 eval $inlibc
8302
8303 : see if getservbyport exists
8304 set getservbyport d_getsbyport
8305 eval $inlibc
8306
8307 : see if getservent exists
8308 set getservent d_getsent
8309 eval $inlibc
8310
8311 : see if prototypes for various getservxxx netdb.h functions are available
8312 echo " "
8313 set d_getservprotos getservent $i_netdb netdb.h
8314 eval $hasproto
8315
8316 : see if getspent exists
8317 set getspent d_getspent
8318 eval $inlibc
8319
8320 : see if getspnam exists
8321 set getspnam d_getspnam
8322 eval $inlibc
8323
8324 : see if gettimeofday or ftime exists
8325 set gettimeofday d_gettimeod
8326 eval $inlibc
8327 case "$d_gettimeod" in
8328 "$undef")
8329         set ftime d_ftime 
8330         eval $inlibc
8331         ;;
8332 *)
8333         val="$undef"; set d_ftime; eval $setvar
8334         ;;
8335 esac
8336 case "$d_gettimeod$d_ftime" in
8337 "$undef$undef")
8338         echo " "
8339         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8340         ;;
8341 esac
8342
8343 : see if this is an grp system
8344 set grp.h i_grp
8345 eval $inhdr
8346
8347 case "$i_grp" in
8348 $define)
8349         xxx=`./findhdr grp.h`
8350         $cppstdin $cppflags $cppminus < $xxx >$$.h
8351
8352         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8353                 val="$define"
8354         else
8355                 val="$undef"
8356         fi
8357         set d_grpasswd
8358         eval $setvar
8359
8360         $rm -f $$.h
8361         ;;
8362 *)
8363         val="$undef";
8364         set d_grpasswd; eval $setvar
8365         ;;
8366 esac
8367
8368 : see if hasmntopt exists
8369 set hasmntopt d_hasmntopt
8370 eval $inlibc
8371
8372 : see if this is a netinet/in.h or sys/in.h system
8373 set netinet/in.h i_niin sys/in.h i_sysin
8374 eval $inhdr
8375
8376 : see if arpa/inet.h has to be included
8377 set arpa/inet.h i_arpainet
8378 eval $inhdr
8379
8380 : see if htonl --and friends-- exists
8381 val=''
8382 set htonl val
8383 eval $inlibc
8384
8385 : Maybe they are macros.
8386 case "$val" in
8387 $undef)
8388         $cat >htonl.c <<EOM
8389 #include <stdio.h>
8390 #include <sys/types.h>
8391 #$i_niin I_NETINET_IN
8392 #$i_sysin I_SYS_IN
8393 #$i_arpainet I_ARPA_INET
8394 #ifdef I_NETINET_IN
8395 #include <netinet/in.h>
8396 #endif
8397 #ifdef I_SYS_IN
8398 #include <sys/in.h>
8399 #endif
8400 #ifdef I_ARPA_INET
8401 #include <arpa/inet.h>
8402 #endif
8403 #ifdef htonl
8404 printf("Defined as a macro.");
8405 #endif
8406 EOM
8407         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8408         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8409                 val="$define"
8410                 echo "But it seems to be defined as a macro." >&4
8411         fi
8412         $rm -f htonl.?
8413         ;;
8414 esac
8415 set d_htonl
8416 eval $setvar
8417
8418 : see which of string.h or strings.h is needed
8419 echo " "
8420 strings=`./findhdr string.h`
8421 if $test "$strings" && $test -r "$strings"; then
8422         echo "Using <string.h> instead of <strings.h>." >&4
8423         val="$define"
8424 else
8425         val="$undef"
8426         strings=`./findhdr strings.h`
8427         if $test "$strings" && $test -r "$strings"; then
8428                 echo "Using <strings.h> instead of <string.h>." >&4
8429         else
8430                 echo "No string header found -- You'll surely have problems." >&4
8431         fi
8432 fi
8433 set i_string
8434 eval $setvar
8435 case "$i_string" in
8436 "$undef") strings=`./findhdr strings.h`;;
8437 *)        strings=`./findhdr string.h`;;
8438 esac
8439
8440 : index or strchr
8441 echo " "
8442 if set index val -f; eval $csym; $val; then
8443         if set strchr val -f d_strchr; eval $csym; $val; then
8444                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8445                         val="$define"
8446                         vali="$undef"
8447                         echo "strchr() found." >&4
8448                 else
8449                         val="$undef"
8450                         vali="$define"
8451                         echo "index() found." >&4
8452                 fi
8453         else
8454                 val="$undef"
8455                 vali="$define"
8456                 echo "index() found." >&4
8457         fi
8458 else
8459         if set strchr val -f d_strchr; eval $csym; $val; then
8460                 val="$define"
8461                 vali="$undef"
8462                 echo "strchr() found." >&4
8463         else
8464                 echo "No index() or strchr() found!" >&4
8465                 val="$undef"
8466                 vali="$undef"
8467         fi
8468 fi
8469 set d_strchr; eval $setvar
8470 val="$vali"
8471 set d_index; eval $setvar
8472
8473 : check whether inet_aton exists
8474 set inet_aton d_inetaton
8475 eval $inlibc
8476
8477 : see if inttypes.h is available
8478 : we want a real compile instead of Inhdr because some systems
8479 : have an inttypes.h which includes non-existent headers
8480 echo " "
8481 $cat >try.c <<EOCP
8482 #include <inttypes.h>
8483 int main() {
8484         static int32_t foo32 = 0x12345678;
8485 }
8486 EOCP
8487 set try
8488 if eval $compile; then
8489         echo "<inttypes.h> found." >&4
8490         val="$define"
8491 else
8492         echo "<inttypes.h> NOT found." >&4
8493         val="$undef"
8494 fi
8495 $rm -f try.c try
8496 set i_inttypes
8497 eval $setvar
8498
8499 : check for int64_t
8500 case "$use64bits" in
8501 "$define" )
8502         echo " "
8503         echo $n "Checking to see if your system supports int64_t...$c" >&4
8504         $cat >try.c <<EOCP
8505 #include <sys/types.h>
8506 #$i_inttypes I_INTTYPES
8507 #ifdef I_INTTYPES
8508 #include <inttypes.h>
8509 #endif
8510 int64_t foo() { int64_t x; x = 7; return x; }
8511 EOCP
8512         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8513                 val="$define"
8514                 echo " Yup, it does." >&4
8515         else
8516                 val="$undef"
8517                 echo " Nope, it doesn't." >&4
8518         fi
8519         $rm -f try.*
8520         ;;
8521 *)      val="$undef"
8522         ;;
8523 esac
8524 set d_int64t
8525 eval $setvar
8526
8527
8528 : Look for isascii
8529 echo " "
8530 $cat >isascii.c <<'EOCP'
8531 #include <stdio.h>
8532 #include <ctype.h>
8533 int main() {
8534         int c = 'A';
8535         if (isascii(c))
8536                 exit(0);
8537         else
8538                 exit(1);
8539 }
8540 EOCP
8541 set isascii
8542 if eval $compile; then
8543         echo "isascii() found." >&4
8544         val="$define"
8545 else
8546         echo "isascii() NOT found." >&4
8547         val="$undef"
8548 fi
8549 set d_isascii
8550 eval $setvar
8551 $rm -f isascii*
8552
8553 : see if killpg exists
8554 set killpg d_killpg
8555 eval $inlibc
8556
8557 : see if lchown exists
8558 echo " "
8559 $cat > try.c <<'EOCP'
8560 /* System header to define __stub macros and hopefully few prototypes,
8561     which can conflict with char lchown(); below.  */
8562 #include <assert.h>
8563 /* Override any gcc2 internal prototype to avoid an error.  */
8564 /* We use char because int might match the return type of a gcc2
8565    builtin and then its argument prototype would still apply.  */
8566 char lchown();
8567 int main() {
8568     /*  The GNU C library defines this for functions which it implements
8569         to always fail with ENOSYS.  Some functions are actually named
8570         something starting with __ and the normal name is an alias.  */
8571 #if defined (__stub_lchown) || defined (__stub___lchown)
8572 choke me
8573 #else
8574 lchown();
8575 #endif
8576 ; return 0; }
8577 EOCP
8578 set try
8579 if eval $compile; then
8580     $echo "lchown() found." >&4
8581     val="$define"
8582 else
8583     $echo "lchown() NOT found." >&4
8584     val="$undef"
8585 fi
8586 set d_lchown
8587 eval $setvar
8588
8589 : see if link exists
8590 set link d_link
8591 eval $inlibc
8592
8593 : see if localeconv exists
8594 set localeconv d_locconv
8595 eval $inlibc
8596
8597 : see if lockf exists
8598 set lockf d_lockf
8599 eval $inlibc
8600
8601 : check for length of double
8602 echo " "
8603 case "$doublesize" in
8604 '')
8605         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8606         $cat >try.c <<'EOCP'
8607 #include <stdio.h>
8608 int main()
8609 {
8610         printf("%d\n", sizeof(double));
8611 }
8612 EOCP
8613         set try
8614         if eval $compile_ok; then
8615                 doublesize=`./try`
8616                 $echo " $doublesize bytes." >&4
8617         else
8618                 dflt='8'
8619                 echo "(I can't seem to compile the test program.  Guessing...)"
8620                 rp="What is the size of a double precision number (in bytes)?"
8621                 . ./myread
8622                 doublesize="$ans"
8623         fi
8624         ;;
8625 esac
8626 $rm -f try.c try
8627
8628 : check for long doubles
8629 echo " "
8630 echo $n "Checking to see if your system supports long doubles...$c" >&4
8631 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8632 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8633         val="$define"
8634         echo " Yup, it does." >&4
8635 else
8636         val="$undef"
8637         echo " Nope, it doesn't." >&4
8638 fi
8639 $rm try.*
8640 set d_longdbl
8641 eval $setvar
8642
8643 : check for length of long double
8644 case "${d_longdbl}${longdblsize}" in
8645 $define)
8646         echo " "
8647         $echo $n "Checking to see how big your long doubles are...$c" >&4
8648         $cat >try.c <<'EOCP'
8649 #include <stdio.h>
8650 int main()
8651 {
8652         printf("%d\n", sizeof(long double));
8653 }
8654 EOCP
8655         set try
8656         if eval $compile; then
8657                 longdblsize=`./try`
8658                 $echo " $longdblsize bytes." >&4
8659         else
8660                 dflt='8'
8661                 echo " "
8662                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8663                 rp="What is the size of a long double (in bytes)?"
8664                 . ./myread
8665                 longdblsize="$ans"
8666         fi
8667         if $test "X$doublesize" = "X$longdblsize"; then
8668                 echo "(That isn't any different from an ordinary double.)"
8669         fi      
8670         ;;
8671 esac
8672 $rm -f try.c try
8673
8674 : check for long long
8675 echo " "
8676 echo $n "Checking to see if your system supports long long...$c" >&4
8677 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8678 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8679         val="$define"
8680         echo " Yup, it does." >&4
8681 else
8682         val="$undef"
8683         echo " Nope, it doesn't." >&4
8684 fi
8685 $rm try.*
8686 set d_longlong
8687 eval $setvar
8688
8689 : check for length of long long
8690 case "${d_longlong}${longlongsize}" in
8691 $define)
8692         echo " "
8693         $echo $n "Checking to see how big your long longs are...$c" >&4
8694         $cat >try.c <<'EOCP'
8695 #include <stdio.h>
8696 int main()
8697 {
8698         printf("%d\n", sizeof(long long));
8699 }
8700 EOCP
8701         set try
8702         if eval $compile_ok; then
8703                 longlongsize=`./try`
8704                 $echo " $longlongsize bytes." >&4
8705         else
8706                 dflt='8'
8707                 echo " "
8708                 echo "(I can't seem to compile the test program.  Guessing...)"
8709                 rp="What is the size of a long long (in bytes)?"
8710                 . ./myread
8711                 longlongsize="$ans"
8712         fi
8713         if $test "X$longsize" = "X$longlongsize"; then
8714                 echo "(That isn't any different from an ordinary long.)"
8715         fi      
8716         ;;
8717 esac
8718 $rm -f try.c try
8719
8720 : see if lstat exists
8721 set lstat d_lstat
8722 eval $inlibc
8723
8724 : see if madvise exists
8725 set madvise d_madvise
8726 eval $inlibc
8727
8728 : see if mblen exists
8729 set mblen d_mblen
8730 eval $inlibc
8731
8732 : see if mbstowcs exists
8733 set mbstowcs d_mbstowcs
8734 eval $inlibc
8735
8736 : see if mbtowc exists
8737 set mbtowc d_mbtowc
8738 eval $inlibc
8739
8740 : see if memchr exists
8741 set memchr d_memchr
8742 eval $inlibc
8743
8744 : see if memcmp exists
8745 set memcmp d_memcmp
8746 eval $inlibc
8747
8748 : see if memcpy exists
8749 set memcpy d_memcpy
8750 eval $inlibc
8751
8752 : see if memmove exists
8753 set memmove d_memmove
8754 eval $inlibc
8755
8756 : see if memset exists
8757 set memset d_memset
8758 eval $inlibc
8759
8760 : see if mkdir exists
8761 set mkdir d_mkdir
8762 eval $inlibc
8763
8764 : see if mkfifo exists
8765 set mkfifo d_mkfifo
8766 eval $inlibc
8767
8768 : see if mktime exists
8769 set mktime d_mktime
8770 eval $inlibc
8771
8772 : see if this is a sys/mman.h system
8773 set sys/mman.h i_sysmman
8774 eval $inhdr
8775
8776 : see if mmap exists
8777 set mmap d_mmap
8778 eval $inlibc
8779 : see what shmat returns
8780 : default to something harmless
8781 mmaptype='void *'
8782 case "$i_sysmman$d_mmap" in
8783 "$define$define")
8784         $cat >mmap.c <<'END'
8785 #include <sys/mman.h>
8786 void *mmap();
8787 END
8788         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8789                 mmaptype='void *'
8790         else
8791                 mmaptype='caddr_t'
8792         fi
8793         echo "and it returns ($mmaptype)." >&4
8794         ;;
8795 esac
8796
8797
8798
8799 : see if mprotect exists
8800 set mprotect d_mprotect
8801 eval $inlibc
8802
8803 : see if msgctl exists
8804 set msgctl d_msgctl
8805 eval $inlibc
8806
8807 : see if msgget exists
8808 set msgget d_msgget
8809 eval $inlibc
8810
8811 : see if msgsnd exists
8812 set msgsnd d_msgsnd
8813 eval $inlibc
8814
8815 : see if msgrcv exists
8816 set msgrcv d_msgrcv
8817 eval $inlibc
8818
8819 : see how much of the 'msg*(2)' library is present.
8820 h_msg=true
8821 echo " "
8822 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8823 *"$undef"*) h_msg=false;;
8824 esac
8825 case "$osname" in
8826 freebsd)
8827     case "`ipcs 2>&1`" in
8828     "SVID messages"*"not configured"*)
8829         echo "Your $osname does not have the msg*(2) configured." >&4
8830         h_msg=false
8831         val="$undef"
8832         set msgctl d_msgctl
8833         eval $setvar
8834         set msgget d_msgget
8835         eval $setvar
8836         set msgsnd d_msgsnd
8837         eval $setvar
8838         set msgrcv d_msgrcv
8839         eval $setvar
8840         ;;
8841     esac
8842     ;;
8843 esac
8844 : we could also check for sys/ipc.h ...
8845 if $h_msg && $test `./findhdr sys/msg.h`; then
8846         echo "You have the full msg*(2) library." >&4
8847         val="$define"
8848 else
8849         echo "You don't have the full msg*(2) library." >&4
8850         val="$undef"
8851 fi
8852 set d_msg
8853 eval $setvar
8854
8855 : see if msync exists
8856 set msync d_msync
8857 eval $inlibc
8858
8859 : see if munmap exists
8860 set munmap d_munmap
8861 eval $inlibc
8862
8863 : see if nice exists
8864 set nice d_nice
8865 eval $inlibc
8866
8867 : see if POSIX threads are available
8868 if test "X$usethreads" = "X$define"; then
8869         set pthread.h i_pthread
8870         eval $inhdr
8871 else
8872         i_pthread="$undef"
8873 fi
8874
8875
8876
8877 : how to create joinable pthreads
8878 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8879         echo " "
8880         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8881         $cat >try.c <<'EOCP'
8882 #include <pthread.h>
8883 int main() {
8884     int detachstate = JOINABLE;
8885 }
8886 EOCP
8887         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8888         if eval $compile; then
8889                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8890                 val="$undef" # Yes, undef.
8891                 set d_old_pthread_create_joinable
8892                 eval $setvar
8893                 val=""
8894                 set old_pthread_create_joinable
8895                 eval $setvar
8896         else
8897                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8898                 if eval $compile; then
8899                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8900                         val="$define"
8901                         set d_old_pthread_create_joinable
8902                         eval $setvar
8903                         val=PTHREAD_CREATE_UNDETACHED
8904                         set old_pthread_create_joinable
8905                         eval $setvar
8906                 else            
8907                         set try -DJOINABLE=__UNDETACHED
8908                         if eval $compile; then
8909                                 echo "You seem to use __UNDETACHED." >&4
8910                                 val="$define"
8911                                 set d_old_pthread_create_joinable
8912                                 eval $setvar
8913                                 val=__UNDETACHED
8914                                 set old_pthread_create_joinable
8915                                 eval $setvar
8916                         else
8917                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8918                                 val="$define"
8919                                 set d_old_pthread_create_joinable
8920                                 eval $setvar
8921                                 val=0
8922                                 set old_pthread_create_joinable
8923                                 eval $setvar
8924                         fi
8925                 fi
8926         fi
8927         $rm -f try try.*
8928 else
8929     d_old_pthread_create_joinable="$undef"
8930     old_pthread_create_joinable=""
8931 fi
8932
8933 : see if pause exists
8934 set pause d_pause
8935 eval $inlibc
8936
8937 : see if pipe exists
8938 set pipe d_pipe
8939 eval $inlibc
8940
8941 : see if poll exists
8942 set poll d_poll
8943 eval $inlibc
8944
8945
8946 : see whether the various POSIXish _yields exist
8947 $cat >try.c <<EOP
8948 #include <pthread.h>
8949 #include <stdio.h>
8950 int main() {
8951 #ifdef SCHED_YIELD
8952         sched_yield();
8953 #else
8954 #ifdef PTHREAD_YIELD
8955         pthread_yield();
8956 #else
8957 #ifdef PTHREAD_YIELD_NULL
8958         pthread_yield(NULL);
8959 #endif
8960 #endif
8961 #endif
8962 }
8963 EOP
8964 : see if sched_yield exists
8965 set try -DSCHED_YIELD
8966 if eval $compile; then
8967     val="$define"
8968     sched_yield='sched_yield()'
8969 else
8970     val="$undef"
8971 fi
8972 case "$usethreads" in
8973 $define)
8974         case "$val" in
8975         $define) echo 'sched_yield() found.' >&4        ;;
8976         *)       echo 'sched_yield() NOT found.' >&4    ;;
8977         esac
8978 esac
8979 set d_sched_yield
8980 eval $setvar
8981
8982 : see if pthread_yield exists
8983 set try -DPTHREAD_YIELD
8984 if eval $compile; then
8985     val="$define"
8986     case "$sched_yield" in
8987     '') sched_yield='pthread_yield()' ;;
8988     esac
8989 else
8990     set try -DPTHREAD_YIELD_NULL
8991     if eval $compile; then
8992         val="$define"
8993         case "$sched_yield" in
8994         '') sched_yield='pthread_yield(NULL)' ;;
8995         esac
8996     else
8997         val="$undef"
8998     fi
8999 fi
9000 case "$usethreads" in
9001 $define)
9002         case "$val" in
9003         $define) echo 'pthread_yield() found.' >&4      ;;
9004         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9005         esac
9006         ;;
9007 esac
9008 set d_pthread_yield
9009 eval $setvar
9010
9011 case "$sched_yield" in
9012 '') sched_yield=undef ;;
9013 esac
9014
9015 $rm -f try try.*
9016
9017 : see if this is a pwd.h system
9018 set pwd.h i_pwd
9019 eval $inhdr
9020
9021 case "$i_pwd" in
9022 $define)
9023         xxx=`./findhdr pwd.h`
9024         $cppstdin $cppflags $cppminus < $xxx >$$.h
9025
9026         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9027                 val="$define"
9028         else
9029                 val="$undef"
9030         fi
9031         set d_pwquota
9032         eval $setvar
9033
9034         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9035                 val="$define"
9036         else
9037                 val="$undef"
9038         fi
9039         set d_pwage
9040         eval $setvar
9041
9042         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9043                 val="$define"
9044         else
9045                 val="$undef"
9046         fi
9047         set d_pwchange
9048         eval $setvar
9049
9050         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9051                 val="$define"
9052         else
9053                 val="$undef"
9054         fi
9055         set d_pwclass
9056         eval $setvar
9057
9058         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9059                 val="$define"
9060         else
9061                 val="$undef"
9062         fi
9063         set d_pwexpire
9064         eval $setvar
9065
9066         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9067                 val="$define"
9068         else
9069                 val="$undef"
9070         fi
9071         set d_pwcomment
9072         eval $setvar
9073
9074         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9075                 val="$define"
9076         else
9077                 val="$undef"
9078         fi
9079         set d_pwgecos
9080         eval $setvar
9081
9082         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9083                 val="$define"
9084         else
9085                 val="$undef"
9086         fi
9087         set d_pwpasswd
9088         eval $setvar
9089
9090         $rm -f $$.h
9091         ;;
9092 *)
9093         val="$undef"; 
9094         set d_pwquota; eval $setvar
9095         set d_pwage; eval $setvar
9096         set d_pwchange; eval $setvar
9097         set d_pwclass; eval $setvar
9098         set d_pwexpire; eval $setvar
9099         set d_pwcomment; eval $setvar
9100         set d_pwgecos; eval $setvar
9101         set d_pwpasswd; eval $setvar
9102         ;;
9103 esac
9104
9105 : see if readdir and friends exist
9106 set readdir d_readdir
9107 eval $inlibc
9108 set seekdir d_seekdir
9109 eval $inlibc
9110 set telldir d_telldir
9111 eval $inlibc
9112 set rewinddir d_rewinddir
9113 eval $inlibc
9114
9115 : see if readlink exists
9116 set readlink d_readlink
9117 eval $inlibc
9118
9119 : see if readv exists
9120 set readv d_readv
9121 eval $inlibc
9122
9123 : see if rename exists
9124 set rename d_rename
9125 eval $inlibc
9126
9127 : see if rmdir exists
9128 set rmdir d_rmdir
9129 eval $inlibc
9130
9131 : see if memory.h is available.
9132 val=''
9133 set memory.h val
9134 eval $inhdr
9135
9136 : See if it conflicts with string.h
9137 case "$val" in
9138 $define)
9139         case "$strings" in
9140         '') ;;
9141         *)
9142                 $cppstdin $cppflags $cppminus < $strings > mem.h
9143                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9144                         echo " "
9145                         echo "We won't be including <memory.h>."
9146                         val="$undef"
9147                 fi
9148                 $rm -f mem.h
9149                 ;;
9150         esac
9151 esac
9152 set i_memory
9153 eval $setvar
9154
9155 : can bcopy handle overlapping blocks?
9156 val="$undef"
9157 case "$d_bcopy" in
9158 "$define")
9159         echo " "
9160         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9161         $cat >try.c <<EOCP
9162 #$i_memory I_MEMORY
9163 #$i_stdlib I_STDLIB
9164 #$i_string I_STRING
9165 #$i_unistd I_UNISTD
9166 EOCP
9167         $cat >>try.c <<'EOCP'
9168 #include <stdio.h>
9169 #ifdef I_MEMORY
9170 #  include <memory.h>
9171 #endif
9172 #ifdef I_STDLIB
9173 #  include <stdlib.h>
9174 #endif
9175 #ifdef I_STRING
9176 #  include <string.h>
9177 #else
9178 #  include <strings.h>
9179 #endif
9180 #ifdef I_UNISTD
9181 #  include <unistd.h>  /* Needed for NetBSD */
9182 #endif
9183 int main()
9184 {
9185 char buf[128], abc[128];
9186 char *b;
9187 int len;
9188 int off;
9189 int align;
9190
9191 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9192
9193 for (align = 7; align >= 0; align--) {
9194         for (len = 36; len; len--) {
9195                 b = buf+align;
9196                 bcopy(abc, b, len);
9197                 for (off = 1; off <= len; off++) {
9198                         bcopy(b, b+off, len);
9199                         bcopy(b+off, b, len);
9200                         if (bcmp(b, abc, len))
9201                                 exit(1);
9202                 }
9203         }
9204 }
9205 exit(0);
9206 }
9207 EOCP
9208         set try
9209         if eval $compile_ok; then
9210                 if ./try 2>/dev/null; then
9211                         echo "Yes, it can."
9212                         val="$define"
9213                 else
9214                         echo "It can't, sorry."
9215                         case "$d_memmove" in
9216                         "$define") echo "But that's Ok since you have memmove()." ;;
9217                         esac
9218                 fi
9219         else
9220                 echo "(I can't compile the test program, so we'll assume not...)"
9221                 case "$d_memmove" in
9222                 "$define") echo "But that's Ok since you have memmove()." ;;
9223                 esac
9224         fi
9225         ;;
9226 esac
9227 $rm -f try.* try core
9228 set d_safebcpy
9229 eval $setvar
9230
9231 : can memcpy handle overlapping blocks?
9232 val="$undef"
9233 case "$d_memcpy" in
9234 "$define")
9235         echo " "
9236         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9237         $cat >try.c <<EOCP
9238 #$i_memory I_MEMORY
9239 #$i_stdlib I_STDLIB
9240 #$i_string I_STRING
9241 #$i_unistd I_UNISTD
9242 EOCP
9243         $cat >>try.c <<'EOCP'
9244 #include <stdio.h>
9245 #ifdef I_MEMORY
9246 #  include <memory.h>
9247 #endif
9248 #ifdef I_STDLIB
9249 #  include <stdlib.h>
9250 #endif
9251 #ifdef I_STRING
9252 #  include <string.h>
9253 #else
9254 #  include <strings.h>
9255 #endif
9256 #ifdef I_UNISTD
9257 #  include <unistd.h>  /* Needed for NetBSD */
9258 #endif
9259 int main()
9260 {
9261 char buf[128], abc[128];
9262 char *b;
9263 int len;
9264 int off;
9265 int align;
9266
9267 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9268    try to store the string in read-only memory. */
9269 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9270
9271 for (align = 7; align >= 0; align--) {
9272         for (len = 36; len; len--) {
9273                 b = buf+align;
9274                 memcpy(b, abc, len);
9275                 for (off = 1; off <= len; off++) {
9276                         memcpy(b+off, b, len);
9277                         memcpy(b, b+off, len);
9278                         if (memcmp(b, abc, len))
9279                                 exit(1);
9280                 }
9281         }
9282 }
9283 exit(0);
9284 }
9285 EOCP
9286         set try
9287         if eval $compile_ok; then
9288                 if ./try 2>/dev/null; then
9289                         echo "Yes, it can."
9290                         val="$define"
9291                 else
9292                         echo "It can't, sorry."
9293                         case "$d_memmove" in
9294                         "$define") echo "But that's Ok since you have memmove()." ;;
9295                         esac
9296                 fi
9297         else
9298                 echo "(I can't compile the test program, so we'll assume not...)"
9299                 case "$d_memmove" in
9300                 "$define") echo "But that's Ok since you have memmove()." ;;
9301                 esac
9302         fi
9303         ;;
9304 esac
9305 $rm -f try.* try core
9306 set d_safemcpy
9307 eval $setvar
9308
9309 : can memcmp be trusted to compare relative magnitude?
9310 val="$undef"
9311 case "$d_memcmp" in
9312 "$define")
9313         echo " "
9314         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9315         $cat >try.c <<EOCP
9316 #$i_memory I_MEMORY
9317 #$i_stdlib I_STDLIB
9318 #$i_string I_STRING
9319 #$i_unistd I_UNISTD
9320 EOCP
9321         $cat >>try.c <<'EOCP'
9322 #include <stdio.h>
9323 #ifdef I_MEMORY
9324 #  include <memory.h>
9325 #endif
9326 #ifdef I_STDLIB
9327 #  include <stdlib.h>
9328 #endif
9329 #ifdef I_STRING
9330 #  include <string.h>
9331 #else
9332 #  include <strings.h>
9333 #endif
9334 #ifdef I_UNISTD
9335 #  include <unistd.h>  /* Needed for NetBSD */
9336 #endif
9337 int main()
9338 {
9339 char a = -1;
9340 char b = 0;
9341 if ((a < b) && memcmp(&a, &b, 1) < 0)
9342         exit(1);
9343 exit(0);
9344 }
9345 EOCP
9346         set try
9347         if eval $compile_ok; then
9348                 if ./try 2>/dev/null; then
9349                         echo "Yes, it can."
9350                         val="$define"
9351                 else
9352                         echo "No, it can't (it uses signed chars)."
9353                 fi
9354         else
9355                 echo "(I can't compile the test program, so we'll assume not...)"
9356         fi
9357         ;;
9358 esac
9359 $rm -f try.* try core
9360 set d_sanemcmp
9361 eval $setvar
9362
9363 : see if select exists
9364 set select d_select
9365 eval $inlibc
9366
9367 : see if semctl exists
9368 set semctl d_semctl
9369 eval $inlibc
9370
9371 : see if semget exists
9372 set semget d_semget
9373 eval $inlibc
9374
9375 : see if semop exists
9376 set semop d_semop
9377 eval $inlibc
9378
9379 : see how much of the 'sem*(2)' library is present.
9380 h_sem=true
9381 echo " "
9382 case "$d_semctl$d_semget$d_semop" in
9383 *"$undef"*) h_sem=false;;
9384 esac
9385 case "$osname" in
9386 freebsd)
9387     case "`ipcs 2>&1`" in
9388     "SVID messages"*"not configured"*)
9389         echo "Your $osname does not have the sem*(2) configured." >&4
9390         h_sem=false
9391         val="$undef"
9392         set semctl d_semctl
9393         eval $setvar
9394         set semget d_semget
9395         eval $setvar
9396         set semop d_semop
9397         eval $setvar
9398         ;;
9399     esac
9400     ;;
9401 esac
9402 : we could also check for sys/ipc.h ...
9403 if $h_sem && $test `./findhdr sys/sem.h`; then
9404         echo "You have the full sem*(2) library." >&4
9405         val="$define"
9406 else
9407         echo "You don't have the full sem*(2) library." >&4
9408         val="$undef"
9409 fi
9410 set d_sem
9411 eval $setvar
9412
9413 : see whether sys/sem.h defines union semun
9414 echo " "
9415 $cat > try.c <<'END'
9416 #include <sys/types.h>
9417 #include <sys/ipc.h>
9418 #include <sys/sem.h>
9419 int main () { union semun semun; semun.buf = 0; }
9420 END
9421 set try
9422 if eval $compile; then
9423     echo "You have union semun in <sys/sem.h>." >&4
9424     val="$define"
9425 else
9426     echo "You do not have union semun in <sys/sem.h>." >&4
9427     val="$undef"
9428 fi
9429 $rm -f try try.c try.h
9430 set d_union_semun
9431 eval $setvar
9432
9433 : see how to do semctl IPC_STAT
9434 case "$d_sem" in
9435 $define)
9436     : see whether semctl IPC_STAT can use union semun
9437     echo " "
9438     $cat > try.h <<END
9439 #ifndef S_IRUSR
9440 #   ifdef S_IREAD
9441 #       define S_IRUSR S_IREAD
9442 #       define S_IWUSR S_IWRITE
9443 #       define S_IXUSR S_IEXEC
9444 #   else
9445 #       define S_IRUSR 0400
9446 #       define S_IWUSR 0200
9447 #       define S_IXUSR 0100
9448 #   endif
9449 #   define S_IRGRP (S_IRUSR>>3)
9450 #   define S_IWGRP (S_IWUSR>>3)
9451 #   define S_IXGRP (S_IXUSR>>3)
9452 #   define S_IROTH (S_IRUSR>>6)
9453 #   define S_IWOTH (S_IWUSR>>6)
9454 #   define S_IXOTH (S_IXUSR>>6)
9455 #endif
9456 #ifndef S_IRWXU
9457 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9458 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9459 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9460 #endif
9461 END
9462
9463     $cat > try.c <<END
9464 #include <sys/types.h>
9465 #include <sys/ipc.h>
9466 #include <sys/sem.h>
9467 #include <sys/stat.h>
9468 #include <stdio.h>
9469 #include <errno.h>
9470 #include "try.h"
9471 #ifndef errno
9472 extern int errno;
9473 #endif
9474 #$d_union_semun HAS_UNION_SEMUN
9475 int main() {
9476     union semun
9477 #ifndef HAS_UNION_SEMUN
9478     {
9479         int val;
9480         struct semid_ds *buf;
9481         unsigned short *array;
9482     }
9483 #endif
9484     arg;
9485     int sem, st;
9486
9487 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9488     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9489     if (sem > -1) {
9490         struct semid_ds argbuf;
9491         arg.buf = &argbuf;
9492 #       ifdef IPC_STAT
9493         st = semctl(sem, 0, IPC_STAT, arg);
9494         if (st == 0)
9495             printf("semun\n");
9496         else
9497 #       endif /* IPC_STAT */
9498             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9499 #       ifdef IPC_RMID
9500         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9501 #       endif /* IPC_RMID */
9502             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9503     } else
9504 #endif /* IPC_PRIVATE && ... */
9505         printf("semget failed: errno = %d\n", errno);
9506   return 0;
9507 }
9508 END
9509     val="$undef"
9510     set try
9511     if eval $compile; then
9512         xxx=`./try`
9513         case "$xxx" in
9514         semun) val="$define" ;;
9515         esac
9516     fi
9517     $rm -f try try.c
9518     set d_semctl_semun
9519     eval $setvar
9520     case "$d_semctl_semun" in
9521     $define)
9522         echo "You can use union semun for semctl IPC_STAT." >&4
9523         also='also'
9524         ;;
9525     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9526         also=''
9527         ;;
9528     esac
9529
9530     : see whether semctl IPC_STAT can use struct semid_ds pointer
9531     $cat > try.c <<'END'
9532 #include <sys/types.h>
9533 #include <sys/ipc.h>
9534 #include <sys/sem.h>
9535 #include <sys/stat.h>
9536 #include "try.h"
9537 #include <stdio.h>
9538 #include <errno.h>
9539 #ifndef errno
9540 extern int errno;
9541 #endif
9542 int main() {
9543     struct semid_ds arg;
9544     int sem, st;
9545
9546 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9547     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9548     if (sem > -1) {
9549 #       ifdef IPC_STAT
9550         st = semctl(sem, 0, IPC_STAT, &arg);
9551         if (st == 0)
9552             printf("semid_ds\n");
9553         else
9554 #       endif /* IPC_STAT */
9555             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9556 #       ifdef IPC_RMID
9557         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9558 #       endif /* IPC_RMID */
9559             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9560     } else
9561 #endif /* IPC_PRIVATE && ... */
9562         printf("semget failed: errno = %d\n", errno);
9563
9564     return 0;
9565 }
9566 END
9567     val="$undef"
9568     set try
9569     if eval $compile; then
9570         xxx=`./try`
9571         case "$xxx" in
9572         semid_ds) val="$define" ;;
9573         esac
9574     fi
9575     $rm -f try try.c
9576     set d_semctl_semid_ds
9577     eval $setvar
9578     case "$d_semctl_semid_ds" in
9579     $define)
9580         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9581         ;;
9582     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9583         ;;
9584     esac
9585     $rm -f try.h
9586     ;;
9587 *)  val="$undef"
9588
9589     # We do not have the full sem*(2) library, so assume we can not
9590     # use either.
9591
9592     set d_semctl_semun
9593     eval $setvar
9594
9595     set d_semctl_semid_ds
9596     eval $setvar
9597     ;;
9598 esac
9599
9600 : see if setegid exists
9601 set setegid d_setegid
9602 eval $inlibc
9603
9604 : see if seteuid exists
9605 set seteuid d_seteuid
9606 eval $inlibc
9607
9608 : see if setgrent exists
9609 set setgrent d_setgrent
9610 eval $inlibc
9611
9612 : see if sethostent exists
9613 set sethostent d_sethent
9614 eval $inlibc
9615
9616 : see if setlinebuf exists
9617 set setlinebuf d_setlinebuf
9618 eval $inlibc
9619
9620 : see if setlocale exists
9621 set setlocale d_setlocale
9622 eval $inlibc
9623
9624 : see if setnetent exists
9625 set setnetent d_setnent
9626 eval $inlibc
9627
9628 : see if setprotoent exists
9629 set setprotoent d_setpent
9630 eval $inlibc
9631
9632 : see if setpgid exists
9633 set setpgid d_setpgid
9634 eval $inlibc
9635
9636 : see if setpgrp2 exists
9637 set setpgrp2 d_setpgrp2
9638 eval $inlibc
9639
9640 : see if setpriority exists
9641 set setpriority d_setprior
9642 eval $inlibc
9643
9644 : see if setpwent exists
9645 set setpwent d_setpwent
9646 eval $inlibc
9647
9648 : see if setregid exists
9649 set setregid d_setregid
9650 eval $inlibc
9651 set setresgid d_setresgid
9652 eval $inlibc
9653
9654 : see if setreuid exists
9655 set setreuid d_setreuid
9656 eval $inlibc
9657 set setresuid d_setresuid
9658 eval $inlibc
9659
9660 : see if setrgid exists
9661 set setrgid d_setrgid
9662 eval $inlibc
9663
9664 : see if setruid exists
9665 set setruid d_setruid
9666 eval $inlibc
9667
9668 : see if setservent exists
9669 set setservent d_setsent
9670 eval $inlibc
9671
9672 : see if setsid exists
9673 set setsid d_setsid
9674 eval $inlibc
9675
9676 : see if setspent exists
9677 set setspent d_setspent
9678 eval $inlibc
9679
9680 : see if setvbuf exists
9681 set setvbuf d_setvbuf
9682 eval $inlibc
9683
9684 : see if sfio.h is available
9685 set sfio.h i_sfio
9686 eval $inhdr
9687
9688
9689 : see if sfio library is available
9690 case "$i_sfio" in
9691 $define)
9692         val=''
9693         set sfreserve val
9694         eval $inlibc
9695         ;;
9696 *)
9697         val="$undef"
9698         ;;
9699 esac
9700 : Ok, but do we want to use it.
9701 case "$val" in
9702 $define)
9703         case "$usesfio" in
9704         true|$define|[yY]*) dflt='y';;
9705         *) dflt='n';;
9706         esac
9707         echo "$package can use the sfio library, but it is experimental."
9708         rp="You seem to have sfio available, do you want to try using it?"
9709         . ./myread
9710         case "$ans" in
9711         y|Y) ;;
9712         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9713                 val="$undef"
9714                 : Remove sfio from list of libraries to use
9715                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9716                 shift
9717                 libs="$*"
9718                 echo "libs = $libs" >&4
9719                 ;;
9720         esac
9721         ;;
9722 *)      case "$usesfio" in
9723         true|$define|[yY]*)
9724                 echo "Sorry, cannot find sfio on this machine" >&4
9725                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9726                 ;;
9727         esac
9728         ;;
9729 esac
9730 set d_sfio
9731 eval $setvar
9732 case "$d_sfio" in
9733 $define) usesfio='true';;
9734 *) usesfio='false';;
9735 esac
9736
9737 : see if shmctl exists
9738 set shmctl d_shmctl
9739 eval $inlibc
9740
9741 : see if shmget exists
9742 set shmget d_shmget
9743 eval $inlibc
9744
9745 : see if shmat exists
9746 set shmat d_shmat
9747 eval $inlibc
9748 : see what shmat returns
9749 case "$d_shmat" in
9750 "$define")
9751         $cat >shmat.c <<'END'
9752 #include <sys/shm.h>
9753 void *shmat();
9754 END
9755         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9756                 shmattype='void *'
9757         else
9758                 shmattype='char *'
9759         fi
9760         echo "and it returns ($shmattype)." >&4
9761         : see if a prototype for shmat is available
9762         xxx=`./findhdr sys/shm.h`
9763         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9764         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9765                 val="$define"
9766         else
9767                 val="$undef"
9768         fi
9769         $rm -f shmat.[co]
9770         ;;
9771 *)
9772         val="$undef"
9773         ;;
9774 esac
9775 set d_shmatprototype
9776 eval $setvar
9777
9778 : see if shmdt exists
9779 set shmdt d_shmdt
9780 eval $inlibc
9781
9782 : see how much of the 'shm*(2)' library is present.
9783 h_shm=true
9784 echo " "
9785 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9786 *"$undef"*) h_shm=false;;
9787 esac
9788 case "$osname" in
9789 freebsd)
9790     case "`ipcs 2>&1`" in
9791     "SVID shared memory"*"not configured"*)
9792         echo "Your $osname does not have the shm*(2) configured." >&4
9793         h_shm=false
9794         val="$undef"
9795         set shmctl d_shmctl
9796         evat $setvar
9797         set shmget d_shmget
9798         evat $setvar
9799         set shmat d_shmat
9800         evat $setvar
9801         set shmdt d_shmdt
9802         evat $setvar
9803         ;;
9804     esac
9805     ;;
9806 esac
9807 : we could also check for sys/ipc.h ...
9808 if $h_shm && $test `./findhdr sys/shm.h`; then
9809         echo "You have the full shm*(2) library." >&4
9810         val="$define"
9811 else
9812         echo "You don't have the full shm*(2) library." >&4
9813         val="$undef"
9814 fi
9815 set d_shm
9816 eval $setvar
9817
9818 echo " "
9819 : see if we have sigaction
9820 if set sigaction val -f d_sigaction; eval $csym; $val; then
9821         echo 'sigaction() found.' >&4
9822         $cat > try.c <<'EOP'
9823 #include <stdio.h>
9824 #include <sys/types.h>
9825 #include <signal.h>
9826 int main()
9827 {
9828     struct sigaction act, oact;
9829 }
9830 EOP
9831         set try
9832         if eval $compile_ok; then
9833                 val="$define"
9834         else
9835                 echo "But you don't seem to have a useable struct sigaction." >&4
9836                 val="$undef"
9837         fi
9838 else
9839         echo 'sigaction NOT found.' >&4
9840         val="$undef"
9841 fi
9842 set d_sigaction; eval $setvar
9843 $rm -f try try$_o try.c
9844
9845 : see if sigsetjmp exists
9846 echo " "
9847 case "$d_sigsetjmp" in
9848 '')
9849         $cat >try.c <<'EOP'
9850 #include <setjmp.h>
9851 sigjmp_buf env;
9852 int set = 1;
9853 int main()
9854 {
9855         if (sigsetjmp(env,1))
9856                 exit(set);
9857         set = 0;
9858         siglongjmp(env, 1);
9859         exit(1);
9860 }
9861 EOP
9862         set try
9863         if eval $compile; then
9864                 if ./try >/dev/null 2>&1; then
9865                         echo "POSIX sigsetjmp found." >&4
9866                         val="$define"
9867                 else
9868                         $cat >&4 <<EOM
9869 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9870 I'll ignore them.
9871 EOM
9872                         val="$undef"
9873                 fi
9874         else
9875                 echo "sigsetjmp not found." >&4
9876                 val="$undef"
9877         fi
9878         ;;
9879 *) val="$d_sigsetjmp"
9880         case "$d_sigsetjmp" in
9881         $define) echo "POSIX sigsetjmp found." >&4;;
9882         $undef) echo "sigsetjmp not found." >&4;;
9883         esac
9884         ;;
9885 esac
9886 set d_sigsetjmp
9887 eval $setvar
9888 $rm -f try.c try
9889
9890 : see if stat knows about block sizes
9891 echo " "
9892 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9893 eval $hasfield
9894
9895 : see if _ptr and _cnt from stdio act std
9896 echo " "
9897 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9898         echo "(Looks like you have stdio.h from Linux.)"
9899         case "$stdio_ptr" in
9900         '') stdio_ptr='((fp)->_IO_read_ptr)'
9901                 ptr_lval=$define
9902                 ;;
9903         *)      ptr_lval=$d_stdio_ptr_lval;;
9904         esac
9905         case "$stdio_cnt" in
9906         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9907                 cnt_lval=$undef
9908                 ;;
9909         *)      cnt_lval=$d_stdio_cnt_lval;;
9910         esac
9911         case "$stdio_base" in
9912         '') stdio_base='((fp)->_IO_read_base)';;
9913         esac
9914         case "$stdio_bufsiz" in
9915         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9916         esac
9917 else
9918         case "$stdio_ptr" in
9919         '') stdio_ptr='((fp)->_ptr)'
9920                 ptr_lval=$define
9921                 ;;
9922         *)      ptr_lval=$d_stdio_ptr_lval;;
9923         esac
9924         case "$stdio_cnt" in
9925         '') stdio_cnt='((fp)->_cnt)'
9926                 cnt_lval=$define
9927                 ;;
9928         *)      cnt_lval=$d_stdio_cnt_lval;;
9929         esac
9930         case "$stdio_base" in
9931         '') stdio_base='((fp)->_base)';;
9932         esac
9933         case "$stdio_bufsiz" in
9934         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9935         esac
9936 fi
9937 : test whether _ptr and _cnt really work
9938 echo "Checking how std your stdio is..." >&4
9939 $cat >try.c <<EOP
9940 #include <stdio.h>
9941 #define FILE_ptr(fp)    $stdio_ptr
9942 #define FILE_cnt(fp)    $stdio_cnt
9943 int main() {
9944         FILE *fp = fopen("try.c", "r");
9945         char c = getc(fp);
9946         if (
9947                 18 <= FILE_cnt(fp) &&
9948                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9949         )
9950                 exit(0);
9951         exit(1);
9952 }
9953 EOP
9954 val="$undef"
9955 set try
9956 if eval $compile; then
9957         if ./try; then
9958                 echo "Your stdio acts pretty std."
9959                 val="$define"
9960         else
9961                 echo "Your stdio isn't very std."
9962         fi
9963 else
9964         echo "Your stdio doesn't appear very std."
9965 fi
9966 $rm -f try.c try
9967 set d_stdstdio
9968 eval $setvar
9969
9970 : Can _ptr be used as an lvalue?
9971 case "$d_stdstdio$ptr_lval" in
9972 $define$define) val=$define ;;
9973 *) val=$undef ;;
9974 esac
9975 set d_stdio_ptr_lval
9976 eval $setvar
9977
9978 : Can _cnt be used as an lvalue?
9979 case "$d_stdstdio$cnt_lval" in
9980 $define$define) val=$define ;;
9981 *) val=$undef ;;
9982 esac
9983 set d_stdio_cnt_lval
9984 eval $setvar
9985
9986 : see if _base is also standard
9987 val="$undef"
9988 case "$d_stdstdio" in
9989 $define)
9990         $cat >try.c <<EOP
9991 #include <stdio.h>
9992 #define FILE_base(fp)   $stdio_base
9993 #define FILE_bufsiz(fp) $stdio_bufsiz
9994 int main() {
9995         FILE *fp = fopen("try.c", "r");
9996         char c = getc(fp);
9997         if (
9998                 19 <= FILE_bufsiz(fp) &&
9999                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10000         )
10001                 exit(0);
10002         exit(1);
10003 }
10004 EOP
10005         set try
10006         if eval $compile; then
10007                 if ./try; then
10008                         echo "And its _base field acts std."
10009                         val="$define"
10010                 else
10011                         echo "But its _base field isn't std."
10012                 fi
10013         else
10014                 echo "However, it seems to be lacking the _base field."
10015         fi
10016         $rm -f try.c try
10017         ;;
10018 esac
10019 set d_stdiobase
10020 eval $setvar
10021
10022 $cat >&4 <<EOM
10023 Checking how to access stdio streams by file descriptor number...
10024 EOM
10025 case "$stdio_stream_array" in
10026 '')     $cat >try.c <<EOCP
10027 #include <stdio.h>
10028 int main() {
10029   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10030     printf("yes\n");
10031 }
10032 EOCP
10033         for s in _iob __iob __sF
10034         do
10035                 set try -DSTDIO_STREAM_ARRAY=$s
10036                 if eval $compile; then
10037                         case "`./try$exe_ext`" in
10038                         yes)    stdio_stream_array=$s; break ;;
10039                         esac
10040                 fi
10041         done
10042         $rm -f try.* try$exe_ext
10043 esac
10044 case "$stdio_stream_array" in
10045 '')     $cat >&4 <<EOM
10046 I can't figure out how to access stdio streams by file descriptor number.
10047 EOM
10048         d_stdio_stream_array="$undef"
10049         ;;
10050 *)      $cat >&4 <<EOM
10051 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10052 EOM
10053         d_stdio_stream_array="$define"
10054         ;;
10055 esac
10056
10057 : see if strcoll exists
10058 set strcoll d_strcoll
10059 eval $inlibc
10060
10061 : check for structure copying
10062 echo " "
10063 echo "Checking to see if your C compiler can copy structs..." >&4
10064 $cat >try.c <<'EOCP'
10065 int main()
10066 {
10067         struct blurfl {
10068                 int dyick;
10069         } foo, bar;
10070
10071         foo = bar;
10072 }
10073 EOCP
10074 if $cc -c try.c >/dev/null 2>&1 ; then
10075         val="$define"
10076         echo "Yup, it can."
10077 else
10078         val="$undef"
10079         echo "Nope, it can't."
10080 fi
10081 set d_strctcpy
10082 eval $setvar
10083 $rm -f try.*
10084
10085 : see if strerror and/or sys_errlist[] exist
10086 echo " "
10087 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10088     if set strerror val -f d_strerror; eval $csym; $val; then
10089                 echo 'strerror() found.' >&4
10090                 d_strerror="$define"
10091                 d_strerrm='strerror(e)'
10092                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10093                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10094                         d_syserrlst="$define"
10095                 else
10096                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10097                         d_syserrlst="$undef"
10098                 fi
10099     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10100                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10101                 echo 'strerror() found in string header.' >&4
10102                 d_strerror="$define"
10103                 d_strerrm='strerror(e)'
10104                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10105                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10106                                 d_syserrlst="$define"
10107                 else
10108                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10109                         d_syserrlst="$undef"
10110                 fi
10111     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10112                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10113                 d_strerror="$undef"
10114                 d_syserrlst="$define"
10115                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10116     else
10117                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10118                 d_strerror="$undef"
10119                 d_syserrlst="$undef"
10120                 d_strerrm='"unknown"'
10121     fi
10122 fi
10123
10124 : see if strtod exists
10125 set strtod d_strtod
10126 eval $inlibc
10127
10128 : see if strtol exists
10129 set strtol d_strtol
10130 eval $inlibc
10131
10132 : see if strtoul exists
10133 set strtoul d_strtoul
10134 eval $inlibc
10135
10136 : see if strxfrm exists
10137 set strxfrm d_strxfrm
10138 eval $inlibc
10139
10140 : see if symlink exists
10141 set symlink d_symlink
10142 eval $inlibc
10143
10144 : see if syscall exists
10145 set syscall d_syscall
10146 eval $inlibc
10147
10148 : see if sysconf exists
10149 set sysconf d_sysconf
10150 eval $inlibc
10151
10152 : see if system exists
10153 set system d_system
10154 eval $inlibc
10155
10156 : see if tcgetpgrp exists
10157 set tcgetpgrp d_tcgetpgrp
10158 eval $inlibc
10159
10160 : see if tcsetpgrp exists
10161 set tcsetpgrp d_tcsetpgrp
10162 eval $inlibc
10163
10164 : see if sys/types.h has to be included
10165 set sys/types.h i_systypes
10166 eval $inhdr
10167
10168 : see if prototype for telldir is available
10169 echo " "
10170 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10171 eval $hasproto
10172
10173 : define an is-a-typedef? function
10174 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10175 case "$inclist" in
10176 "") inclist="sys/types.h";;
10177 esac;
10178 eval "varval=\$$var";
10179 case "$varval" in
10180 "")
10181         $rm -f temp.c;
10182         for inc in $inclist; do
10183                 echo "#include <$inc>" >>temp.c;
10184         done;
10185         echo "#ifdef $type" >> temp.c;
10186         echo "printf(\"We have $type\");" >> temp.c;
10187         echo "#endif" >> temp.c;
10188         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10189         if $contains $type temp.E >/dev/null 2>&1; then
10190                 eval "$var=\$type";
10191         else
10192                 eval "$var=\$def";
10193         fi;
10194         $rm -f temp.?;;
10195 *) eval "$var=\$varval";;
10196 esac'
10197
10198 : define an is-a-typedef? function that prompts if the type is not available.
10199 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10200 case "$inclist" in
10201 "") inclist="sys/types.h";;
10202 esac;
10203 eval "varval=\$$var";
10204 case "$varval" in
10205 "")
10206         $rm -f temp.c;
10207         for inc in $inclist; do
10208                 echo "#include <$inc>" >>temp.c;
10209         done;
10210         echo "#ifdef $type" >> temp.c;
10211         echo "printf(\"We have $type\");" >> temp.c;
10212         echo "#endif" >> temp.c;
10213         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10214         echo " " ;
10215         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10216         if $contains $type temp.E >/dev/null 2>&1; then
10217                 echo "$type found." >&4;
10218                 eval "$var=\$type";
10219         else
10220                 echo "$type NOT found." >&4;
10221                 dflt="$def";
10222                 . ./myread ;
10223                 eval "$var=\$ans";
10224         fi;
10225         $rm -f temp.?;;
10226 *) eval "$var=\$varval";;
10227 esac'
10228
10229 : see if this is a sys/times.h system
10230 set sys/times.h i_systimes
10231 eval $inhdr
10232
10233 : see if times exists
10234 echo " "
10235 if set times val -f d_times; eval $csym; $val; then
10236         echo 'times() found.' >&4
10237         d_times="$define"
10238         inc=''
10239         case "$i_systimes" in
10240         "$define") inc='sys/times.h';;
10241         esac
10242         rp="What is the type returned by times() on this system?"
10243         set clock_t clocktype long stdio.h sys/types.h $inc
10244         eval $typedef_ask
10245 else
10246         echo 'times() NOT found, hope that will do.' >&4
10247         d_times="$undef"
10248         clocktype='int'
10249 fi
10250
10251 : see if truncate exists
10252 set truncate d_truncate
10253 eval $inlibc
10254
10255 : see if tzname[] exists
10256 echo " "
10257 if set tzname val -a d_tzname; eval $csym; $val; then
10258         val="$define"
10259         echo 'tzname[] found.' >&4
10260 else
10261         val="$undef"
10262         echo 'tzname[] NOT found.' >&4
10263 fi
10264 set d_tzname
10265 eval $setvar
10266
10267 : see if umask exists
10268 set umask d_umask
10269 eval $inlibc
10270
10271 : backward compatibility for d_hvfork
10272 if test X$d_hvfork != X; then
10273         d_vfork="$d_hvfork"
10274         d_hvfork=''
10275 fi
10276 : see if there is a vfork
10277 val=''
10278 set vfork val
10279 eval $inlibc
10280
10281 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10282 : perl on Solaris 2.x, and probably elsewhere.
10283 case "$val" in
10284 $define)
10285         echo " "
10286         case "$usevfork" in
10287         false) dflt='n';;
10288         *) dflt='y';;
10289         esac
10290         cat <<'EOM'
10291  
10292 Perl can only use a vfork() that doesn't suffer from strict
10293 restrictions on calling functions or modifying global data in
10294 the child.  For example, glibc-2.1 contains such a vfork()
10295 that is unsuitable.  If your system provides a proper fork()
10296 call, chances are that you do NOT want perl to use vfork().
10297
10298 EOM
10299         rp="Do you still want to use vfork()?"
10300         . ./myread
10301         case "$ans" in
10302         y|Y) ;;
10303         *)
10304                 echo "Ok, we won't use vfork()."
10305                 val="$undef"
10306                 ;;
10307         esac
10308         ;;
10309 esac
10310 set d_vfork
10311 eval $setvar
10312 case "$d_vfork" in
10313 $define) usevfork='true';;
10314 *) usevfork='false';;
10315 esac
10316
10317 : see if this is an sysdir system
10318 set sys/dir.h i_sysdir
10319 eval $inhdr
10320
10321 : see if this is an sysndir system
10322 set sys/ndir.h i_sysndir
10323 eval $inhdr
10324
10325 : see if closedir exists
10326 set closedir d_closedir
10327 eval $inlibc
10328
10329 case "$d_closedir" in
10330 "$define")
10331         echo " "
10332         echo "Checking whether closedir() returns a status..." >&4
10333         cat > closedir.c <<EOM
10334 #$i_dirent I_DIRENT             /**/
10335 #$i_sysdir I_SYS_DIR            /**/
10336 #$i_sysndir I_SYS_NDIR          /**/
10337 #$i_systypes I_SYS_TYPES        /**/
10338
10339 #if defined(I_SYS_TYPES)
10340 #include <sys/types.h>
10341 #endif
10342 #if defined(I_DIRENT)
10343 #include <dirent.h>
10344 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10345 #include <sys/dir.h>
10346 #endif
10347 #else
10348 #ifdef I_SYS_NDIR
10349 #include <sys/ndir.h>
10350 #else
10351 #ifdef I_SYS_DIR
10352 #ifdef hp9000s500
10353 #include <ndir.h>       /* may be wrong in the future */
10354 #else
10355 #include <sys/dir.h>
10356 #endif
10357 #endif
10358 #endif
10359 #endif 
10360 int main() { return closedir(opendir(".")); }
10361 EOM
10362         set closedir
10363         if eval $compile_ok; then
10364                 if ./closedir > /dev/null 2>&1 ; then
10365                         echo "Yes, it does."
10366                         val="$undef"
10367                 else
10368                         echo "No, it doesn't."
10369                         val="$define"
10370                 fi
10371         else
10372                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10373                 val="$define"
10374         fi
10375         ;;
10376 *)
10377         val="$undef";
10378         ;;
10379 esac
10380 set d_void_closedir
10381 eval $setvar
10382 $rm -f closedir*
10383 : check for volatile keyword
10384 echo " "
10385 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10386 $cat >try.c <<'EOCP'
10387 int main()
10388 {
10389         typedef struct _goo_struct goo_struct;
10390         goo_struct * volatile goo = ((goo_struct *)0);
10391         struct _goo_struct {
10392                 long long_int;
10393                 int reg_int;
10394                 char char_var;
10395         };
10396         typedef unsigned short foo_t;
10397         char *volatile foo;
10398         volatile int bar;
10399         volatile foo_t blech;
10400         foo = foo;
10401 }
10402 EOCP
10403 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10404         val="$define"
10405         echo "Yup, it does."
10406 else
10407         val="$undef"
10408         echo "Nope, it doesn't."
10409 fi
10410 set d_volatile
10411 eval $setvar
10412 $rm -f try.*
10413
10414 : see if there is a wait4
10415 set wait4 d_wait4
10416 eval $inlibc
10417
10418 : see if waitpid exists
10419 set waitpid d_waitpid
10420 eval $inlibc
10421
10422 : see if wcstombs exists
10423 set wcstombs d_wcstombs
10424 eval $inlibc
10425
10426 : see if wctomb exists
10427 set wctomb d_wctomb
10428 eval $inlibc
10429
10430 : see if writev exists
10431 set writev d_writev
10432 eval $inlibc
10433
10434 : preserve RCS keywords in files with variable substitution, grrr
10435 Date='$Date'
10436 Id='$Id'
10437 Log='$Log'
10438 RCSfile='$RCSfile'
10439 Revision='$Revision'
10440
10441 case "$crosscompile" in
10442 ''|[nN]*) crosscompile="$undef" ;;
10443 esac
10444
10445 case "$osname" in
10446 next|rhapsody) multiarch="$define" ;;
10447 esac
10448 case "$multiarch" in
10449 ''|[nN]*) multiarch="$undef" ;;
10450 esac
10451
10452 : check for alignment requirements
10453 echo " "
10454 case "$crosscompile$multiarch" in
10455 *$define*)
10456         $cat <<EOM
10457 You seem to be either cross-compiling or doing a multiarchitecture build,
10458 skipping the memory alignment check.
10459
10460 EOM
10461         case "$alignbytes" in
10462         '') alignbytes=8 ;;
10463         esac
10464         ;;
10465 *)
10466         case "$alignbytes" in
10467         '') echo "Checking alignment constraints..." >&4
10468                 $cat >try.c <<'EOCP'
10469 struct foobar {
10470         char foo;
10471         double bar;
10472 } try_algn;
10473 int main()
10474 {
10475         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10476 }
10477 EOCP
10478                 set try
10479                 if eval $compile_ok; then
10480                         dflt=`./try`
10481                 else
10482                         dflt='8'
10483                         echo "(I can't seem to compile the test program...)"
10484                 fi
10485                 ;;
10486         *) dflt="$alignbytes"
10487                 ;;
10488         esac
10489         rp="Doubles must be aligned on a how-many-byte boundary?"
10490         . ./myread
10491         alignbytes="$ans"
10492         $rm -f try.c try
10493         ;;
10494 esac
10495
10496
10497 : check for ordering of bytes in a long
10498 echo " "
10499 case "$crosscompile$multiarch" in
10500 *$define*)
10501         $cat <<EOM
10502 You seem to be either cross-compiling or doing a multiarchitecture build,
10503 skipping the byteorder check.
10504
10505 EOM
10506         byteorder=''
10507         ;;
10508 *)
10509         case "$byteorder" in
10510         '')
10511                 $cat <<'EOM'
10512 In the following, larger digits indicate more significance.  A big-endian
10513 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10514 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10515 machines may have weird orders like 3412.  A Cray will report 87654321. If
10516 the test program works the default is probably right.
10517 I'm now running the test program...
10518 EOM
10519                 $cat >try.c <<'EOCP'
10520 #include <stdio.h>
10521 int main()
10522 {
10523         int i;
10524         union {
10525                 unsigned long l;
10526                 char c[sizeof(long)];
10527         } u;
10528
10529         if (sizeof(long) > 4)
10530                 u.l = (0x08070605L << 32) | 0x04030201L;
10531         else
10532                 u.l = 0x04030201L;
10533         for (i = 0; i < sizeof(long); i++)
10534                 printf("%c", u.c[i]+'0');
10535         printf("\n");
10536         exit(0);
10537 }
10538 EOCP
10539                 xxx_prompt=y
10540                 set try
10541                 if eval $compile && ./try > /dev/null; then
10542                         dflt=`./try`
10543                         case "$dflt" in
10544                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10545                                 echo "(The test program ran ok.)"
10546                                 echo "byteorder=$dflt"
10547                                 xxx_prompt=n
10548                         ;;
10549                         ????|????????) echo "(The test program ran ok.)" ;;
10550                         *) echo "(The test program didn't run right for some reason.)" ;;
10551                         esac
10552                 else
10553                         dflt='4321'
10554                         cat <<'EOM'
10555 (I can't seem to compile the test program.  Guessing big-endian...)
10556 EOM
10557                 fi
10558                 case "$xxx_prompt" in
10559                 y)
10560                         rp="What is the order of bytes in a long?"
10561                         . ./myread
10562                         byteorder="$ans"
10563                         ;;
10564                 *)      byteorder=$dflt
10565                         ;;
10566                 esac
10567                 ;;
10568         esac
10569         $rm -f try.c try
10570         ;;
10571 esac
10572
10573
10574 : how do we catenate cpp tokens here?
10575 echo " "
10576 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10577 $cat >cpp_stuff.c <<'EOCP'
10578 #define RCAT(a,b)a/**/b
10579 #define ACAT(a,b)a ## b
10580 RCAT(Rei,ser)
10581 ACAT(Cir,cus)
10582 EOCP
10583 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10584 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10585         echo "Oh!  Smells like ANSI's been here." >&4
10586         echo "We can catify or stringify, separately or together!"
10587         cpp_stuff=42
10588 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10589         echo "Ah, yes!  The good old days!" >&4
10590         echo "However, in the good old days we don't know how to stringify and"
10591         echo "catify at the same time."
10592         cpp_stuff=1
10593 else
10594         $cat >&4 <<EOM
10595 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10596 to have to edit the values of CAT[2-5] in config.h...
10597 EOM
10598         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10599 fi
10600 $rm -f cpp_stuff.*
10601
10602 : see if this is a db.h system
10603 set db.h i_db
10604 eval $inhdr
10605
10606 case "$i_db" in
10607 $define)
10608         : Check db version.
10609         echo " "
10610         echo "Checking Berkeley DB version ..." >&4
10611         $cat >try.c <<EOCP
10612 #$d_const HASCONST
10613 #ifndef HASCONST
10614 #define const
10615 #endif
10616 #include <sys/types.h>
10617 #include <stdio.h>
10618 #include <db.h>
10619 int main()
10620 {
10621 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10622     int Major, Minor, Patch ;
10623     unsigned long Version ;
10624     (void)db_version(&Major, &Minor, &Patch) ;
10625     printf("You have Berkeley DB Version 2 or greater\n");
10626
10627     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10628                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10629     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10630                 Major, Minor, Patch) ;
10631
10632     /* check that db.h & libdb are compatible */
10633     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10634         printf("db.h and libdb are incompatible\n") ;
10635         exit(3);        
10636     }
10637
10638     printf("db.h and libdb are compatible\n") ;
10639
10640     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10641                 + DB_VERSION_PATCH ;
10642
10643     /* needs to be >= 2.3.4 */
10644     if (Version < 2003004) {
10645     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10646         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10647         exit(2);        
10648     }
10649
10650     exit(0);
10651 #else
10652 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10653     printf("You have Berkeley DB Version 1\n");
10654     exit(0);    /* DB version < 2: the coast is clear. */
10655 #else
10656     exit(1);    /* <db.h> not Berkeley DB? */
10657 #endif
10658 #endif
10659 }
10660 EOCP
10661         set try
10662         if eval $compile && ./try; then
10663                 echo 'Looks OK.' >&4
10664         else
10665                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10666                 i_db=$undef
10667                 case " $libs " in
10668                 *"-ldb "*)
10669                         : Remove db from list of libraries to use
10670                         echo "Removing unusable -ldb from library list" >&4
10671                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10672                         shift
10673                         libs="$*"
10674                         echo "libs = $libs" >&4
10675                         ;;
10676                 esac
10677         fi
10678         $rm -f try.*
10679         ;;
10680 esac
10681
10682 case "$i_db" in
10683 define)
10684         : Check the return type needed for hash 
10685         echo " "
10686         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10687         $cat >try.c <<EOCP
10688 #$d_const HASCONST
10689 #ifndef HASCONST
10690 #define const
10691 #endif
10692 #include <sys/types.h>
10693 #include <db.h>
10694
10695 #ifndef DB_VERSION_MAJOR
10696 u_int32_t hash_cb (ptr, size)
10697 const void *ptr;
10698 size_t size;
10699 {
10700 }
10701 HASHINFO info;
10702 int main()
10703 {
10704         info.hash = hash_cb;
10705 }
10706 #endif
10707 EOCP
10708         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10709                 if $contains warning try.out >>/dev/null 2>&1 ; then
10710                         db_hashtype='int'
10711                 else
10712                         db_hashtype='u_int32_t'
10713                 fi
10714         else
10715                 : XXX Maybe we should just give up here.
10716                 db_hashtype=u_int32_t
10717                 $cat try.out >&4
10718                 echo "Help:  I can't seem to compile the db test program." >&4
10719                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10720         fi
10721         $rm -f try.*
10722         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10723         ;;
10724 *)      db_hashtype=u_int32_t
10725         ;;
10726 esac
10727 case "$i_db" in
10728 define)
10729         : Check the return type needed for prefix 
10730         echo " "
10731         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10732         cat >try.c <<EOCP
10733 #$d_const HASCONST
10734 #ifndef HASCONST
10735 #define const
10736 #endif
10737 #include <sys/types.h>
10738 #include <db.h>
10739
10740 #ifndef DB_VERSION_MAJOR
10741 size_t prefix_cb (key1, key2)
10742 const DBT *key1;
10743 const DBT *key2;
10744 {
10745 }
10746 BTREEINFO info;
10747 int main()
10748 {
10749         info.prefix = prefix_cb;
10750 }
10751 #endif
10752 EOCP
10753         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10754                 if $contains warning try.out >>/dev/null 2>&1 ; then
10755                         db_prefixtype='int'
10756                 else
10757                         db_prefixtype='size_t'
10758                 fi
10759         else
10760                 db_prefixtype='size_t'
10761                 : XXX Maybe we should just give up here.
10762                 $cat try.out >&4
10763                 echo "Help:  I can't seem to compile the db test program." >&4
10764                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10765         fi
10766         $rm -f try.*
10767         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10768         ;;
10769 *)      db_prefixtype='size_t'
10770         ;;
10771 esac
10772
10773 : check for void type
10774 echo " "
10775 echo "Checking to see how well your C compiler groks the void type..." >&4
10776 case "$voidflags" in
10777 '')
10778         $cat >try.c <<'EOCP'
10779 #if TRY & 1
10780 void sub() {
10781 #else
10782 sub() {
10783 #endif
10784         extern void moo();      /* function returning void */
10785         void (*goo)();          /* ptr to func returning void */
10786 #if TRY & 8
10787         void *hue;              /* generic ptr */
10788 #endif
10789 #if TRY & 2
10790         void (*foo[10])();
10791 #endif
10792
10793 #if TRY & 4
10794         if(goo == moo) {
10795                 exit(0);
10796         }
10797 #endif
10798         exit(0);
10799 }
10800 int main() { sub(); }
10801 EOCP
10802         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10803                 voidflags=$defvoidused
10804         echo "Good.  It appears to support void to the level $package wants.">&4
10805                 if $contains warning .out >/dev/null 2>&1; then
10806                         echo "However, you might get some warnings that look like this:"
10807                         $cat .out
10808                 fi
10809         else
10810 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10811                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10812                         echo "It supports 1..."
10813                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10814                                 echo "It also supports 2..."
10815                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10816                                         voidflags=7
10817                                         echo "And it supports 4 but not 8 definitely."
10818                                 else
10819                                         echo "It doesn't support 4..."
10820                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10821                                                 voidflags=11
10822                                                 echo "But it supports 8."
10823                                         else
10824                                                 voidflags=3
10825                                                 echo "Neither does it support 8."
10826                                         fi
10827                                 fi
10828                         else
10829                                 echo "It does not support 2..."
10830                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10831                                         voidflags=13
10832                                         echo "But it supports 4 and 8."
10833                                 else
10834                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10835                                                 voidflags=5
10836                                                 echo "And it supports 4 but has not heard about 8."
10837                                         else
10838                                                 echo "However it supports 8 but not 4."
10839                                         fi
10840                                 fi
10841                         fi
10842                 else
10843                         echo "There is no support at all for void."
10844                         voidflags=0
10845                 fi
10846         fi
10847 esac
10848 case "$voidflags" in
10849 "$defvoidused") ;;
10850 *)      $cat >&4 <<'EOM'
10851   Support flag bits are:
10852     1: basic void declarations.
10853     2: arrays of pointers to functions returning void.
10854     4: operations between pointers to and addresses of void functions.
10855     8: generic void pointers.
10856 EOM
10857         dflt="$voidflags";
10858         rp="Your void support flags add up to what?"
10859         . ./myread
10860         voidflags="$ans"
10861         ;;
10862 esac
10863 $rm -f try.* .out
10864
10865
10866 : How can we generate normalized random numbers ?
10867 echo " "
10868 echo "Looking for a random number function..." >&4
10869 case "$randfunc" in
10870 '')
10871         if set drand48 val -f; eval $csym; $val; then
10872                 dflt="drand48"
10873                 echo "Good, found drand48()." >&4
10874         elif set random val -f; eval $csym; $val; then
10875                 dflt="random"
10876                 echo "OK, found random()." >&4
10877         else
10878                 dflt="rand"
10879                 echo "Yick, looks like I have to use rand()." >&4
10880         fi
10881         echo " "
10882         ;;
10883 *)
10884         dflt="$randfunc"
10885         ;;
10886 esac
10887 cont=true
10888
10889 case "$ccflags" in
10890 *-Dmy_rand=*|*-Dmy_srand=*)
10891         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10892         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10893         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10894         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10895         ;;
10896 esac
10897
10898 while $test "$cont"; do
10899         rp="Use which function to generate random numbers?"
10900         . ./myread
10901         if $test "$ans" = "$dflt"; then
10902                 : null
10903         else
10904                 randbits=''
10905         fi
10906         randfunc="$ans"
10907         if set $ans val -f; eval $csym; $val; then
10908                 cont=''
10909         else
10910                 dflt=y
10911                 rp="I cannot find function $ans. Use that name anyway?"
10912                 . ./myread
10913                 dflt=rand
10914                 case "$ans" in
10915                         [yY]*) cont='';;
10916                 esac
10917         fi
10918         case "$cont" in
10919         '')
10920                 case "$randfunc" in
10921                 drand48)
10922                         drand01="drand48()"
10923                         seedfunc="srand48"
10924                         randbits=48
10925                         randseedtype=long
10926                         ;;
10927                 rand|random)
10928                         case "$randbits" in
10929                         '')
10930 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10931                                 $cat >try.c <<EOCP
10932 #$i_unistd I_UNISTD
10933 #$i_stdlib I_STDLIB
10934 #include <stdio.h>
10935 #ifdef I_UNISTD
10936 #  include <unistd.h>
10937 #endif
10938 #ifdef I_STDLIB
10939 #  include <stdlib.h>
10940 #endif
10941 int main()
10942 {
10943         register int i;
10944         register unsigned long tmp;
10945         register unsigned long max = 0L;
10946
10947         for (i = 1000; i; i--) {
10948                 tmp = (unsigned long) $randfunc();
10949                 if (tmp > max) max = tmp;
10950         }
10951         for (i = 0; max; i++)
10952                 max /= 2;
10953         printf("%d\n",i);
10954 }
10955 EOCP
10956                                 set try
10957                                 if eval $compile_ok; then
10958                                         dflt=`try`
10959                                 else
10960                                         dflt='?'
10961                                         echo "(I can't seem to compile the test program...)"
10962                                 fi
10963                                 ;;
10964                         *)
10965                                 dflt="$randbits"
10966                                 ;;
10967                         esac
10968                         rp="How many bits does your $randfunc() function produce?"
10969                         . ./myread
10970                         randbits="$ans"
10971                         $rm -f try.c try
10972                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10973                         seedfunc="s$randfunc"
10974                         randseedtype=unsigned
10975                         ;;
10976                 *)
10977                         dflt="31"
10978                         rp="How many bits does your $randfunc() function produce?"
10979                         . ./myread
10980                         randbits="$ans"
10981                         seedfunc="s$randfunc"
10982                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10983                         if set $seedfunc val -f; eval $csym; $val; then
10984                                 echo "(Using $seedfunc() to seed random generator)"
10985                         else
10986                                 echo "(Warning: no $seedfunc() to seed random generator)"
10987                                 seedfunc=rand
10988                         fi
10989                         randseedtype=unsigned
10990                         ;;
10991                 esac
10992                 ;;
10993         esac
10994 done
10995
10996 echo " "
10997 echo "Determining whether or not we are on an EBCDIC system..." >&4
10998 $cat >tebcdic.c <<'EOM'
10999 int main()
11000 {
11001   if ('M'==0xd4) return 0;
11002   return 1;
11003 }
11004 EOM
11005
11006 val=$undef
11007 set tebcdic
11008 if eval $compile_ok; then
11009         if ./tebcdic; then
11010                 echo "You have EBCDIC." >&4
11011                 val="$define"
11012         else
11013                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
11014         fi
11015 else
11016         echo "I'm unable to compile the test program." >&4
11017         echo "I'll assume ASCII or some ISO Latin." >&4
11018 fi
11019 $rm -f tebcdic.c tebcdic
11020 set ebcdic
11021 eval $setvar
11022
11023 echo " "
11024 $cat >&4 <<EOM
11025 Checking how to flush all pending stdio output...
11026 EOM
11027 # I only know how to find the first 32 possibly open files on SunOS.
11028 # See also hints/sunos_4_1.sh and util.c  --AD
11029 case "$osname" in
11030 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11031 esac
11032 $cat >>try.c <<EOCP
11033 #include <stdio.h>
11034 #$i_unistd I_UNISTD
11035 #ifdef I_UNISTD
11036 # include <unistd.h>
11037 #endif
11038 #$d_sysconf HAS_SYSCONF
11039 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11040 #ifdef HAS_STDIO_STREAM_ARRAY
11041 # define STDIO_STREAM_ARRAY $stdio_stream_array
11042 #endif
11043 int main() {
11044   FILE* p = fopen("try.out", "w");
11045 #ifdef TRY_FPUTC
11046   fputc('x', p);
11047 #else
11048 # ifdef TRY_FPRINTF
11049   fprintf(p, "x");
11050 # endif
11051 #endif
11052 #ifdef TRY_FFLUSH_NULL
11053   fflush(NULL);
11054 #endif
11055 #ifdef TRY_FFLUSH_ALL
11056   {
11057     long open_max = -1;
11058 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11059     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11060 # else
11061 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11062     open_max = sysconf(_SC_OPEN_MAX);
11063 #  else
11064 #   ifdef FOPEN_MAX
11065     open_max = FOPEN_MAX;
11066 #   else
11067 #    ifdef OPEN_MAX
11068     open_max = OPEN_MAX;
11069 #    else
11070 #     ifdef _NFILE
11071     open_max = _NFILE;
11072 #     endif
11073 #    endif
11074 #   endif
11075 #  endif
11076 # endif 
11077 # ifdef HAS_STDIO_STREAM_ARRAY
11078     if (open_max > 0) {
11079       long i;
11080       for (i = 0; i < open_max; i++)
11081             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11082                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11083                 STDIO_STREAM_ARRAY[i]._flag)
11084                 fflush(&STDIO_STREAM_ARRAY[i]);
11085     }   
11086   }
11087 # endif
11088 #endif
11089   _exit(42);
11090 }
11091 EOCP
11092 : first we have to find out how _not_ to flush
11093 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11094     output=''
11095     set try -DTRY_FPUTC
11096     if eval $compile; then
11097             $rm -f try.out
11098             ./try$exe_ext 2>/dev/null
11099             if $test ! -s try.out -a "X$?" = X42; then
11100                 output=-DTRY_FPUTC
11101             fi
11102     fi
11103     case "$output" in
11104     '')
11105             set try -DTRY_FPRINTF
11106             $rm -f try.out
11107             if eval $compile; then
11108                     $rm -f try.out
11109                     ./try$exe_ext 2>/dev/null
11110                     if $test ! -s try.out -a "X$?" = X42; then
11111                         output=-DTRY_FPRINTF
11112                     fi
11113             fi
11114         ;;
11115     esac
11116 fi
11117 : check for fflush NULL behaviour
11118 case "$fflushNULL" in
11119 '')     set try -DTRY_FFLUSH_NULL $output
11120         if eval $compile; then
11121                 $rm -f try.out
11122                 ./try$exe_ext 2>/dev/null
11123                 code="$?"
11124                 if $test -s try.out -a "X$code" = X42; then
11125                         fflushNULL="`$cat try.out`"
11126                 else
11127                         if $test "X$code" != X42; then
11128                                 $cat >&4 <<EOM
11129 (If this test failed, don't worry, we'll try another method shortly.)
11130 EOM
11131                         fi
11132                 fi
11133         fi
11134         $rm -f core try.core core.try.*
11135         case "$fflushNULL" in
11136         x)      $cat >&4 <<EOM
11137 Your fflush(NULL) works okay.
11138 EOM
11139                 fflushNULL="$define"
11140                 ;;
11141         '')     $cat >&4 <<EOM
11142 Your fflush(NULL) isn't working (contrary to ANSI C).
11143 EOM
11144                 fflushNULL="$undef"
11145                 ;;
11146         *)      $cat >&4 <<EOM
11147 Cannot figure out whether your fflush(NULL) works or not.
11148 I'm assuming it doesn't (contrary to ANSI C).
11149 EOM
11150                 fflushNULL="$undef"
11151                 ;;
11152         esac
11153         ;;
11154 $define|true|[yY]*)
11155         fflushNULL="$define"
11156         ;;
11157 *)
11158         fflushNULL="$undef"
11159         ;;
11160 esac
11161 : check explicit looping only if NULL did not work
11162 case "$fflushNULL" in
11163 "$undef")
11164         : check for fflush all behaviour
11165         case "$fflushall" in
11166         '')     set try -DTRY_FFLUSH_ALL $output
11167                 if eval $compile; then
11168                         $cat >&4 <<EOM
11169 (Now testing the other method--but note that also this may fail.)
11170 EOM
11171                         $rm -f try.out
11172                         ./try$exe_ext 2>/dev/null
11173                         if $test -s try.out -a "X$?" = X42; then
11174                                 fflushall="`$cat try.out`"
11175                         fi
11176                 fi
11177                 $rm -f core try.core core.try.*
11178                 case "$fflushall" in
11179                 x)      $cat >&4 <<EOM
11180 Whew. Flushing explicitly all the stdio streams works.
11181 EOM
11182                         fflushall="$define"
11183                         ;;
11184                 '')     $cat >&4 <<EOM
11185 Sigh. Flushing explicitly all the stdio streams doesn't work.
11186 EOM
11187                         fflushall="$undef"
11188                         ;;
11189                 *)      $cat >&4 <<EOM
11190 Cannot figure out whether flushing stdio streams explicitly works or not.
11191 I'm assuming it doesn't.
11192 EOM
11193                         fflushall="$undef"
11194                         ;;
11195                 esac
11196                 ;;
11197         "$define"|true|[yY]*)
11198                 fflushall="$define"
11199                 ;;
11200         *)
11201                 fflushall="$undef"
11202                 ;;
11203         esac
11204         ;;
11205 *)      fflushall="$undef"      
11206         ;;
11207 esac
11208 case "$fflushNULL$fflushall" in
11209 undefundef)
11210         $cat <<EOM
11211 I cannot figure out how to flush pending stdio output.
11212 EOM
11213         ;;
11214 esac
11215 $rm -f try.* try$exe_ext
11216
11217 : see what type file positions are declared as in the library
11218 rp="What is the type for file position used by fsetpos()?"
11219 set fpos_t fpostype long stdio.h sys/types.h
11220 eval $typedef_ask
11221
11222 : Store the full pathname to the ar program for use in the C program
11223 : Respect a hint or command line value for full_ar.
11224 case "$full_ar" in
11225 '') full_ar=$ar ;;
11226 esac
11227
11228 : Store the full pathname to the sed program for use in the C program
11229 full_sed=$sed
11230
11231 : see what type gids are declared as in the kernel
11232 echo " "
11233 echo "Looking for the type for group ids returned by getgid()."
11234 set gid_t gidtype xxx stdio.h sys/types.h
11235 eval $typedef
11236 case "$gidtype" in
11237 xxx)
11238         xxx=`./findhdr sys/user.h`
11239         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11240         case $1 in
11241         unsigned) dflt="$1 $2" ;;
11242         *) dflt="$1" ;;
11243         esac
11244         ;;
11245 *) dflt="$gidtype";;
11246 esac
11247 case "$gidtype" in
11248 gid_t) echo "gid_t found." ;;
11249 *)      rp="What is the type for group ids returned by getgid()?"
11250         . ./myread
11251         gidtype="$ans"
11252         ;;
11253 esac
11254
11255 : see if getgroups exists
11256 set getgroups d_getgrps
11257 eval $inlibc
11258
11259 : see if setgroups exists
11260 set setgroups d_setgrps
11261 eval $inlibc
11262
11263
11264 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11265 echo " "
11266 case "$d_getgrps$d_setgrps" in
11267 *define*)
11268         case "$groupstype" in
11269         '') dflt="$gidtype" ;;
11270         *)  dflt="$groupstype" ;;
11271         esac
11272         $cat <<EOM
11273 What type of pointer is the second argument to getgroups() and setgroups()?
11274 Usually this is the same as group ids, $gidtype, but not always.
11275
11276 EOM
11277         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11278         . ./myread
11279         groupstype="$ans"
11280         ;;
11281 *)  groupstype="$gidtype";;
11282 esac
11283
11284 : see what type lseek is declared as in the kernel
11285 rp="What is the type used for lseek's offset on this system?"
11286 set off_t lseektype long stdio.h sys/types.h
11287 eval $typedef_ask
11288
11289 echo " "
11290 $echo $n "Checking to see how big your file offsets are...$c" >&4
11291 $cat >try.c <<EOCP
11292 #include <sys/types.h>
11293 #include <stdio.h>
11294 int main()
11295 {
11296         printf("%d\n", sizeof($lseektype));
11297 }
11298 EOCP
11299 set try
11300 if eval $compile_ok; then
11301         lseeksize=`./try`
11302         $echo " $lseeksize bytes." >&4
11303 else
11304         dflt='4'
11305         echo " "
11306         echo "(I can't seem to compile the test program.  Guessing...)"
11307         rp="What is the size of your file offsets (in bytes)?"
11308         . ./myread
11309         lseeksize="$ans"
11310 fi
11311 $rm -f try.c try
11312
11313 echo " "
11314 echo "Checking if your $make program sets \$(MAKE)..." >&4
11315 case "$make_set_make" in
11316 '')
11317         $sed 's/^X //' > testmake.mak << 'EOF'
11318 Xall:
11319 X       @echo 'maketemp="$(MAKE)"'
11320 EOF
11321         case "`$make -f testmake.mak 2>/dev/null`" in
11322         *maketemp=*) make_set_make='#' ;;
11323         *)      make_set_make="MAKE=$make" ;;
11324         esac
11325         $rm -f testmake.mak
11326         ;;
11327 esac
11328 case "$make_set_make" in
11329 '#') echo "Yup, it does.";;
11330 *) echo "Nope, it doesn't.";;
11331 esac
11332
11333 : see what type is used for mode_t
11334 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11335 set mode_t modetype int stdio.h sys/types.h
11336 eval $typedef_ask
11337
11338 : define a fucntion to check prototypes
11339 $cat > protochk <<EOSH
11340 $startsh
11341 cc="$cc"
11342 optimize="$optimize"
11343 ccflags="$ccflags"
11344 prototype="$prototype"
11345 define="$define"
11346 rm=$rm
11347 EOSH
11348
11349 $cat >> protochk <<'EOSH'
11350
11351 $rm -f try.c
11352 foo="$1"
11353 shift
11354 while test $# -ge 2; do
11355         case "$1" in
11356                 $define) echo "#include <$2>" >> try.c ;;
11357                 literal) echo "$2" >> try.c ;;
11358         esac
11359     shift 2
11360 done
11361 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11362 cat >> try.c <<'EOCP'
11363 #ifdef CAN_PROTOTYPE
11364 #define _(args) args
11365 #else
11366 #define _(args) ()
11367 #endif
11368 EOCP
11369 echo "$foo" >> try.c
11370 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11371 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11372 status=$?
11373 $rm -f try.[co]
11374 exit $status
11375 EOSH
11376 chmod +x protochk
11377 $eunicefix protochk
11378
11379 : see what type is used for size_t
11380 rp="What is the type used for the length parameter for string functions?"
11381 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11382 eval $typedef_ask
11383
11384 : check for type of arguments to gethostbyaddr. 
11385 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11386         case "$d_gethbyaddr" in
11387         $define)
11388                 $cat <<EOM
11389
11390 Checking to see what type of arguments are accepted by gethostbyaddr().
11391 EOM
11392                 hdrs="$define sys/types.h
11393                         $d_socket sys/socket.h 
11394                         $i_niin netinet/in.h 
11395                         $i_netdb netdb.h
11396                         $i_unistd unistd.h"
11397                 : The first arg can 'char *' or 'void *'
11398                 : The second arg is some of integral type
11399                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11400                         for yyy in size_t long int; do
11401                                 case "$netdb_host_type" in
11402                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11403                                         if ./protochk "$try" $hdrs; then
11404                                                 echo "Your system accepts $xxx for the first arg."
11405                                                 echo "...and $yyy for the second arg."
11406                                                 netdb_host_type="$xxx"
11407                                                 netdb_hlen_type="$yyy"
11408                                         fi
11409                                         ;;
11410                                 esac
11411                         done
11412                 done
11413                 : In case none of those worked, prompt the user.
11414                 case "$netdb_host_type" in
11415                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11416                         dflt='char *'
11417                         . ./myread
11418                         netdb_host_type=$ans
11419                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11420                         dflt="$sizetype"
11421                         . ./myread
11422                         netdb_hlen_type=$ans
11423                         ;;
11424                 esac
11425                 ;;
11426         *)      : no gethostbyaddr, so pick harmless defaults
11427                 netdb_host_type='char *'
11428                 netdb_hlen_type="$sizetype"
11429                 ;;
11430         esac
11431         # Remove the "const" if needed. -- but then we'll have a 
11432         # prototype clash!
11433         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11434 fi
11435
11436 : check for type of argument to gethostbyname. 
11437 if test "X$netdb_name_type" = X ; then
11438         case "$d_gethbyname" in
11439         $define)
11440                 $cat <<EOM
11441
11442 Checking to see what type of argument is accepted by gethostbyname().
11443 EOM
11444                 hdrs="$define sys/types.h
11445                         $d_socket sys/socket.h 
11446                         $i_niin netinet/in.h 
11447                         $i_netdb netdb.h
11448                         $i_unistd unistd.h"
11449                 for xxx in "const char *" "char *"; do
11450                         case "$netdb_name_type" in
11451                         '')     try="extern struct hostent *gethostbyname($xxx);"
11452                                 if ./protochk "$try" $hdrs; then
11453                                         echo "Your system accepts $xxx."
11454                                         netdb_name_type="$xxx"
11455                                 fi
11456                                 ;;
11457                         esac
11458                 done
11459                 : In case none of those worked, prompt the user.
11460                 case "$netdb_name_type" in
11461                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11462                         dflt='char *'
11463                         . ./myread
11464                         netdb_name_type=$ans
11465                         ;;
11466                 esac
11467                 ;;
11468         *)      : no gethostbyname, so pick harmless default
11469                 netdb_name_type='char *'
11470                 ;;
11471         esac
11472 fi
11473
11474 : check for type of 1st argument to getnetbyaddr. 
11475 if test "X$netdb_net_type" = X ; then
11476         case "$d_getnbyaddr" in
11477         $define)
11478                 $cat <<EOM
11479
11480 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11481 EOM
11482                 hdrs="$define sys/types.h
11483                         $d_socket sys/socket.h 
11484                         $i_niin netinet/in.h 
11485                         $i_netdb netdb.h
11486                         $i_unistd unistd.h"
11487                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11488                         case "$netdb_net_type" in
11489                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11490                                 if ./protochk "$try" $hdrs; then
11491                                         echo "Your system accepts $xxx."
11492                                         netdb_net_type="$xxx"
11493                                 fi
11494                                 ;;
11495                         esac
11496                 done
11497                 : In case none of those worked, prompt the user.
11498                 case "$netdb_net_type" in
11499                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11500                         dflt='long'
11501                         . ./myread
11502                         netdb_net_type=$ans
11503                         ;;
11504                 esac
11505                 ;;
11506         *)      : no getnetbyaddr, so pick harmless default
11507                 netdb_net_type='long'
11508                 ;;
11509         esac
11510 fi
11511 : locate the preferred pager for this system
11512 case "$pager" in
11513 '')
11514         dflt=''
11515         case "$pg" in
11516         /*) dflt=$pg;;
11517         esac
11518         case "$more" in
11519         /*) dflt=$more;;
11520         esac
11521         case "$less" in
11522         /*) dflt=$less;;
11523         esac
11524         case "$dflt" in
11525         '') dflt=/usr/ucb/more;;
11526         esac
11527         ;;
11528 *) dflt="$pager";;
11529 esac
11530 echo " "
11531 fn=f/
11532 rp='What pager is used on your system?'
11533 . ./getfile
11534 pager="$ans"
11535
11536 : see what type pids are declared as in the kernel
11537 rp="What is the type of process ids on this system?"
11538 set pid_t pidtype int stdio.h sys/types.h
11539 eval $typedef_ask
11540
11541 : check for length of pointer
11542 echo " "
11543 case "$ptrsize" in
11544 '')
11545         $echo $n "Checking to see how big your pointers are...$c" >&4
11546         if test "$voidflags" -gt 7; then
11547                 echo '#define VOID_PTR char *' > try.c
11548         else
11549                 echo '#define VOID_PTR void *' > try.c
11550         fi
11551         $cat >>try.c <<'EOCP'
11552 #include <stdio.h>
11553 int main()
11554 {
11555         printf("%d\n", sizeof(VOID_PTR));
11556         exit(0);
11557 }
11558 EOCP
11559         set try
11560         if eval $compile_ok; then
11561                 ptrsize=`./try`
11562                 $echo " $ptrsize bytes." >&4
11563         else
11564                 dflt='4'
11565                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11566                 rp="What is the size of a pointer (in bytes)?"
11567                 . ./myread
11568                 ptrsize="$ans"
11569         fi
11570         ;;
11571 esac
11572 $rm -f try.c try
11573
11574 : see if ar generates random libraries by itself
11575 echo " "
11576 echo "Checking how to generate random libraries on your machine..." >&4
11577 echo 'int bar1() { return bar2(); }' > bar1.c
11578 echo 'int bar2() { return 2; }' > bar2.c
11579 $cat > foo.c <<'EOP'
11580 int main() { printf("%d\n", bar1()); exit(0); }
11581 EOP
11582 $cc $ccflags -c bar1.c >/dev/null 2>&1
11583 $cc $ccflags -c bar2.c >/dev/null 2>&1
11584 $cc $ccflags -c foo.c >/dev/null 2>&1
11585 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11586 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11587         ./foobar >/dev/null 2>&1; then
11588         echo "$ar appears to generate random libraries itself."
11589         orderlib=false
11590         ranlib=":"
11591 elif $ar ts bar$_a >/dev/null 2>&1 &&
11592         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11593         ./foobar >/dev/null 2>&1; then
11594                 echo "a table of contents needs to be added with '$ar ts'."
11595                 orderlib=false
11596                 ranlib="$ar ts"
11597 else
11598         case "$ranlib" in
11599         :) ranlib='';;
11600         '')
11601                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11602                 $test -f $ranlib || ranlib=''
11603                 ;;
11604         esac
11605         if $test -n "$ranlib"; then
11606                 echo "your system has '$ranlib'; we'll use that."
11607                 orderlib=false
11608         else
11609                 echo "your system doesn't seem to support random libraries"
11610                 echo "so we'll use lorder and tsort to order the libraries."
11611                 orderlib=true
11612                 ranlib=":"
11613         fi
11614 fi
11615 $rm -f foo* bar* 
11616
11617 : check for type of arguments to select. 
11618 case "$selecttype" in
11619 '') case "$d_select" in
11620         $define)
11621                 $cat <<EOM
11622 Checking to see what type of arguments are accepted by select().
11623 EOM
11624                 hdrs="$define sys/types.h
11625                         $i_systime sys/time.h 
11626                         $i_sysselct sys/select.h
11627                         $d_socket sys/socket.h"
11628                 : The first arg can be int, unsigned, or size_t
11629                 : The last arg may or may not be 'const'
11630                 val=''
11631                 : void pointer has been seen but using that
11632                 : breaks the selectminbits test
11633                 for xxx in 'fd_set *' 'int *'; do
11634                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11635                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11636                                         case "$val" in
11637                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11638                                                 if ./protochk "$try" $hdrs; then
11639                                                         echo "Your system accepts $xxx."
11640                                                         val="$xxx"
11641                                                 fi
11642                                                 ;;
11643                                         esac
11644                                 done
11645                         done
11646                 done
11647                 case "$val" in
11648                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11649                         case "$d_fd_set" in
11650                                 $define) dflt="fd_set *" ;;
11651                                 *)              dflt="int *" ;;
11652                         esac
11653                         . ./myread
11654                         val=$ans
11655                         ;;
11656                 esac
11657                 selecttype="$val"
11658                 ;;
11659         *)      : no select, so pick a harmless default
11660                 selecttype='int *'
11661                 ;;
11662         esac
11663         ;;
11664 esac
11665
11666 : check for the select 'width'
11667 case "$selectminbits" in
11668 '') case "$d_select" in
11669         $define)
11670                 $cat <<EOM
11671
11672 Checking to see on how many bits at a time your select() operates...
11673 EOM
11674                 $cat >try.c <<EOCP
11675 #include <sys/types.h>
11676 #$i_time I_TIME
11677 #$i_systime I_SYS_TIME
11678 #$i_systimek I_SYS_TIME_KERNEL
11679 #ifdef I_TIME
11680 #   include <time.h>
11681 #endif
11682 #ifdef I_SYS_TIME
11683 #   ifdef I_SYS_TIME_KERNEL
11684 #       define KERNEL
11685 #   endif
11686 #   include <sys/time.h>
11687 #   ifdef I_SYS_TIME_KERNEL
11688 #       undef KERNEL
11689 #   endif
11690 #endif
11691 #$i_sysselct I_SYS_SELECT
11692 #ifdef I_SYS_SELECT
11693 #include <sys/select.h>
11694 #endif
11695 #$d_socket HAS_SOCKET
11696 #ifdef HAS_SOCKET
11697 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11698 #endif
11699 #include <stdio.h>
11700 $selecttype b;
11701 #define S sizeof(*(b))
11702 #define MINBITS 64
11703 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11704 #define NBITS  (NBYTES * 8)
11705 int main() {
11706     char s[NBYTES];
11707     struct timeval t;
11708     int i;
11709     FILE* fp;
11710     int fd;
11711
11712     fclose(stdin);
11713     fp = fopen("try.c", "r");
11714     if (fp == 0)
11715       exit(1);
11716     fd = fileno(fp);
11717     if (fd < 0)
11718       exit(2);
11719     b = ($selecttype)s;
11720     for (i = 0; i < NBITS; i++)
11721         FD_SET(i, b);
11722     t.tv_sec  = 0;
11723     t.tv_usec = 0;
11724     select(fd + 1, b, 0, 0, &t);
11725     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11726     printf("%d\n", i + 1);
11727     return 0;
11728 }
11729 EOCP
11730                 set try
11731                 if eval $compile_ok; then
11732                         selectminbits=`./try`
11733                         case "$selectminbits" in
11734                         '')     cat >&4 <<EOM
11735 Cannot figure out on how many bits at a time your select() operates.
11736 I'll play safe and guess it is 32 bits.
11737 EOM
11738                                 selectminbits=32
11739                                 bits="32 bits"
11740                                 ;;
11741                         1)      bits="1 bit" ;;
11742                         *)      bits="$selectminbits bits" ;;
11743                         esac
11744                         echo "Your select() operates on $bits at a time." >&4
11745                 else
11746                         rp='What is the minimum number of bits your select() operates on?'
11747                         case "$byteorder" in
11748                         1234|12345678)  dflt=32 ;;
11749                         *)              dflt=1  ;;
11750                         esac
11751                         . ./myread
11752                         val=$ans
11753                         selectminbits="$val"
11754                 fi
11755                 $rm -f try.* try
11756                 ;;
11757         *)      : no select, so pick a harmless default
11758                 selectminbits='32'
11759                 ;;
11760         esac
11761         ;;
11762 esac
11763
11764 : Trace out the files included by signal.h, then look for SIGxxx names.
11765 : Remove SIGARRAYSIZE used by HPUX.
11766 : Remove SIGSTKSIZE used by Linux.
11767 : Remove SIGSTKSZ used by Posix.
11768 : Remove SIGTYP void lines used by OS2.
11769 xxx=`echo '#include <signal.h>' |
11770         $cppstdin $cppminus $cppflags 2>/dev/null |
11771         $grep '^[       ]*#.*include' | 
11772         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11773 : Check this list of files to be sure we have parsed the cpp output ok.
11774 : This will also avoid potentially non-existent files, such 
11775 : as ../foo/bar.h
11776 xxxfiles=''
11777 for xx in $xxx /dev/null ; do
11778         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11779 done
11780 : If we have found no files, at least try signal.h
11781 case "$xxxfiles" in
11782 '')     xxxfiles=`./findhdr signal.h` ;;
11783 esac
11784 xxx=`awk '
11785 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11786         print substr($2, 4, 20)
11787 }
11788 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11789         print substr($3, 4, 20)
11790 }' $xxxfiles`
11791 : Append some common names just in case the awk scan failed.
11792 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11793 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11794 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11795 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11796 : generate a few handy files for later
11797 $cat > signal.c <<'EOCP'
11798 #include <sys/types.h>
11799 #include <signal.h>
11800 #include <stdio.h>
11801 int main() {
11802
11803 /* Strange style to avoid deeply-nested #if/#else/#endif */
11804 #ifndef NSIG
11805 #  ifdef _NSIG
11806 #    define NSIG (_NSIG)
11807 #  endif
11808 #endif
11809
11810 #ifndef NSIG
11811 #  ifdef SIGMAX
11812 #    define NSIG (SIGMAX+1)
11813 #  endif
11814 #endif
11815
11816 #ifndef NSIG
11817 #  ifdef SIG_MAX
11818 #    define NSIG (SIG_MAX+1)
11819 #  endif
11820 #endif
11821
11822 #ifndef NSIG
11823 #  ifdef MAXSIG
11824 #    define NSIG (MAXSIG+1)
11825 #  endif
11826 #endif
11827
11828 #ifndef NSIG
11829 #  ifdef MAX_SIG
11830 #    define NSIG (MAX_SIG+1)
11831 #  endif
11832 #endif
11833
11834 #ifndef NSIG
11835 #  ifdef SIGARRAYSIZE
11836 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11837 #  endif
11838 #endif
11839
11840 #ifndef NSIG
11841 #  ifdef _sys_nsig
11842 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11843 #  endif
11844 #endif
11845
11846 /* Default to some arbitrary number that's big enough to get most
11847    of the common signals.
11848 */
11849 #ifndef NSIG
11850 #    define NSIG 50
11851 #endif
11852
11853 printf("NSIG %d\n", NSIG);
11854
11855 #ifndef JUST_NSIG
11856
11857 EOCP
11858
11859 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11860 {
11861         printf "#ifdef SIG"; printf $1; printf "\n"
11862         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11863         printf $1; printf ");\n"
11864         printf "#endif\n"
11865 }
11866 END {
11867         printf "#endif /* JUST_NSIG */\n";
11868         printf "}\n";
11869 }
11870 ' >>signal.c
11871 $cat >signal.awk <<'EOP'
11872 BEGIN { ndups = 0 }
11873 $1 ~ /^NSIG$/ { nsig = $2 }
11874 ($1 !~ /^NSIG$/) && (NF == 2) {
11875     if ($2 > maxsig) { maxsig = $2 }
11876     if (sig_name[$2]) {
11877         dup_name[ndups] = $1
11878         dup_num[ndups] = $2
11879         ndups++ 
11880     }
11881     else {
11882         sig_name[$2] = $1
11883         sig_num[$2] = $2
11884     }
11885 }
11886 END { 
11887     if (nsig == 0) {
11888         nsig = maxsig + 1
11889     }
11890     printf("NSIG %d\n", nsig);
11891     for (n = 1; n < nsig; n++) {
11892         if (sig_name[n]) {
11893             printf("%s %d\n", sig_name[n], sig_num[n])
11894         }
11895         else {
11896             printf("NUM%d %d\n", n, n) 
11897         }
11898     }
11899     for (n = 0; n < ndups; n++) {
11900         printf("%s %d\n", dup_name[n], dup_num[n])
11901     }
11902 }
11903 EOP
11904 $cat >signal_cmd <<EOS
11905 $startsh
11906 if $test -s signal.lst; then
11907     echo "Using your existing signal.lst file"
11908         exit 0
11909 fi
11910 xxx="$xxx"
11911 EOS
11912 $cat >>signal_cmd <<'EOS'
11913
11914 set signal
11915 if eval $compile_ok; then
11916         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11917 else
11918         echo "(I can't seem be able to compile the whole test program)" >&4
11919         echo "(I'll try it in little pieces.)" >&4
11920         set signal -DJUST_NSIG
11921         if eval $compile_ok; then
11922                 ./signal$_exe > signal.nsg
11923                 $cat signal.nsg
11924         else
11925                 echo "I can't seem to figure out how many signals you have." >&4
11926                 echo "Guessing 50." >&4
11927                 echo 'NSIG 50' > signal.nsg
11928         fi
11929         : Now look at all the signal names, one at a time.
11930         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11931                 $cat > signal.c <<EOCP
11932 #include <sys/types.h>
11933 #include <signal.h>
11934 #include <stdio.h>
11935 int main() {
11936 printf("$xx %d\n", SIG${xx});
11937 return 0;
11938 }
11939 EOCP
11940                 set signal
11941                 if eval $compile; then
11942                         echo "SIG${xx} found."
11943                         ./signal$_exe  >> signal.ls1
11944                 else
11945                         echo "SIG${xx} NOT found."
11946                 fi
11947         done
11948         if $test -s signal.ls1; then
11949                 $cat signal.nsg signal.ls1 |
11950                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11951         fi
11952
11953 fi
11954 if $test -s signal.lst; then
11955         :
11956 else
11957         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11958         echo 'kill -l' >signal
11959         set X `csh -f <signal`
11960         $rm -f signal
11961         shift
11962         case $# in
11963         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11964         esac
11965         echo $@ | $tr ' ' $trnl | \
11966             $awk '{ printf "%s %d\n", $1, ++s; }
11967                   END { printf "NSIG %d\n", ++s }' >signal.lst
11968 fi
11969 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11970 EOS
11971 chmod a+x signal_cmd
11972 $eunicefix signal_cmd
11973
11974 : generate list of signal names
11975 echo " "
11976 case "$sig_name_init" in
11977 '') doinit=yes ;;
11978 *)  case "$sig_num_init" in
11979     ''|*,*) doinit=yes ;;
11980     esac ;;
11981 esac
11982 case "$doinit" in
11983 yes)
11984         echo "Generating a list of signal names and numbers..." >&4
11985         . ./signal_cmd
11986         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11987         sig_name=`$awk 'BEGIN { printf "ZERO " }
11988                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11989         sig_num=`$awk  'BEGIN { printf "0 " }
11990                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11991         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11992                              !/^NSIG/   { printf "\"%s\", ", $1 }
11993                              END        { printf "0\n" }' signal.lst`
11994         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11995                              !/^NSIG/   { printf "%d, ", $2}
11996                              END        { printf "0\n"}' signal.lst`
11997         ;;
11998 esac
11999 echo "The following $sig_count signals are available:"
12000 echo " "
12001 echo $sig_name | $awk \
12002 'BEGIN { linelen = 0 }
12003 {
12004         for (i = 1; i <= NF; i++) {
12005                 name = "SIG" $i " "
12006                 linelen = linelen + length(name)
12007                 if (linelen > 70) {
12008                         printf "\n"
12009                         linelen = length(name)
12010                 }
12011                 printf "%s", name
12012         }
12013         printf "\n"
12014 }'
12015 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12016
12017 : see what type is used for signed size_t
12018 set ssize_t ssizetype int stdio.h sys/types.h
12019 eval $typedef
12020 dflt="$ssizetype"
12021 $cat > ssize.c <<EOM
12022 #include <stdio.h>
12023 #include <sys/types.h>
12024 #define Size_t $sizetype
12025 #define SSize_t $dflt
12026 int main()
12027 {
12028         if (sizeof(Size_t) == sizeof(SSize_t))
12029                 printf("$dflt\n");
12030         else if (sizeof(Size_t) == sizeof(int))
12031                 printf("int\n");
12032         else 
12033                 printf("long\n");
12034         exit(0);
12035 }
12036 EOM
12037 echo " "
12038 set ssize
12039 if eval $compile_ok && ./ssize > /dev/null; then
12040         ssizetype=`./ssize`
12041         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12042 else
12043         $cat >&4 <<EOM
12044 Help! I can't compile and run the ssize_t test program: please enlighten me!
12045 (This is probably a misconfiguration in your system or libraries, and
12046 you really ought to fix it.  Still, I'll try anyway.)
12047
12048 I need a type that is the same size as $sizetype, but is guaranteed to
12049 be signed.  Common values are ssize_t, int and long.
12050
12051 EOM
12052         rp="What signed type is the same size as $sizetype?"
12053         . ./myread
12054         ssizetype="$ans"
12055 fi
12056 $rm -f ssize ssize.*
12057
12058 : see what type of char stdio uses.
12059 echo " "
12060 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12061         echo "Your stdio uses unsigned chars." >&4
12062         stdchar="unsigned char"
12063 else
12064         echo "Your stdio uses signed chars." >&4
12065         stdchar="char"
12066 fi
12067
12068 : see if time exists
12069 echo " "
12070 if test "X$d_time" = X -o X"$timetype" = X; then
12071     if set time val -f d_time; eval $csym; $val; then
12072                 echo 'time() found.' >&4
12073                 val="$define"
12074                 rp="What is the type returned by time() on this system?"
12075                 set time_t timetype long stdio.h sys/types.h
12076                 eval $typedef_ask
12077     else
12078                 echo 'time() not found, hope that will do.' >&4
12079                 val="$undef"
12080                 timetype='int';
12081     fi
12082     set d_time
12083     eval $setvar
12084 fi
12085
12086 : see what type uids are declared as in the kernel
12087 echo " "
12088 echo "Looking for the type for user ids returned by getuid()."
12089 set uid_t uidtype xxx stdio.h sys/types.h
12090 eval $typedef
12091 case "$uidtype" in
12092 xxx)
12093         xxx=`./findhdr sys/user.h`
12094         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12095         case $1 in
12096         unsigned) dflt="$1 $2" ;;
12097         *) dflt="$1" ;;
12098         esac
12099         ;;
12100 *) dflt="$uidtype";;
12101 esac
12102 case "$uidtype" in
12103 uid_t)  echo "uid_t found." ;;
12104 *)      rp="What is the type for user ids returned by getuid()?"
12105         . ./myread
12106         uidtype="$ans"
12107         ;;
12108 esac
12109
12110 : see if dbm.h is available
12111 : see if dbmclose exists
12112 set dbmclose d_dbmclose
12113 eval $inlibc
12114
12115 case "$d_dbmclose" in
12116 $define)
12117         set dbm.h i_dbm
12118         eval $inhdr
12119         case "$i_dbm" in
12120         $define)
12121                 val="$undef"
12122                 set i_rpcsvcdbm
12123                 eval $setvar
12124                 ;;
12125         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12126                 eval $inhdr
12127                 ;;
12128         esac
12129         ;;
12130 *)      echo "We won't be including <dbm.h>"
12131         val="$undef"
12132         set i_dbm
12133         eval $setvar
12134         val="$undef"
12135         set i_rpcsvcdbm
12136         eval $setvar
12137         ;;
12138 esac
12139
12140 : see if this is a sys/file.h system
12141 val=''
12142 set sys/file.h val
12143 eval $inhdr
12144
12145 : do we need to include sys/file.h ?
12146 case "$val" in
12147 "$define")
12148         echo " "
12149         if $h_sysfile; then
12150                 val="$define"
12151                 echo "We'll be including <sys/file.h>." >&4
12152         else
12153                 val="$undef"
12154                 echo "We won't be including <sys/file.h>." >&4
12155         fi
12156         ;;
12157 *)
12158         h_sysfile=false
12159         ;;
12160 esac
12161 set i_sysfile
12162 eval $setvar
12163
12164 : see if fcntl.h is there
12165 val=''
12166 set fcntl.h val
12167 eval $inhdr
12168
12169 : see if we can include fcntl.h
12170 case "$val" in
12171 "$define")
12172         echo " "
12173         if $h_fcntl; then
12174                 val="$define"
12175                 echo "We'll be including <fcntl.h>." >&4
12176         else
12177                 val="$undef"
12178                 if $h_sysfile; then
12179         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12180                 else
12181                         echo "We won't be including <fcntl.h>." >&4
12182                 fi
12183         fi
12184         ;;
12185 *)
12186         h_fcntl=false
12187         val="$undef"
12188         ;;
12189 esac
12190 set i_fcntl
12191 eval $setvar
12192
12193 : see if locale.h is available
12194 set locale.h i_locale
12195 eval $inhdr
12196
12197 : see if mach cthreads are available
12198 if test "X$usethreads" = "X$define"; then
12199         set mach/cthreads.h i_machcthr
12200         eval $inhdr
12201 else
12202         i_machcthr="$undef"
12203 fi
12204
12205
12206
12207 : see if this is a math.h system
12208 set math.h i_math
12209 eval $inhdr
12210
12211 : see if this is a mntent.h system
12212 set mntent.h i_mntent
12213 eval $inhdr
12214
12215 : see if ndbm.h is available
12216 set ndbm.h t_ndbm
12217 eval $inhdr
12218 case "$t_ndbm" in
12219 $define)
12220         : see if dbm_open exists
12221         set dbm_open d_dbm_open
12222         eval $inlibc
12223         case "$d_dbm_open" in
12224         $undef)
12225                 t_ndbm="$undef"
12226                 echo "We won't be including <ndbm.h>"
12227                 ;;
12228         esac
12229         ;;
12230 esac
12231 val="$t_ndbm"
12232 set i_ndbm
12233 eval $setvar
12234
12235 : see if net/errno.h is available
12236 val=''
12237 set net/errno.h val
12238 eval $inhdr
12239
12240 : Unfortunately, it causes problems on some systems.  Arrgh.
12241 case "$val" in
12242 $define)
12243         cat > try.c <<'EOM'
12244 #include <stdio.h>
12245 #include <errno.h>
12246 #include <net/errno.h>
12247 int func()
12248 {
12249         return ENOTSOCK;
12250 }
12251 EOM
12252         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12253                 echo "We'll be including <net/errno.h>." >&4
12254         else
12255                 echo "We won't be including <net/errno.h>." >&4
12256                 val="$undef"
12257         fi
12258         $rm -f try.* try
12259         ;;
12260 esac
12261 set i_neterrno
12262 eval $setvar
12263
12264 : see if netinet/tcp.h is available
12265 set netinet/tcp.h i_netinettcp
12266 eval $inhdr
12267
12268 : see if this is a poll.h system
12269 set poll.h i_poll
12270 eval $inhdr
12271
12272 : get C preprocessor symbols handy
12273 echo " "
12274 $echo $n "Hmm... $c"
12275 echo $al | $tr ' ' $trnl >Cppsym.know
12276 $cat <<EOSS >Cppsym
12277 $startsh
12278 case "\$1" in
12279 -l) list=true
12280         shift
12281         ;;
12282 esac
12283 unknown=''
12284 case "\$list\$#" in
12285 1|2)
12286         for sym do
12287                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12288                         exit 0
12289                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12290                         :
12291                 else
12292                         unknown="\$unknown \$sym"
12293                 fi
12294         done
12295         set X \$unknown
12296         shift
12297         ;;
12298 esac
12299 case \$# in
12300 0) exit 1;;
12301 esac
12302 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12303 #ifdef \1\\
12304 exit 0; _ _ _ _\1\\      \1\\
12305 #endif\\
12306 /' >Cppsym\$\$
12307 echo "exit 1; _ _ _" >>Cppsym\$\$
12308 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12309 case "\$list" in
12310 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12311 *)
12312         sh Cppsym2\$\$
12313         status=\$?
12314         ;;
12315 esac
12316 $rm -f Cppsym\$\$ Cppsym2\$\$
12317 exit \$status
12318 EOSS
12319 chmod +x Cppsym
12320 $eunicefix Cppsym
12321 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12322
12323 : now check the C compiler for additional symbols
12324 postprocess_cc_v=''
12325 case "$osname" in
12326 aix) postprocess_cc_v="|$tr , ' '" ;;
12327 esac
12328 $cat >ccsym <<EOS
12329 $startsh
12330 $cat >tmp.c <<EOF
12331 extern int foo;
12332 EOF
12333 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12334 do
12335         case "\$i" in
12336         -D*) echo "\$i" | $sed 's/^-D//';;
12337         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12338         esac
12339 done
12340 $rm -f try.c
12341 EOS
12342 postprocess_cc_v=''
12343 chmod +x ccsym
12344 $eunicefix ccsym
12345 ./ccsym > ccsym1.raw
12346 if $test -s ccsym1.raw; then
12347        $sort ccsym1.raw | $uniq >ccsym.raw
12348 else
12349        mv ccsym1.raw ccsym.raw
12350 fi
12351
12352 $awk '/\=/ { print $0; next }
12353         { print $0"=1" }' ccsym.raw >ccsym.list
12354 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12355 $comm -13 ccsym.true ccsym.list >ccsym.own
12356 $comm -12 ccsym.true ccsym.list >ccsym.com
12357 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12358 also=''
12359 if $test -z ccsym.raw; then
12360         echo "Your C compiler doesn't seem to define any symbols!" >&4
12361         echo " "
12362         echo "However, your C preprocessor defines the following symbols:"
12363         $cat Cppsym.true
12364         ccsymbols=''
12365         cppsymbols=`$cat Cppsym.true`
12366         cppsymbols=`echo $cppsymbols`
12367         cppccsymbols="$cppsymbols"
12368 else
12369         if $test -s ccsym.com; then
12370                 echo "Your C compiler and pre-processor define these symbols:"
12371                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12372                 also='also '
12373                 symbols='ones'
12374                 cppccsymbols=`$cat ccsym.com`
12375                 cppccsymbols=`echo $cppccsymbols`
12376                 $test "$silent" || sleep 1
12377         fi
12378         if $test -s ccsym.cpp; then
12379                 $test "$also" && echo " "
12380                 echo "Your C pre-processor ${also}defines the following symbols:"
12381                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12382                 also='further '
12383                 cppsymbols=`$cat ccsym.cpp`
12384                 cppsymbols=`echo $cppsymbols`
12385                 $test "$silent" || sleep 1
12386         fi
12387         if $test -s ccsym.own; then
12388                 $test "$also" && echo " "
12389                 echo "Your C compiler ${also}defines the following cpp symbols:"
12390                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12391                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12392                 ccsymbols=`$cat ccsym.own`
12393                 ccsymbols=`echo $ccsymbols`
12394                 $test "$silent" || sleep 1
12395         fi
12396 fi
12397 $rm -f ccsym*
12398
12399 : see if this is a termio system
12400 val="$undef"
12401 val2="$undef"
12402 val3="$undef"
12403 if $test `./findhdr termios.h`; then
12404         set tcsetattr i_termios
12405         eval $inlibc
12406         val3="$i_termios"
12407 fi
12408 echo " "
12409 case "$val3" in
12410 "$define") echo "You have POSIX termios.h... good!" >&4;;
12411 *) if ./Cppsym pyr; then
12412                 case "`/bin/universe`" in
12413                 ucb) if $test `./findhdr sgtty.h`; then
12414                                 val2="$define"
12415                                 echo "<sgtty.h> found." >&4
12416                         else
12417                                 echo "System is pyramid with BSD universe."
12418                                 echo "<sgtty.h> not found--you could have problems." >&4
12419                         fi;;
12420                 *) if $test `./findhdr termio.h`; then
12421                                 val="$define"
12422                                 echo "<termio.h> found." >&4
12423                         else
12424                                 echo "System is pyramid with USG universe."
12425                                 echo "<termio.h> not found--you could have problems." >&4
12426                         fi;;
12427                 esac
12428         elif ./usg; then
12429                 if $test `./findhdr termio.h`; then
12430                         echo "<termio.h> found." >&4
12431                         val="$define"
12432                 elif $test `./findhdr sgtty.h`; then
12433                         echo "<sgtty.h> found." >&4
12434                         val2="$define"
12435                 else
12436 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12437                 fi
12438         else
12439                 if $test `./findhdr sgtty.h`; then
12440                         echo "<sgtty.h> found." >&4
12441                         val2="$define"
12442                 elif $test `./findhdr termio.h`; then
12443                         echo "<termio.h> found." >&4
12444                         val="$define"
12445                 else
12446 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12447                 fi
12448         fi;;
12449 esac
12450 set i_termio; eval $setvar
12451 val=$val2; set i_sgtty; eval $setvar
12452 val=$val3; set i_termios; eval $setvar
12453
12454 : see if this is a shadow.h system
12455 set shadow.h i_shadow
12456 eval $inhdr
12457
12458 : see if this is a socks.h system
12459 set socks.h i_socks
12460 eval $inhdr
12461
12462 : see if stdarg is available
12463 echo " "
12464 if $test `./findhdr stdarg.h`; then
12465         echo "<stdarg.h> found." >&4
12466         valstd="$define"
12467 else
12468         echo "<stdarg.h> NOT found." >&4
12469         valstd="$undef"
12470 fi
12471
12472 : see if varags is available
12473 echo " "
12474 if $test `./findhdr varargs.h`; then
12475         echo "<varargs.h> found." >&4
12476 else
12477         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12478 fi
12479
12480 : set up the varargs testing programs
12481 $cat > varargs.c <<EOP
12482 #ifdef I_STDARG
12483 #include <stdarg.h>
12484 #endif
12485 #ifdef I_VARARGS
12486 #include <varargs.h>
12487 #endif
12488
12489 #ifdef I_STDARG
12490 int f(char *p, ...)
12491 #else
12492 int f(va_alist)
12493 va_dcl
12494 #endif
12495 {
12496         va_list ap;
12497 #ifndef I_STDARG
12498         char *p;
12499 #endif
12500 #ifdef I_STDARG
12501         va_start(ap,p);
12502 #else
12503         va_start(ap);
12504         p = va_arg(ap, char *);
12505 #endif
12506         va_end(ap);
12507 }
12508 EOP
12509 $cat > varargs <<EOP
12510 $startsh
12511 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12512         echo "true"
12513 else
12514         echo "false"
12515 fi
12516 $rm -f varargs$_o
12517 EOP
12518 chmod +x varargs
12519
12520 : now check which varargs header should be included
12521 echo " "
12522 i_varhdr=''
12523 case "$valstd" in
12524 "$define")
12525         if `./varargs I_STDARG`; then
12526                 val='stdarg.h'
12527         elif `./varargs I_VARARGS`; then
12528                 val='varargs.h'
12529         fi
12530         ;;
12531 *)
12532         if `./varargs I_VARARGS`; then
12533                 val='varargs.h'
12534         fi
12535         ;;
12536 esac
12537 case "$val" in
12538 '')
12539 echo "I could not find the definition for va_dcl... You have problems..." >&4
12540         val="$undef"; set i_stdarg; eval $setvar
12541         val="$undef"; set i_varargs; eval $setvar
12542         ;;
12543 *) 
12544         set i_varhdr
12545         eval $setvar
12546         case "$i_varhdr" in
12547         stdarg.h)
12548                 val="$define"; set i_stdarg; eval $setvar
12549                 val="$undef"; set i_varargs; eval $setvar
12550                 ;;
12551         varargs.h)
12552                 val="$undef"; set i_stdarg; eval $setvar
12553                 val="$define"; set i_varargs; eval $setvar
12554                 ;;
12555         esac
12556         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12557 esac
12558 $rm -f varargs*
12559
12560 : see if stddef is available
12561 set stddef.h i_stddef
12562 eval $inhdr
12563
12564 : see if sys/access.h is available
12565 set sys/access.h i_sysaccess
12566 eval $inhdr
12567
12568 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12569 set sys/filio.h i_sysfilio
12570 eval $inhdr
12571 echo " "
12572 if $test `./findhdr sys/ioctl.h`; then
12573         val="$define"
12574         echo '<sys/ioctl.h> found.' >&4
12575 else
12576         val="$undef"
12577         if $test $i_sysfilio = "$define"; then
12578             echo '<sys/ioctl.h> NOT found.' >&4
12579         else
12580                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12581                 $test $i_termio = "$define" && xxx="termio.h"
12582                 $test $i_termios = "$define" && xxx="termios.h"
12583 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12584         fi
12585 fi
12586 set i_sysioctl
12587 eval $setvar
12588
12589 : see if sys/resource.h has to be included
12590 set sys/resource.h i_sysresrc
12591 eval $inhdr
12592
12593 : see if sys/security.h is available
12594 set sys/security.h i_syssecrt
12595 eval $inhdr
12596
12597 : see if this is a sys/statvfs.h system
12598 set sys/statvfs.h i_sysstatvfs
12599 eval $inhdr
12600
12601 : see if this is a sys/un.h system
12602 set sys/un.h i_sysun
12603 eval $inhdr
12604
12605 : see if this is a syswait system
12606 set sys/wait.h i_syswait
12607 eval $inhdr
12608
12609 : see if this is an utime system
12610 set utime.h i_utime
12611 eval $inhdr
12612
12613 : see if this is a values.h system
12614 set values.h i_values
12615 eval $inhdr
12616
12617 : see if this is a vfork system
12618 case "$d_vfork" in
12619 "$define")
12620         set vfork.h i_vfork
12621         eval $inhdr
12622         ;;
12623 *)
12624         i_vfork="$undef"
12625         ;;
12626 esac
12627
12628 : see if gdbm.h is available
12629 set gdbm.h t_gdbm
12630 eval $inhdr
12631 case "$t_gdbm" in
12632 $define)
12633         : see if gdbm_open exists
12634         set gdbm_open d_gdbm_open
12635         eval $inlibc
12636         case "$d_gdbm_open" in
12637         $undef)
12638                 t_gdbm="$undef"
12639                 echo "We won't be including <gdbm.h>"
12640                 ;;
12641         esac
12642         ;;
12643 esac
12644 val="$t_gdbm"
12645 set i_gdbm
12646 eval $setvar
12647
12648 echo " "
12649 echo "Looking for extensions..." >&4
12650 tdir=`pwd`
12651 cd $rsrc/ext
12652 : If we are using the old config.sh, known_extensions may contain
12653 : old or inaccurate or duplicate values.
12654 known_extensions=''
12655 nonxs_extensions=''
12656 : We do not use find because it might not be available.
12657 : We do not just use MANIFEST because the user may have dropped
12658 : some additional extensions into the source tree and expect them
12659 : to be built.
12660 for xxx in * ; do
12661         case "$xxx" in
12662         DynaLoader|dynaload) ;;
12663         *)      if $test -f $xxx/$xxx.xs; then
12664                         known_extensions="$known_extensions $xxx"
12665                 elif $test -f $xxx/Makefile.PL; then
12666                         nonxs_extensions="$nonxs_extensions $xxx"
12667                 else
12668                         if $test -d $xxx; then
12669                                 # Look for nested extensions, eg. Devel/Dprof.
12670                                 cd $xxx
12671                                 for yyy in * ; do
12672                                 if $test -f $yyy/$yyy.xs; then
12673                                         known_extensions="$known_extensions $xxx/$yyy"
12674                                 elif $test -f $yyy/Makefile.PL; then
12675                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12676                                 fi
12677                                 done
12678                                 cd ..
12679                         fi
12680                 fi 
12681                 ;;
12682         esac
12683 done
12684 set X $nonxs_extensions
12685 shift
12686 nonxs_extensions="$*"
12687 set X $known_extensions
12688 shift
12689 known_extensions="$*"
12690 cd $tdir
12691
12692 : Now see which are supported on this system.
12693 avail_ext=''
12694 for xxx in $known_extensions ; do
12695         case "$xxx" in
12696         DB_File|db_file)
12697                 case "$i_db" in
12698                 $define) avail_ext="$avail_ext $xxx" ;;
12699                 esac
12700                 ;;
12701         GDBM_File|gdbm_fil)
12702                 case "$i_gdbm" in 
12703                 $define) avail_ext="$avail_ext $xxx" ;;
12704                 esac
12705                 ;;
12706         NDBM_File|ndbm_fil)
12707                 case "$i_ndbm" in
12708                 $define) avail_ext="$avail_ext $xxx" ;;
12709                 esac
12710                 ;;
12711         ODBM_File|odbm_fil) 
12712                 case "${i_dbm}${i_rpcsvcdbm}" in
12713                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12714                 esac
12715                 ;;
12716         POSIX|posix)
12717                 case "$useposix" in
12718                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12719                 esac
12720                 ;;
12721         Opcode|opcode)
12722                 case "$useopcode" in
12723                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12724                 esac
12725                 ;;
12726         Socket|socket)
12727                 case "$d_socket" in 
12728                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12729                 esac
12730                 ;;
12731         Thread|thread)
12732                 case "$usethreads" in 
12733                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12734                 esac
12735                 ;;
12736         IPC/SysV|ipc/sysv)
12737                 : XXX Do we need a useipcsysv variable here
12738                 case "${d_msg}${d_sem}${d_shm}" in 
12739                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12740                 esac
12741                 ;;
12742         *)      avail_ext="$avail_ext $xxx"
12743                 ;;
12744         esac
12745 done
12746
12747 set X $avail_ext
12748 shift
12749 avail_ext="$*"
12750
12751 : Now see which nonxs extensions are supported on this system.
12752 : For now assume all are.
12753 nonxs_ext=''
12754 for xxx in $nonxs_extensions ; do
12755         case "$xxx" in
12756         *)      nonxs_ext="$nonxs_ext $xxx"
12757                 ;;
12758         esac
12759 done
12760
12761 set X $nonxs_ext
12762 shift
12763 nonxs_ext="$*"
12764
12765 case $usedl in
12766 $define)
12767         $cat <<EOM
12768 A number of extensions are supplied with $package.  You may choose to
12769 compile these extensions for dynamic loading (the default), compile
12770 them into the $package executable (static loading), or not include
12771 them at all.  Answer "none" to include no extensions.
12772 Note that DynaLoader is always built and need not be mentioned here.
12773
12774 EOM
12775         case "$dynamic_ext" in
12776         '') dflt="$avail_ext" ;;
12777         *)      dflt="$dynamic_ext"
12778                 # Perhaps we are reusing an old out-of-date config.sh.
12779                 case "$hint" in
12780                 previous)
12781                         if test X"$dynamic_ext" != X"$avail_ext"; then
12782                                 $cat <<EOM
12783 NOTICE:  Your previous config.sh list may be incorrect. 
12784 The extensions now available to you are 
12785         ${avail_ext}
12786 but the default list from your previous config.sh is
12787         ${dynamic_ext} 
12788
12789 EOM
12790                         fi
12791                         ;;
12792                 esac
12793                 ;;
12794         esac
12795         case "$dflt" in
12796         '')     dflt=none;;
12797         esac
12798         rp="What extensions do you wish to load dynamically?"
12799         . ./myread
12800         case "$ans" in
12801         none) dynamic_ext=' ' ;;
12802         *) dynamic_ext="$ans" ;;
12803         esac
12804
12805         case "$static_ext" in
12806         '')
12807                 : Exclude those already listed in dynamic linking
12808                 dflt=''
12809                 for xxx in $avail_ext; do
12810                         case " $dynamic_ext " in
12811                         *" $xxx "*) ;;
12812                         *) dflt="$dflt $xxx" ;;
12813                         esac
12814                 done
12815                 set X $dflt
12816                 shift
12817                 dflt="$*"
12818                 ;;
12819         *)  dflt="$static_ext" 
12820                 ;;
12821         esac
12822
12823         case "$dflt" in
12824         '')     dflt=none;;
12825         esac
12826         rp="What extensions do you wish to load statically?"
12827         . ./myread
12828         case "$ans" in
12829         none) static_ext=' ' ;;
12830         *) static_ext="$ans" ;;
12831         esac
12832         ;;
12833 *)
12834         $cat <<EOM
12835 A number of extensions are supplied with $package.  Answer "none" 
12836 to include no extensions. 
12837 Note that DynaLoader is always built and need not be mentioned here.
12838
12839 EOM
12840         case "$static_ext" in
12841         '') dflt="$avail_ext" ;;
12842         *)      dflt="$static_ext"
12843                 # Perhaps we are reusing an old out-of-date config.sh.
12844                 case "$hint" in
12845                 previous)
12846                         if test X"$static_ext" != X"$avail_ext"; then
12847                                 $cat <<EOM
12848 NOTICE:  Your previous config.sh list may be incorrect. 
12849 The extensions now available to you are 
12850         ${avail_ext}
12851 but the default list from your previous config.sh is
12852         ${static_ext} 
12853
12854 EOM
12855                         fi
12856                         ;;
12857                 esac
12858                 ;;
12859         esac
12860         : Exclude those that are not xs extensions
12861         case "$dflt" in
12862         '')     dflt=none;;
12863         esac
12864         rp="What extensions do you wish to include?"
12865         . ./myread
12866         case "$ans" in
12867         none) static_ext=' ' ;;
12868         *) static_ext="$ans" ;;
12869         esac
12870         ;;
12871 esac
12872
12873 set X $dynamic_ext $static_ext $nonxs_ext
12874 shift
12875 extensions="$*"
12876
12877 : Remove build directory name from cppstdin so it can be used from
12878 : either the present location or the final installed location.
12879 echo " "
12880 : Get out of the UU directory to get correct path name.
12881 cd ..
12882 case "$cppstdin" in
12883 `pwd`/cppstdin)
12884         echo "Stripping down cppstdin path name"
12885         cppstdin=cppstdin
12886         ;;
12887 esac
12888 cd UU
12889
12890 : end of configuration questions
12891 echo " "
12892 echo "End of configuration questions."
12893 echo " "
12894
12895 : back to where it started
12896 if test -d ../UU; then
12897         cd ..
12898 fi
12899
12900 : configuration may be patched via a 'config.over' file
12901 if $test -f config.over; then
12902         echo " "
12903         dflt=y
12904         rp='I see a config.over file.  Do you wish to load it?'
12905         . UU/myread
12906         case "$ans" in
12907         n*) echo "OK, I'll ignore it.";;
12908         *)      . ./config.over
12909                 echo "Configuration override changes have been loaded."
12910                 ;;
12911         esac
12912 fi
12913
12914 : in case they want portability, strip down executable paths
12915 case "$d_portable" in
12916 "$define")
12917         echo " "
12918         echo "Stripping down executable paths..." >&4
12919         for file in $loclist $trylist; do
12920                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12921                         eval $file="\$file"
12922                 fi
12923         done
12924         ;;
12925 esac
12926
12927 : create config.sh file
12928 echo " "
12929 echo "Creating config.sh..." >&4
12930 $spitshell <<EOT >config.sh
12931 $startsh
12932 #
12933 # This file was produced by running the Configure script. It holds all the
12934 # definitions figured out by Configure. Should you modify one of these values,
12935 # do not forget to propagate your changes by running "Configure -der". You may
12936 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12937 #
12938
12939 # Package name      : $package
12940 # Source directory  : $src
12941 # Configuration time: $cf_time
12942 # Configured by     : $cf_by
12943 # Target system     : $myuname
12944
12945 Author='$Author'
12946 Date='$Date'
12947 Header='$Header'
12948 Id='$Id'
12949 Locker='$Locker'
12950 Log='$Log'
12951 Mcc='$Mcc'
12952 RCSfile='$RCSfile'
12953 Revision='$Revision'
12954 Source='$Source'
12955 State='$State'
12956 _a='$_a'
12957 _exe='$_exe'
12958 _o='$_o'
12959 afs='$afs'
12960 alignbytes='$alignbytes'
12961 ansi2knr='$ansi2knr'
12962 aphostname='$aphostname'
12963 apiversion='$apiversion'
12964 ar='$ar'
12965 archlib='$archlib'
12966 archlibexp='$archlibexp'
12967 archname64='$archname64'
12968 archname='$archname'
12969 archobjs='$archobjs'
12970 awk='$awk'
12971 baserev='$baserev'
12972 bash='$bash'
12973 bin='$bin'
12974 binexp='$binexp'
12975 bison='$bison'
12976 byacc='$byacc'
12977 byteorder='$byteorder'
12978 c='$c'
12979 castflags='$castflags'
12980 cat='$cat'
12981 cc='$cc'
12982 cccdlflags='$cccdlflags'
12983 ccdlflags='$ccdlflags'
12984 ccflags='$ccflags'
12985 ccsymbols='$ccsymbols'
12986 cf_by='$cf_by'
12987 cf_email='$cf_email'
12988 cf_time='$cf_time'
12989 chgrp='$chgrp'
12990 chmod='$chmod'
12991 chown='$chown'
12992 clocktype='$clocktype'
12993 comm='$comm'
12994 compress='$compress'
12995 contains='$contains'
12996 cp='$cp'
12997 cpio='$cpio'
12998 cpp='$cpp'
12999 cpp_stuff='$cpp_stuff'
13000 cppccsymbols='$cppccsymbols'
13001 cppflags='$cppflags'
13002 cpplast='$cpplast'
13003 cppminus='$cppminus'
13004 cpprun='$cpprun'
13005 cppstdin='$cppstdin'
13006 cppsymbols='$cppsymbols'
13007 crosscompile='$crosscompile'
13008 cryptlib='$cryptlib'
13009 csh='$csh'
13010 d_Gconvert='$d_Gconvert'
13011 d_access='$d_access'
13012 d_accessx='$d_accessx'
13013 d_alarm='$d_alarm'
13014 d_archlib='$d_archlib'
13015 d_attribut='$d_attribut'
13016 d_bcmp='$d_bcmp'
13017 d_bcopy='$d_bcopy'
13018 d_bsd='$d_bsd'
13019 d_bsdgetpgrp='$d_bsdgetpgrp'
13020 d_bsdsetpgrp='$d_bsdsetpgrp'
13021 d_bzero='$d_bzero'
13022 d_casti32='$d_casti32'
13023 d_castneg='$d_castneg'
13024 d_charvspr='$d_charvspr'
13025 d_chown='$d_chown'
13026 d_chroot='$d_chroot'
13027 d_chsize='$d_chsize'
13028 d_closedir='$d_closedir'
13029 d_cmsghdr_s='$d_cmsghdr_s'
13030 d_const='$d_const'
13031 d_crypt='$d_crypt'
13032 d_csh='$d_csh'
13033 d_cuserid='$d_cuserid'
13034 d_dbl_dig='$d_dbl_dig'
13035 d_dbmclose64='$d_dbmclose64'
13036 d_dbminit64='$d_dbminit64'
13037 d_delete64='$d_delete64'
13038 d_difftime='$d_difftime'
13039 d_dirent64_s='$d_dirent64_s'
13040 d_dirnamlen='$d_dirnamlen'
13041 d_dlerror='$d_dlerror'
13042 d_dlopen='$d_dlopen'
13043 d_dlsymun='$d_dlsymun'
13044 d_dosuid='$d_dosuid'
13045 d_drand48proto='$d_drand48proto'
13046 d_dup2='$d_dup2'
13047 d_eaccess='$d_eaccess'
13048 d_endgrent='$d_endgrent'
13049 d_endhent='$d_endhent'
13050 d_endnent='$d_endnent'
13051 d_endpent='$d_endpent'
13052 d_endpwent='$d_endpwent'
13053 d_endsent='$d_endsent'
13054 d_endspent='$d_endspent'
13055 d_eofnblk='$d_eofnblk'
13056 d_eunice='$d_eunice'
13057 d_fchmod='$d_fchmod'
13058 d_fchown='$d_fchown'
13059 d_fcntl='$d_fcntl'
13060 d_fd_macros='$d_fd_macros'
13061 d_fd_set='$d_fd_set'
13062 d_fds_bits='$d_fds_bits'
13063 d_fetch64='$d_fetch64'
13064 d_fgetpos64='$d_fgetpos64'
13065 d_fgetpos='$d_fgetpos'
13066 d_firstkey64='$d_firstkey64'
13067 d_flexfnam='$d_flexfnam'
13068 d_flock64_s='$d_flock64_s'
13069 d_flock='$d_flock'
13070 d_fopen64='$d_fopen64'
13071 d_fork='$d_fork'
13072 d_fpathconf='$d_fpathconf'
13073 d_freopen64='$d_freopen64'
13074 d_fseek64='$d_fseek64'
13075 d_fseeko64='$d_fseeko64'
13076 d_fseeko='$d_fseeko'
13077 d_fsetpos64='$d_fsetpos64'
13078 d_fsetpos='$d_fsetpos'
13079 d_fstat64='$d_fstat64'
13080 d_fstatfs='$d_fstatfs'
13081 d_fstatvfs='$d_fstatvfs'
13082 d_ftell64='$d_ftell64'
13083 d_ftello64='$d_ftello64'
13084 d_ftello='$d_ftello'
13085 d_ftime='$d_ftime'
13086 d_ftruncate64='$d_ftruncate64'
13087 d_getgrent='$d_getgrent'
13088 d_getgrps='$d_getgrps'
13089 d_gethbyaddr='$d_gethbyaddr'
13090 d_gethbyname='$d_gethbyname'
13091 d_gethent='$d_gethent'
13092 d_gethname='$d_gethname'
13093 d_gethostprotos='$d_gethostprotos'
13094 d_getlogin='$d_getlogin'
13095 d_getmntent='$d_getmntent'
13096 d_getnbyaddr='$d_getnbyaddr'
13097 d_getnbyname='$d_getnbyname'
13098 d_getnent='$d_getnent'
13099 d_getnetprotos='$d_getnetprotos'
13100 d_getpbyname='$d_getpbyname'
13101 d_getpbynumber='$d_getpbynumber'
13102 d_getpent='$d_getpent'
13103 d_getpgid='$d_getpgid'
13104 d_getpgrp2='$d_getpgrp2'
13105 d_getpgrp='$d_getpgrp'
13106 d_getppid='$d_getppid'
13107 d_getprior='$d_getprior'
13108 d_getprotoprotos='$d_getprotoprotos'
13109 d_getpwent='$d_getpwent'
13110 d_getsbyname='$d_getsbyname'
13111 d_getsbyport='$d_getsbyport'
13112 d_getsent='$d_getsent'
13113 d_getservprotos='$d_getservprotos'
13114 d_getspent='$d_getspent'
13115 d_getspnam='$d_getspnam'
13116 d_gettimeod='$d_gettimeod'
13117 d_gnulibc='$d_gnulibc'
13118 d_grpasswd='$d_grpasswd'
13119 d_hasmntopt='$d_hasmntopt'
13120 d_htonl='$d_htonl'
13121 d_index='$d_index'
13122 d_inetaton='$d_inetaton'
13123 d_ino64_t='$d_ino64_t'
13124 d_int64t='$d_int64t'
13125 d_iovec_s='$d_iovec_s'
13126 d_isascii='$d_isascii'
13127 d_killpg='$d_killpg'
13128 d_lchown='$d_lchown'
13129 d_link='$d_link'
13130 d_llseek='$d_llseek'
13131 d_locconv='$d_locconv'
13132 d_lockf64='$d_lockf64'
13133 d_lockf='$d_lockf'
13134 d_longdbl='$d_longdbl'
13135 d_longlong='$d_longlong'
13136 d_lseek64='$d_lseek64'
13137 d_lstat64='$d_lstat64'
13138 d_lstat='$d_lstat'
13139 d_madvise='$d_madvise'
13140 d_mblen='$d_mblen'
13141 d_mbstowcs='$d_mbstowcs'
13142 d_mbtowc='$d_mbtowc'
13143 d_memchr='$d_memchr'
13144 d_memcmp='$d_memcmp'
13145 d_memcpy='$d_memcpy'
13146 d_memmove='$d_memmove'
13147 d_memset='$d_memset'
13148 d_mkdir='$d_mkdir'
13149 d_mkfifo='$d_mkfifo'
13150 d_mktime='$d_mktime'
13151 d_mmap='$d_mmap'
13152 d_mprotect='$d_mprotect'
13153 d_msg='$d_msg'
13154 d_msg_ctrunc='$d_msg_ctrunc'
13155 d_msg_dontroute='$d_msg_dontroute'
13156 d_msg_oob='$d_msg_oob'
13157 d_msg_peek='$d_msg_peek'
13158 d_msg_proxy='$d_msg_proxy'
13159 d_msgctl='$d_msgctl'
13160 d_msgget='$d_msgget'
13161 d_msghdr_s='$d_msghdr_s'
13162 d_msgrcv='$d_msgrcv'
13163 d_msgsnd='$d_msgsnd'
13164 d_msync='$d_msync'
13165 d_munmap='$d_munmap'
13166 d_mymalloc='$d_mymalloc'
13167 d_nextkey64='$d_nextkey64'
13168 d_nice='$d_nice'
13169 d_off64_t='$d_off64_t'
13170 d_offset_t='$d_offset_t'
13171 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13172 d_oldpthreads='$d_oldpthreads'
13173 d_oldsock='$d_oldsock'
13174 d_open3='$d_open3'
13175 d_open64='$d_open64'
13176 d_opendir64='$d_opendir64'
13177 d_pathconf='$d_pathconf'
13178 d_pause='$d_pause'
13179 d_phostname='$d_phostname'
13180 d_pipe='$d_pipe'
13181 d_poll='$d_poll'
13182 d_portable='$d_portable'
13183 d_pthread_yield='$d_pthread_yield'
13184 d_pwage='$d_pwage'
13185 d_pwchange='$d_pwchange'
13186 d_pwclass='$d_pwclass'
13187 d_pwcomment='$d_pwcomment'
13188 d_pwexpire='$d_pwexpire'
13189 d_pwgecos='$d_pwgecos'
13190 d_pwpasswd='$d_pwpasswd'
13191 d_pwquota='$d_pwquota'
13192 d_readdir64='$d_readdir64'
13193 d_readdir='$d_readdir'
13194 d_readlink='$d_readlink'
13195 d_readv='$d_readv'
13196 d_recvmsg='$d_recvmsg'
13197 d_rename='$d_rename'
13198 d_rewinddir='$d_rewinddir'
13199 d_rmdir='$d_rmdir'
13200 d_safebcpy='$d_safebcpy'
13201 d_safemcpy='$d_safemcpy'
13202 d_sanemcmp='$d_sanemcmp'
13203 d_sched_yield='$d_sched_yield'
13204 d_scm_rights='$d_scm_rights'
13205 d_seekdir64='$d_seekdir64'
13206 d_seekdir='$d_seekdir'
13207 d_select='$d_select'
13208 d_sem='$d_sem'
13209 d_semctl='$d_semctl'
13210 d_semctl_semid_ds='$d_semctl_semid_ds'
13211 d_semctl_semun='$d_semctl_semun'
13212 d_semget='$d_semget'
13213 d_semop='$d_semop'
13214 d_sendmsg='$d_sendmsg'
13215 d_setegid='$d_setegid'
13216 d_seteuid='$d_seteuid'
13217 d_setgrent='$d_setgrent'
13218 d_setgrps='$d_setgrps'
13219 d_sethent='$d_sethent'
13220 d_setlinebuf='$d_setlinebuf'
13221 d_setlocale='$d_setlocale'
13222 d_setnent='$d_setnent'
13223 d_setpent='$d_setpent'
13224 d_setpgid='$d_setpgid'
13225 d_setpgrp2='$d_setpgrp2'
13226 d_setpgrp='$d_setpgrp'
13227 d_setprior='$d_setprior'
13228 d_setpwent='$d_setpwent'
13229 d_setregid='$d_setregid'
13230 d_setresgid='$d_setresgid'
13231 d_setresuid='$d_setresuid'
13232 d_setreuid='$d_setreuid'
13233 d_setrgid='$d_setrgid'
13234 d_setruid='$d_setruid'
13235 d_setsent='$d_setsent'
13236 d_setsid='$d_setsid'
13237 d_setspent='$d_setspent'
13238 d_setvbuf='$d_setvbuf'
13239 d_sfio='$d_sfio'
13240 d_shm='$d_shm'
13241 d_shmat='$d_shmat'
13242 d_shmatprototype='$d_shmatprototype'
13243 d_shmctl='$d_shmctl'
13244 d_shmdt='$d_shmdt'
13245 d_shmget='$d_shmget'
13246 d_sigaction='$d_sigaction'
13247 d_sigsetjmp='$d_sigsetjmp'
13248 d_socket='$d_socket'
13249 d_sockpair='$d_sockpair'
13250 d_stat64='$d_stat64'
13251 d_statblks='$d_statblks'
13252 d_statfs='$d_statfs'
13253 d_statfsflags='$d_statfsflags'
13254 d_statvfs='$d_statvfs'
13255 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13256 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13257 d_stdio_stream_array='$d_stdio_stream_array'
13258 d_stdiobase='$d_stdiobase'
13259 d_stdstdio='$d_stdstdio'
13260 d_store64='$d_store64'
13261 d_strchr='$d_strchr'
13262 d_strcoll='$d_strcoll'
13263 d_strctcpy='$d_strctcpy'
13264 d_strerrm='$d_strerrm'
13265 d_strerror='$d_strerror'
13266 d_strtod='$d_strtod'
13267 d_strtol='$d_strtol'
13268 d_strtoul='$d_strtoul'
13269 d_strxfrm='$d_strxfrm'
13270 d_suidsafe='$d_suidsafe'
13271 d_symlink='$d_symlink'
13272 d_syscall='$d_syscall'
13273 d_sysconf='$d_sysconf'
13274 d_sysernlst='$d_sysernlst'
13275 d_syserrlst='$d_syserrlst'
13276 d_system='$d_system'
13277 d_tcgetpgrp='$d_tcgetpgrp'
13278 d_tcsetpgrp='$d_tcsetpgrp'
13279 d_telldir64='$d_telldir64'
13280 d_telldir='$d_telldir'
13281 d_telldirproto='$d_telldirproto'
13282 d_time='$d_time'
13283 d_times='$d_times'
13284 d_tmpfile64='$d_tmpfile64'
13285 d_truncate64='$d_truncate64'
13286 d_truncate='$d_truncate'
13287 d_tzname='$d_tzname'
13288 d_umask='$d_umask'
13289 d_uname='$d_uname'
13290 d_union_semun='$d_union_semun'
13291 d_vfork='$d_vfork'
13292 d_void_closedir='$d_void_closedir'
13293 d_voidsig='$d_voidsig'
13294 d_voidtty='$d_voidtty'
13295 d_volatile='$d_volatile'
13296 d_vprintf='$d_vprintf'
13297 d_wait4='$d_wait4'
13298 d_waitpid='$d_waitpid'
13299 d_wcstombs='$d_wcstombs'
13300 d_wctomb='$d_wctomb'
13301 d_writev='$d_writev'
13302 d_xenix='$d_xenix'
13303 date='$date'
13304 db_hashtype='$db_hashtype'
13305 db_prefixtype='$db_prefixtype'
13306 defvoidused='$defvoidused'
13307 direntrytype='$direntrytype'
13308 dlext='$dlext'
13309 dlsrc='$dlsrc'
13310 doublesize='$doublesize'
13311 drand01='$drand01'
13312 dynamic_ext='$dynamic_ext'
13313 eagain='$eagain'
13314 ebcdic='$ebcdic'
13315 echo='$echo'
13316 egrep='$egrep'
13317 emacs='$emacs'
13318 eunicefix='$eunicefix'
13319 exe_ext='$exe_ext'
13320 expr='$expr'
13321 extensions='$extensions'
13322 fflushNULL='$fflushNULL'
13323 fflushall='$fflushall'
13324 find='$find'
13325 firstmakefile='$firstmakefile'
13326 flex='$flex'
13327 fpostype='$fpostype'
13328 freetype='$freetype'
13329 full_ar='$full_ar'
13330 full_csh='$full_csh'
13331 full_sed='$full_sed'
13332 gccversion='$gccversion'
13333 gidtype='$gidtype'
13334 glibpth='$glibpth'
13335 grep='$grep'
13336 groupcat='$groupcat'
13337 groupstype='$groupstype'
13338 gzip='$gzip'
13339 h_fcntl='$h_fcntl'
13340 h_sysfile='$h_sysfile'
13341 hint='$hint'
13342 hostcat='$hostcat'
13343 huge='$huge'
13344 i_arpainet='$i_arpainet'
13345 i_bsdioctl='$i_bsdioctl'
13346 i_db='$i_db'
13347 i_dbm='$i_dbm'
13348 i_dirent='$i_dirent'
13349 i_dld='$i_dld'
13350 i_dlfcn='$i_dlfcn'
13351 i_fcntl='$i_fcntl'
13352 i_float='$i_float'
13353 i_gdbm='$i_gdbm'
13354 i_grp='$i_grp'
13355 i_inttypes='$i_inttypes'
13356 i_limits='$i_limits'
13357 i_locale='$i_locale'
13358 i_machcthr='$i_machcthr'
13359 i_malloc='$i_malloc'
13360 i_math='$i_math'
13361 i_memory='$i_memory'
13362 i_mntent='$i_mntent'
13363 i_ndbm='$i_ndbm'
13364 i_netdb='$i_netdb'
13365 i_neterrno='$i_neterrno'
13366 i_netinettcp='$i_netinettcp'
13367 i_niin='$i_niin'
13368 i_poll='$i_poll'
13369 i_pthread='$i_pthread'
13370 i_pwd='$i_pwd'
13371 i_rpcsvcdbm='$i_rpcsvcdbm'
13372 i_sfio='$i_sfio'
13373 i_sgtty='$i_sgtty'
13374 i_shadow='$i_shadow'
13375 i_socks='$i_socks'
13376 i_stdarg='$i_stdarg'
13377 i_stddef='$i_stddef'
13378 i_stdlib='$i_stdlib'
13379 i_string='$i_string'
13380 i_sysaccess='$i_sysaccess'
13381 i_sysdir='$i_sysdir'
13382 i_sysfile='$i_sysfile'
13383 i_sysfilio='$i_sysfilio'
13384 i_sysin='$i_sysin'
13385 i_sysioctl='$i_sysioctl'
13386 i_sysmman='$i_sysmman'
13387 i_sysmount='$i_sysmount'
13388 i_sysndir='$i_sysndir'
13389 i_sysparam='$i_sysparam'
13390 i_sysresrc='$i_sysresrc'
13391 i_syssecrt='$i_syssecrt'
13392 i_sysselct='$i_sysselct'
13393 i_syssockio='$i_syssockio'
13394 i_sysstat='$i_sysstat'
13395 i_sysstatvfs='$i_sysstatvfs'
13396 i_systime='$i_systime'
13397 i_systimek='$i_systimek'
13398 i_systimes='$i_systimes'
13399 i_systypes='$i_systypes'
13400 i_sysuio='$i_sysuio'
13401 i_sysun='$i_sysun'
13402 i_syswait='$i_syswait'
13403 i_termio='$i_termio'
13404 i_termios='$i_termios'
13405 i_time='$i_time'
13406 i_unistd='$i_unistd'
13407 i_utime='$i_utime'
13408 i_values='$i_values'
13409 i_varargs='$i_varargs'
13410 i_varhdr='$i_varhdr'
13411 i_vfork='$i_vfork'
13412 ignore_versioned_solibs='$ignore_versioned_solibs'
13413 incpath='$incpath'
13414 inews='$inews'
13415 installarchlib='$installarchlib'
13416 installbin='$installbin'
13417 installman1dir='$installman1dir'
13418 installman3dir='$installman3dir'
13419 installprivlib='$installprivlib'
13420 installscript='$installscript'
13421 installsitearch='$installsitearch'
13422 installsitelib='$installsitelib'
13423 installusrbinperl='$installusrbinperl'
13424 intsize='$intsize'
13425 known_extensions='$known_extensions'
13426 ksh='$ksh'
13427 large='$large'
13428 ld='$ld'
13429 lddlflags='$lddlflags'
13430 ldflags='$ldflags'
13431 less='$less'
13432 lib_ext='$lib_ext'
13433 libc='$libc'
13434 libperl='$libperl'
13435 libpth='$libpth'
13436 libs='$libs'
13437 libswanted='$libswanted'
13438 line='$line'
13439 lint='$lint'
13440 lkflags='$lkflags'
13441 ln='$ln'
13442 lns='$lns'
13443 locincpth='$locincpth'
13444 loclibpth='$loclibpth'
13445 longdblsize='$longdblsize'
13446 longlongsize='$longlongsize'
13447 longsize='$longsize'
13448 lp='$lp'
13449 lpr='$lpr'
13450 ls='$ls'
13451 lseeksize='$lseeksize'
13452 lseektype='$lseektype'
13453 mail='$mail'
13454 mailx='$mailx'
13455 make='$make'
13456 make_set_make='$make_set_make'
13457 mallocobj='$mallocobj'
13458 mallocsrc='$mallocsrc'
13459 malloctype='$malloctype'
13460 man1dir='$man1dir'
13461 man1direxp='$man1direxp'
13462 man1ext='$man1ext'
13463 man3dir='$man3dir'
13464 man3direxp='$man3direxp'
13465 man3ext='$man3ext'
13466 medium='$medium'
13467 mips='$mips'
13468 mips_type='$mips_type'
13469 mkdir='$mkdir'
13470 mmaptype='$mmaptype'
13471 models='$models'
13472 modetype='$modetype'
13473 more='$more'
13474 multiarch='$multiarch'
13475 mv='$mv'
13476 myarchname='$myarchname'
13477 mydomain='$mydomain'
13478 myhostname='$myhostname'
13479 myuname='$myuname'
13480 n='$n'
13481 netdb_hlen_type='$netdb_hlen_type'
13482 netdb_host_type='$netdb_host_type'
13483 netdb_name_type='$netdb_name_type'
13484 netdb_net_type='$netdb_net_type'
13485 nm='$nm'
13486 nm_opt='$nm_opt'
13487 nm_so_opt='$nm_so_opt'
13488 nonxs_ext='$nonxs_ext'
13489 nroff='$nroff'
13490 o_nonblock='$o_nonblock'
13491 obj_ext='$obj_ext'
13492 old_pthread_create_joinable='$old_pthread_create_joinable'
13493 optimize='$optimize'
13494 orderlib='$orderlib'
13495 osname='$osname'
13496 osvers='$osvers'
13497 package='$package'
13498 pager='$pager'
13499 passcat='$passcat'
13500 patchlevel='$patchlevel'
13501 path_sep='$path_sep'
13502 perl='$perl'
13503 perladmin='$perladmin'
13504 perlpath='$perlpath'
13505 pg='$pg'
13506 phostname='$phostname'
13507 pidtype='$pidtype'
13508 plibpth='$plibpth'
13509 pmake='$pmake'
13510 pr='$pr'
13511 prefix='$prefix'
13512 prefixexp='$prefixexp'
13513 privlib='$privlib'
13514 privlibexp='$privlibexp'
13515 prototype='$prototype'
13516 ptrsize='$ptrsize'
13517 randbits='$randbits'
13518 randfunc='$randfunc'
13519 randseedtype='$randseedtype'
13520 ranlib='$ranlib'
13521 rd_nodata='$rd_nodata'
13522 rm='$rm'
13523 rmail='$rmail'
13524 runnm='$runnm'
13525 sched_yield='$sched_yield'
13526 scriptdir='$scriptdir'
13527 scriptdirexp='$scriptdirexp'
13528 sed='$sed'
13529 seedfunc='$seedfunc'
13530 selectminbits='$selectminbits'
13531 selecttype='$selecttype'
13532 sendmail='$sendmail'
13533 sh='$sh'
13534 shar='$shar'
13535 sharpbang='$sharpbang'
13536 shmattype='$shmattype'
13537 shortsize='$shortsize'
13538 shrpenv='$shrpenv'
13539 shsharp='$shsharp'
13540 sig_count='$sig_count'
13541 sig_name='$sig_name'
13542 sig_name_init='$sig_name_init'
13543 sig_num='$sig_num'
13544 sig_num_init='$sig_num_init'
13545 signal_t='$signal_t'
13546 sitearch='$sitearch'
13547 sitearchexp='$sitearchexp'
13548 sitelib='$sitelib'
13549 sitelibexp='$sitelibexp'
13550 sizetype='$sizetype'
13551 sleep='$sleep'
13552 smail='$smail'
13553 small='$small'
13554 so='$so'
13555 sockethdr='$sockethdr'
13556 socketlib='$socketlib'
13557 sort='$sort'
13558 spackage='$spackage'
13559 spitshell='$spitshell'
13560 split='$split'
13561 src='$src'
13562 ssizetype='$ssizetype'
13563 startperl='$startperl'
13564 startsh='$startsh'
13565 static_ext='$static_ext'
13566 stdchar='$stdchar'
13567 stdio_base='$stdio_base'
13568 stdio_bufsiz='$stdio_bufsiz'
13569 stdio_cnt='$stdio_cnt'
13570 stdio_filbuf='$stdio_filbuf'
13571 stdio_ptr='$stdio_ptr'
13572 stdio_stream_array='$stdio_stream_array'
13573 strings='$strings'
13574 submit='$submit'
13575 subversion='$subversion'
13576 sysman='$sysman'
13577 tail='$tail'
13578 tar='$tar'
13579 tbl='$tbl'
13580 tee='$tee'
13581 test='$test'
13582 timeincl='$timeincl'
13583 timetype='$timetype'
13584 touch='$touch'
13585 tr='$tr'
13586 trnl='$trnl'
13587 troff='$troff'
13588 uidtype='$uidtype'
13589 uname='$uname'
13590 uniq='$uniq'
13591 use64bits='$use64bits'
13592 usedl='$usedl'
13593 usemultiplicity='$usemultiplicity'
13594 usemymalloc='$usemymalloc'
13595 usenm='$usenm'
13596 useopcode='$useopcode'
13597 useperlio='$useperlio'
13598 useposix='$useposix'
13599 usesfio='$usesfio'
13600 useshrplib='$useshrplib'
13601 usesocks='$usesocks'
13602 usethreads='$usethreads'
13603 usevfork='$usevfork'
13604 usrinc='$usrinc'
13605 uuname='$uuname'
13606 version='$version'
13607 vi='$vi'
13608 voidflags='$voidflags'
13609 xlibpth='$xlibpth'
13610 zcat='$zcat'
13611 zip='$zip'
13612 EOT
13613
13614 : Add in command line options if available
13615 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13616
13617 : add special variables
13618 $test -f $src/patchlevel.h && \
13619 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13620 echo "CONFIGDOTSH=true" >>config.sh
13621
13622 : propagate old symbols
13623 if $test -f UU/config.sh; then
13624         <UU/config.sh sort | uniq >UU/oldconfig.sh
13625         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13626         sort | uniq -u >UU/oldsyms
13627         set X `cat UU/oldsyms`
13628         shift
13629         case $# in
13630         0) ;;
13631         *)
13632                 cat <<EOM
13633 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13634 EOM
13635                 echo "# Variables propagated from previous config.sh file." >>config.sh
13636                 for sym in `cat UU/oldsyms`; do
13637                         echo "    Propagating $hint variable "'$'"$sym..."
13638                         eval 'tmp="$'"${sym}"'"'
13639                         echo "$tmp" | \
13640                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13641                 done
13642                 ;;
13643         esac
13644 fi
13645
13646 : Finish up by extracting the .SH files
13647 case "$alldone" in
13648 exit)
13649         $rm -rf UU
13650         echo "Done."
13651         exit 0
13652         ;;
13653 cont)
13654         ;;
13655 '')
13656         dflt=''
13657         nostick=true
13658         $cat <<EOM
13659
13660 If you'd like to make any changes to the config.sh file before I begin
13661 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13662
13663 EOM
13664         rp="Press return or use a shell escape to edit config.sh:"
13665         . UU/myread
13666         nostick=''
13667         case "$ans" in
13668         '') ;;
13669         *) : in case they cannot read
13670                 sh 1>&4 -c "$ans";;
13671         esac
13672         ;;
13673 esac
13674
13675 : if this fails, just run all the .SH files by hand
13676 . ./config.sh
13677
13678 echo " "
13679 exec 1>&4
13680 . ./UU/extract
13681
13682 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13683         dflt=y
13684         case "$silent" in
13685         true) ;;
13686         *)
13687                 $cat <<EOM
13688
13689 Now you need to generate make dependencies by running "$make depend".
13690 You might prefer to run it in background: "$make depend > makedepend.out &"
13691 It can take a while, so you might not want to run it right now.
13692
13693 EOM
13694                 ;;
13695         esac
13696         rp="Run $make depend now?"
13697         . UU/myread
13698         case "$ans" in
13699         y*)
13700                 $make depend && echo "Now you must run a $make."
13701                 ;;
13702         *)
13703                 echo "You must run '$make depend' then '$make'."
13704                 ;;
13705         esac
13706 elif test -f [Mm]akefile; then
13707         echo " "
13708         echo "Now you must run a $make."
13709 else
13710         echo "Done."
13711 fi
13712
13713 if $test -f Policy.sh; then
13714     $cat <<EOM
13715
13716 If you compile $package on a different machine or from a different object
13717 directory, copy the Policy.sh file from this object directory to the
13718 new one before you run Configure -- this will help you with most of
13719 the policy defaults.
13720
13721 EOM
13722 fi
13723 if $test -f config.msg; then
13724     echo "Hmm.  I also noted the following information while running:"
13725     echo " "
13726     $cat config.msg >&4
13727     $rm -f config.msg
13728 fi
13729 $rm -f kit*isdone ark*isdone
13730 $rm -rf UU
13731
13732 : End of Configure
13733