additions to Thread.pm docs from Tuomas J. Lukka
[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 Apr 19 22:21:08 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_fchmod=''
342 d_fchown=''
343 d_fcntl=''
344 d_fd_macros=''
345 d_fd_set=''
346 d_fds_bits=''
347 d_fgetpos=''
348 d_flexfnam=''
349 d_flock=''
350 d_fork=''
351 d_fseeko=''
352 d_fsetpos=''
353 d_ftello=''
354 d_ftime=''
355 d_gettimeod=''
356 d_Gconvert=''
357 d_getgrent=''
358 d_getgrps=''
359 d_gethbyaddr=''
360 d_gethbyname=''
361 d_gethent=''
362 aphostname=''
363 d_gethname=''
364 d_phostname=''
365 d_uname=''
366 d_gethostprotos=''
367 d_getlogin=''
368 d_getmntent=''
369 d_getnbyaddr=''
370 d_getnbyname=''
371 d_getnent=''
372 d_getnetprotos=''
373 d_getpent=''
374 d_getpgid=''
375 d_getpgrp2=''
376 d_bsdgetpgrp=''
377 d_getpgrp=''
378 d_getppid=''
379 d_getprior=''
380 d_getpbyname=''
381 d_getpbynumber=''
382 d_getprotoprotos=''
383 d_getpwent=''
384 d_getsent=''
385 d_getservprotos=''
386 d_getsbyname=''
387 d_getsbyport=''
388 d_gnulibc=''
389 d_hasmntopt=''
390 d_htonl=''
391 d_inetaton=''
392 d_isascii=''
393 d_killpg=''
394 d_lchown=''
395 d_link=''
396 d_locconv=''
397 d_lockf=''
398 d_longdbl=''
399 longdblsize=''
400 d_longlong=''
401 longlongsize=''
402 d_lstat=''
403 d_madvise=''
404 d_mblen=''
405 d_mbstowcs=''
406 d_mbtowc=''
407 d_memcmp=''
408 d_memcpy=''
409 d_memmove=''
410 d_memset=''
411 d_mkdir=''
412 d_mkfifo=''
413 d_mktime=''
414 d_mmap=''
415 mmaptype=''
416 d_mprotect=''
417 d_msg=''
418 d_msgctl=''
419 d_msgget=''
420 d_msgrcv=''
421 d_msgsnd=''
422 d_msync=''
423 d_munmap=''
424 d_nice=''
425 d_open3=''
426 d_fpathconf=''
427 d_pathconf=''
428 d_pause=''
429 d_pipe=''
430 d_poll=''
431 d_portable=''
432 d_old_pthread_create_joinable=''
433 old_pthread_create_joinable=''
434 d_pthread_yield=''
435 d_sched_yield=''
436 sched_yield=''
437 d_readdir=''
438 d_rewinddir=''
439 d_seekdir=''
440 d_telldir=''
441 d_readlink=''
442 d_readv=''
443 d_rename=''
444 d_rmdir=''
445 d_safebcpy=''
446 d_safemcpy=''
447 d_sanemcmp=''
448 d_select=''
449 d_sem=''
450 d_semctl=''
451 d_semget=''
452 d_semop=''
453 d_setegid=''
454 d_seteuid=''
455 d_setgrent=''
456 d_setgrps=''
457 d_sethent=''
458 d_setlinebuf=''
459 d_setlocale=''
460 d_setnent=''
461 d_setpent=''
462 d_setpgid=''
463 d_setpgrp2=''
464 d_bsdsetpgrp=''
465 d_setpgrp=''
466 d_setprior=''
467 d_setpwent=''
468 d_setregid=''
469 d_setresgid=''
470 d_setresuid=''
471 d_setreuid=''
472 d_setrgid=''
473 d_setruid=''
474 d_setsent=''
475 d_setsid=''
476 d_setvbuf=''
477 d_sfio=''
478 usesfio=''
479 d_shm=''
480 d_shmat=''
481 d_shmatprototype=''
482 shmattype=''
483 d_shmctl=''
484 d_shmdt=''
485 d_shmget=''
486 d_sigaction=''
487 d_sigsetjmp=''
488 d_cmsghdr_s=''
489 d_msg_ctrunc=''
490 d_msg_dontroute=''
491 d_msg_oob=''
492 d_msg_peek=''
493 d_msg_proxy=''
494 d_msghdr_s=''
495 d_oldsock=''
496 d_recvmsg=''
497 d_scm_rights=''
498 d_sendmsg=''
499 d_socket=''
500 d_sockpair=''
501 sockethdr=''
502 socketlib=''
503 d_statblks=''
504 d_fstatfs=''
505 d_statfs=''
506 d_statfsflags=''
507 d_fstatvfs=''
508 d_statvfs=''
509 d_stdio_cnt_lval=''
510 d_stdio_ptr_lval=''
511 d_stdiobase=''
512 d_stdstdio=''
513 stdio_base=''
514 stdio_bufsiz=''
515 stdio_cnt=''
516 stdio_filbuf=''
517 stdio_ptr=''
518 d_index=''
519 d_strchr=''
520 d_strcoll=''
521 d_strctcpy=''
522 d_strerrm=''
523 d_strerror=''
524 d_sysernlst=''
525 d_syserrlst=''
526 d_strtod=''
527 d_strtol=''
528 d_strtoul=''
529 d_strxfrm=''
530 d_symlink=''
531 d_syscall=''
532 d_sysconf=''
533 d_system=''
534 d_tcgetpgrp=''
535 d_tcsetpgrp=''
536 d_telldirproto=''
537 d_time=''
538 timetype=''
539 clocktype=''
540 d_times=''
541 d_truncate=''
542 d_tzname=''
543 d_umask=''
544 d_semctl_semid_ds=''
545 d_semctl_semun=''
546 d_union_semun=''
547 d_vfork=''
548 usevfork=''
549 d_voidsig=''
550 signal_t=''
551 d_volatile=''
552 d_charvspr=''
553 d_vprintf=''
554 d_wait4=''
555 d_waitpid=''
556 d_wcstombs=''
557 d_wctomb=''
558 d_writev=''
559 d_dbmclose64=''
560 d_dbminit64=''
561 d_delete64=''
562 d_fetch64=''
563 d_firstkey64=''
564 d_nextkey64=''
565 d_store64=''
566 dlext=''
567 cccdlflags=''
568 ccdlflags=''
569 dlsrc=''
570 ld=''
571 lddlflags=''
572 usedl=''
573 doublesize=''
574 ebcdic=''
575 fpostype=''
576 gidtype=''
577 groupstype=''
578 h_fcntl=''
579 h_sysfile=''
580 i_arpainet=''
581 db_hashtype=''
582 db_prefixtype=''
583 i_db=''
584 i_dbm=''
585 i_rpcsvcdbm=''
586 d_dirnamlen=''
587 direntrytype=''
588 i_dirent=''
589 i_dld=''
590 i_dlfcn=''
591 i_fcntl=''
592 i_float=''
593 i_gdbm=''
594 d_grpasswd=''
595 i_grp=''
596 d_int64t=''
597 i_inttypes=''
598 i_limits=''
599 i_locale=''
600 i_machcthr=''
601 i_malloc=''
602 i_math=''
603 i_memory=''
604 i_mntent=''
605 i_ndbm=''
606 i_netdb=''
607 i_neterrno=''
608 i_niin=''
609 i_sysin=''
610 i_poll=''
611 i_pthread=''
612 d_pwage=''
613 d_pwchange=''
614 d_pwclass=''
615 d_pwcomment=''
616 d_pwexpire=''
617 d_pwgecos=''
618 d_pwpasswd=''
619 d_pwquota=''
620 i_pwd=''
621 i_sfio=''
622 i_stddef=''
623 i_stdlib=''
624 i_string=''
625 strings=''
626 i_sysaccess=''
627 i_sysdir=''
628 i_sysfile=''
629 d_voidtty=''
630 i_bsdioctl=''
631 i_sysfilio=''
632 i_sysioctl=''
633 i_syssockio=''
634 i_sysmman=''
635 i_sysmount=''
636 i_sysndir=''
637 i_sysparam=''
638 i_sysresrc=''
639 i_syssecrt=''
640 i_sysselct=''
641 i_sysstat=''
642 i_sysstatvfs=''
643 i_systimes=''
644 i_systypes=''
645 d_iovec_s=''
646 i_sysuio=''
647 i_sysun=''
648 i_syswait=''
649 i_sgtty=''
650 i_termio=''
651 i_termios=''
652 i_systime=''
653 i_systimek=''
654 i_time=''
655 timeincl=''
656 i_unistd=''
657 i_utime=''
658 i_values=''
659 i_stdarg=''
660 i_varargs=''
661 i_varhdr=''
662 i_vfork=''
663 installusrbinperl=''
664 intsize=''
665 longsize=''
666 shortsize=''
667 d_dirent64_s=''
668 d_flock64_s=''
669 d_fstat64=''
670 d_ftruncate64=''
671 d_ino64_t=''
672 d_llseek=''
673 d_lockf64=''
674 d_lseek64=''
675 d_lstat64=''
676 d_off64_t=''
677 d_offset_t=''
678 d_open64=''
679 d_opendir64=''
680 d_readdir64=''
681 d_seekdir64=''
682 d_stat64=''
683 d_telldir64=''
684 d_truncate64=''
685 libc=''
686 libperl=''
687 shrpenv=''
688 useshrplib=''
689 glibpth=''
690 libpth=''
691 loclibpth=''
692 plibpth=''
693 xlibpth=''
694 ignore_versioned_solibs=''
695 libs=''
696 lns=''
697 lseeksize=''
698 lseektype=''
699 make_set_make=''
700 d_mymalloc=''
701 freetype=''
702 mallocobj=''
703 mallocsrc=''
704 malloctype=''
705 usemymalloc=''
706 installman1dir=''
707 man1dir=''
708 man1direxp=''
709 man1ext=''
710 installman3dir=''
711 man3dir=''
712 man3direxp=''
713 man3ext=''
714 huge=''
715 large=''
716 medium=''
717 models=''
718 small=''
719 split=''
720 modetype=''
721 multiarch=''
722 mydomain=''
723 myhostname=''
724 phostname=''
725 c=''
726 n=''
727 d_eofnblk=''
728 eagain=''
729 o_nonblock=''
730 rd_nodata=''
731 netdb_hlen_type=''
732 netdb_host_type=''
733 netdb_name_type=''
734 netdb_net_type=''
735 groupcat=''
736 hostcat=''
737 passcat=''
738 orderlib=''
739 ranlib=''
740 package=''
741 spackage=''
742 pager=''
743 apiversion=''
744 patchlevel=''
745 subversion=''
746 version=''
747 perladmin=''
748 perlpath=''
749 pidtype=''
750 prefix=''
751 prefixexp=''
752 installprivlib=''
753 privlib=''
754 privlibexp=''
755 prototype=''
756 ptrsize=''
757 drand01=''
758 randbits=''
759 randfunc=''
760 randseedtype=''
761 seedfunc=''
762 installscript=''
763 scriptdir=''
764 scriptdirexp=''
765 selectminbits=''
766 selecttype=''
767 sh=''
768 sig_count=''
769 sig_name=''
770 sig_name_init=''
771 sig_num=''
772 sig_num_init=''
773 installsitearch=''
774 sitearch=''
775 sitearchexp=''
776 installsitelib=''
777 sitelib=''
778 sitelibexp=''
779 sizetype=''
780 so=''
781 sharpbang=''
782 shsharp=''
783 spitshell=''
784 src=''
785 ssizetype=''
786 startperl=''
787 startsh=''
788 stdchar=''
789 d_fgetpos64=''
790 d_fopen64=''
791 d_freopen64=''
792 d_fseek64=''
793 d_fseeko64=''
794 d_fsetpos64=''
795 d_ftell64=''
796 d_ftello64=''
797 d_tmpfile64=''
798 sysman=''
799 trnl=''
800 uidtype=''
801 archname64=''
802 use64bits=''
803 usemultiplicity=''
804 nm_opt=''
805 nm_so_opt=''
806 runnm=''
807 usenm=''
808 useperlio=''
809 d_oldpthreads=''
810 usethreads=''
811 incpath=''
812 mips=''
813 mips_type=''
814 usrinc=''
815 defvoidused=''
816 voidflags=''
817 CONFIG=''
818
819 define='define'
820 undef='undef'
821 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
822 rmlist=''
823
824 : We must find out about Eunice early
825 eunicefix=':'
826 if test -f /etc/unixtovms; then
827         eunicefix=/etc/unixtovms
828 fi
829 if test -f /etc/unixtovms.exe; then
830         eunicefix=/etc/unixtovms.exe
831 fi
832
833 i_whoami=''
834 : Possible local include directories to search.
835 : Set locincpth to "" in a hint file to defeat local include searches.
836 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
837 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
838 :
839 : no include file wanted by default
840 inclwanted=''
841
842 : list of known cpp symbols, sorted alphabetically
843 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
844 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
845 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
846 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
847 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
848 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
849 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
850 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
851 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
852 al="$al VMS Xenix286"
853 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
854 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
855 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
856 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
857 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
858 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
859 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
860 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
861 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
862 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
863 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
864 al="$al __SVR4_2__ __UMAXV__"
865 al="$al ____386BSD____ __alpha __alpha__ __amiga"
866 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
867 al="$al __host_mips__"
868 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
869 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
870 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
871 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
872 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
873 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
874 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
875 al="$al __mc88100 __mc88100__ __mips __mips__"
876 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
877 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
878 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
879 al="$al _host_mips _mips _unix"
880 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
881 al="$al apollo ardent att386 att3b"
882 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
883 al="$al cadmus clipper concurrent convex cray ctix"
884 al="$al dmert encore gcos gcx gimpel gould"
885 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
886 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
887 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
888 al="$al i186 i286 i386 i486 i8086"
889 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
890 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
891 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
892 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
893 al="$al mc88000 mc88100 merlin mert mips mvs n16"
894 al="$al ncl_el ncl_mr"
895 al="$al news1500 news1700 news1800 news1900 news3700"
896 al="$al news700 news800 news900 ns16000 ns32000"
897 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
898 al="$al parisc pc532 pdp11 plexus posix pyr"
899 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
900 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
901 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
902 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
903 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
904 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
905 al="$al xenix z8000"
906
907 : Trailing extension.  Override this in a hint file, if needed.
908 _exe=''
909 : Extra object files, if any, needed on this platform.
910 archobjs=''
911 groupstype=''
912 : change the next line if compiling for Xenix/286 on Xenix/386
913 xlibpth='/usr/lib/386 /lib/386'
914
915 : Possible local library directories to search.
916 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
917 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
918
919 : general looking path for locating libraries
920 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
921 glibpth="$glibpth /lib /usr/lib $xlibpth"
922 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
923 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
924
925 : Private path used by Configure to find libraries.  Its value
926 : is prepended to libpth. This variable takes care of special
927 : machines, like the mips.  Usually, it should be empty.
928 plibpth=''
929
930 : default library list
931 libswanted=''
932 : some systems want to use only the non-versioned libso:s
933 ignore_versioned_solibs=''
934 : full support for void wanted by default
935 defvoidused=15
936
937 : set useposix=false in your hint file to disable the POSIX extension.
938 useposix=true
939 : set useopcode=false in your hint file to disable the Opcode extension.
940 useopcode=true
941 : set usemultiplicity on the Configure command line to enable multiplicity.
942 : set usethreads on the Configure command line to enable threads.
943 : List of libraries we want.
944 : If anyone needs -lnet, put it in a hint file.
945 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
946 libswanted="$libswanted dld ld sun m rt c cposix posix"
947 libswanted="$libswanted ndir dir crypt"
948 libswanted="$libswanted ucb bsd BSD PW x"
949 : We probably want to search /usr/shlib before most other libraries.
950 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
951 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
952 glibpth="/usr/shlib $glibpth"
953 : Do not use vfork unless overridden by a hint file.
954 usevfork=false
955
956 : Find the basic shell for Bourne shell scripts
957 case "$sh" in
958 '')
959         case "$SYSTYPE" in
960         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
961         *) xxx='/bin/sh';;
962         esac
963         if test -f "$xxx"; then
964                 sh="$xxx"
965         else
966                 : Build up a list and do a single loop so we can 'break' out.
967                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
968                 for xxx in sh bash ksh pdksh ash; do
969                         for p in $pth; do
970                                 try="$try ${p}/${xxx}"
971                         done
972                 done
973                 for xxx in $try; do
974                         if test -f "$xxx"; then
975                                 sh="$xxx";
976                                 break
977                         elif test -f "$xxx.exe"; then
978                                 sh="$xxx";
979                                 break
980                         fi
981                 done
982         fi
983         ;;
984 esac
985
986 case "$sh" in
987 '')     cat <<EOM >&2
988 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
989
990 Usually it's in /bin/sh.  How did you even get this far?
991 Please contact me (Perl Maintainers) at perlbug@perl.com and 
992 we'll try to straighten this all out.
993 EOM
994         exit 1
995         ;;
996 esac
997
998 : see if sh knows # comments
999 if `$sh -c '#' >/dev/null 2>&1`; then
1000         shsharp=true
1001         spitshell=cat
1002         xcat=/bin/cat
1003         test -f $xcat || xcat=/usr/bin/cat
1004         echo "#!$xcat" >try
1005         $eunicefix try
1006         chmod +x try
1007         ./try > today
1008         if test -s today; then
1009                 sharpbang='#!'
1010         else
1011                 echo "#! $xcat" > try
1012                 $eunicefix try
1013                 chmod +x try
1014                 ./try > today
1015                 if test -s today; then
1016                         sharpbang='#! '
1017                 else
1018                         sharpbang=': use '
1019                 fi
1020         fi
1021 else
1022         echo " "
1023         echo "Your $sh doesn't grok # comments--I will strip them later on."
1024         shsharp=false
1025         cd ..
1026         echo "exec grep -v '^[  ]*#'" >spitshell
1027         chmod +x spitshell
1028         $eunicefix spitshell
1029         spitshell=`pwd`/spitshell
1030         cd UU
1031         echo "I presume that if # doesn't work, #! won't work either!"
1032         sharpbang=': use '
1033 fi
1034 rm -f try today
1035
1036 : figure out how to guarantee sh startup
1037 case "$startsh" in
1038 '') startsh=${sharpbang}${sh} ;;
1039 *)
1040 esac
1041 cat >try <<EOSS
1042 $startsh
1043 set abc
1044 test "$?abc" != 1
1045 EOSS
1046
1047 chmod +x try
1048 $eunicefix try
1049 if ./try; then
1050         : echo "Yup, it does."
1051 else
1052         echo "Hmm... '$startsh' does not guarantee sh startup..."
1053         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1054 fi
1055 rm -f try
1056
1057
1058 : Save command line options in file UU/cmdline.opt for later use in
1059 : generating config.sh.
1060 cat > cmdline.opt <<EOSH
1061 # Configure command line arguments.
1062 config_arg0='$0'
1063 config_args='$*'
1064 config_argc=$#
1065 EOSH
1066 argn=1
1067 for arg in "$@"; do
1068         cat >>cmdline.opt <<EOSH
1069 config_arg$argn='$arg'
1070 EOSH
1071         argn=`expr $argn + 1`
1072 done
1073
1074 : produce awk script to parse command line options
1075 cat >options.awk <<'EOF'
1076 BEGIN {
1077         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1078
1079         len = length(optstr);
1080         for (i = 1; i <= len; i++) {
1081                 c = substr(optstr, i, 1);
1082                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1083                 if (a == ":") {
1084                         arg[c] = 1;
1085                         i++;
1086                 }
1087                 opt[c] = 1;
1088         }
1089 }
1090 {
1091         expect = 0;
1092         str = $0;
1093         if (substr(str, 1, 1) != "-") {
1094                 printf("'%s'\n", str);
1095                 next;
1096         }
1097         len = length($0);
1098         for (i = 2; i <= len; i++) {
1099                 c = substr(str, i, 1);
1100                 if (!opt[c]) {
1101                         printf("-%s\n", substr(str, i));
1102                         next;
1103                 }
1104                 printf("-%s\n", c);
1105                 if (arg[c]) {
1106                         if (i < len)
1107                                 printf("'%s'\n", substr(str, i + 1));
1108                         else
1109                                 expect = 1;
1110                         next;
1111                 }
1112         }
1113 }
1114 END {
1115         if (expect)
1116                 print "?";
1117 }
1118 EOF
1119
1120 : process the command line options
1121 set X `for arg in "$@"; do echo "X$arg"; done |
1122         sed -e s/X// | awk -f options.awk`
1123 eval "set $*"
1124 shift
1125 rm -f options.awk
1126
1127 : set up default values
1128 fastread=''
1129 reuseval=false
1130 config_sh=''
1131 alldone=''
1132 error=''
1133 silent=''
1134 extractsh=''
1135 override=''
1136 knowitall=''
1137 rm -f optdef.sh
1138 cat >optdef.sh <<EOS
1139 $startsh
1140 EOS
1141
1142
1143 : option parsing
1144 while test $# -gt 0; do
1145         case "$1" in
1146         -d) shift; fastread=yes;;
1147         -e) shift; alldone=cont;;
1148         -f)
1149                 shift
1150                 cd ..
1151                 if test -r "$1"; then
1152                         config_sh="$1"
1153                 else
1154                         echo "$me: cannot read config file $1." >&2
1155                         error=true
1156                 fi
1157                 cd UU
1158                 shift;;
1159         -h) shift; error=true;;
1160         -r) shift; reuseval=true;;
1161         -s) shift; silent=true; realsilent=true;;
1162         -E) shift; alldone=exit;;
1163         -K) shift; knowitall=true;;
1164         -O) shift; override=true;;
1165         -S) shift; silent=true; extractsh=true;;
1166         -D)
1167                 shift
1168                 case "$1" in
1169                 *=)
1170                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1171                         echo "$me: ignoring -D $1" >&2
1172                         ;;
1173                 *=*) echo "$1" | \
1174                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1175                 *) echo "$1='define'" >> optdef.sh;;
1176                 esac
1177                 shift
1178                 ;;
1179         -U)
1180                 shift
1181                 case "$1" in
1182                 *=) echo "$1" >> optdef.sh;;
1183                 *=*)
1184                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1185                         echo "$me: ignoring -U $1" >&2
1186                         ;;
1187                 *) echo "$1='undef'" >> optdef.sh;;
1188                 esac
1189                 shift
1190                 ;;
1191         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1192                 exit 0;;
1193         --) break;;
1194         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1195         *) break;;
1196         esac
1197 done
1198
1199 case "$error" in
1200 true)
1201         cat >&2 <<EOM
1202 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1203                  [-U symbol] [-U symbol=]
1204   -d : use defaults for all answers.
1205   -e : go on without questioning past the production of config.sh.
1206   -f : specify an alternate default configuration file.
1207   -h : print this help message and exit (with an error status).
1208   -r : reuse C symbols value if possible (skips costly nm extraction).
1209   -s : silent mode, only echoes questions and essential information.
1210   -D : define symbol to have some value:
1211          -D symbol         symbol gets the value 'define'
1212          -D symbol=value   symbol gets the value 'value'
1213   -E : stop at the end of questions, after having produced config.sh.
1214   -K : do not use unless you know what you are doing.
1215   -O : let -D and -U override definitions from loaded configuration file.
1216   -S : perform variable substitutions on all .SH files (can mix with -f)
1217   -U : undefine symbol:
1218          -U symbol    symbol gets the value 'undef'
1219          -U symbol=   symbol gets completely empty
1220   -V : print version number and exit (with a zero status).
1221 EOM
1222         exit 1
1223         ;;
1224 esac
1225
1226 : Sanity checks
1227 case "$fastread$alldone" in
1228 yescont|yesexit) ;;
1229 *)
1230         if test ! -t 0; then
1231                 echo "Say 'sh Configure', not 'sh <Configure'"
1232                 exit 1
1233         fi
1234         ;;
1235 esac
1236
1237 exec 4>&1
1238 case "$silent" in
1239 true) exec 1>/dev/null;;
1240 esac
1241
1242 : run the defines and the undefines, if any, but leave the file out there...
1243 touch optdef.sh
1244 . ./optdef.sh
1245
1246 : set package name
1247 package=perl5
1248 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1249 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1250 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1251 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1252 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1253 esac
1254
1255 : Some greps do not return status, grrr.
1256 echo "grimblepritz" >grimble
1257 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1258         contains=contains
1259 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1260         contains=grep
1261 else
1262         contains=contains
1263 fi
1264 rm -f grimble
1265 : the following should work in any shell
1266 case "$contains" in
1267 contains*)
1268         echo " "
1269         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1270         cat >contains <<'EOSS'
1271 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1272 EOSS
1273 chmod +x contains
1274 esac
1275
1276 : Find the path to the source tree
1277 case "$src" in
1278 '') case "$0" in
1279     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1280     *)   src='.';;
1281     esac;;
1282 esac
1283 case "$src" in
1284 '')     src=/
1285         rsrc=/
1286         ;;
1287 /*) rsrc="$src";;
1288 *) rsrc="../$src";;
1289 esac
1290 if test -f $rsrc/Configure && \
1291         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1292 then
1293    : found it, so we are ok.
1294 else
1295         rsrc=''
1296         for src in . .. ../.. ../../.. ../../../..; do
1297                 if test -f ../$src/Configure && \
1298                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1299                 then
1300                         rsrc=../$src
1301                         break
1302                 fi
1303         done
1304 fi
1305 case "$rsrc" in
1306 '')
1307         cat <<EOM >&4
1308
1309 Sorry, I can't seem to locate the source dir for $package.  Please start
1310 Configure with an explicit path -- i.e. /some/path/Configure.
1311
1312 EOM
1313         exit 1
1314         ;;
1315 ../.)   rsrc='..';;
1316 *)
1317         echo " "
1318         echo "Sources for $package found in \"$src\"." >&4
1319         ;;
1320 esac
1321
1322 : script used to extract .SH files with variable substitutions
1323 cat >extract <<'EOS'
1324 CONFIGDOTSH=true
1325 echo "Doing variable substitutions on .SH files..."
1326 if test -f $src/MANIFEST; then
1327         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1328 else
1329         echo "(Looking for .SH files under the source directory.)"
1330         set x `(cd $src; find . -name "*.SH" -print)`
1331 fi
1332 shift
1333 case $# in
1334 0) set x `(cd $src; echo *.SH)`; shift;;
1335 esac
1336 if test ! -f $src/$1; then
1337         shift
1338 fi
1339 mkdir_p='
1340 name=$1;
1341 create="";
1342 while test $name; do
1343         if test ! -d "$name"; then
1344                 create="$name $create";
1345                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1346                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1347         else
1348                 name="";
1349         fi;
1350 done;
1351 for file in $create; do
1352         mkdir $file;
1353 done
1354 '
1355 for file in $*; do
1356         case "$src" in
1357         ".")
1358                 case "$file" in
1359                 */*)
1360                         dir=`expr X$file : 'X\(.*\)/'`
1361                         file=`expr X$file : 'X.*/\(.*\)'`
1362                         (cd $dir && . ./$file)
1363                         ;;
1364                 *)
1365                         . ./$file
1366                         ;;
1367                 esac
1368                 ;;
1369         *)
1370                 case "$file" in
1371                 */*)
1372                         dir=`expr X$file : 'X\(.*\)/'`
1373                         file=`expr X$file : 'X.*/\(.*\)'`
1374                         (set x $dir; shift; eval $mkdir_p)
1375                         sh <$src/$dir/$file
1376                         ;;
1377                 *)
1378                         sh <$src/$file
1379                         ;;
1380                 esac
1381                 ;;
1382         esac
1383 done
1384 if test -f $src/config_h.SH; then
1385         if test ! -f config.h; then
1386         : oops, they left it out of MANIFEST, probably, so do it anyway.
1387         . $src/config_h.SH
1388         fi
1389 fi
1390 EOS
1391
1392 : extract files and exit if asked to do so
1393 case "$extractsh" in
1394 true)
1395         case "$realsilent" in
1396         true) ;;
1397         *) exec 1>&4;;
1398         esac
1399         case "$config_sh" in
1400         '') config_sh='config.sh';;
1401         esac
1402         echo " "
1403         echo "Fetching answers from $config_sh..."
1404         cd ..
1405         . $config_sh
1406         test "$override" && . ./optdef.sh
1407         echo " "
1408         . UU/extract
1409         rm -rf UU
1410         echo "Done."
1411         exit 0
1412         ;;
1413 esac
1414
1415 : Eunice requires " " instead of "", can you believe it
1416 echo " "
1417 : Here we go...
1418 echo "Beginning of configuration questions for $package."
1419
1420 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1421
1422 : first determine how to suppress newline on echo command
1423 echo " "
1424 echo "Checking echo to see how to suppress newlines..."
1425 (echo "hi there\c" ; echo " ") >.echotmp
1426 if $contains c .echotmp >/dev/null 2>&1 ; then
1427         echo "...using -n."
1428         n='-n'
1429         c=''
1430 else
1431         cat <<'EOM'
1432 ...using \c
1433 EOM
1434         n=''
1435         c='\c'
1436 fi
1437 echo $n "The star should be here-->$c"
1438 echo '*'
1439 rm -f .echotmp
1440
1441 : Now test for existence of everything in MANIFEST
1442 echo " "
1443 if test -f $rsrc/MANIFEST; then
1444         echo "First let's make sure your kit is complete.  Checking..." >&4
1445         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1446         rm -f missing
1447         tmppwd=`pwd`
1448         for filelist in x??; do
1449                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1450         done
1451         if test -s missing; then
1452                 cat missing >&4
1453                 cat >&4 <<'EOM'
1454
1455 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1456
1457 You have the option of continuing the configuration process, despite the
1458 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1459 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1460 and contact the author (perlbug@perl.com).
1461
1462 EOM
1463                 echo $n "Continue? [n] $c" >&4
1464                 read ans
1465                 case "$ans" in
1466                 y*)
1467                         echo "Continuing..." >&4
1468                         rm -f missing
1469                         ;;
1470                 *)
1471                         echo "ABORTING..." >&4
1472                         kill $$
1473                         ;;
1474                 esac
1475         else
1476                 echo "Looks good..."
1477         fi
1478 else
1479         echo "There is no MANIFEST file.  I hope your kit is complete !"
1480 fi
1481 rm -f missing x??
1482
1483 echo " "
1484 : Find the appropriate value for a newline for tr
1485 if test -n "$DJGPP"; then
1486        trnl='\012'
1487 fi
1488 if test X"$trnl" = X; then
1489         case "`echo foo|tr '\n' x 2>/dev/null`" in
1490         foox) trnl='\n' ;;
1491         esac
1492 fi
1493 if test X"$trnl" = X; then
1494         case "`echo foo|tr '\012' x 2>/dev/null`" in
1495         foox) trnl='\012' ;;
1496         esac
1497 fi
1498 if test X"$trnl" = X; then
1499         cat <<EOM >&2
1500
1501 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1502
1503 EOM
1504         exit 1
1505 fi
1506
1507 : compute the number of columns on the terminal for proper question formatting
1508 case "$COLUMNS" in
1509 '') COLUMNS='80';;
1510 esac
1511
1512 : set up the echo used in my read
1513 myecho="case \"\$xxxm\" in
1514 '') echo $n \"\$rp $c\" >&4;;
1515 *) case \"\$rp\" in
1516         '') echo $n \"[\$xxxm] $c\";;
1517         *)
1518                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1519                         echo \"\$rp\" >&4
1520                         echo $n \"[\$xxxm] $c\" >&4
1521                 else
1522                         echo $n \"\$rp [\$xxxm] $c\" >&4
1523                 fi
1524                 ;;
1525         esac;;
1526 esac"
1527
1528 : now set up to do reads with possible shell escape and default assignment
1529 cat <<EOSC >myread
1530 $startsh
1531 xxxm=\$dflt
1532 $myecho
1533 ans='!'
1534 case "\$fastread" in
1535 yes) case "\$dflt" in
1536         '') ;;
1537         *) ans='';
1538                 case "\$silent-\$rp" in
1539                 true-) ;;
1540                 *) echo " " >&4;;
1541                 esac;;
1542         esac;;
1543 *) case "\$silent" in
1544         true) case "\$rp" in
1545                 '') ans='';;
1546                 esac;;
1547         esac;;
1548 esac
1549 while expr "X\$ans" : "X!" >/dev/null; do
1550         read answ
1551         set x \$xxxm
1552         shift
1553         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1554         case  "\$answ" in
1555         "!")
1556                 sh 1>&4
1557                 echo " "
1558                 $myecho
1559                 ;;
1560         !*)
1561                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1562                 shift
1563                 sh 1>&4 -c "\$*"
1564                 echo " "
1565                 $myecho
1566                 ;;
1567         "\$ans")
1568                 case "\$ans" in
1569                 \\&*)
1570                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1571                         shift
1572                         case "\$1" in
1573                         -d)
1574                                 fastread=yes
1575                                 echo "(OK, I'll run with -d after this question.)" >&4
1576                                 ;;
1577                         -*)
1578                                 echo "*** Sorry, \$1 not supported yet." >&4
1579                                 ;;
1580                         esac
1581                         $myecho
1582                         ans=!
1583                         ;;
1584                 esac;;
1585         *)
1586                 case "\$aok" in
1587                 y)
1588                         echo "*** Substitution done -- please confirm."
1589                         xxxm="\$ans"
1590                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1591                         xxxm="\$ans"
1592                         ans=!
1593                         ;;
1594                 *)
1595                         echo "*** Error -- try again."
1596                         ans=!
1597                         ;;
1598                 esac
1599                 $myecho
1600                 ;;
1601         esac
1602         case "\$ans\$xxxm\$nostick" in
1603         '')
1604                 ans=!
1605                 $myecho
1606                 ;;
1607         esac
1608 done
1609 case "\$ans" in
1610 '') ans="\$xxxm";;
1611 esac
1612 EOSC
1613
1614 : create .config dir to save info across Configure sessions
1615 test -d ../.config || mkdir ../.config
1616 cat >../.config/README <<EOF
1617 This directory created by Configure to save information that should
1618 persist across sessions for $package.
1619
1620 You may safely delete it if you wish.
1621 EOF
1622
1623 : general instructions
1624 needman=true
1625 firsttime=true
1626 user=`(logname) 2>/dev/null`
1627 case "$user" in
1628 '') user=`whoami 2>&1`;;
1629 esac
1630 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1631         firsttime=false
1632         echo " "
1633         rp='Would you like to see the instructions?'
1634         dflt=n
1635         . ./myread
1636         case "$ans" in
1637         [yY]*) ;;
1638         *) needman=false;;
1639         esac
1640 fi
1641 if $needman; then
1642         cat <<EOH
1643
1644 This installation shell script will examine your system and ask you questions
1645 to determine how the perl5 package should be installed. If you get
1646 stuck on a question, you may use a ! shell escape to start a subshell or
1647 execute a command.  Many of the questions will have default answers in square
1648 brackets; typing carriage return will give you the default.
1649
1650 On some of the questions which ask for file or directory names you are allowed
1651 to use the ~name construct to specify the login directory belonging to "name",
1652 even if you don't have a shell which knows about that.  Questions where this is
1653 allowed will be marked "(~name ok)".
1654
1655 EOH
1656         rp=''
1657         dflt='Type carriage return to continue'
1658         . ./myread
1659         cat <<'EOH'
1660
1661 The prompter used in this script allows you to use shell variables and
1662 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1663 in the default answer, as if the default line was a set of arguments given to a
1664 script shell.  This means you may also use $* to repeat the whole default line,
1665 so you do not have to re-type everything to add something to the default.
1666
1667 Everytime there is a substitution, you will have to confirm.  If there is an
1668 error (e.g. an unmatched backtick), the default answer will remain unchanged
1669 and you will be prompted again.
1670
1671 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1672 the questions and use the computed defaults (or the previous answers if there
1673 was already a config.sh file). Type 'Configure -h' for a list of options.
1674 You may also start interactively and then answer '& -d' at any prompt to turn
1675 on the non-interactive behaviour for the remainder of the execution.
1676
1677 EOH
1678         . ./myread
1679         cat <<EOH
1680
1681 Much effort has been expended to ensure that this shell script will run on any
1682 Unix system.  If despite that it blows up on yours, your best bet is to edit
1683 Configure and run it again.  If you can't run Configure for some reason,
1684 you'll have to generate a config.sh file by hand.  Whatever problems you
1685 have, let me (perlbug@perl.com) know how I blew it.
1686
1687 This installation script affects things in two ways:
1688
1689 1) it may do direct variable substitutions on some of the files included
1690    in this kit.
1691 2) it builds a config.h file for inclusion in C programs.  You may edit
1692    any of these files as the need arises after running this script.
1693
1694 If you make a mistake on a question, there is no easy way to back up to it
1695 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1696 files.  Configure will offer to let you do this before it runs the SH files.
1697
1698 EOH
1699         dflt='Type carriage return to continue'
1700         . ./myread
1701         case "$firsttime" in
1702         true) echo $user >>../.config/instruct;;
1703         esac
1704 fi
1705
1706 : find out where common programs are
1707 echo " "
1708 echo "Locating common programs..." >&4
1709 cat <<EOSC >loc
1710 $startsh
1711 case \$# in
1712 0) exit 1;;
1713 esac
1714 thing=\$1
1715 shift
1716 dflt=\$1
1717 shift
1718 for dir in \$*; do
1719         case "\$thing" in
1720         .)
1721         if test -d \$dir/\$thing; then
1722                 echo \$dir
1723                 exit 0
1724         fi
1725         ;;
1726         *)
1727         for thisthing in \$dir/\$thing; do
1728                 : just loop through to pick last item
1729         done
1730         if test -f \$thisthing; then
1731                 echo \$thisthing
1732                 exit 0
1733         elif test -f \$dir/\$thing.exe; then
1734                 if test -n "$DJGPP"; then
1735                         echo \$dir/\$thing.exe
1736                 else
1737                         : on Eunice apparently
1738                         echo \$dir/\$thing
1739                 fi
1740                 exit 0
1741         fi
1742         ;;
1743         esac
1744 done
1745 echo \$dflt
1746 exit 1
1747 EOSC
1748 chmod +x loc
1749 $eunicefix loc
1750 loclist="
1751 awk
1752 cat
1753 comm
1754 cp
1755 echo
1756 expr
1757 grep
1758 ls
1759 make
1760 mkdir
1761 rm
1762 sed
1763 sort
1764 touch
1765 tr
1766 uniq
1767 "
1768 trylist="
1769 Mcc
1770 ar
1771 byacc
1772 cpp
1773 csh
1774 date
1775 egrep
1776 gzip
1777 less
1778 ln
1779 more
1780 nm
1781 nroff
1782 pg
1783 test
1784 uname
1785 zip
1786 "
1787 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1788 pth="$pth /lib /usr/lib"
1789 for file in $loclist; do
1790         eval xxx=\$$file
1791         case "$xxx" in
1792         /*|?:[\\/]*)
1793                 if test -f "$xxx"; then
1794                         : ok
1795                 else
1796                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1797                         xxx=`./loc $file $file $pth`
1798                 fi
1799                 ;;
1800         '') xxx=`./loc $file $file $pth`;;
1801         *) xxx=`./loc $xxx $xxx $pth`;;
1802         esac
1803         eval $file=$xxx
1804         eval _$file=$xxx
1805         case "$xxx" in
1806         /*)
1807                 echo $file is in $xxx.
1808                 ;;
1809         ?:[\\/]*)
1810                 echo $file is in $xxx.
1811                 ;;
1812         *)
1813                 echo "I don't know where '$file' is, and my life depends on it." >&4
1814                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1815                 exit 1
1816                 ;;
1817         esac
1818 done
1819 echo " "
1820 echo "Don't worry if any of the following aren't found..."
1821 say=offhand
1822 for file in $trylist; do
1823         eval xxx=\$$file
1824         case "$xxx" in
1825         /*|?:[\\/]*)
1826                 if test -f "$xxx"; then
1827                         : ok
1828                 else
1829                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1830                         xxx=`./loc $file $file $pth`
1831                 fi
1832                 ;;
1833         '') xxx=`./loc $file $file $pth`;;
1834         *) xxx=`./loc $xxx $xxx $pth`;;
1835         esac
1836         eval $file=$xxx
1837         eval _$file=$xxx
1838         case "$xxx" in
1839         /*)
1840                 echo $file is in $xxx.
1841                 ;;
1842         ?:[\\/]*)
1843                 echo $file is in $xxx.
1844                 ;;
1845         *)
1846                 echo "I don't see $file out there, $say."
1847                 say=either
1848                 ;;
1849         esac
1850 done
1851 case "$egrep" in
1852 egrep)
1853         echo "Substituting grep for egrep."
1854         egrep=$grep
1855         ;;
1856 esac
1857 case "$ln" in
1858 ln)
1859         echo "Substituting cp for ln."
1860         ln=$cp
1861         ;;
1862 esac
1863 case "$test" in
1864 test)
1865         echo "Hopefully test is built into your sh."
1866         ;;
1867 *)
1868         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1869                 echo "Using the test built into your sh."
1870                 test=test
1871                 _test=test
1872         fi
1873         ;;
1874 esac
1875 case "$echo" in
1876 echo)
1877         echo "Hopefully echo is built into your sh."
1878         ;;
1879 '') ;;
1880 *)
1881         echo " "
1882 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1883         $echo $n "hi there$c" >foo1
1884         echo $n "hi there$c" >foo2
1885         if cmp foo1 foo2 >/dev/null 2>&1; then
1886                 echo "They are compatible.  In fact, they may be identical."
1887         else
1888                 case "$n" in
1889                 '-n') n='' c='\c';;
1890                 *) n='-n' c='';;
1891                 esac
1892                 cat <<FOO
1893 They are not compatible!  You are probably running ksh on a non-USG system.
1894 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1895 have echo built in and we may have to run some Bourne shell scripts.  That
1896 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1897
1898 FOO
1899                 $echo $n "The star should be here-->$c"
1900                 $echo "*"
1901         fi
1902         $rm -f foo1 foo2
1903         ;;
1904 esac
1905
1906 : determine whether symbolic links are supported
1907 echo " "
1908 $touch blurfl
1909 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1910         echo "Symbolic links are supported." >&4
1911         lns="$ln -s"
1912 else
1913         echo "Symbolic links are NOT supported." >&4
1914         lns="$ln"
1915 fi
1916 $rm -f blurfl sym
1917
1918 : see whether [:lower:] and [:upper:] are supported character classes
1919 echo " "
1920 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1921 ABYZ)
1922         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1923         up='[:upper:]'
1924         low='[:lower:]'
1925         ;;
1926 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1927         # (0xc9 and 0xd1), therefore that is a nice testing point.
1928         if test "X$up" = X -o "X$low" = X; then
1929             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1930             ij) up='[A-Z]'
1931                 low='[a-z]'
1932                 ;;
1933             esac
1934         fi
1935         if test "X$up" = X -o "X$low" = X; then
1936             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1937             ij) up='A-Z'
1938                 low='a-z'
1939                 ;;
1940             esac
1941         fi
1942         if test "X$up" = X -o "X$low" = X; then
1943             case "`echo IJ | od -x 2>/dev/null`" in
1944             *C9D1*|*c9d1*)
1945                 echo "Hey, this might be EBCDIC." >&4
1946                 if test "X$up" = X -o "X$low" = X; then
1947                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1948                     ij) up='[A-IJ-RS-Z]'
1949                         low='[a-ij-rs-z]'
1950                         ;;
1951                     esac
1952                 fi
1953                 if test "X$up" = X -o "X$low" = X; then
1954                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1955                     ij) up='A-IJ-RS-Z'
1956                         low='a-ij-rs-z'
1957                         ;;
1958                     esac
1959                 fi
1960                 ;;
1961             esac
1962         fi
1963 esac
1964 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1965 ij)
1966     echo "Using $up and $low to convert case." >&4
1967     ;;
1968 *)
1969     echo "I don't know how to translate letters from upper to lower case." >&4
1970     echo "Your tr is not acting any way I know of." >&4
1971     exit 1
1972     ;;
1973 esac
1974 : set up the translation script tr, must be called with ./tr of course
1975 cat >tr <<EOSC
1976 $startsh
1977 case "\$1\$2" in
1978 '[A-Z][a-z]') exec $tr '$up' '$low';;
1979 '[a-z][A-Z]') exec $tr '$low' '$up';;
1980 esac
1981 exec $tr "\$@"
1982 EOSC
1983 chmod +x tr
1984 $eunicefix tr
1985
1986 : Try to determine whether config.sh was made on this system
1987 case "$config_sh" in
1988 '')
1989 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1990 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1991 # because the A-Z/a-z are not consecutive.
1992 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1993         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1994 newmyuname="$myuname"
1995 dflt=n
1996 case "$knowitall" in
1997 '')
1998         if test -f ../config.sh; then
1999                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2000                         eval "`grep myuname= ../config.sh`"
2001                 fi
2002                 if test "X$myuname" = "X$newmyuname"; then
2003                         dflt=y
2004                 fi
2005         fi
2006         ;;
2007 *) dflt=y;;
2008 esac
2009
2010 : Get old answers from old config file if Configure was run on the
2011 : same system, otherwise use the hints.
2012 hint=default
2013 cd ..
2014 if test -f config.sh; then
2015         echo " "
2016         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2017         . UU/myread
2018         case "$ans" in
2019         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2020         *)  echo "Fetching default answers from your old config.sh file..." >&4
2021                 tmp_n="$n"
2022                 tmp_c="$c"
2023                 tmp_sh="$sh"
2024                 . ./config.sh
2025                 cp config.sh UU
2026                 n="$tmp_n"
2027                 c="$tmp_c"
2028                 : Older versions did not always set $sh.  Catch re-use of such
2029                 : an old config.sh.
2030                 case "$sh" in
2031                 '') sh="$tmp_sh" ;;
2032                 esac
2033                 hint=previous
2034                 ;;
2035         esac
2036 fi
2037 if test ! -f config.sh; then
2038         $cat <<EOM
2039
2040 First time through, eh?  I have some defaults handy for some systems
2041 that need some extra help getting the Configure answers right:
2042
2043 EOM
2044         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2045         dflt=''
2046         : Half the following guesses are probably wrong... If you have better
2047         : tests or hints, please send them to perlbug@perl.com
2048         : The metaconfig authors would also appreciate a copy...
2049         $test -f /irix && osname=irix
2050         $test -f /xenix && osname=sco_xenix
2051         $test -f /dynix && osname=dynix
2052         $test -f /dnix && osname=dnix
2053         $test -f /lynx.os && osname=lynxos
2054         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2055         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2056         $test -f /bin/mips && /bin/mips && osname=mips
2057         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2058                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2059         $test -d /usr/apollo/bin && osname=apollo
2060         $test -f /etc/saf/_sactab && osname=svr4
2061         $test -d /usr/include/minix && osname=minix
2062         if $test -d /MachTen -o -d /MachTen_Folder; then
2063                 osname=machten
2064                 if $test -x /sbin/version; then
2065                         osvers=`/sbin/version | $awk '{print $2}' |
2066                         $sed -e 's/[A-Za-z]$//'`
2067                 elif $test -x /usr/etc/version; then
2068                         osvers=`/usr/etc/version | $awk '{print $2}' |
2069                         $sed -e 's/[A-Za-z]$//'`
2070                 else
2071                         osvers="$2.$3"
2072                 fi
2073         fi
2074        $test -f /sys/posix.dll &&
2075                $test -f /usr/bin/what &&
2076                set X `/usr/bin/what /sys/posix.dll` &&
2077                $test "$3" = UWIN &&
2078                osname=uwin &&
2079                osvers="$5"
2080         if $test -f $uname; then
2081                 set X $myuname
2082                 shift
2083
2084                 case "$5" in
2085                 fps*) osname=fps ;;
2086                 mips*)
2087                         case "$4" in
2088                         umips) osname=umips ;;
2089                         *) osname=mips ;;
2090                         esac;;
2091                 [23]100) osname=mips ;;
2092                 next*) osname=next ;;
2093                 i386*)
2094                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2095                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2096                                 osname='sco'
2097                                 osvers=$tmp
2098                         elif $test -f /etc/kconfig; then
2099                                 osname=isc
2100                                 if test "$lns" = "ln -s"; then
2101                                         osvers=4
2102                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2103                                         osvers=3
2104                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2105                                         osvers=2
2106                                 fi
2107                         fi
2108                         tmp=''
2109                         ;;
2110                 pc*)
2111                         if test -n "$DJGPP"; then
2112                                 osname=dos
2113                                 osvers=djgpp
2114                         fi
2115                         ;;
2116                 esac
2117
2118                 case "$1" in
2119                 aix) osname=aix
2120                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2121                         case "$tmp" in
2122                         'not found') osvers="$4"."$3" ;;
2123                         '<3240'|'<>3240') osvers=3.2.0 ;;
2124                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2125                         '=3250'|'>3250') osvers=3.2.5 ;;
2126                         *) osvers=$tmp;;
2127                         esac
2128                         ;;
2129                 *dc.osx) osname=dcosx
2130                         osvers="$3"
2131                         ;;
2132                 dnix) osname=dnix
2133                         osvers="$3"
2134                         ;;
2135                 domainos) osname=apollo
2136                         osvers="$3"
2137                         ;;
2138                 dgux) osname=dgux 
2139                         osvers="$3"
2140                         ;;
2141                 dynixptx*) osname=dynixptx
2142                         osvers=`echo "$4"|sed 's/^v//'`
2143                         ;;
2144                 freebsd) osname=freebsd 
2145                         osvers="$3" ;;
2146                 genix) osname=genix ;;
2147                 hp*) osname=hpux 
2148                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2149                         ;;
2150                 irix*) osname=irix
2151                         case "$3" in
2152                         4*) osvers=4 ;;
2153                         5*) osvers=5 ;;
2154                         *)      osvers="$3" ;;
2155                         esac
2156                         ;;
2157                 linux) osname=linux
2158                         case "$3" in
2159                         *)      osvers="$3" ;;
2160                         esac
2161                         ;;
2162                 MiNT) osname=mint
2163                         ;;
2164                 netbsd*) osname=netbsd
2165                         osvers="$3"
2166                         ;;
2167                 news-os) osvers="$3"
2168                         case "$3" in
2169                         4*) osname=newsos4 ;;
2170                         *) osname=newsos ;;
2171                         esac
2172                         ;;
2173                 bsd386) osname=bsd386
2174                         osvers=`$uname -r`
2175                         ;;
2176                 POSIX-BC | posix-bc ) osname=posix-bc
2177                         osvers="$3"
2178                         ;;
2179                 powerux | power_ux | powermax_os | powermaxos | \
2180                 powerunix | power_unix) osname=powerux
2181                         osvers="$3"
2182                         ;;
2183                 next*) osname=next ;;
2184                 solaris) osname=solaris
2185                         case "$3" in
2186                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2187                         *)      osvers="$3" ;;
2188                         esac
2189                         ;;
2190                 sunos) osname=sunos
2191                         case "$3" in
2192                         5*) osname=solaris
2193                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2194                         *)      osvers="$3" ;;
2195                         esac
2196                         ;;
2197                 titanos) osname=titanos
2198                         case "$3" in
2199                         1*) osvers=1 ;;
2200                         2*) osvers=2 ;;
2201                         3*) osvers=3 ;;
2202                         4*) osvers=4 ;;
2203                         *)      osvers="$3" ;;
2204                         esac
2205                         ;;
2206                 ultrix) osname=ultrix
2207                         osvers="$3"
2208                         ;;
2209                 osf1|mls+)      case "$5" in
2210                                 alpha)
2211                                         osname=dec_osf
2212                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2213                                         ;;
2214                         hp*)    osname=hp_osf1  ;;
2215                         mips)   osname=mips_osf1 ;;
2216                         esac
2217                         ;;
2218                 uts) osname=uts 
2219                         osvers="$3"
2220                         ;;
2221                 qnx) osname=qnx
2222                         osvers="$4"
2223                         ;;
2224                 $2) case "$osname" in
2225                         *isc*) ;;
2226                         *freebsd*) ;;
2227                         svr*)
2228                                 : svr4.x or possibly later
2229                                 case "svr$3" in 
2230                                 ${osname}*)
2231                                         osname=svr$3
2232                                         osvers=$4
2233                                         ;;
2234                                 esac
2235                                 case "$osname" in
2236                                 svr4.0)
2237                                         : Check for ESIX
2238                                         if test -f /stand/boot ; then
2239                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2240                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2241                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2242                                                         if test -n "$isesix"; then
2243                                                                 osname=esix4
2244                                                         fi
2245                                                 fi
2246                                         fi
2247                                         ;;
2248                                 esac
2249                                 ;;
2250                         *)      if test -f /etc/systemid; then
2251                                         osname=sco
2252                                         set `echo $3 | $sed 's/\./ /g'` $4
2253                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2254                                                 osvers=$1.$2.$3
2255                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2256                                                 osvers=$1.$2
2257                                         elif $test -f $src/hints/sco_$1.sh; then
2258                                                 osvers=$1
2259                                         fi
2260                                 else
2261                                         case "$osname" in
2262                                         '') : Still unknown.  Probably a generic Sys V.
2263                                                 osname="sysv"
2264                                                 osvers="$3"
2265                                                 ;;
2266                                         esac
2267                                 fi
2268                                 ;;
2269                         esac
2270                         ;;
2271                 *)      case "$osname" in
2272                         '') : Still unknown.  Probably a generic BSD.
2273                                 osname="$1"
2274                                 osvers="$3"
2275                                 ;;
2276                         esac
2277                         ;;
2278                 esac
2279         else
2280                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2281                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2282                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2283                                 osname=news_os
2284                         fi
2285                         $rm -f UU/kernel.what
2286                 elif test -d c:/.; then
2287                         set X $myuname
2288                         osname=os2
2289                         osvers="$5"
2290                 fi
2291         fi
2292         
2293         : Now look for a hint file osname_osvers, unless one has been
2294         : specified already.
2295         case "$hintfile" in
2296         ''|' ')
2297                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2298                 : Also try without trailing minor version numbers.
2299                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2300                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2301                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2302                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2303                 case "$file" in
2304                 '') dflt=none ;;
2305                 *)  case "$osvers" in
2306                         '') dflt=$file
2307                                 ;;
2308                         *)  if $test -f $src/hints/$file.sh ; then
2309                                         dflt=$file
2310                                 elif $test -f $src/hints/$xfile.sh ; then
2311                                         dflt=$xfile
2312                                 elif $test -f $src/hints/$xxfile.sh ; then
2313                                         dflt=$xxfile
2314                                 elif $test -f $src/hints/$xxxfile.sh ; then
2315                                         dflt=$xxxfile
2316                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2317                                         dflt=$xxxxfile
2318                                 elif $test -f "$src/hints/${osname}.sh" ; then
2319                                         dflt="${osname}"
2320                                 else
2321                                         dflt=none
2322                                 fi
2323                                 ;;
2324                         esac
2325                         ;;
2326                 esac
2327                 if $test -f Policy.sh ; then
2328                         case "$dflt" in
2329                         *Policy*) ;;
2330                         none) dflt="Policy" ;;
2331                         *) dflt="Policy $dflt" ;;
2332                         esac
2333                 fi
2334                 ;;
2335         *)
2336                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2337                 ;;
2338         esac
2339
2340         if $test -f Policy.sh ; then
2341                 $cat <<EOM
2342
2343 There's also a Policy hint file available, which should make the
2344 site-specific (policy) questions easier to answer.
2345 EOM
2346
2347         fi
2348
2349         $cat <<EOM
2350
2351 You may give one or more space-separated answers, or "none" if appropriate.
2352 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2353 is a good thing.  DO NOT give a wrong version.
2354
2355 EOM
2356
2357         rp="Which of these apply, if any?"
2358         . UU/myread
2359         tans=$ans
2360         for file in $tans; do
2361                 if $test X$file = XPolicy -a -f Policy.sh; then
2362                         . Policy.sh
2363                         $cat Policy.sh >> UU/config.sh
2364                 elif $test -f $src/hints/$file.sh; then
2365                         . $src/hints/$file.sh
2366                         $cat $src/hints/$file.sh >> UU/config.sh
2367                 elif $test X$tans = X -o X$tans = Xnone ; then
2368                         : nothing
2369                 else
2370                         : Give one chance to correct a possible typo.
2371                         echo "$file.sh does not exist"
2372                         dflt=$file
2373                         rp="hint to use instead?"
2374                         . UU/myread
2375                         for file in $ans; do
2376                                 if $test -f "$src/hints/$file.sh"; then
2377                                         . $src/hints/$file.sh
2378                                         $cat $src/hints/$file.sh >> UU/config.sh
2379                                 elif $test X$ans = X -o X$ans = Xnone ; then
2380                                         : nothing
2381                                 else
2382                                         echo "$file.sh does not exist -- ignored."
2383                                 fi
2384                         done
2385                 fi
2386         done
2387
2388         hint=recommended
2389         : Remember our hint file for later.
2390         if $test -f "$src/hints/$file.sh" ; then
2391                 hintfile="$file"
2392         else
2393                 hintfile=''
2394         fi
2395 fi
2396 cd UU
2397 ;;
2398 *)
2399         echo " "
2400         echo "Fetching default answers from $config_sh..." >&4
2401         tmp_n="$n"
2402         tmp_c="$c"
2403         cd ..
2404         cp $config_sh config.sh 2>/dev/null
2405         chmod +w config.sh
2406         . ./config.sh
2407         cd UU
2408         cp ../config.sh .
2409         n="$tmp_n"
2410         c="$tmp_c"
2411         hint=previous
2412         ;;
2413 esac
2414 test "$override" && . ./optdef.sh
2415 myuname="$newmyuname"
2416
2417 : Restore computed paths
2418 for file in $loclist $trylist; do
2419         eval $file="\$_$file"
2420 done
2421
2422 cat << EOM
2423
2424 Configure uses the operating system name and version to set some defaults.
2425 The default value is probably right if the name rings a bell. Otherwise,
2426 since spelling matters for me, either accept the default or answer "none"
2427 to leave it blank.
2428
2429 EOM
2430 case "$osname" in
2431         ''|' ')
2432                 case "$hintfile" in
2433                 ''|' '|none) dflt=none ;;
2434                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2435                 esac
2436                 ;;
2437         *) dflt="$osname" ;;
2438 esac
2439 rp="Operating system name?"
2440 . ./myread
2441 case "$ans" in
2442 none)  osname='' ;;
2443 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2444 esac
2445 echo " "
2446 case "$osvers" in
2447         ''|' ')
2448                 case "$hintfile" in
2449                 ''|' '|none) dflt=none ;;
2450                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2451                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2452                         case "$dflt" in
2453                         ''|' ') dflt=none ;;
2454                         esac
2455                         ;;
2456                 esac
2457                 ;;
2458         *) dflt="$osvers" ;;
2459 esac
2460 rp="Operating system version?"
2461 . ./myread
2462 case "$ans" in
2463 none)  osvers='' ;;
2464 *) osvers="$ans" ;;
2465 esac
2466
2467 : who configured the system
2468 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2469 cf_by=`(logname) 2>/dev/null`
2470 case "$cf_by" in
2471 "")
2472         cf_by=`(whoami) 2>/dev/null`
2473         case "$cf_by" in
2474         "") cf_by=unknown ;;
2475         esac ;;
2476 esac
2477
2478 : set up the script used to warn in case of inconsistency
2479 cat <<EOS >whoa
2480 $startsh
2481 EOS
2482 cat <<'EOSC' >>whoa
2483 dflt=y
2484 echo " "
2485 echo "*** WHOA THERE!!! ***" >&4
2486 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2487 rp="    Keep the $hint value?"
2488 . ./myread
2489 case "$ans" in
2490 y) td=$was; tu=$was;;
2491 esac
2492 EOSC
2493
2494 : function used to set $1 to $val
2495 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2496 case "$val$was" in
2497 $define$undef) . ./whoa; eval "$var=\$td";;
2498 $undef$define) . ./whoa; eval "$var=\$tu";;
2499 *) eval "$var=$val";;
2500 esac'
2501
2502 cat <<EOM
2503
2504 Perl can be built to take advantage of threads, on some systems.
2505 To do so, Configure must be run with -Dusethreads.
2506
2507 Note that threading is a highly experimental feature, and
2508 some known race conditions still remain.  If you choose to try
2509 it, be very sure to not actually deploy it for production
2510 purposes.  README.threads has more details, and is required
2511 reading if you enable threads.
2512 EOM
2513 case "$usethreads" in
2514 $define|true|[yY]*)     dflt='y';;
2515 *) dflt='n';;
2516 esac
2517 rp='Build a threading Perl?'
2518 . ./myread
2519 case "$ans" in
2520 y|Y)    val="$define" ;;     
2521 *)      val="$undef" ;;
2522 esac
2523 set usethreads
2524 eval $setvar 
2525
2526 case "$d_oldpthreads" in
2527 '')     : Configure tests would be welcome here.  For now, assume undef.
2528         val="$undef" ;;
2529 *)      val="$d_oldpthreads" ;;
2530 esac
2531 set d_oldpthreads
2532 eval $setvar
2533
2534
2535 case "$usethreads" in
2536 "$define"|true|[yY]*)
2537 : Look for a hint-file generated 'call-back-unit'.  If the
2538 : user has specified that a threading perl is to be built,
2539 : we may need to set or change some other defaults.
2540         if $test -f usethreads.cbu; then
2541                 . ./usethreads.cbu
2542         fi
2543         case "$osname" in
2544         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2545                 # Known thread-capable platforms.
2546                 ;;
2547         *)
2548                 cat >&4 <<EOM
2549 $osname is not known to support threads.
2550 Please let perlbug@perl.com know how to do that.
2551
2552 Cannot continue, aborting.
2553 EOM
2554                 exit 1
2555         ;;
2556         esac # $osname
2557     ;;
2558 esac # $usethreads
2559
2560 cat <<EOM
2561
2562 Perl can be built so that multiple Perl interpreters can coexist
2563 within the same Perl executable.  To do so, Configure must be run with
2564 -Dusemultiplicity.
2565
2566 Normally you do not need this and you should answer no.
2567
2568 EOM
2569 case "$usemultiplicity" in
2570 $define|true|[yY]*)     dflt='y';;
2571 *) dflt='n';;
2572 esac
2573 rp='Build Perl for multiplicity?'
2574 . ./myread
2575 case "$ans" in
2576 y|Y)    val="$define" ;;     
2577 *)      val="$undef" ;;
2578 esac
2579 set usemultiplicity
2580 eval $setvar 
2581
2582 cat <<EOM
2583
2584 Perl can be built to take advantage of explicit 64-bit interfaces,
2585 on some systems.  To do so, Configure must be run with -Duse64bits.
2586
2587 If this doesn't make any sense to you, just accept the default 'n'.
2588 EOM
2589 case "$use64bits" in
2590 $define|true|[yY]*)     dflt='y';;
2591 *) dflt='n';;
2592 esac
2593 rp='Try to use explicit 64-bit interfaces, if available?'
2594 . ./myread
2595 case "$ans" in
2596 y|Y) 
2597         val="$define"
2598         ;;     
2599 *)      
2600         val="$undef"
2601         ;;
2602 esac
2603 set use64bits
2604 eval $setvar
2605
2606 case "$archname64" in
2607 '') archname64='' ;;    # not a typo
2608 esac
2609
2610 case "$use64bits" in
2611 "$define"|true|[yY]*)
2612 : Look for a hint-file generated 'call-back-unit'.  If the
2613 : user has specified that a threading perl is to be built,
2614 : we may need to set or change some other defaults.
2615         if $test -f use64bits.cbu; then
2616                 . ./use64bits.cbu
2617         fi
2618         case "$osname" in
2619         dec_osf|hpux|irix|solaris|unicos)
2620                 # Known 64-bit capable platforms.
2621                 ;;
2622         *)
2623                 cat >&4 <<EOM
2624 $osname is not known to support 64-bit interfaces.
2625 Please let perlbug@perl.com know how to do that.
2626
2627 Cannot continue, aborting.
2628 EOM
2629                 exit 1
2630                 ;;
2631         esac
2632         ;;
2633 esac
2634
2635 : determine the architecture name
2636 echo " "
2637 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2638         tarch=`arch`"-$osname"
2639 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2640         if uname -m > tmparch 2>&1 ; then
2641                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2642                         -e 's/$/'"-$osname/" tmparch`
2643         else
2644                 tarch="$osname"
2645         fi
2646         $rm -f tmparch
2647 else
2648         tarch="$osname"
2649 fi
2650 case "$myarchname" in
2651 ''|"$tarch") ;;
2652 *)
2653         echo "(Your architecture name used to be $myarchname.)"
2654         archname=''
2655         ;;
2656 esac
2657 myarchname="$tarch"
2658 case "$archname" in
2659 '') dflt="$tarch";;
2660 *) dflt="$archname";;
2661 esac
2662 rp='What is your architecture name'
2663 . ./myread
2664 archname="$ans"
2665 case "$usethreads" in
2666 $define)
2667         echo "Threads selected." >&4
2668         case "$archname" in
2669         *-thread*) echo "...and architecture name already has -thread." >&4
2670                 ;;
2671         *)      archname="$archname-thread"
2672                 echo "...setting architecture name to $archname." >&4
2673                 ;;
2674         esac
2675         ;;
2676 esac
2677 case "$usemultiplicity" in
2678 $define)
2679         echo "Multiplicity selected." >&4
2680         case "$archname" in
2681         *-multi*) echo "...and architecture name already has -multi." >&4
2682                 ;;
2683         *)      archname="$archname-multi"
2684                 echo "...setting architecture name to $archname." >&4
2685                 ;;
2686         esac
2687         ;;
2688 esac
2689 case "$use64bits" in
2690 $define)
2691         echo "Explicit 64-bitness selected." >&4
2692         case "$archname64" in
2693         '')
2694                 ;;
2695         *)
2696                 case "$archname" in
2697                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2698                         ;;
2699                 *)      archname="$archname-$archname64"
2700                         echo "...setting architecture name to $archname." >&4
2701                         ;;
2702                 esac
2703                 ;;
2704         esac
2705 esac
2706
2707 : is AFS running?
2708 echo " "
2709 case "$afs" in
2710 $define|true)   afs=true ;;
2711 $undef|false)   afs=false ;;
2712 *)      if test -d /afs; then
2713                 afs=true
2714         else
2715                 afs=false
2716         fi
2717         ;;
2718 esac
2719 if $afs; then
2720         echo "AFS may be running... I'll be extra cautious then..." >&4
2721 else
2722         echo "AFS does not seem to be running..." >&4
2723 fi
2724
2725 : decide how portable to be.  Allow command line overrides.
2726 case "$d_portable" in
2727 "$undef") ;;
2728 *)      d_portable="$define" ;;
2729 esac
2730
2731 : set up shell script to do ~ expansion
2732 cat >filexp <<EOSS
2733 $startsh
2734 : expand filename
2735 case "\$1" in
2736  ~/*|~)
2737         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2738         ;;
2739  ~*)
2740         if $test -f /bin/csh; then
2741                 /bin/csh -f -c "glob \$1"
2742                 failed=\$?
2743                 echo ""
2744                 exit \$failed
2745         else
2746                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2747                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2748                 if $test ! -d "\$dir"; then
2749                         me=\`basename \$0\`
2750                         echo "\$me: can't locate home directory for: \$name" >&2
2751                         exit 1
2752                 fi
2753                 case "\$1" in
2754                 */*)
2755                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2756                         ;;
2757                 *)
2758                         echo \$dir
2759                         ;;
2760                 esac
2761         fi
2762         ;;
2763 *)
2764         echo \$1
2765         ;;
2766 esac
2767 EOSS
2768 chmod +x filexp
2769 $eunicefix filexp
2770
2771 : now set up to get a file name
2772 cat <<EOS >getfile
2773 $startsh
2774 EOS
2775 cat <<'EOSC' >>getfile
2776 tilde=''
2777 fullpath=''
2778 already=''
2779 skip=''
2780 none_ok=''
2781 exp_file=''
2782 nopath_ok=''
2783 orig_rp="$rp"
2784 orig_dflt="$dflt"
2785
2786 case "$fn" in
2787 *\(*)
2788         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2789         fn=`echo $fn | sed 's/(.*)//'`
2790         ;;
2791 esac
2792
2793 case "$fn" in
2794 *:*)
2795         loc_file=`expr $fn : '.*:\(.*\)'`
2796         fn=`expr $fn : '\(.*\):.*'`
2797         ;;
2798 esac
2799
2800 case "$fn" in
2801 *~*) tilde=true;;
2802 esac
2803 case "$fn" in
2804 */*) fullpath=true;;
2805 esac
2806 case "$fn" in
2807 *+*) skip=true;;
2808 esac
2809 case "$fn" in
2810 *n*) none_ok=true;;
2811 esac
2812 case "$fn" in
2813 *e*) exp_file=true;;
2814 esac
2815 case "$fn" in
2816 *p*) nopath_ok=true;;
2817 esac
2818
2819 case "$fn" in
2820 *f*) type='File';;
2821 *d*) type='Directory';;
2822 *l*) type='Locate';;
2823 esac
2824
2825 what="$type"
2826 case "$what" in
2827 Locate) what='File';;
2828 esac
2829
2830 case "$exp_file" in
2831 '')
2832         case "$d_portable" in
2833         "$define") ;;
2834         *) exp_file=true;;
2835         esac
2836         ;;
2837 esac
2838
2839 cd ..
2840 while test "$type"; do
2841         redo=''
2842         rp="$orig_rp"
2843         dflt="$orig_dflt"
2844         case "$tilde" in
2845         true) rp="$rp (~name ok)";;
2846         esac
2847         . UU/myread
2848         if test -f UU/getfile.ok && \
2849                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2850         then
2851                 value="$ans"
2852                 ansexp="$ans"
2853                 break
2854         fi
2855         case "$ans" in
2856         none)
2857                 value=''
2858                 ansexp=''
2859                 case "$none_ok" in
2860                 true) type='';;
2861                 esac
2862                 ;;
2863         *)
2864                 case "$tilde" in
2865                 '') value="$ans"
2866                         ansexp="$ans";;
2867                 *)
2868                         value=`UU/filexp $ans`
2869                         case $? in
2870                         0)
2871                                 if test "$ans" != "$value"; then
2872                                         echo "(That expands to $value on this system.)"
2873                                 fi
2874                                 ;;
2875                         *) value="$ans";;
2876                         esac
2877                         ansexp="$value"
2878                         case "$exp_file" in
2879                         '') value="$ans";;
2880                         esac
2881                         ;;
2882                 esac
2883                 case "$fullpath" in
2884                 true)
2885                         case "$ansexp" in
2886                         /*) value="$ansexp" ;;
2887                         *)
2888                                 redo=true
2889                                 case "$already" in
2890                                 true)
2891                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2892                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2893                                         ;;
2894                                 *)
2895                                 echo "Please give a full path name, starting with slash." >&4
2896                                         case "$tilde" in
2897                                         true)
2898                                 echo "Note that using ~name is ok provided it expands well." >&4
2899                                                 already=true
2900                                                 ;;
2901                                         esac
2902                                 esac
2903                                 ;;
2904                         esac
2905                         ;;
2906                 esac
2907                 case "$redo" in
2908                 '')
2909                         case "$type" in
2910                         File)
2911                                 if test -f "$ansexp"; then
2912                                         type=''
2913                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2914                                 then
2915                                         echo "($value is not a plain file, but that's ok.)"
2916                                         type=''
2917                                 fi
2918                                 ;;
2919                         Directory)
2920                                 if test -d "$ansexp"; then
2921                                         type=''
2922                                 fi
2923                                 ;;
2924                         Locate)
2925                                 if test -d "$ansexp"; then
2926                                         echo "(Looking for $loc_file in directory $value.)"
2927                                         value="$value/$loc_file"
2928                                         ansexp="$ansexp/$loc_file"
2929                                 fi
2930                                 if test -f "$ansexp"; then
2931                                         type=''
2932                                 fi
2933                                 case "$nopath_ok" in
2934                                 true)   case "$value" in
2935                                         */*) ;;
2936                                         *)      echo "Assuming $value will be in people's path."
2937                                                 type=''
2938                                                 ;;
2939                                         esac
2940                                         ;;
2941                                 esac
2942                                 ;;
2943                         esac
2944
2945                         case "$skip" in
2946                         true) type='';
2947                         esac
2948
2949                         case "$type" in
2950                         '') ;;
2951                         *)
2952                                 if test "$fastread" = yes; then
2953                                         dflt=y
2954                                 else
2955                                         dflt=n
2956                                 fi
2957                                 rp="$what $value doesn't exist.  Use that name anyway?"
2958                                 . UU/myread
2959                                 dflt=''
2960                                 case "$ans" in
2961                                 y*) type='';;
2962                                 *) echo " ";;
2963                                 esac
2964                                 ;;
2965                         esac
2966                         ;;
2967                 esac
2968                 ;;
2969         esac
2970 done
2971 cd UU
2972 ans="$value"
2973 rp="$orig_rp"
2974 dflt="$orig_dflt"
2975 rm -f getfile.ok
2976 EOSC
2977
2978 : determine root of directory hierarchy where package will be installed.
2979 case "$prefix" in
2980 '')
2981         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2982         ;;
2983 *)
2984         dflt="$prefix"
2985         ;;
2986 esac
2987 $cat <<EOM
2988
2989 By default, $package will be installed in $dflt/bin, manual
2990 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2991 all installation directories. Typically set to /usr/local, but you
2992 may choose /usr if you wish to install $package among your system
2993 binaries. If you wish to have binaries under /bin but manual pages
2994 under /usr/local/man, that's ok: you will be prompted separately
2995 for each of the installation directories, the prefix being only used
2996 to set the defaults.
2997
2998 EOM
2999 fn=d~
3000 rp='Installation prefix to use?'
3001 . ./getfile
3002 oldprefix=''
3003 case "$prefix" in
3004 '') ;;
3005 *)
3006         case "$ans" in
3007         "$prefix") ;;
3008         *) oldprefix="$prefix";;
3009         esac
3010         ;;
3011 esac
3012 prefix="$ans"
3013 prefixexp="$ansexp"
3014
3015 : set the prefixit variable, to compute a suitable default value
3016 prefixit='case "$3" in
3017 ""|none)
3018         case "$oldprefix" in
3019         "") eval "$1=\"\$$2\"";;
3020         *)
3021                 case "$3" in
3022                 "") eval "$1=";;
3023                 none)
3024                         eval "tp=\"\$$2\"";
3025                         case "$tp" in
3026                         ""|" ") eval "$1=\"\$$2\"";;
3027                         *) eval "$1=";;
3028                         esac;;
3029                 esac;;
3030         esac;;
3031 *)
3032         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3033         case "$tp" in
3034         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3035         /*-$oldprefix/*|\~*-$oldprefix/*)
3036                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3037         *) eval "$1=\"\$$2\"";;
3038         esac;;
3039 esac'
3040
3041 : set the base revision
3042 baserev=5.0
3043
3044 : get the patchlevel
3045 echo " "
3046 echo "Getting the current patchlevel..." >&4
3047 if $test -r $rsrc/patchlevel.h;then
3048         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3049         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3050 else
3051         patchlevel=0
3052         subversion=0
3053 fi
3054 $echo $n "(You have $package" $c
3055 case "$package" in
3056 "*$baserev")    ;;
3057 *)              $echo $n " $baserev" $c ;;
3058 esac
3059 $echo $n " patchlevel $patchlevel" $c
3060 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3061 echo ".)"
3062
3063 if test 0 -eq "$subversion"; then
3064         version=`LC_ALL=C; export LC_ALL; \
3065                  echo $baserev $patchlevel | \
3066                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3067 else
3068         version=`LC_ALL=C; export LC_ALL; \
3069                  echo $baserev $patchlevel $subversion | \
3070                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3071 fi
3072 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3073 if test "$subversion" -lt 50; then
3074         apiversion=`LC_ALL=C; export LC_ALL; \
3075                  LANGUAGE=C; export LANGUAGE; \
3076                  echo $baserev $patchlevel | \
3077                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3078 else
3079         apiversion="$version"
3080 fi
3081
3082 : determine where private library files go
3083 : Usual default is /usr/local/lib/perl5/$version.
3084 : Also allow things like /opt/perl/lib/$version, since 
3085 : /opt/perl/lib/perl5... would be redundant.
3086 case "$prefix" in
3087 *perl*) set dflt privlib lib/$version ;;
3088 *)       set dflt privlib lib/$package/$version ;;
3089 esac
3090 eval $prefixit
3091 $cat <<EOM
3092
3093 There are some auxiliary files for $package that need to be put into a
3094 private library directory that is accessible by everyone.
3095
3096 EOM
3097 fn=d~+
3098 rp='Pathname where the private library files will reside?'
3099 . ./getfile
3100 if $test "X$privlibexp" != "X$ansexp"; then
3101         installprivlib=''
3102 fi
3103 privlib="$ans"
3104 privlibexp="$ansexp"
3105 if $afs; then
3106         $cat <<EOM
3107
3108 Since you are running AFS, I need to distinguish the directory in which
3109 private files reside from the directory in which they are installed (and from
3110 which they are presumably copied to the former directory by occult means).
3111
3112 EOM
3113         case "$installprivlib" in
3114         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3115         *) dflt="$installprivlib";;
3116         esac
3117         fn=de~
3118         rp='Where will private files be installed?'
3119         . ./getfile
3120         installprivlib="$ans"
3121 else
3122         installprivlib="$privlibexp"
3123 fi
3124
3125 : set the prefixup variable, to restore leading tilda escape
3126 prefixup='case "$prefixexp" in
3127 "$prefix") ;;
3128 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3129 esac'
3130
3131 : determine where public architecture dependent libraries go
3132 set archlib archlib
3133 eval $prefixit
3134 : privlib default is /usr/local/lib/$package/$version
3135 : archlib default is /usr/local/lib/$package/$version/$archname
3136 : privlib may have an optional trailing /share.
3137 tdflt=`echo $privlib | $sed 's,/share$,,'`
3138 tdflt=$tdflt/$archname
3139 case "$archlib" in
3140 '')     dflt=$tdflt
3141         ;;
3142 *)      dflt="$archlib"
3143     ;;
3144 esac
3145 cat <<EOM
3146
3147 $spackage contains architecture-dependent library files.  If you are
3148 sharing libraries in a heterogeneous environment, you might store
3149 these files in a separate location.  Otherwise, you can just include
3150 them with the rest of the public library files.
3151
3152 EOM
3153 fn=d+~
3154 rp='Where do you want to put the public architecture-dependent libraries?'
3155 . ./getfile
3156 archlib="$ans"
3157 archlibexp="$ansexp"
3158
3159 if $afs; then
3160         $cat <<EOM
3161
3162 Since you are running AFS, I need to distinguish the directory in
3163 which architecture-dependent library files reside from the directory
3164 in which they are installed (and from which they are presumably copied
3165 to the former directory by occult means).
3166
3167 EOM
3168         case "$installarchlib" in
3169         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3170         *) dflt="$installarchlib";;
3171         esac
3172         fn=de~
3173         rp='Where will architecture-dependent library files be installed?'
3174         . ./getfile
3175         installarchlib="$ans"
3176 else
3177         installarchlib="$archlibexp"
3178 fi
3179 if $test X"$archlib" = X"$privlib"; then
3180         d_archlib="$undef"
3181 else
3182         d_archlib="$define"
3183 fi
3184
3185 : make some quick guesses about what we are up against
3186 echo " "
3187 $echo $n "Hmm...  $c"
3188 echo exit 1 >bsd
3189 echo exit 1 >usg
3190 echo exit 1 >v7
3191 echo exit 1 >osf1
3192 echo exit 1 >eunice
3193 echo exit 1 >xenix
3194 echo exit 1 >venix
3195 echo exit 1 >os2
3196 d_bsd="$undef"
3197 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3198 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3199 then
3200         echo "Looks kind of like an OSF/1 system, but we'll see..."
3201         echo exit 0 >osf1
3202 elif test `echo abc | tr a-z A-Z` = Abc ; then
3203         xxx=`./loc addbib blurfl $pth`
3204         if $test -f $xxx; then
3205         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3206                 echo exit 0 >bsd
3207                 echo exit 0 >usg
3208         else
3209                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3210                         echo "Looks kind of like an extended USG system, but we'll see..."
3211                 else
3212                         echo "Looks kind of like a USG system, but we'll see..."
3213                 fi
3214                 echo exit 0 >usg
3215         fi
3216 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3217         echo "Looks kind of like a BSD system, but we'll see..."
3218         d_bsd="$define"
3219         echo exit 0 >bsd
3220 else
3221         echo "Looks kind of like a Version 7 system, but we'll see..."
3222         echo exit 0 >v7
3223 fi
3224 case "$eunicefix" in
3225 *unixtovms*)
3226         $cat <<'EOI'
3227 There is, however, a strange, musty smell in the air that reminds me of
3228 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3229 EOI
3230         echo exit 0 >eunice
3231         d_eunice="$define"
3232 : it so happens the Eunice I know will not run shell scripts in Unix format
3233         ;;
3234 *)
3235         echo " "
3236         echo "Congratulations.  You aren't running Eunice."
3237         d_eunice="$undef"
3238         ;;
3239 esac
3240 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3241 case "$p_" in
3242 :) ;;
3243 *)
3244         $cat <<'EOI'
3245 I have the feeling something is not exactly right, however...don't tell me...
3246 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3247 EOI
3248         echo exit 0 >os2
3249         ;;
3250 esac
3251 if test -f /xenix; then
3252         echo "Actually, this looks more like a XENIX system..."
3253         echo exit 0 >xenix
3254         d_xenix="$define"
3255 else
3256         echo " "
3257         echo "It's not Xenix..."
3258         d_xenix="$undef"
3259 fi
3260 chmod +x xenix
3261 $eunicefix xenix
3262 if test -f /venix; then
3263         echo "Actually, this looks more like a VENIX system..."
3264         echo exit 0 >venix
3265 else
3266         echo " "
3267         if ./xenix; then
3268                 : null
3269         else
3270                 echo "Nor is it Venix..."
3271         fi
3272 fi
3273 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3274 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3275 $rm -f foo
3276
3277 : see if setuid scripts can be secure
3278 $cat <<EOM
3279
3280 Some kernels have a bug that prevents setuid #! scripts from being
3281 secure.  Some sites have disabled setuid #! scripts because of this.
3282
3283 First let's decide if your kernel supports secure setuid #! scripts.
3284 (If setuid #! scripts would be secure but have been disabled anyway,
3285 don't say that they are secure if asked.)
3286
3287 EOM
3288
3289 val="$undef"
3290 if $test -d /dev/fd; then
3291         echo "#!$ls" >reflect
3292         chmod +x,u+s reflect
3293         ./reflect >flect 2>&1
3294         if $contains "/dev/fd" flect >/dev/null; then
3295                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3296                 val="$define"
3297         else
3298                 $cat <<EOM
3299 If you are not sure if they are secure, I can check but I'll need a
3300 username and password different from the one you are using right now.
3301 If you don't have such a username or don't want me to test, simply
3302 enter 'none'.
3303
3304 EOM
3305                 rp='Other username to test security of setuid scripts with?'
3306                 dflt='none'
3307                 . ./myread
3308                 case "$ans" in
3309                 n|none)
3310                         case "$d_suidsafe" in
3311                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3312                                 dflt=n;;
3313                         "$undef")
3314                                 echo "Well, the $hint value is *not* secure." >&4
3315                                 dflt=n;;
3316                         *)      echo "Well, the $hint value *is* secure." >&4
3317                                 dflt=y;;
3318                         esac
3319                         ;;
3320                 *)
3321                         $rm -f reflect flect
3322                         echo "#!$ls" >reflect
3323                         chmod +x,u+s reflect
3324                         echo >flect
3325                         chmod a+w flect
3326                         echo '"su" will (probably) prompt you for '"$ans's password."
3327                         su $ans -c './reflect >flect'
3328                         if $contains "/dev/fd" flect >/dev/null; then
3329                                 echo "Okay, it looks like setuid scripts are secure." >&4
3330                                 dflt=y
3331                         else
3332                                 echo "I don't think setuid scripts are secure." >&4
3333                                 dflt=n
3334                         fi
3335                         ;;
3336                 esac
3337                 rp='Does your kernel have *secure* setuid scripts?'
3338                 . ./myread
3339                 case "$ans" in
3340                 [yY]*)  val="$define";;
3341                 *)      val="$undef";;
3342                 esac
3343         fi
3344 else
3345         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3346         echo "(That's for file descriptors, not floppy disks.)"
3347         val="$undef"
3348 fi
3349 set d_suidsafe
3350 eval $setvar
3351
3352 $rm -f reflect flect
3353
3354 : now see if they want to do setuid emulation
3355 echo " "
3356 val="$undef"
3357 case "$d_suidsafe" in
3358 "$define")
3359         val="$undef"
3360         echo "No need to emulate SUID scripts since they are secure here." >& 4
3361         ;;
3362 *)
3363         $cat <<EOM
3364 Some systems have disabled setuid scripts, especially systems where
3365 setuid scripts cannot be secure.  On systems where setuid scripts have
3366 been disabled, the setuid/setgid bits on scripts are currently
3367 useless.  It is possible for $package to detect those bits and emulate
3368 setuid/setgid in a secure fashion.  This emulation will only work if
3369 setuid scripts have been disabled in your kernel.
3370
3371 EOM
3372         case "$d_dosuid" in
3373         "$define") dflt=y ;;
3374         *) dflt=n ;;
3375         esac
3376         rp="Do you want to do setuid/setgid emulation?"
3377         . ./myread
3378         case "$ans" in
3379         [yY]*)  val="$define";;
3380         *)      val="$undef";;
3381         esac
3382         ;;
3383 esac
3384 set d_dosuid
3385 eval $setvar
3386
3387 : determine where manual pages are on this system
3388 echo " "
3389 case "$sysman" in
3390 '') 
3391         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3392         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3393         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3394         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3395         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3396         sysman=`./loc . /usr/man/man1 $syspath`
3397         ;;
3398 esac
3399 if $test -d "$sysman"; then
3400         echo "System manual is in $sysman." >&4
3401 else
3402         echo "Could not find manual pages in source form." >&4
3403 fi
3404
3405 : see what memory models we can support
3406 case "$models" in
3407 '')
3408         $cat >pdp11.c <<'EOP'
3409 int main() {
3410 #ifdef pdp11
3411         exit(0);
3412 #else
3413         exit(1);
3414 #endif
3415 }
3416 EOP
3417         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3418         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3419                 dflt='unsplit split'
3420         else
3421                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3422                 case "$tans" in
3423                 X) dflt='none';;
3424                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3425                                 dflt='small'
3426                         else
3427                                 dflt=''
3428                         fi
3429                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3430                                 dflt="$dflt medium"
3431                         fi
3432                         if $test -d /lib/large || $test -d /usr/lib/large; then
3433                                 dflt="$dflt large"
3434                         fi
3435                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3436                                 dflt="$dflt huge"
3437                         fi
3438                 esac
3439         fi;;
3440 *) dflt="$models";;
3441 esac
3442 $cat <<EOM
3443  
3444 Some systems have different model sizes.  On most systems they are called
3445 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3446 split.  If your system doesn't support different memory models, say "none".
3447 If you wish to force everything to one memory model, say "none" here and
3448 put the appropriate flags later when it asks you for other cc and ld flags.
3449 Venix systems may wish to put "none" and let the compiler figure things out.
3450 (In the following question multiple model names should be space separated.)
3451
3452 The default for most systems is "none".
3453
3454 EOM
3455 rp="Which memory models are supported?"
3456 . ./myread
3457 models="$ans"
3458
3459 case "$models" in
3460 none)
3461         small=''
3462         medium=''
3463         large=''
3464         huge=''
3465         unsplit=''
3466         split=''
3467         ;;
3468 *split)
3469         case "$split" in
3470         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3471                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3472                         dflt='-i'
3473                 else
3474                         dflt='none'
3475                 fi;;
3476         *) dflt="$split";;
3477         esac
3478         rp="What flag indicates separate I and D space?"
3479         . ./myread
3480         tans="$ans"
3481         case "$tans" in
3482         none) tans='';;
3483         esac
3484         split="$tans"
3485         unsplit='';;
3486 *large*|*small*|*medium*|*huge*)
3487         case "$models" in
3488         *large*)
3489                 case "$large" in
3490                 '') dflt='-Ml';;
3491                 *) dflt="$large";;
3492                 esac
3493         rp="What flag indicates large model?"
3494         . ./myread
3495         tans="$ans"
3496         case "$tans" in
3497         none) tans='';
3498         esac
3499         large="$tans";;
3500         *) large='';;
3501         esac
3502         case "$models" in
3503         *huge*) case "$huge" in
3504                 '') dflt='-Mh';;
3505                 *) dflt="$huge";;
3506                 esac
3507                 rp="What flag indicates huge model?"
3508                 . ./myread
3509                 tans="$ans"
3510                 case "$tans" in
3511                 none) tans='';
3512                 esac
3513                 huge="$tans";;
3514         *) huge="$large";;
3515         esac
3516         case "$models" in
3517         *medium*) case "$medium" in
3518                 '') dflt='-Mm';;
3519                 *) dflt="$medium";;
3520                 esac
3521                 rp="What flag indicates medium model?"
3522                 . ./myread
3523                 tans="$ans"
3524                 case "$tans" in
3525                 none) tans='';
3526                 esac
3527                 medium="$tans";;
3528         *) medium="$large";;
3529         esac
3530         case "$models" in
3531         *small*) case "$small" in
3532                 '') dflt='none';;
3533                 *) dflt="$small";;
3534                 esac
3535                 rp="What flag indicates small model?"
3536                 . ./myread
3537                 tans="$ans"
3538                 case "$tans" in
3539                 none) tans='';
3540                 esac
3541                 small="$tans";;
3542         *) small='';;
3543         esac
3544         ;;
3545 *)
3546         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3547         ;;
3548 esac
3549 $rm -f pdp11.* pdp11
3550
3551 : see if we need a special compiler
3552 echo " "
3553 if ./usg; then
3554         case "$cc" in
3555         '') case "$Mcc" in
3556                 /*) dflt='Mcc';;
3557                 *) case "$large" in
3558                         -M*) dflt='cc';;
3559                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3560                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3561                                                 dflt='cc'
3562                                         else
3563                                                 dflt='cc -M'
3564                                         fi
3565                                 else
3566                                         dflt='cc'
3567                                 fi;;
3568                         esac;;
3569                 esac;;
3570         *)  dflt="$cc";;
3571         esac
3572         case "$dflt" in
3573         *M*)    $cat <<'EOM'
3574 On some older systems the default C compiler will not resolve multiple global
3575 references that happen to have the same name.  On some such systems the "Mcc"
3576 command may be used to force these to be resolved.  On other systems a "cc -M"
3577 command is required.  (Note that the -M flag on other systems indicates a
3578 memory model to use!) If you have the Gnu C compiler, you might wish to use
3579 that instead.
3580
3581 EOM
3582         ;;
3583         esac
3584         rp="Use which C compiler?"
3585         . ./myread
3586         cc="$ans"
3587 else
3588         case "$cc" in
3589         '') dflt=cc;;
3590         *) dflt="$cc";;
3591         esac
3592         rp="Use which C compiler?"
3593         . ./myread
3594         cc="$ans"
3595 fi
3596 : Look for a hint-file generated 'call-back-unit'.  Now that the
3597 : user has specified the compiler, we may need to set or change some
3598 : other defaults.
3599 if $test -f cc.cbu; then
3600     . ./cc.cbu
3601 fi
3602 echo " "
3603 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3604 $cat >gccvers.c <<EOM
3605 #include <stdio.h>
3606 int main() {
3607 #ifdef __GNUC__
3608 #ifdef __VERSION__
3609         printf("%s\n", __VERSION__);
3610 #else
3611         printf("%s\n", "1");
3612 #endif
3613 #endif
3614         exit(0);
3615 }
3616 EOM
3617 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3618         gccversion=`./gccvers`
3619         case "$gccversion" in
3620         '') echo "You are not using GNU cc." ;;
3621         *)  echo "You are using GNU cc $gccversion." ;;
3622         esac
3623 else
3624         echo " "
3625         echo "*** WHOA THERE!!! ***" >&4
3626         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3627         case "$knowitall" in
3628         '')
3629         echo "    You'd better start hunting for one and let me know about it." >&4
3630                 exit 1
3631                 ;;
3632         esac
3633 fi
3634 $rm -f gccvers*
3635 case "$gccversion" in
3636 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3637 esac
3638
3639 : What should the include directory be ?
3640 echo " "
3641 $echo $n "Hmm...  $c"
3642 dflt='/usr/include'
3643 incpath=''
3644 mips_type=''
3645 if $test -f /bin/mips && /bin/mips; then
3646         echo "Looks like a MIPS system..."
3647         $cat >usr.c <<'EOCP'
3648 #ifdef SYSTYPE_BSD43
3649 /bsd43
3650 #endif
3651 EOCP
3652         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3653                 dflt='/bsd43/usr/include'
3654                 incpath='/bsd43'
3655                 mips_type='BSD 4.3'
3656         else
3657                 mips_type='System V'
3658         fi
3659         $rm -f usr.c usr.out
3660         echo "and you're compiling with the $mips_type compiler and libraries."
3661         xxx_prompt=y
3662         echo "exit 0" >mips
3663 else
3664         echo "Doesn't look like a MIPS system."
3665         xxx_prompt=n
3666         echo "exit 1" >mips
3667 fi
3668 chmod +x mips
3669 $eunicefix mips
3670 case "$usrinc" in
3671 '') ;;
3672 *) dflt="$usrinc";;
3673 esac
3674 case "$xxx_prompt" in
3675 y)      fn=d/
3676         echo " "
3677         rp='Where are the include files you want to use?'
3678         . ./getfile
3679         usrinc="$ans"
3680         ;;
3681 *)      usrinc="$dflt"
3682         ;;
3683 esac
3684
3685 : see how we invoke the C preprocessor
3686 echo " "
3687 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3688 cat <<'EOT' >testcpp.c
3689 #define ABC abc
3690 #define XYZ xyz
3691 ABC.XYZ
3692 EOT
3693 cd ..
3694 if test ! -f cppstdin; then
3695         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3696 else
3697         echo "Keeping your $hint cppstdin wrapper."
3698 fi
3699 chmod 755 cppstdin
3700 wrapper=`pwd`/cppstdin
3701 ok='false'
3702 cd UU
3703
3704 if $test "X$cppstdin" != "X" && \
3705         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3706         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3707 then
3708         echo "You used to use $cppstdin $cppminus so we'll use that again."
3709         case "$cpprun" in
3710         '') echo "But let's see if we can live without a wrapper..." ;;
3711         *)
3712                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3713                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3714                 then
3715                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3716                         ok='true'
3717                 else
3718                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3719                 fi
3720                 ;;
3721         esac
3722 else
3723         case "$cppstdin" in
3724         '') ;;
3725         *)
3726                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3727                 ;;
3728         esac
3729 fi
3730
3731 if $ok; then
3732         : nothing
3733 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3734         $cc -E <testcpp.c >testcpp.out 2>&1; \
3735         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3736         echo "Yup, it does."
3737         x_cpp="$cc -E"
3738         x_minus='';
3739 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3740         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3741         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3742         echo "Yup, it does."
3743         x_cpp="$cc -E"
3744         x_minus='-';
3745 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3746         $cc -P <testcpp.c >testcpp.out 2>&1; \
3747         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3748         echo "Yipee, that works!"
3749         x_cpp="$cc -P"
3750         x_minus='';
3751 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3752         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3753         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3754         echo "At long last!"
3755         x_cpp="$cc -P"
3756         x_minus='-';
3757 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3758         $cpp <testcpp.c >testcpp.out 2>&1; \
3759         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3760         echo "It works!"
3761         x_cpp="$cpp"
3762         x_minus='';
3763 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3764         $cpp - <testcpp.c >testcpp.out 2>&1; \
3765         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3766         echo "Hooray, it works!  I was beginning to wonder."
3767         x_cpp="$cpp"
3768         x_minus='-';
3769 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3770         $wrapper <testcpp.c >testcpp.out 2>&1; \
3771         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3772         x_cpp="$wrapper"
3773         x_minus=''
3774         echo "Eureka!"
3775 else
3776         dflt=''
3777         rp="No dice.  I can't find a C preprocessor.  Name one:"
3778         . ./myread
3779         x_cpp="$ans"
3780         x_minus=''
3781         $x_cpp <testcpp.c >testcpp.out 2>&1
3782         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3783                 echo "OK, that will do." >&4
3784         else
3785 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3786                 exit 1
3787         fi
3788 fi
3789
3790 case "$ok" in
3791 false)
3792         cppstdin="$x_cpp"
3793         cppminus="$x_minus"
3794         cpprun="$x_cpp"
3795         cpplast="$x_minus"
3796         set X $x_cpp
3797         shift
3798         case "$1" in
3799         "$cpp")
3800                 echo "Perhaps can we force $cc -E using a wrapper..."
3801                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3802                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3803                 then
3804                         echo "Yup, we can."
3805                         cppstdin="$wrapper"
3806                         cppminus='';
3807                 else
3808                         echo "Nope, we'll have to live without it..."
3809                 fi
3810                 ;;
3811         esac
3812         case "$cpprun" in
3813         "$wrapper")
3814                 cpprun=''
3815                 cpplast=''
3816                 ;;
3817         esac
3818         ;;
3819 esac
3820
3821 case "$cppstdin" in
3822 "$wrapper"|'cppstdin') ;;
3823 *) $rm -f $wrapper;;
3824 esac
3825 $rm -f testcpp.c testcpp.out
3826
3827 : Set private lib path
3828 case "$plibpth" in
3829 '') if ./mips; then
3830                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3831         fi;;
3832 esac
3833 case "$libpth" in
3834 ' ') dlist='';;
3835 '') dlist="$loclibpth $plibpth $glibpth";;
3836 *) dlist="$libpth";;
3837 esac
3838
3839 : Now check and see which directories actually exist, avoiding duplicates
3840 libpth=''
3841 for xxx in $dlist
3842 do
3843     if $test -d $xxx; then
3844                 case " $libpth " in
3845                 *" $xxx "*) ;;
3846                 *) libpth="$libpth $xxx";;
3847                 esac
3848     fi
3849 done
3850 $cat <<'EOM'
3851
3852 Some systems have incompatible or broken versions of libraries.  Among
3853 the directories listed in the question below, please remove any you
3854 know not to be holding relevant libraries, and add any that are needed.
3855 Say "none" for none.
3856
3857 EOM
3858 case "$libpth" in
3859 '') dflt='none';;
3860 *)
3861         set X $libpth
3862         shift
3863         dflt=${1+"$@"}
3864         ;;
3865 esac
3866 rp="Directories to use for library searches?"
3867 . ./myread
3868 case "$ans" in
3869 none) libpth=' ';;
3870 *) libpth="$ans";;
3871 esac
3872
3873 : compute shared library extension
3874 case "$so" in
3875 '')
3876         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3877                 dflt='sl'
3878         else
3879                 dflt='so'
3880         fi
3881         ;;
3882 *) dflt="$so";;
3883 esac
3884 $cat <<EOM
3885
3886 On some systems, shared libraries may be available.  Answer 'none' if
3887 you want to suppress searching of shared libraries for the remaining
3888 of this configuration.
3889
3890 EOM
3891 rp='What is the file extension used for shared libraries?'
3892 . ./myread
3893 so="$ans"
3894
3895 : Define several unixisms.
3896 : Hints files or command line option can be used to override them.
3897 : The convoluted testing is in case hints files set either the old
3898 : or the new name.
3899 case "$_exe" in
3900 '')     case "$exe_ext" in
3901     '') ;;
3902         *)      _exe="$exe_ext" ;;
3903         esac
3904         ;;
3905 esac
3906 case "$_a" in
3907 '')     case "$lib_ext" in
3908     '') _a='.a';;
3909         *)      _a="$lib_ext" ;;
3910         esac
3911         ;;
3912 esac
3913 case "$_o" in
3914 '') case "$obj_ext" in
3915         '')     _o='.o';;
3916         *)      _o="$obj_ext";;
3917         esac
3918         ;;
3919 esac
3920 case "$p_" in
3921 '') case "$path_sep" in
3922         '')     p_=':';;
3923         *)      p_="$path_sep";;
3924         esac
3925         ;;
3926 esac
3927 exe_ext=$_exe
3928 lib_ext=$_a
3929 obj_ext=$_o
3930 path_sep=$p_
3931
3932 : Which makefile gets called first.  This is used by make depend.
3933 case "$firstmakefile" in
3934 '') firstmakefile='makefile';;
3935 esac
3936
3937 : Looking for optional libraries
3938 echo " "
3939 echo "Checking for optional libraries..." >&4
3940 case "$libs" in
3941 ' '|'') dflt='';;
3942 *) dflt="$libs";;
3943 esac
3944 case "$libswanted" in
3945 '') libswanted='c_s';;
3946 esac
3947 for thislib in $libswanted; do
3948         
3949         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3950                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3951                 echo "Found -l$thislib (shared)."
3952                 case " $dflt " in
3953                 *"-l$thislib "*);;
3954                 *) dflt="$dflt -l$thislib";;
3955                 esac
3956         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3957                 echo "Found -l$thislib (shared)."
3958                 case " $dflt " in
3959                 *"-l$thislib "*);;
3960                 *) dflt="$dflt -l$thislib";;
3961                 esac
3962         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3963                 echo "Found -l$thislib."
3964                 case " $dflt " in
3965                 *"-l$thislib "*);;
3966                 *) dflt="$dflt -l$thislib";;
3967                 esac
3968         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3969                 echo "Found -l$thislib."
3970                 case " $dflt " in
3971                 *"-l$thislib "*);;
3972                 *) dflt="$dflt -l$thislib";;
3973                 esac
3974         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3975                 echo "Found -l${thislib}_s."
3976                 case " $dflt " in
3977                 *"-l$thislib "*);;
3978                 *) dflt="$dflt -l${thislib}_s";;
3979                 esac
3980         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3981                 echo "Found -l$thislib."
3982                 case " $dflt " in
3983                 *"-l$thislib "*);;
3984                 *) dflt="$dflt -l$thislib";;
3985                 esac
3986         else
3987                 echo "No -l$thislib."
3988         fi
3989 done
3990 set X $dflt
3991 shift
3992 dflt="$*"
3993 case "$libs" in
3994 '') dflt="$dflt";;
3995 *) dflt="$libs";;
3996 esac
3997 case "$dflt" in
3998 ' '|'') dflt='none';;
3999 esac
4000
4001 $cat <<EOM
4002  
4003 Some versions of Unix support shared libraries, which make executables smaller
4004 but make load time slightly longer.
4005
4006 On some systems, mostly System V Release 3's, the shared library is included
4007 by putting the option "-lc_s" as the last thing on the cc command line when
4008 linking.  Other systems use shared libraries by default.  There may be other
4009 libraries needed to compile $package on your machine as well.  If your system
4010 needs the "-lc_s" option, include it here.  Include any other special libraries
4011 here as well.  Say "none" for none.
4012 EOM
4013
4014 echo " "
4015 rp="Any additional libraries?"
4016 . ./myread
4017 case "$ans" in
4018 none) libs=' ';;
4019 *) libs="$ans";;
4020 esac
4021
4022 : determine optimize, if desired, or use for debug flag also
4023 case "$optimize" in
4024 ' '|$undef) dflt='none';;
4025 '') dflt='-O';;
4026 *) dflt="$optimize";;
4027 esac
4028 $cat <<EOH
4029
4030 Some C compilers have problems with their optimizers.  By default, $package
4031 compiles with the -O flag to use the optimizer.  Alternately, you might want
4032 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4033 systems).  Either flag can be specified here.  To use neither flag, specify
4034 the word "none".
4035
4036 EOH
4037 rp="What optimizer/debugger flag should be used?"
4038 . ./myread
4039 optimize="$ans"
4040 case "$optimize" in
4041 'none') optimize=" ";;
4042 esac
4043
4044 dflt=''
4045 : We will not override a previous value, but we might want to
4046 : augment a hint file
4047 case "$hint" in
4048 none|recommended)
4049         case "$gccversion" in
4050         1*) dflt='-fpcc-struct-return' ;;
4051         esac
4052         case "$optimize" in
4053         *-g*) dflt="$dflt -DDEBUGGING";;
4054         esac
4055         case "$gccversion" in
4056         2*) if test -d /etc/conf/kconfig.d &&
4057                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4058                 then
4059                         dflt="$dflt -posix"
4060                 fi
4061                 ;;
4062         esac
4063         ;;
4064 esac
4065
4066 case "$mips_type" in
4067 *BSD*|'') inclwanted="$locincpth $usrinc";;
4068 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4069 esac
4070 for thisincl in $inclwanted; do
4071         if $test -d $thisincl; then
4072                 if $test x$thisincl != x$usrinc; then
4073                         case "$dflt" in
4074                         *$thisincl*);;
4075                         *) dflt="$dflt -I$thisincl";;
4076                         esac
4077                 fi
4078         fi
4079 done
4080
4081 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4082         xxx=true;
4083 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4084         xxx=true;
4085 else
4086         xxx=false;
4087 fi;
4088 if $xxx; then
4089         case "$dflt" in
4090         *$2*);;
4091         *) dflt="$dflt -D$2";;
4092         esac;
4093 fi'
4094
4095 set signal.h LANGUAGE_C; eval $inctest
4096
4097 case "$hint" in
4098 none|recommended) dflt="$ccflags $dflt" ;;
4099 *) dflt="$ccflags";;
4100 esac
4101
4102 case "$dflt" in
4103 ''|' ') dflt=none;;
4104 esac
4105 $cat <<EOH
4106
4107 Your C compiler may want other flags.  For this question you should include
4108 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4109 but you should NOT include libraries or ld flags like -lwhatever.  If you
4110 want $package to honor its debug switch, you should include -DDEBUGGING here.
4111 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4112
4113 To use no flags, specify the word "none".
4114
4115 EOH
4116 set X $dflt
4117 shift
4118 dflt=${1+"$@"}
4119 rp="Any additional cc flags?"
4120 . ./myread
4121 case "$ans" in
4122 none) ccflags='';;
4123 *) ccflags="$ans";;
4124 esac
4125
4126 : the following weeds options from ccflags that are of no interest to cpp
4127 cppflags="$ccflags"
4128 case "$gccversion" in
4129 1*) cppflags="$cppflags -D__GNUC__"
4130 esac
4131 case "$mips_type" in
4132 '');;
4133 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4134 esac
4135 case "$cppflags" in
4136 '');;
4137 *)
4138         echo " "
4139         echo "Let me guess what the preprocessor flags are..." >&4
4140         set X $cppflags
4141         shift
4142         cppflags=''
4143         $cat >cpp.c <<'EOM'
4144 #define BLURFL foo
4145
4146 BLURFL xx LFRULB
4147 EOM
4148         previous=''
4149         for flag in $*
4150         do
4151                 case "$flag" in
4152                 -*) ftry="$flag";;
4153                 *) ftry="$previous $flag";;
4154                 esac
4155                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4156                         >cpp1.out 2>/dev/null && \
4157                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4158                         >cpp2.out 2>/dev/null && \
4159                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4160                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4161                 then
4162                         cppflags="$cppflags $ftry"
4163                         previous=''
4164                 else
4165                         previous="$flag"
4166                 fi
4167         done
4168         set X $cppflags
4169         shift
4170         cppflags=${1+"$@"}
4171         case "$cppflags" in
4172         *-*)  echo "They appear to be: $cppflags";;
4173         esac
4174         $rm -f cpp.c cpp?.out
4175         ;;
4176 esac
4177
4178 : flags used in final linking phase
4179 case "$ldflags" in
4180 '') if ./venix; then
4181                 dflt='-i -z'
4182         else
4183                 dflt=''
4184         fi
4185         case "$ccflags" in
4186         *-posix*) dflt="$dflt -posix" ;;
4187         esac
4188         ;;
4189 *) dflt="$ldflags";;
4190 esac
4191
4192 : Try to guess additional flags to pick up local libraries.
4193 for thislibdir in $libpth; do
4194         case " $loclibpth " in
4195         *" $thislibdir "*)
4196                 case "$dflt " in 
4197                 *"-L$thislibdir "*) ;;
4198                 *)  dflt="$dflt -L$thislibdir" ;;
4199                 esac
4200                 ;;
4201         esac
4202 done
4203
4204 case "$dflt" in
4205 '') dflt='none' ;;
4206 esac
4207
4208 $cat <<EOH
4209
4210 Your C linker may need flags.  For this question you should
4211 include -L/whatever and any other flags used by the C linker, but you
4212 should NOT include libraries like -lwhatever.
4213
4214 Make sure you include the appropriate -L/path flags if your C linker
4215 does not normally search all of the directories you specified above,
4216 namely
4217         $libpth
4218 To use no flags, specify the word "none".
4219
4220 EOH
4221
4222 rp="Any additional ld flags (NOT including libraries)?"
4223 . ./myread
4224 case "$ans" in
4225 none) ldflags='';;
4226 *) ldflags="$ans";;
4227 esac
4228 rmlist="$rmlist pdp11"
4229
4230 : coherency check
4231 echo " "
4232 echo "Checking your choice of C compiler and flags for coherency..." >&4
4233 $cat > try.c <<'EOF'
4234 #include <stdio.h>
4235 int main() { printf("Ok\n"); exit(0); }
4236 EOF
4237 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4238 shift
4239 $cat >try.msg <<'EOM'
4240 I've tried to compile and run the following simple program:
4241
4242 EOM
4243 $cat try.c >> try.msg
4244
4245 $cat >> try.msg <<EOM
4246
4247 I used the command:
4248
4249         $*
4250         ./try
4251
4252 and I got the following output:
4253
4254 EOM
4255 dflt=y
4256 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4257         if sh -c './try' >>try.msg 2>&1; then
4258                 xxx=`./try`
4259                 case "$xxx" in
4260                 "Ok") dflt=n ;;
4261                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4262                         case " $libs " in
4263                         *" -lsfio "*)
4264                                 cat >> try.msg <<'EOQS'
4265 If $libs contains -lsfio, and sfio is mis-configured, then it
4266 sometimes (apparently) runs and exits with a 0 status, but with no
4267 output!  It may have to do with sfio's use of _exit vs. exit.
4268
4269 EOQS
4270                                 rp="You have a big problem.  Shall I abort Configure"
4271                                 dflt=y
4272                                 ;;
4273                         esac
4274                         ;;
4275                 esac
4276         else
4277                 echo "The program compiled OK, but exited with status $?." >>try.msg
4278                 rp="You have a problem.  Shall I abort Configure"
4279                 dflt=y
4280         fi
4281 else
4282         echo "I can't compile the test program." >>try.msg
4283         rp="You have a BIG problem.  Shall I abort Configure"
4284         dflt=y
4285 fi
4286 case "$dflt" in
4287 y)
4288         $cat try.msg >&4
4289         case "$knowitall" in
4290         '')
4291                 echo "(The supplied flags or libraries might be incorrect.)"
4292                 ;;
4293         *) dflt=n;;
4294         esac
4295         echo " "
4296         . ./myread
4297         case "$ans" in
4298         n*|N*) ;;
4299         *)      echo "Ok.  Stopping Configure." >&4
4300                 exit 1
4301                 ;;
4302         esac
4303         ;;
4304 n) echo "OK, that should do.";;
4305 esac
4306 $rm -f try try.* core
4307
4308 : determine filename position in cpp output
4309 echo " "
4310 echo "Computing filename position in cpp output for #include directives..." >&4
4311 echo '#include <stdio.h>' > foo.c
4312 $cat >fieldn <<EOF
4313 $startsh
4314 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4315 $grep '^[       ]*#.*stdio\.h' | \
4316 while read cline; do
4317         pos=1
4318         set \$cline
4319         while $test \$# -gt 0; do
4320                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4321                         echo "\$pos"
4322                         exit 0
4323                 fi
4324                 shift
4325                 pos=\`expr \$pos + 1\`
4326         done
4327 done
4328 EOF
4329 chmod +x fieldn
4330 fieldn=`./fieldn`
4331 $rm -f foo.c fieldn
4332 case $fieldn in
4333 '') pos='???';;
4334 1) pos=first;;
4335 2) pos=second;;
4336 3) pos=third;;
4337 *) pos="${fieldn}th";;
4338 esac
4339 echo "Your cpp writes the filename in the $pos field of the line."
4340
4341 : locate header file
4342 $cat >findhdr <<EOF
4343 $startsh
4344 wanted=\$1
4345 name=''
4346 if test -f $usrinc/\$wanted; then
4347         echo "$usrinc/\$wanted"
4348         exit 0
4349 fi
4350 awkprg='{ print \$$fieldn }'
4351 echo "#include <\$wanted>" > foo\$\$.c
4352 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4353 $grep "^[       ]*#.*\$wanted" | \
4354 while read cline; do
4355         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4356         case "\$name" in
4357         */\$wanted) echo "\$name"; exit 0;;
4358         *) name='';;
4359         esac;
4360 done;
4361 $rm -f foo\$\$.c;
4362 case "\$name" in
4363 '') exit 1;;
4364 esac
4365 EOF
4366 chmod +x findhdr
4367
4368 : define an alternate in-header-list? function
4369 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4370 cont=true; xxf="echo \"<\$1> found.\" >&4";
4371 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4372 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4373 esac;
4374 case $# in 4) instead=instead;; *) instead="at last";; esac;
4375 while $test "$cont"; do
4376         xxx=`./findhdr $1`
4377         var=$2; eval "was=\$$2";
4378         if $test "$xxx" && $test -r "$xxx";
4379         then eval $xxf;
4380         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4381                 cont="";
4382         else eval $xxnf;
4383         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4384         set $yyy; shift; shift; yyy=$@;
4385         case $# in 0) cont="";;
4386         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4387                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4388         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4389                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4390         esac;
4391 done;
4392 while $test "$yyy";
4393 do set $yyy; var=$2; eval "was=\$$2";
4394         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4395         set $yyy; shift; shift; yyy=$@;
4396 done'
4397
4398 : see if this is a malloc.h system
4399 set malloc.h i_malloc
4400 eval $inhdr
4401
4402 : see if stdlib is available
4403 set stdlib.h i_stdlib
4404 eval $inhdr
4405
4406 : determine which malloc to compile in
4407 echo " "
4408 case "$usemymalloc" in
4409 ''|[yY]*|true|$define)  dflt='y' ;;
4410 *)      dflt='n' ;;
4411 esac
4412 rp="Do you wish to attempt to use the malloc that comes with $package?"
4413 . ./myread
4414 usemymalloc="$ans"
4415 case "$ans" in
4416 y*|true)
4417         usemymalloc='y'
4418         mallocsrc='malloc.c'
4419         mallocobj="malloc$_o"
4420         d_mymalloc="$define"
4421         case "$libs" in
4422         *-lmalloc*)
4423                 : Remove malloc from list of libraries to use
4424                 echo "Removing unneeded -lmalloc from library list" >&4
4425                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4426                 shift
4427                 libs="$*"
4428                 echo "libs = $libs" >&4
4429                 ;;
4430         esac
4431         ;;
4432 *)
4433         usemymalloc='n'
4434         mallocsrc=''
4435         mallocobj=''
4436         d_mymalloc="$undef"
4437         ;;
4438 esac
4439
4440 : compute the return types of malloc and free
4441 echo " "
4442 $cat >malloc.c <<END
4443 #$i_malloc I_MALLOC
4444 #$i_stdlib I_STDLIB
4445 #include <stdio.h>
4446 #include <sys/types.h>
4447 #ifdef I_MALLOC
4448 #include <malloc.h>
4449 #endif
4450 #ifdef I_STDLIB
4451 #include <stdlib.h>
4452 #endif
4453 #ifdef TRY_MALLOC
4454 void *malloc();
4455 #endif
4456 #ifdef TRY_FREE
4457 void free();
4458 #endif
4459 END
4460 case "$malloctype" in
4461 '')
4462         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4463                 malloctype='void *'
4464         else
4465                 malloctype='char *'
4466         fi
4467         ;;
4468 esac
4469 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4470
4471 case "$freetype" in
4472 '')
4473         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4474                 freetype='void'
4475         else
4476                 freetype='int'
4477         fi
4478         ;;
4479 esac
4480 echo "Your system uses $freetype free(), it would seem." >&4
4481 $rm -f malloc.[co]
4482 : Cruising for prototypes
4483 echo " "
4484 echo "Checking out function prototypes..." >&4
4485 $cat >prototype.c <<'EOCP'
4486 int main(int argc, char *argv[]) {
4487         exit(0);}
4488 EOCP
4489 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4490         echo "Your C compiler appears to support function prototypes."
4491         val="$define"
4492 else
4493         echo "Your C compiler doesn't seem to understand function prototypes."
4494         val="$undef"
4495 fi
4496 set prototype
4497 eval $setvar
4498 $rm -f prototype*
4499
4500 case "$prototype" in
4501 "$define") ;;
4502 *)      ansi2knr='ansi2knr'
4503         echo " "
4504         cat <<EOM >&4
4505
4506 $me:  FATAL ERROR:
4507 This version of $package can only be compiled by a compiler that 
4508 understands function prototypes.  Unfortunately, your C compiler 
4509         $cc $ccflags
4510 doesn't seem to understand them.  Sorry about that.
4511
4512 If GNU cc is available for your system, perhaps you could try that instead.  
4513
4514 Eventually, we hope to support building Perl with pre-ANSI compilers.
4515 If you would like to help in that effort, please contact <perlbug@perl.org>.
4516
4517 Aborting Configure now.
4518 EOM
4519         exit 2
4520         ;;
4521 esac
4522
4523 : determine where public executables go
4524 echo " "
4525 set dflt bin bin
4526 eval $prefixit
4527 fn=d~
4528 rp='Pathname where the public executables will reside?'
4529 . ./getfile
4530 if $test "X$ansexp" != "X$binexp"; then
4531         installbin=''
4532 fi
4533 bin="$ans"
4534 binexp="$ansexp"
4535 if $afs; then
4536         $cat <<EOM
4537
4538 Since you are running AFS, I need to distinguish the directory in which
4539 executables reside from the directory in which they are installed (and from
4540 which they are presumably copied to the former directory by occult means).
4541
4542 EOM
4543         case "$installbin" in
4544         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4545         *) dflt="$installbin";;
4546         esac
4547         fn=de~
4548         rp='Where will public executables be installed?'
4549         . ./getfile
4550         installbin="$ans"
4551 else
4552         installbin="$binexp"
4553 fi
4554
4555 : determine whether to install perl also as /usr/bin/perl
4556
4557 echo " "
4558 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4559         $cat <<EOM
4560 Many scripts expect to perl to be installed as /usr/bin/perl.
4561 I can install the perl you are about to compile also as /usr/bin/perl
4562 (in addition to $installbin/perl).
4563 EOM
4564         case "$installusrbinperl" in
4565         "$undef"|[nN]*) dflt='n';;
4566         *)              dflt='y';;
4567         esac
4568         rp="Do you want to install perl as /usr/bin/perl?"
4569         . ./myread
4570         case "$ans" in
4571         [yY]*)  val="$define";;
4572         *)      val="$undef" ;;
4573         esac
4574 else
4575         val="$undef"
4576 fi
4577 set installusrbinperl
4578 eval $setvar
4579
4580 : define a shorthand compile call
4581 compile='
4582 mc_file=$1;
4583 shift;
4584 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4585 : define a shorthand compile call for compilations that should be ok.
4586 compile_ok='
4587 mc_file=$1;
4588 shift;
4589 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4590
4591 echo " "
4592 echo "Checking for GNU C Library..." >&4
4593 cat >gnulibc.c <<EOM
4594 #include <stdio.h>
4595 int main()
4596 {
4597 #ifdef __GLIBC__
4598     exit(0);
4599 #else
4600     exit(1);
4601 #endif
4602 }
4603 EOM
4604 set gnulibc
4605 if eval $compile_ok && ./gnulibc; then
4606         val="$define"
4607         echo "You are using the GNU C Library"
4608 else
4609         val="$undef"
4610         echo "You are not using the GNU C Library"
4611 fi
4612 $rm -f gnulibc*
4613 set d_gnulibc
4614 eval $setvar
4615
4616 : see if nm is to be used to determine whether a symbol is defined or not
4617 case "$usenm" in
4618 '')
4619         dflt=''
4620         case "$d_gnulibc" in
4621         "$define")
4622                 echo " "
4623                 echo "nm probably won't work on the GNU C Library." >&4
4624                 dflt=n
4625                 ;;
4626         esac
4627         case "$dflt" in
4628         '') 
4629                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4630                         echo " "
4631                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4632                         echo "'nm' won't be sufficient on this sytem." >&4
4633                         dflt=n
4634                 fi
4635                 ;;
4636         esac
4637         case "$dflt" in
4638         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4639                 if $test $dflt -gt 20; then
4640                         dflt=y
4641                 else
4642                         dflt=n
4643                 fi
4644                 ;;
4645         esac
4646         ;;
4647 *)
4648         case "$usenm" in
4649         true|$define) dflt=y;;
4650         *) dflt=n;;
4651         esac
4652         ;;
4653 esac
4654 $cat <<EOM
4655
4656 I can use $nm to extract the symbols from your C libraries. This
4657 is a time consuming task which may generate huge output on the disk (up
4658 to 3 megabytes) but that should make the symbols extraction faster. The
4659 alternative is to skip the 'nm' extraction part and to compile a small
4660 test program instead to determine whether each symbol is present. If
4661 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4662 this may be the best solution.
4663
4664 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4665
4666 EOM
4667 rp="Shall I use $nm to extract C symbols from the libraries?"
4668 . ./myread
4669 case "$ans" in
4670 [Nn]*) usenm=false;;
4671 *) usenm=true;;
4672 esac
4673
4674 runnm=$usenm
4675 case "$reuseval" in
4676 true) runnm=false;;
4677 esac
4678
4679 : nm options which may be necessary
4680 case "$nm_opt" in
4681 '') if $test -f /mach_boot; then
4682                 nm_opt=''       # Mach
4683         elif $test -d /usr/ccs/lib; then
4684                 nm_opt='-p'     # Solaris (and SunOS?)
4685         elif $test -f /dgux; then
4686                 nm_opt='-p'     # DG-UX
4687         elif $test -f /lib64/rld; then
4688                 nm_opt='-p'     # 64-bit Irix
4689         else
4690                 nm_opt=''
4691         fi;;
4692 esac
4693
4694 : nm options which may be necessary for shared libraries but illegal
4695 : for archive libraries.  Thank you, Linux.
4696 case "$nm_so_opt" in
4697 '')     case "$myuname" in
4698         *linux*)
4699                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4700                         nm_so_opt='--dynamic'
4701                 fi
4702                 ;;
4703         esac
4704         ;;
4705 esac
4706
4707 case "$runnm" in
4708 true)
4709 : get list of predefined functions in a handy place
4710 echo " "
4711 case "$libc" in
4712 '') libc=unknown
4713         case "$libs" in
4714         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4715         esac
4716         ;;
4717 esac
4718 libnames='';
4719 case "$libs" in
4720 '') ;;
4721 *)  for thislib in $libs; do
4722         case "$thislib" in
4723         -lc|-lc_s)
4724                 : Handle C library specially below.
4725                 ;;
4726         -l*)
4727                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4728                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4729                         :
4730                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4731                         :
4732                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4733                         :
4734                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4735                         :
4736                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4737                         :
4738                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4739                         :
4740                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4741                         :
4742                 else
4743                         try=''
4744                 fi
4745                 libnames="$libnames $try"
4746                 ;;
4747         *) libnames="$libnames $thislib" ;;
4748         esac
4749         done
4750         ;;
4751 esac
4752 xxx=normal
4753 case "$libc" in
4754 unknown)
4755         set /lib/libc.$so
4756         for xxx in $libpth; do
4757                 $test -r $1 || set $xxx/libc.$so
4758                 : The messy sed command sorts on library version numbers.
4759                 $test -r $1 || \
4760                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4761                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4762                                 h
4763                                 s/[0-9][0-9]*/0000&/g
4764                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4765                                 G
4766                                 s/\n/ /' | \
4767                          sort | $sed -e 's/^.* //'`
4768                 eval set \$$#
4769         done
4770         $test -r $1 || set /usr/ccs/lib/libc.$so
4771         $test -r $1 || set /lib/libsys_s$_a
4772         ;;
4773 *)
4774         set blurfl
4775         ;;
4776 esac
4777 if $test -r "$1"; then
4778         echo "Your (shared) C library seems to be in $1."
4779         libc="$1"
4780 elif $test -r /lib/libc && $test -r /lib/clib; then
4781         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4782         xxx=apollo
4783         libc='/lib/clib /lib/libc'
4784         if $test -r /lib/syslib; then
4785                 echo "(Your math library is in /lib/syslib.)"
4786                 libc="$libc /lib/syslib"
4787         fi
4788 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4789         echo "Your C library seems to be in $libc, as you said before."
4790 elif $test -r $incpath/usr/lib/libc$_a; then
4791         libc=$incpath/usr/lib/libc$_a;
4792         echo "Your C library seems to be in $libc.  That's fine."
4793 elif $test -r /lib/libc$_a; then
4794         libc=/lib/libc$_a;
4795         echo "Your C library seems to be in $libc.  You're normal."
4796 else
4797         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4798                 :
4799         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4800                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4801         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4802                 :
4803         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4804                 :
4805         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4806                 :
4807         else
4808                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4809         fi
4810         if $test -r "$tans"; then
4811                 echo "Your C library seems to be in $tans, of all places."
4812                 libc=$tans
4813         else
4814                 libc='blurfl'
4815         fi
4816 fi
4817 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4818         dflt="$libc"
4819         cat <<EOM
4820
4821 If the guess above is wrong (which it might be if you're using a strange
4822 compiler, or your machine supports multiple models), you can override it here.
4823
4824 EOM
4825 else
4826         dflt=''
4827         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4828         cat >&4 <<EOM
4829 I can't seem to find your C library.  I've looked in the following places:
4830
4831 EOM
4832         $sed 's/^/      /' libpath
4833         cat <<EOM
4834
4835 None of these seems to contain your C library. I need to get its name...
4836
4837 EOM
4838 fi
4839 fn=f
4840 rp='Where is your C library?'
4841 . ./getfile
4842 libc="$ans"
4843
4844 echo " "
4845 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4846 set X `cat libnames`
4847 shift
4848 xxx=files
4849 case $# in 1) xxx=file; esac
4850 echo "Extracting names from the following $xxx for later perusal:" >&4
4851 echo " "
4852 $sed 's/^/      /' libnames >&4
4853 echo " "
4854 $echo $n "This may take a while...$c" >&4
4855
4856 for file in $*; do
4857         case $file in
4858         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4859         *) $nm $nm_opt $file 2>/dev/null;;
4860         esac
4861 done >libc.tmp
4862
4863 $echo $n ".$c"
4864 $grep fprintf libc.tmp > libc.ptf
4865 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4866 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4867 xxx='[ADTSIW]'
4868 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4869         eval $xscan;\
4870         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4871                 eval $xrun
4872 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4873         eval $xscan;\
4874         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4875                 eval $xrun
4876 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4877         eval $xscan;\
4878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4879                 eval $xrun
4880 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4881         eval $xscan;\
4882         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4883                 eval $xrun
4884 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4889         eval $xscan;\
4890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4891                 eval $xrun
4892 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4893                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4894         eval $xscan;\
4895         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4896                 eval $xrun
4897 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4898         eval $xscan;\
4899         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4900                 eval $xrun
4901 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4902         eval $xscan;\
4903         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4904                 eval $xrun
4905 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4906         eval $xscan;\
4907         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4908                 eval $xrun
4909 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4910         eval $xscan;\
4911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4912                 eval $xrun
4913 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4914         eval $xscan;\
4915         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4916                 eval $xrun
4917 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4918         eval $xscan;\
4919         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4920                 eval $xrun
4921 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4922         eval $xscan;\
4923         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4924                 eval $xrun
4925 else
4926         $nm -p $* 2>/dev/null >libc.tmp
4927         $grep fprintf libc.tmp > libc.ptf
4928         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4929                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4930         then
4931                 nm_opt='-p'
4932                 eval $xrun
4933         else
4934                 echo " "
4935                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4936                 com=''
4937                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4938                         for thisname in $libnames $libc; do
4939                                 $ar t $thisname >>libc.tmp
4940                         done
4941                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4942                         echo "Ok." >&4
4943                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4944                         # Repeat libc to extract forwarders to DLL entries too
4945                         for thisname in $libnames $libc; do
4946                                 $ar tv $thisname >>libc.tmp
4947                                 # Revision 50 of EMX has bug in $ar.
4948                                 # it will not extract forwarders to DLL entries
4949                                 # Use emximp which will extract exactly them.
4950                                 emximp -o tmp.imp $thisname \
4951                                     2>/dev/null && \
4952                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4953                                     < tmp.imp >>libc.tmp
4954                                 $rm tmp.imp
4955                         done
4956                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4957                         echo "Ok." >&4
4958                 else
4959                         echo "$ar didn't seem to work right." >&4
4960                         echo "Maybe this is a Cray...trying bld instead..." >&4
4961                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4962                         then
4963                                 for thisname in $libnames; do
4964                                         bld t $libnames | \
4965                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4966                                         $ar t $thisname >>libc.tmp
4967                                 done
4968                                 echo "Ok." >&4
4969                         else
4970                                 echo "That didn't work either.  Giving up." >&4
4971                                 exit 1
4972                         fi
4973                 fi
4974         fi
4975 fi
4976 nm_extract="$com"
4977 if $test -f /lib/syscalls.exp; then
4978         echo " "
4979         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4980         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4981 fi
4982 ;;
4983 esac
4984 $rm -f libnames libpath
4985
4986 : see if dld is available
4987 set dld.h i_dld
4988 eval $inhdr
4989
4990 : is a C symbol defined?
4991 csym='tlook=$1;
4992 case "$3" in
4993 -v) tf=libc.tmp; tc=""; tdc="";;
4994 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4995 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4996 esac;
4997 tx=yes;
4998 case "$reuseval-$4" in
4999 true-) ;;
5000 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5001 esac;
5002 case "$tx" in
5003 yes)
5004         case "$runnm" in
5005         true)
5006                 if $contains $tlook $tf >/dev/null 2>&1;
5007                 then tval=true;
5008                 else tval=false;
5009                 fi;;
5010         *)
5011                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5012                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5013                 then tval=true;
5014                 else tval=false;
5015                 fi;
5016                 $rm -f t t.c;;
5017         esac;;
5018 *)
5019         case "$tval" in
5020         $define) tval=true;;
5021         *) tval=false;;
5022         esac;;
5023 esac;
5024 eval "$2=$tval"'
5025
5026 : define an is-in-libc? function
5027 inlibc='echo " "; td=$define; tu=$undef;
5028 sym=$1; var=$2; eval "was=\$$2";
5029 tx=yes;
5030 case "$reuseval$was" in
5031 true) ;;
5032 true*) tx=no;;
5033 esac;
5034 case "$tx" in
5035 yes)
5036         set $sym tres -f;
5037         eval $csym;
5038         case "$tres" in
5039         true)
5040                 echo "$sym() found." >&4;
5041                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5042         *)
5043                 echo "$sym() NOT found." >&4;
5044                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5045         esac;;
5046 *)
5047         case "$was" in
5048         $define) echo "$sym() found." >&4;;
5049         *) echo "$sym() NOT found." >&4;;
5050         esac;;
5051 esac'
5052
5053 : see if dlopen exists
5054 xxx_runnm="$runnm"
5055 runnm=false
5056 set dlopen d_dlopen
5057 eval $inlibc
5058 runnm="$xxx_runnm"
5059
5060 : determine which dynamic loading, if any, to compile in
5061 echo " "
5062 dldir="ext/DynaLoader"
5063 case "$usedl" in
5064 $define|y|true)
5065         dflt='y'
5066         usedl="$define"
5067         ;;
5068 $undef|n|false)
5069         dflt='n'
5070         usedl="$undef"
5071         ;;
5072 *) 
5073         dflt='n'
5074         case "$d_dlopen" in
5075             $define) dflt='y' ;;
5076         esac
5077         case "$i_dld" in
5078             $define) dflt='y' ;;
5079         esac
5080         : Does a dl_xxx.xs file exist for this operating system
5081         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5082         ;;
5083 esac
5084 rp="Do you wish to use dynamic loading?"
5085 . ./myread
5086 usedl="$ans"
5087 case "$ans" in
5088 y*) usedl="$define"
5089         case "$dlsrc" in
5090         '')
5091                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5092                         dflt="$dldir/dl_${osname}.xs"
5093                 elif $test "$d_dlopen" = "$define" ; then
5094                         dflt="$dldir/dl_dlopen.xs"
5095                 elif $test "$i_dld" = "$define" ; then
5096                         dflt="$dldir/dl_dld.xs"
5097                 else
5098                         dflt=''
5099                 fi
5100                 ;;
5101         *)      dflt="$dldir/$dlsrc"
5102                 ;;
5103         esac
5104     echo "The following dynamic loading files are available:"
5105         : Can not go over to $dldir because getfile has path hard-coded in.
5106         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5107         rp="Source file to use for dynamic loading"
5108         fn="fne"
5109         # XXX This getfile call will fail the existence check if you try 
5110         # building away from $src (this is not supported yet).
5111         . ./getfile
5112         usedl="$define"
5113         : emulate basename
5114         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5115
5116         $cat << EOM
5117
5118 Some systems may require passing special flags to $cc -c to
5119 compile modules that will be used to create a shared library.
5120 To use no flags, say "none".
5121
5122 EOM
5123     case "$cccdlflags" in
5124     '') case "$gccversion" in
5125                 '') case "$osname" in
5126                         hpux)   dflt='+z' ;;
5127                         next)   dflt='none' ;;
5128                         irix*)  dflt='-KPIC' ;;
5129                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5130                         sunos)  dflt='-pic' ;;
5131                         *)      dflt='none' ;;
5132                     esac
5133                         ;;
5134                 *)  case "$osname" in
5135                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5136                         *)      dflt='-fpic' ;;
5137                     esac ;;
5138             esac ;;
5139         ' ') dflt='none' ;;
5140     *)  dflt="$cccdlflags" ;;
5141     esac
5142     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5143     . ./myread
5144     case "$ans" in
5145     none) cccdlflags=' ' ;;
5146     *) cccdlflags="$ans" ;;
5147     esac
5148
5149     cat << EOM
5150
5151 Some systems use ld to create libraries that can be dynamically loaded,
5152 while other systems (such as those using ELF) use $cc.
5153
5154 EOM
5155         case "$ld" in
5156         '')     $cat >try.c <<'EOM'
5157 /* Test for whether ELF binaries are produced */
5158 #include <fcntl.h>
5159 #include <stdlib.h>
5160 int main() {
5161         char b[4];
5162         int i = open("a.out",O_RDONLY);
5163         if(i == -1) 
5164                 exit(1); /* fail */
5165         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5166                 exit(0); /* succeed (yes, it's ELF) */
5167         else
5168                 exit(1); /* fail */
5169 }
5170 EOM
5171                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5172                         cat <<EOM
5173 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5174 EOM
5175                         dflt="$cc"
5176                 else
5177                         echo "I'll use ld to build dynamic libraries."
5178                         dflt='ld'
5179                 fi
5180                 rm -f try.c a.out
5181                 ;;
5182         *)      dflt="$ld"
5183                 ;;
5184         esac
5185
5186     rp="What command should be used to create dynamic libraries?"
5187     . ./myread
5188         ld="$ans"
5189
5190     cat << EOM
5191
5192 Some systems may require passing special flags to $ld to create a
5193 library that can be dynamically loaded.  If your ld flags include
5194 -L/other/path options to locate libraries outside your loader's normal
5195 search path, you may need to specify those -L options here as well.  To
5196 use no flags, say "none".
5197
5198 EOM
5199     case "$lddlflags" in
5200     '') case "$osname" in
5201                         beos) dflt='-nostart' ;;
5202                         hpux)  dflt='-b' ;;
5203                         linux|irix*)    dflt='-shared' ;;
5204                         next)  dflt='none' ;;
5205                         solaris) dflt='-G' ;;
5206                         sunos) dflt='-assert nodefinitions' ;;
5207                         svr4*|esix*) dflt="-G $ldflags" ;;
5208                 *)     dflt='none' ;;
5209                         esac
5210                         ;;
5211     *) dflt="$lddlflags" ;;
5212     esac
5213
5214         : Try to guess additional flags to pick up local libraries.
5215         : Be careful not to append to a plain 'none'
5216         case "$dflt" in
5217         none) dflt='' ;;
5218         esac
5219         for thisflag in $ldflags; do
5220                 case "$thisflag" in
5221                 -L*)
5222                         case " $dflt " in
5223                         *" $thisflag "*) ;;
5224                         *) dflt="$dflt $thisflag" ;;
5225                         esac
5226                         ;;
5227                 esac
5228         done
5229
5230         case "$dflt" in
5231         ''|' ') dflt='none' ;;
5232         esac
5233
5234     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5235     . ./myread
5236     case "$ans" in
5237     none) lddlflags=' ' ;;
5238     *) lddlflags="$ans" ;;
5239     esac
5240
5241         cat <<EOM
5242
5243 Some systems may require passing special flags to $cc to indicate that
5244 the resulting executable will use dynamic linking.  To use no flags,
5245 say "none".
5246
5247 EOM
5248     case "$ccdlflags" in
5249     '') case "$osname" in
5250                 hpux)   dflt='-Wl,-E' ;;
5251                 linux)  dflt='-rdynamic' ;;
5252                 next)   dflt='none' ;;
5253                 sunos)  dflt='none' ;;
5254                 *)      dflt='none' ;;
5255             esac ;;
5256     ' ')  dflt='none' ;;
5257     *)  dflt="$ccdlflags" ;;
5258     esac
5259     rp="Any special flags to pass to $cc to use dynamic loading?"
5260     . ./myread
5261     case "$ans" in
5262     none) ccdlflags=' ' ;;
5263     *) ccdlflags="$ans" ;;
5264     esac
5265     ;;
5266 *)  usedl="$undef"
5267         ld='ld'
5268     dlsrc='dl_none.xs'
5269     lddlflags=''
5270     ccdlflags=''
5271     ;;
5272 esac
5273
5274 also=''
5275 case "$usedl" in
5276 $undef)
5277         # No dynamic loading being used, so don't bother even to prompt.
5278         useshrplib='false'
5279         ;;
5280 *)      case "$useshrplib" in
5281         '')     case "$osname" in
5282                 svr4*|dgux|dynixptx|esix|powerux|beos)
5283                         dflt=y
5284                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5285                         ;;
5286                 next*)
5287                         case "$osvers" in
5288                         4*)     dflt=y
5289                                 also='Building a shared libperl is needed for MAB support.'
5290                                 ;;
5291                         *)      dflt=n
5292                                 ;;
5293                         esac
5294                         ;;
5295                 *)      dflt=n
5296                         ;;
5297                 esac
5298                 ;;
5299         $define|true|[Yy]*)
5300                 dflt=y
5301                 ;;
5302         *)      dflt=n
5303                 ;;
5304         esac
5305         $cat << EOM
5306
5307 The perl executable is normally obtained by linking perlmain.c with
5308 libperl${_a}, any static extensions (usually just DynaLoader), and
5309 any other libraries needed on this system (such as -lm, etc.).  Since
5310 your system supports dynamic loading, it is probably possible to build
5311 a shared libperl.$so.  If you will have more than one executable linked
5312 to libperl.$so, this will significantly reduce the size of each
5313 executable, but it may have a noticeable affect on performance.  The
5314 default is probably sensible for your system.
5315 $also
5316
5317 EOM
5318         rp="Build a shared libperl.$so (y/n)"
5319         . ./myread
5320         case "$ans" in
5321         true|$define|[Yy]*)
5322                 useshrplib='true'
5323                 # Why does next4 have to be so different?
5324                 case "${osname}${osvers}" in
5325                 next4*|rhapsody*)
5326                         xxx='DYLD_LIBRARY_PATH' ;;
5327                 os2*)   xxx='' ;; # Nothing special needed.
5328                 beos*)  xxx='' ;;
5329                 *)              xxx='LD_LIBRARY_PATH' ;;
5330                 esac
5331                 ;;
5332         *)      useshrplib='false' ;;
5333         esac
5334         ;;
5335 esac
5336
5337 case "$useshrplib" in
5338 true)
5339         case "$libperl" in
5340         '')
5341                 # Figure out a good name for libperl.so.  Since it gets stored in
5342                 # a version-specific architecture-dependent library, the version
5343                 # number isn't really that important, except for making cc/ld happy.
5344                 #
5345                 # A name such as libperl.so.3.1
5346                 majmin="libperl.$so.$patchlevel.$subversion"
5347                 # A name such as libperl.so.301
5348                 majonly=`echo $patchlevel $subversion |
5349                         $awk '{printf "%d%02d", $1, $2}'`
5350                 majonly=libperl.$so.$majonly
5351                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5352                 # rely on figuring it out from the naming of libc.
5353                 case "${osname}${osvers}" in
5354                 next4*)
5355                         dflt=libperl.5.$so
5356                         # XXX How handle the --version stuff for MAB?
5357                         ;;
5358                 linux*)  # ld won't link with a bare -lperl otherwise.
5359                         dflt=libperl.$so
5360                         ;;
5361                 *)      # Try to guess based on whether libc has major.minor.
5362                         case "$libc" in
5363                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5364                         *libc.$so.[0-9]*) dflt=$majonly ;;
5365                         *)      dflt=libperl.$so ;;
5366                         esac
5367                         ;;
5368                 esac
5369                 ;;
5370         *)      dflt=$libperl
5371                 ;;
5372         esac
5373         cat << EOM
5374
5375 I need to select a good name for the shared libperl.  If your system uses
5376 library names with major and minor numbers, then you might want something
5377 like $majmin.  Alternatively, if your system uses a single version
5378 number for shared libraries, then you might want to use $majonly.
5379 Or, your system might be quite happy with a simple libperl.$so.
5380
5381 Since the shared libperl will get installed into a version-specific
5382 architecture-dependent directory, the version number of the shared perl
5383 library probably isn't important, so the default should be o.k.
5384
5385 EOM
5386         rp='What name do you want to give to the shared libperl?'
5387         . ./myread
5388         libperl=$ans
5389         echo "Ok, I'll use $libperl"
5390         ;;
5391 *)
5392         libperl="libperl${_a}"
5393         ;;
5394 esac
5395
5396 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5397 case "$shrpdir" in
5398 '') ;;
5399 *)      $cat >&4 <<EOM
5400 WARNING:  Use of the shrpdir variable for the installation location of
5401 the shared $libperl is not supported.  It was never documented and
5402 will not work in this version.  Let me (perlbug@perl.com)
5403 know of any problems this may cause.
5404
5405 EOM
5406         case "$shrpdir" in
5407         "$archlibexp/CORE")
5408                 $cat >&4 <<EOM
5409 But your current setting of $shrpdir is
5410 the default anyway, so it's harmless.
5411 EOM
5412                 ;;
5413         *)
5414                 $cat >&4 <<EOM
5415 Further, your current attempted setting of $shrpdir
5416 conflicts with the value of $archlibexp/CORE
5417 that installperl will use.
5418 EOM
5419                 ;;
5420         esac
5421         ;;
5422 esac
5423
5424 # How will the perl executable find the installed shared $libperl?
5425 # Add $xxx to ccdlflags.
5426 # If we can't figure out a command-line option, use $shrpenv to
5427 # set env LD_RUN_PATH.  The main perl makefile uses this.
5428 shrpdir=$archlibexp/CORE
5429 xxx=''
5430 tmp_shrpenv=''
5431 if "$useshrplib"; then
5432     case "$osname" in 
5433         aix)
5434                 # We'll set it in Makefile.SH...
5435                 ;;
5436         solaris|netbsd)
5437                 xxx="-R $shrpdir"
5438                 ;;
5439         freebsd)
5440                 xxx="-Wl,-R$shrpdir"
5441                 ;;
5442         linux|irix*|dec_osf)
5443                 xxx="-Wl,-rpath,$shrpdir"
5444                 ;;
5445         next)
5446                 # next doesn't like the default...
5447                 ;;
5448         beos)
5449                 # beos doesn't like the default, either.
5450                 ;;
5451         hpux*)
5452                 # hpux doesn't like the default, either.
5453                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5454                 ;;
5455         *)
5456                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5457                 ;;
5458         esac
5459         case "$xxx" in
5460         '') ;;
5461         *)      
5462                 # Only add $xxx if it isn't already in ccdlflags.
5463                 case " $ccdlflags " in
5464                 *" $xxx "*)     ;;
5465                 *)      ccdlflags="$ccdlflags $xxx"
5466                         cat <<EOM >&4
5467
5468 Adding $xxx to the flags
5469 passed to $ld so that the perl executable will find the 
5470 installed shared $libperl.
5471
5472 EOM
5473                         ;;
5474                 esac
5475                 ;;
5476         esac
5477 fi
5478 # Respect a hint or command-line value.
5479 case "$shrpenv" in
5480 '') shrpenv="$tmp_shrpenv" ;;
5481 esac
5482
5483 : determine where manual pages go
5484 set man1dir man1dir none
5485 eval $prefixit
5486 $cat <<EOM
5487
5488 $spackage has manual pages available in source form.
5489 EOM
5490 case "$nroff" in
5491 nroff)
5492         echo "However, you don't have nroff, so they're probably useless to you."
5493         case "$man1dir" in
5494         '') man1dir="none";;
5495         esac;;
5496 esac
5497 echo "If you don't want the manual sources installed, answer 'none'."
5498 case "$man1dir" in
5499 ' ') dflt=none
5500         ;;
5501 '')
5502         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5503         lookpath="$lookpath $prefixexp/man/p_man/man1"
5504         lookpath="$lookpath $prefixexp/man/u_man/man1"
5505         lookpath="$lookpath $prefixexp/man/man.1"
5506         case "$sysman" in
5507         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5508         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5509         esac
5510         set dflt
5511         eval $prefixup
5512         ;;
5513 *)  dflt="$man1dir"
5514         ;;
5515 esac
5516 echo " "
5517 fn=dn+~
5518 rp="Where do the main $spackage manual pages (source) go?"
5519 . ./getfile
5520 if $test "X$man1direxp" != "X$ansexp"; then
5521         installman1dir=''
5522 fi
5523 man1dir="$ans"
5524 man1direxp="$ansexp"
5525 case "$man1dir" in
5526 '') man1dir=' '
5527         installman1dir='';;
5528 esac
5529 if $afs; then
5530         $cat <<EOM
5531
5532 Since you are running AFS, I need to distinguish the directory in which
5533 manual pages reside from the directory in which they are installed (and from
5534 which they are presumably copied to the former directory by occult means).
5535
5536 EOM
5537         case "$installman1dir" in
5538         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5539         *) dflt="$installman1dir";;
5540         esac
5541         fn=de~
5542         rp='Where will man pages be installed?'
5543         . ./getfile
5544         installman1dir="$ans"
5545 else
5546         installman1dir="$man1direxp"
5547 fi
5548
5549 : What suffix to use on installed man pages
5550
5551 case "$man1dir" in
5552 ' ')
5553         man1ext='0'
5554         ;;
5555 *)
5556         rp="What suffix should be used for the main $spackage man pages?"
5557         case "$man1ext" in
5558         '')     case "$man1dir" in
5559                 *1)  dflt=1 ;;
5560                 *1p) dflt=1p ;;
5561                 *1pm) dflt=1pm ;;
5562                 *l) dflt=l;;
5563                 *n) dflt=n;;
5564                 *o) dflt=o;;
5565                 *p) dflt=p;;
5566                 *C) dflt=C;;
5567                 *L) dflt=L;;
5568                 *L1) dflt=L1;;
5569                 *) dflt=1;;
5570                 esac
5571                 ;;
5572         *)      dflt="$man1ext";;
5573         esac
5574         . ./myread
5575         man1ext="$ans"
5576         ;;
5577 esac
5578
5579 : see if we can have long filenames
5580 echo " "
5581 rmlist="$rmlist /tmp/cf$$"
5582 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5583 first=123456789abcdef
5584 second=/tmp/cf$$/$first
5585 $rm -f $first $second
5586 if (echo hi >$first) 2>/dev/null; then
5587         if $test -f 123456789abcde; then
5588                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5589                 val="$undef"
5590         else
5591                 if (echo hi >$second) 2>/dev/null; then
5592                         if $test -f /tmp/cf$$/123456789abcde; then
5593                                 $cat <<'EOM'
5594 That's peculiar... You can have filenames longer than 14 characters, but only
5595 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5596 I shall consider your system cannot support long filenames at all.
5597 EOM
5598                                 val="$undef"
5599                         else
5600                                 echo 'You can have filenames longer than 14 characters.' >&4
5601                                 val="$define"
5602                         fi
5603                 else
5604                         $cat <<'EOM'
5605 How confusing! Some of your filesystems are sane enough to allow filenames
5606 longer than 14 characters but some others like /tmp can't even think about them.
5607 So, for now on, I shall assume your kernel does not allow them at all.
5608 EOM
5609                         val="$undef"
5610                 fi
5611         fi
5612 else
5613         $cat <<'EOM'
5614 You can't have filenames longer than 14 chars.  You can't even think about them!
5615 EOM
5616         val="$undef"
5617 fi 
5618 set d_flexfnam
5619 eval $setvar
5620 $rm -rf /tmp/cf$$ 123456789abcde*
5621
5622 : determine where library module manual pages go
5623 set man3dir man3dir none
5624 eval $prefixit
5625 $cat <<EOM
5626
5627 $spackage has manual pages for many of the library modules.
5628 EOM
5629
5630 case "$nroff" in
5631 nroff)
5632         $cat <<'EOM'
5633 However, you don't have nroff, so they're probably useless to you.
5634 EOM
5635         case "$man3dir" in
5636         '') man3dir="none";;
5637         esac;;
5638 esac
5639
5640 case "$d_flexfnam" in
5641 undef)
5642         $cat <<'EOM'
5643 However, your system can't handle the long file names like File::Basename.3. 
5644 EOM
5645         case "$man3dir" in
5646         '') man3dir="none";;
5647         esac;;
5648 esac
5649
5650 echo "If you don't want the manual sources installed, answer 'none'."
5651 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5652 case "$man3dir" in
5653 '')     case "$prefix" in 
5654         *$prog*) dflt=`echo $man1dir | 
5655                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5656         *)      dflt="$privlib/man/man3" ;;
5657         esac
5658         ;;
5659 ' ') dflt=none;;
5660 *)      dflt="$man3dir" ;;
5661 esac
5662 echo " "
5663
5664 fn=dn+~
5665 rp="Where do the $package library man pages (source) go?"
5666 . ./getfile
5667 if test "X$man3direxp" != "X$ansexp"; then
5668         installman3dir=''
5669 fi
5670
5671 man3dir="$ans"
5672 man3direxp="$ansexp"
5673 case "$man3dir" in
5674 '') man3dir=' '
5675         installman3dir='';;
5676 esac
5677 if $afs; then
5678         $cat <<EOM
5679
5680 Since you are running AFS, I need to distinguish the directory in which
5681 manual pages reside from the directory in which they are installed (and from
5682 which they are presumably copied to the former directory by occult means).
5683
5684 EOM
5685         case "$installman3dir" in
5686         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5687         *) dflt="$installman3dir";;
5688         esac
5689         fn=de~
5690         rp='Where will man pages be installed?'
5691         . ./getfile
5692         installman3dir="$ans"
5693 else
5694         installman3dir="$man3direxp"
5695 fi
5696
5697 : What suffix to use on installed man pages
5698
5699 case "$man3dir" in
5700 ' ')
5701         man3ext='0'
5702         ;;
5703 *)
5704         rp="What suffix should be used for the $package library man pages?"
5705         case "$man3ext" in
5706         '')     case "$man3dir" in
5707                 *3)  dflt=3 ;;
5708                 *3p) dflt=3p ;;
5709                 *3pm) dflt=3pm ;;
5710                 *l) dflt=l;;
5711                 *n) dflt=n;;
5712                 *o) dflt=o;;
5713                 *p) dflt=p;;
5714                 *C) dflt=C;;
5715                 *L) dflt=L;;
5716                 *L3) dflt=L3;;
5717                 *) dflt=3;;
5718                 esac
5719                 ;;
5720         *)      dflt="$man3ext";;
5721         esac
5722         . ./myread
5723         man3ext="$ans"
5724         ;;
5725 esac
5726
5727 : see if we have to deal with yellow pages, now NIS.
5728 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5729         if $test -f /usr/etc/nibindd; then
5730                 echo " "
5731                 echo "I'm fairly confident you're on a NeXT."
5732                 echo " "
5733                 rp='Do you get the hosts file via NetInfo?'
5734                 dflt=y
5735                 case "$hostcat" in
5736                 nidump*) ;;
5737                 '') ;;
5738                 *) dflt=n;;
5739                 esac
5740                 . ./myread
5741                 case "$ans" in
5742                 y*) hostcat='nidump hosts .';;
5743                 *)      case "$hostcat" in
5744                         nidump*) hostcat='';;
5745                         esac
5746                         ;;
5747                 esac
5748         fi
5749         case "$hostcat" in
5750         nidump*) ;;
5751         *)
5752                 case "$hostcat" in
5753                 *ypcat*) dflt=y;;
5754                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5755                                 dflt=y
5756                         else
5757                                 dflt=n
5758                         fi;;
5759                 *) dflt=n;;
5760                 esac
5761                 echo " "
5762                 rp='Are you getting the hosts file via yellow pages?'
5763                 . ./myread
5764                 case "$ans" in
5765                 y*) hostcat='ypcat hosts';;
5766                 *) hostcat='cat /etc/hosts';;
5767                 esac
5768                 ;;
5769         esac
5770 fi
5771 case "$hostcat" in
5772 '') hostcat='cat /etc/hosts';;
5773 esac
5774 case "$groupcat" in
5775 '') groupcat='cat /etc/group';;
5776 esac
5777 case "$passcat" in
5778 '') passcat='cat /etc/passwd';;
5779 esac
5780
5781 : now get the host name
5782 echo " "
5783 echo "Figuring out host name..." >&4
5784 case "$myhostname" in
5785 '') cont=true
5786         echo 'Maybe "hostname" will work...'
5787         if tans=`sh -c hostname 2>&1` ; then
5788                 myhostname=$tans
5789                 phostname=hostname
5790                 cont=''
5791         fi
5792         ;;
5793 *) cont='';;
5794 esac
5795 if $test "$cont"; then
5796         if ./xenix; then
5797                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5798                 if tans=`cat /etc/systemid 2>&1` ; then
5799                         myhostname=$tans
5800                         phostname='cat /etc/systemid'
5801                         echo "Whadyaknow.  Xenix always was a bit strange..."
5802                         cont=''
5803                 fi
5804         elif $test -r /etc/systemid; then
5805                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5806         fi
5807 fi
5808 if $test "$cont"; then
5809         echo 'No, maybe "uuname -l" will work...'
5810         if tans=`sh -c 'uuname -l' 2>&1` ; then
5811                 myhostname=$tans
5812                 phostname='uuname -l'
5813         else
5814                 echo 'Strange.  Maybe "uname -n" will work...'
5815                 if tans=`sh -c 'uname -n' 2>&1` ; then
5816                         myhostname=$tans
5817                         phostname='uname -n'
5818                 else
5819                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5820                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5821                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5822                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5823                         else
5824                                 case "$myhostname" in
5825                                 '') echo "Does this machine have an identity crisis or something?"
5826                                         phostname='';;
5827                                 *)
5828                                         echo "Well, you said $myhostname before..."
5829                                         phostname='echo $myhostname';;
5830                                 esac
5831                         fi
5832                 fi
5833         fi
5834 fi
5835 : you do not want to know about this
5836 set $myhostname
5837 myhostname=$1
5838
5839 : verify guess
5840 if $test "$myhostname" ; then
5841         dflt=y
5842         rp='Your host name appears to be "'$myhostname'".'" Right?"
5843         . ./myread
5844         case "$ans" in
5845         y*) ;;
5846         *) myhostname='';;
5847         esac
5848 fi
5849
5850 : bad guess or no guess
5851 while $test "X$myhostname" = X ; do
5852         dflt=''
5853         rp="Please type the (one word) name of your host:"
5854         . ./myread
5855         myhostname="$ans"
5856 done
5857
5858 : translate upper to lower if necessary
5859 case "$myhostname" in
5860 *[A-Z]*)
5861         echo "(Normalizing case in your host name)"
5862         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5863         ;;
5864 esac
5865
5866 case "$myhostname" in
5867 *.*)
5868         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5869         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5870         echo "(Trimming domain name from host name--host name is now $myhostname)"
5871         ;;
5872 *) case "$mydomain" in
5873         '')
5874                 {
5875                         test "X$hostcat" = "Xypcat hosts" &&
5876                         ypmatch "$myhostname" hosts 2>/dev/null |\
5877                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5878                         $test -s hosts
5879                 } || {
5880                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5881                                         /[       ]$myhostname[  . ]/p" > hosts
5882                 }
5883                 tmp_re="[       . ]"
5884                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5885                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5886                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5887                         hosts | $sort | $uniq | \
5888                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5889                 case `$echo X$dflt` in
5890                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5891                         dflt=.
5892                         ;;
5893                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5894                         ;;
5895                 esac
5896                 case "$dflt" in
5897                 .)
5898                         tans=`./loc resolv.conf X /etc /usr/etc`
5899                         if $test -f "$tans"; then
5900                                 echo "(Attempting domain name extraction from $tans)"
5901                                 dflt=.`$sed -n -e 's/   / /g' \
5902                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5903                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5904                                 case "$dflt" in
5905                                 .) dflt=.`$sed -n -e 's/        / /g' \
5906                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5907                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5908                                         ;;
5909                                 esac
5910                         fi
5911                         ;;
5912                 esac
5913                 case "$dflt" in
5914                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5915                         dflt=.`sh -c domainname 2>/dev/null`
5916                         case "$dflt" in
5917                         '') dflt='.';;
5918                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5919                         esac
5920                         ;;
5921                 esac
5922                 case "$dflt" in
5923                 .) echo "(Lost all hope -- silly guess then)"
5924                         dflt='.uucp'
5925                         ;;
5926                 esac
5927                 $rm -f hosts
5928                 ;;
5929         *) dflt="$mydomain";;
5930         esac;;
5931 esac
5932 echo " "
5933 rp="What is your domain name?"
5934 . ./myread
5935 tans="$ans"
5936 case "$ans" in
5937 '') ;;
5938 .*) ;;
5939 *) tans=".$tans";;
5940 esac
5941 mydomain="$tans"
5942
5943 : translate upper to lower if necessary
5944 case "$mydomain" in
5945 *[A-Z]*)
5946         echo "(Normalizing case in your domain name)"
5947         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5948         ;;
5949 esac
5950
5951 : a little sanity check here
5952 case "$phostname" in
5953 '') ;;
5954 *)
5955         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5956         $myhostname$mydomain|$myhostname) ;;
5957         *)
5958                 case "$phostname" in
5959                 sed*)
5960                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5961                         ;;
5962                 *)
5963                         echo "(That doesn't agree with your $phostname command, by the way.)"
5964                         ;;
5965                 esac
5966         ;;
5967         esac
5968         ;;
5969 esac
5970
5971 $cat <<EOM
5972
5973 I need to get your e-mail address in Internet format if possible, i.e.
5974 something like user@host.domain. Please answer accurately since I have
5975 no easy means to double check it. The default value provided below
5976 is most probably close to the reality but may not be valid from outside
5977 your organization...
5978
5979 EOM
5980 cont=x
5981 while test "$cont"; do
5982         case "$cf_email" in
5983         '') dflt="$cf_by@$myhostname$mydomain";;
5984         *) dflt="$cf_email";;
5985         esac
5986         rp='What is your e-mail address?'
5987         . ./myread
5988         cf_email="$ans"
5989         case "$cf_email" in
5990         *@*.*) cont='' ;;
5991         *)
5992                 rp='Address does not look like an Internet one.  Use it anyway?'
5993                 case "$fastread" in
5994                 yes) dflt=y ;;
5995                 *) dflt=n ;;
5996                 esac
5997                 . ./myread
5998                 case "$ans" in
5999                 y*) cont='' ;;
6000                 *) echo " " ;;
6001                 esac
6002                 ;;
6003         esac
6004 done
6005
6006 $cat <<EOM
6007
6008 If you or somebody else will be maintaining perl at your site, please
6009 fill in the correct e-mail address here so that they may be contacted
6010 if necessary. Currently, the "perlbug" program included with perl
6011 will send mail to this address in addition to perlbug@perl.com. You may
6012 enter "none" for no administrator.
6013
6014 EOM
6015 case "$perladmin" in
6016 '') dflt="$cf_email";;
6017 *) dflt="$perladmin";;
6018 esac
6019 rp='Perl administrator e-mail address'
6020 . ./myread
6021 perladmin="$ans"
6022
6023 : figure out how to guarantee perl startup
6024 case "$startperl" in
6025 '')
6026         case "$sharpbang" in
6027         *!)
6028                 $cat <<EOH
6029
6030 I can use the #! construct to start perl on your system. This will
6031 make startup of perl scripts faster, but may cause problems if you
6032 want to share those scripts and perl is not in a standard place
6033 ($binexp/perl) on all your platforms. The alternative is to force
6034 a shell by starting the script with a single ':' character.
6035
6036 EOH
6037                 dflt="$binexp/perl"
6038                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6039                 . ./myread
6040                 case "$ans" in
6041                 none)   startperl=": # use perl";;
6042                 *)      startperl="#!$ans"
6043                         if $test 30 -lt `echo "$ans" | wc -c`; then
6044                                 $cat >&4 <<EOM
6045
6046 WARNING:  Some systems limit the #! command to 32 characters.
6047 If you experience difficulty running Perl scripts with #!, try
6048 installing Perl in a directory with a shorter pathname.
6049
6050 EOM
6051                         fi ;;
6052                 esac
6053                 ;;
6054         *) startperl=": # use perl"
6055                 ;;
6056         esac
6057         ;;
6058 esac
6059 echo "I'll use $startperl to start perl scripts."
6060
6061 : figure best path for perl in scripts
6062 case "$perlpath" in
6063 '')
6064         perlpath="$binexp/perl"
6065         case "$startperl" in
6066         *!*) ;;
6067         *)
6068                 $cat <<EOH
6069
6070 I will use the "eval 'exec'" idiom to start Perl on your system.
6071 I can use the full path of your Perl binary for this purpose, but
6072 doing so may cause problems if you want to share those scripts and
6073 Perl is not always in a standard place ($binexp/perl).
6074
6075 EOH
6076                 dflt="$binexp/perl"
6077                 rp="What path shall I use in \"eval 'exec'\"?"
6078                 . ./myread
6079                 perlpath="$ans"
6080                 ;;
6081         esac
6082         ;;
6083 esac
6084 case "$startperl" in
6085 *!*)    ;;
6086 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6087 esac
6088
6089 : determine where public executable scripts go
6090 set scriptdir scriptdir
6091 eval $prefixit
6092 case "$scriptdir" in
6093 '')
6094         dflt="$bin"
6095         : guess some guesses
6096         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6097         $test -d /usr/share/bin && dflt=/usr/share/bin
6098         $test -d /usr/local/script && dflt=/usr/local/script
6099         $test -d $prefixexp/script && dflt=$prefixexp/script
6100         set dflt
6101         eval $prefixup
6102         ;;
6103 *)  dflt="$scriptdir"
6104         ;;
6105 esac
6106 $cat <<EOM
6107  
6108 Some installations have a separate directory just for executable scripts so
6109 that they can mount it across multiple architectures but keep the scripts in
6110 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6111 Or you might just lump your scripts in with all your other executables.
6112  
6113 EOM
6114 fn=d~
6115 rp='Where do you keep publicly executable scripts?'
6116 . ./getfile
6117 if $test "X$ansexp" != "X$scriptdirexp"; then
6118         installscript=''
6119 fi
6120 scriptdir="$ans"
6121 scriptdirexp="$ansexp"
6122 if $afs; then
6123         $cat <<EOM
6124
6125 Since you are running AFS, I need to distinguish the directory in which
6126 scripts reside from the directory in which they are installed (and from
6127 which they are presumably copied to the former directory by occult means).
6128
6129 EOM
6130         case "$installscript" in
6131         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6132         *) dflt="$installscript";;
6133         esac
6134         fn=de~
6135         rp='Where will public scripts be installed?'
6136         . ./getfile
6137         installscript="$ans"
6138 else
6139         installscript="$scriptdirexp"
6140 fi
6141
6142 : determine where site specific libraries go.
6143 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6144 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6145 case "$prefix" in
6146 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6147 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6148 esac
6149 eval $prefixit
6150 $cat <<EOM
6151
6152 The installation process will also create a directory for
6153 site-specific extensions and modules.  Some users find it convenient
6154 to place all site-specific files in this directory rather than in the
6155 main distribution directory.
6156
6157 EOM
6158 fn=d~+
6159 rp='Pathname for the site-specific library files?'
6160 . ./getfile
6161 if $test "X$sitelibexp" != "X$ansexp"; then
6162         installsitelib=''
6163 fi
6164 sitelib="$ans"
6165 sitelibexp="$ansexp"
6166 if $afs; then
6167         $cat <<EOM
6168
6169 Since you are running AFS, I need to distinguish the directory in
6170 which site-specific files reside from the directory in which they are
6171 installed (and from which they are presumably copied to the former
6172 directory by occult means).
6173
6174 EOM
6175         case "$installsitelib" in
6176         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6177         *) dflt="$installsitelib";;
6178         esac
6179         fn=de~
6180         rp='Where will site-specific files be installed?'
6181         . ./getfile
6182         installsitelib="$ans"
6183 else
6184         installsitelib="$sitelibexp"
6185 fi
6186
6187 : determine where site specific architecture-dependent libraries go.
6188 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6189 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6190 : sitelib may have an optional trailing /share.
6191 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6192 tdflt="$tdflt/$archname"
6193 set sitearch sitearch none
6194 eval $prefixit
6195 case "$sitearch" in
6196 '')     dflt="$tdflt" ;;
6197 *)      dflt="$sitearch" ;;
6198 esac
6199 $cat <<EOM
6200
6201 The installation process will also create a directory for
6202 architecture-dependent site-specific extensions and modules.
6203
6204 EOM
6205 fn=nd~+
6206 rp='Pathname for the site-specific architecture-dependent library files?'
6207 . ./getfile
6208 if $test "X$sitearchexp" != "X$ansexp"; then
6209         installsitearch=''
6210 fi
6211 sitearch="$ans"
6212 sitearchexp="$ansexp"
6213 if $afs; then
6214         $cat <<EOM
6215
6216 Since you are running AFS, I need to distinguish the directory in
6217 which site-specific architecture-dependent library files reside from
6218 the directory in which they are installed (and from which they are
6219 presumably copied to the former directory by occult means).
6220
6221 EOM
6222         case "$installsitearch" in
6223         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6224         *) dflt="$installsitearch";;
6225         esac
6226         fn=de~
6227         rp='Where will site-specific architecture-dependent files be installed?'
6228         . ./getfile
6229         installsitearch="$ans"
6230 else
6231         installsitearch="$sitearchexp"
6232 fi
6233
6234 cat <<EOM
6235
6236 Previous version of $package used the standard IO mechanisms as defined
6237 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6238 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6239 the default.  This abstraction layer can use AT&T's sfio (if you already
6240 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6241 problems with some extension modules.  Using PerlIO with stdio is safe,
6242 but it is slower than plain stdio and therefore is not the default.
6243
6244 If this doesn't make any sense to you, just accept the default 'n'.
6245 EOM
6246 case "$useperlio" in
6247 $define|true|[yY]*)     dflt='y';;
6248 *) dflt='n';;
6249 esac
6250 rp='Use the experimental PerlIO abstraction layer?'
6251 . ./myread
6252 case "$ans" in
6253 y|Y) 
6254         val="$define"
6255         ;;     
6256 *)      
6257         echo "Ok, doing things the stdio way"
6258         val="$undef"
6259         ;;
6260 esac
6261 set useperlio
6262 eval $setvar 
6263
6264 : Check how to convert floats to strings.
6265 if test "X$d_Gconvert" = X; then
6266         echo " "
6267         echo "Checking for an efficient way to convert floats to strings."
6268         $cat >try.c <<'EOP'
6269 #ifdef TRY_gconvert
6270 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6271 char *myname = "gconvert";
6272 #endif
6273 #ifdef TRY_gcvt
6274 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6275 char *myname = "gcvt";
6276 #endif
6277 #ifdef TRY_sprintf
6278 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6279 char *myname = "sprintf";
6280 #endif
6281
6282 #include <stdio.h>
6283
6284 int
6285 checkit(expect, got)
6286 char *expect;
6287 char *got;
6288 {
6289     if (strcmp(expect, got)) {
6290                 printf("%s oddity:  Expected %s, got %s\n",
6291                         myname, expect, got);
6292                 exit(1);
6293         }
6294 }
6295
6296 int main()
6297
6298         char buf[64]; 
6299         buf[63] = '\0';
6300
6301         /* This must be 1st test on (which?) platform */
6302         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6303         Gconvert(0.1, 8, 0, buf);
6304         checkit("0.1", buf);
6305
6306         Gconvert(1.0, 8, 0, buf); 
6307         checkit("1", buf);
6308
6309         Gconvert(0.0, 8, 0, buf); 
6310         checkit("0", buf);
6311
6312         Gconvert(-1.0, 8, 0, buf); 
6313         checkit("-1", buf);
6314
6315         /* Some Linux gcvt's give 1.e+5 here. */
6316         Gconvert(100000.0, 8, 0, buf); 
6317         checkit("100000", buf);
6318         
6319         /* Some Linux gcvt's give -1.e+5 here. */
6320         Gconvert(-100000.0, 8, 0, buf); 
6321         checkit("-100000", buf);
6322
6323         exit(0);
6324 }
6325 EOP
6326         case "$d_Gconvert" in
6327         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6328         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6329         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6330         *) xxx_list='gconvert gcvt sprintf' ;;
6331         esac
6332
6333         for xxx_convert in $xxx_list; do
6334                 echo "Trying $xxx_convert"
6335                 $rm -f try try$_o
6336                 set try -DTRY_$xxx_convert
6337                 if eval $compile; then
6338                         echo "$xxx_convert" found. >&4
6339                         if ./try; then
6340                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6341                                 break;
6342                         else
6343                                 echo "...But $xxx_convert didn't work as I expected."
6344                         fi
6345                 else
6346                         echo "$xxx_convert NOT found." >&4
6347                 fi
6348         done
6349                 
6350         case "$xxx_convert" in
6351         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6352         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6353         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6354         esac
6355 fi
6356
6357 : Initialize h_fcntl
6358 h_fcntl=false
6359
6360 : Initialize h_sysfile
6361 h_sysfile=false
6362
6363 : access call always available on UNIX
6364 set access d_access
6365 eval $inlibc
6366
6367 : locate the flags for 'access()'
6368 case "$d_access" in
6369 "$define")
6370         echo " "
6371         $cat >access.c <<'EOCP'
6372 #include <sys/types.h>
6373 #ifdef I_FCNTL
6374 #include <fcntl.h>
6375 #endif
6376 #ifdef I_SYS_FILE
6377 #include <sys/file.h>
6378 #endif
6379 #ifdef I_UNISTD
6380 #include <unistd.h>
6381 #endif
6382 int main() {
6383         exit(R_OK);
6384 }
6385 EOCP
6386         : check sys/file.h first, no particular reason here
6387         if $test `./findhdr sys/file.h` && \
6388                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6389                 h_sysfile=true;
6390                 echo "<sys/file.h> defines the *_OK access constants." >&4
6391         elif $test `./findhdr fcntl.h` && \
6392                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6393                 h_fcntl=true;
6394                 echo "<fcntl.h> defines the *_OK access constants." >&4
6395         elif $test `./findhdr unistd.h` && \
6396                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6397                 echo "<unistd.h> defines the *_OK access constants." >&4
6398         else
6399                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6400         fi
6401         ;;
6402 esac
6403 $rm -f access*
6404
6405 : see if accessx exists
6406 set accessx d_accessx
6407 eval $inlibc
6408
6409 : see if alarm exists
6410 set alarm d_alarm
6411 eval $inlibc
6412
6413 : Look for GNU-cc style attribute checking
6414 echo " "
6415 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6416 $cat >attrib.c <<'EOCP'
6417 #include <stdio.h>
6418 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6419 EOCP
6420 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6421         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6422                 echo "Your C compiler doesn't fully support __attribute__."
6423                 val="$undef"
6424         else
6425                 echo "Your C compiler supports __attribute__."
6426                 val="$define"
6427         fi
6428 else
6429         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6430         val="$undef"
6431 fi
6432 set d_attribut
6433 eval $setvar
6434 $rm -f attrib*
6435
6436 : see if bcmp exists
6437 set bcmp d_bcmp
6438 eval $inlibc
6439
6440 : see if bcopy exists
6441 set bcopy d_bcopy
6442 eval $inlibc
6443
6444 : see if this is a unistd.h system
6445 set unistd.h i_unistd
6446 eval $inhdr
6447
6448 : see if getpgrp exists
6449 set getpgrp d_getpgrp
6450 eval $inlibc
6451
6452 case "$d_getpgrp" in
6453 "$define")
6454         echo " "
6455         echo "Checking to see which flavor of getpgrp is in use..."
6456         $cat >set.c <<EOP
6457 #$i_unistd I_UNISTD
6458 #include <sys/types.h>
6459 #ifdef I_UNISTD
6460 #  include <unistd.h>
6461 #endif
6462 int main()
6463 {
6464         if (getuid() == 0) {
6465                 printf("(I see you are running Configure as super-user...)\n");
6466                 setuid(1);
6467         }
6468 #ifdef TRY_BSD_PGRP
6469         if (getpgrp(1) == 0)
6470                 exit(0);
6471 #else
6472         if (getpgrp() > 0)
6473                 exit(0);
6474 #endif
6475         exit(1);
6476 }
6477 EOP
6478         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6479                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6480                 val="$define"
6481         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6482                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6483                 val="$undef"
6484         else
6485                 echo "I can't seem to compile and run the test program."
6486                 if ./usg; then
6487                         xxx="a USG one, i.e. you use getpgrp()."
6488                 else
6489                         # SVR4 systems can appear rather BSD-ish.
6490                         case "$i_unistd" in
6491                         $undef)
6492                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6493                                 val="$define"
6494                                 ;;
6495                         $define)
6496                                 xxx="probably a USG one, i.e. you use getpgrp()."
6497                                 val="$undef"
6498                                 ;;
6499                         esac
6500                 fi
6501                 echo "Assuming your getpgrp is $xxx" >&4
6502         fi
6503         ;;
6504 *) val="$undef";;
6505 esac
6506 set d_bsdgetpgrp
6507 eval $setvar
6508 $rm -f set set.c
6509
6510 : see if setpgrp exists
6511 set setpgrp d_setpgrp
6512 eval $inlibc
6513
6514 case "$d_setpgrp" in
6515 "$define")
6516         echo " "
6517         echo "Checking to see which flavor of setpgrp is in use..."
6518         $cat >set.c <<EOP
6519 #$i_unistd I_UNISTD
6520 #include <sys/types.h>
6521 #ifdef I_UNISTD
6522 #  include <unistd.h>
6523 #endif
6524 int main()
6525 {
6526         if (getuid() == 0) {
6527                 printf("(I see you are running Configure as super-user...)\n");
6528                 setuid(1);
6529         }
6530 #ifdef TRY_BSD_PGRP
6531         if (-1 == setpgrp(1, 1))
6532                 exit(0);
6533 #else
6534         if (setpgrp() != -1)
6535                 exit(0);
6536 #endif
6537         exit(1);
6538 }
6539 EOP
6540         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6541                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6542                 val="$define"
6543         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6544                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6545                 val="$undef"
6546         else
6547                 echo "(I can't seem to compile and run the test program.)"
6548                 if ./usg; then
6549                         xxx="a USG one, i.e. you use setpgrp()."
6550                 else
6551                         # SVR4 systems can appear rather BSD-ish.
6552                         case "$i_unistd" in
6553                         $undef)
6554                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6555                                 val="$define"
6556                                 ;;
6557                         $define)
6558                                 xxx="probably a USG one, i.e. you use setpgrp()."
6559                                 val="$undef"
6560                                 ;;
6561                         esac
6562                 fi
6563                 echo "Assuming your setpgrp is $xxx" >&4
6564         fi
6565         ;;
6566 *) val="$undef";;
6567 esac
6568 set d_bsdsetpgrp
6569 eval $setvar
6570 $rm -f set set.c
6571 : see if bzero exists
6572 set bzero d_bzero
6573 eval $inlibc
6574
6575 : check for lengths of integral types
6576 echo " "
6577 case "$intsize" in
6578 '')
6579         echo "Checking to see how big your integers are..." >&4
6580         $cat >intsize.c <<'EOCP'
6581 #include <stdio.h>
6582 int main()
6583 {
6584         printf("intsize=%d;\n", sizeof(int));
6585         printf("longsize=%d;\n", sizeof(long));
6586         printf("shortsize=%d;\n", sizeof(short));
6587         exit(0);
6588 }
6589 EOCP
6590         set intsize
6591         if eval $compile_ok && ./intsize > /dev/null; then
6592                 eval `./intsize`
6593                 echo "Your integers are $intsize bytes long."
6594                 echo "Your long integers are $longsize bytes long."
6595                 echo "Your short integers are $shortsize bytes long."
6596         else
6597                 $cat >&4 <<EOM
6598 !
6599 Help! I can't compile and run the intsize test program: please enlighten me!
6600 (This is probably a misconfiguration in your system or libraries, and
6601 you really ought to fix it.  Still, I'll try anyway.)
6602 !
6603 EOM
6604                 dflt=4
6605                 rp="What is the size of an integer (in bytes)?"
6606                 . ./myread
6607                 intsize="$ans"
6608                 dflt=$intsize
6609                 rp="What is the size of a long integer (in bytes)?"
6610                 . ./myread
6611                 longsize="$ans"
6612                 dflt=2
6613                 rp="What is the size of a short integer (in bytes)?"
6614                 . ./myread
6615                 shortsize="$ans"
6616         fi
6617         ;;
6618 esac
6619 $rm -f intsize intsize.*
6620
6621 : see if signal is declared as pointer to function returning int or void
6622 echo " "
6623 xxx=`./findhdr signal.h`
6624 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6625 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6626         echo "You have int (*signal())() instead of void." >&4
6627         val="$undef"
6628 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6629         echo "You have void (*signal())()." >&4
6630         val="$define"
6631 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6632         echo "You have int (*signal())() instead of void." >&4
6633         val="$undef"
6634 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6635         echo "You have void (*signal())()." >&4
6636         val="$define"
6637 else
6638         case "$d_voidsig" in
6639         '')
6640         echo "I can't determine whether signal handler returns void or int..." >&4
6641                 dflt=void
6642                 rp="What type does your signal handler return?"
6643                 . ./myread
6644                 case "$ans" in
6645                 v*) val="$define";;
6646                 *) val="$undef";;
6647                 esac;;
6648         "$define")
6649                 echo "As you already told me, signal handler returns void." >&4
6650                 val="$define"
6651                 ;;
6652         *)      echo "As you already told me, signal handler returns int." >&4
6653                 val="$undef"
6654                 ;;
6655         esac
6656 fi
6657 set d_voidsig
6658 eval $setvar
6659 case "$d_voidsig" in
6660 "$define") signal_t="void";;
6661 *) signal_t="int";;
6662 esac
6663 $rm -f $$.tmp
6664
6665 : check for ability to cast large floats to 32-bit ints.
6666 echo " "
6667 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6668 if $test "$intsize" -ge 4; then
6669         xxx=int
6670 else
6671         xxx=long
6672 fi
6673 $cat >try.c <<EOCP
6674 #include <stdio.h>
6675 #include <sys/types.h>
6676 #include <signal.h>
6677 $signal_t blech(s) int s; { exit(3); }
6678 int main()
6679 {
6680         $xxx i32;
6681         double f, g;
6682         int result = 0;
6683         char str[16];
6684         signal(SIGFPE, blech);
6685
6686         /* Don't let compiler optimize the test away.  Store the number 
6687            in a writable string for gcc to pass to sscanf under HP/UX.
6688         */
6689         sprintf(str, "2147483647");
6690         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6691         g = 10 * f;
6692         i32  = ($xxx) g;
6693
6694         /* x86 processors will probably give 0x8000 0000, which is a
6695        sign change.  We don't want that.  We want to mimic SPARC
6696            behavior here, which is to preserve the sign and give
6697            back 0x7fff ffff.
6698         */
6699         if (i32 != ($xxx) f)
6700                 result |= 1;
6701         exit(result);
6702 }
6703 EOCP
6704 set try
6705 if eval $compile_ok; then
6706         ./try
6707         yyy=$?
6708 else
6709         echo "(I can't seem to compile the test program--assuming it can't)"
6710         yyy=1
6711 fi
6712 case "$yyy" in
6713 0)      val="$define"
6714         echo "Yup, it can."
6715         ;;
6716 *)      val="$undef"
6717         echo "Nope, it can't."
6718         ;;
6719 esac
6720 set d_casti32
6721 eval $setvar
6722 $rm -f try try.*
6723
6724 : check for ability to cast negative floats to unsigned
6725 echo " "
6726 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6727 $cat >try.c <<EOCP
6728 #include <stdio.h>
6729 #include <sys/types.h>
6730 #include <signal.h>
6731 $signal_t blech(s) int s; { exit(7); }
6732 $signal_t blech_in_list(s) int s; { exit(4); }
6733 unsigned long dummy_long(p) unsigned long p; { return p; }
6734 unsigned int dummy_int(p) unsigned int p; { return p; }
6735 unsigned short dummy_short(p) unsigned short p; { return p; }
6736 int main()
6737 {
6738         double f;
6739         unsigned long along;
6740         unsigned int aint;
6741         unsigned short ashort;
6742         int result = 0;
6743         char str[16];
6744         
6745         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6746            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6747            optimized the whole file away
6748         */
6749         /* Store the number in a writable string for gcc to pass to 
6750            sscanf under HP/UX.
6751         */
6752         sprintf(str, "-123");
6753         sscanf(str, "%lf", &f);  /* f = -123.; */
6754
6755         signal(SIGFPE, blech);
6756         along = (unsigned long)f;
6757         aint = (unsigned int)f;
6758         ashort = (unsigned short)f;
6759         if (along != (unsigned long)-123)
6760                 result |= 1;
6761         if (aint != (unsigned int)-123)
6762                 result |= 1;
6763         if (ashort != (unsigned short)-123)
6764                 result |= 1;
6765         sprintf(str, "1073741824.");
6766         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6767         f = f + f;
6768         along = 0;
6769         along = (unsigned long)f;
6770         if (along != 0x80000000)
6771                 result |= 2;
6772         f -= 1.;
6773         along = 0;
6774         along = (unsigned long)f;
6775         if (along != 0x7fffffff)
6776                 result |= 1;
6777         f += 2.;
6778         along = 0;
6779         along = (unsigned long)f;
6780         if (along != 0x80000001)
6781                 result |= 2;
6782         if (result)
6783                 exit(result);
6784         signal(SIGFPE, blech_in_list);
6785         sprintf(str, "123.");
6786         sscanf(str, "%lf", &f);  /* f = 123.; */
6787         along = dummy_long((unsigned long)f);
6788         aint = dummy_int((unsigned int)f);
6789         ashort = dummy_short((unsigned short)f);
6790         if (along != (unsigned long)123)
6791                 result |= 4;
6792         if (aint != (unsigned int)123)
6793                 result |= 4;
6794         if (ashort != (unsigned short)123)
6795                 result |= 4;
6796         exit(result);
6797
6798 }
6799 EOCP
6800 set try
6801 if eval $compile_ok; then
6802         ./try
6803         castflags=$?
6804 else
6805         echo "(I can't seem to compile the test program--assuming it can't)"
6806         castflags=7
6807 fi
6808 case "$castflags" in
6809 0)      val="$define"
6810         echo "Yup, it can."
6811         ;;
6812 *)      val="$undef"
6813         echo "Nope, it can't."
6814         ;;
6815 esac
6816 set d_castneg
6817 eval $setvar
6818 $rm -f try.*
6819
6820 : see if vprintf exists
6821 echo " "
6822 if set vprintf val -f d_vprintf; eval $csym; $val; then
6823         echo 'vprintf() found.' >&4
6824         val="$define"
6825         $cat >vprintf.c <<'EOF'
6826 #include <varargs.h>
6827
6828 int main() { xxx("foo"); }
6829
6830 xxx(va_alist)
6831 va_dcl
6832 {
6833         va_list args;
6834         char buf[10];
6835
6836         va_start(args);
6837         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6838 }
6839 EOF
6840         set vprintf
6841         if eval $compile && ./vprintf; then
6842                 echo "Your vsprintf() returns (int)." >&4
6843                 val2="$undef"
6844         else
6845                 echo "Your vsprintf() returns (char*)." >&4
6846                 val2="$define"
6847         fi
6848 else
6849         echo 'vprintf() NOT found.' >&4
6850                 val="$undef"
6851                 val2="$undef"
6852 fi
6853 set d_vprintf
6854 eval $setvar
6855 val=$val2
6856 set d_charvspr
6857 eval $setvar
6858
6859 : see if chown exists
6860 set chown d_chown
6861 eval $inlibc
6862
6863 : see if chroot exists
6864 set chroot d_chroot
6865 eval $inlibc
6866
6867 : see if chsize exists
6868 set chsize d_chsize
6869 eval $inlibc
6870
6871 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6872 while $test $# -ge 2; do
6873         case "$1" in
6874         $define) echo "#include <$2>";;
6875         esac ;
6876     shift 2;
6877 done > try.c;
6878 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6879 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6880         val="$define";
6881 else
6882         val="$undef";
6883 fi;
6884 set $varname;
6885 eval $setvar;
6886 $rm -f try.c try.o'
6887
6888 : see if this is a sys/uio.h system
6889 set sys/uio.h i_sysuio
6890 eval $inhdr
6891
6892 echo "Checking to see if your system supports struct iovec..." >&4
6893 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6894 eval $hasfield
6895 case "$d_iovec_s" in
6896 "$define")      echo "Yup, it does." >&4
6897                 ;;
6898 *)              echo "Nope, it doesn't." >&4
6899                 ;;
6900 esac
6901
6902 socketlib=''
6903 sockethdr=''
6904 : see whether socket exists
6905 echo " "
6906 $echo $n "Hmm... $c" >&4
6907 if set socket val -f d_socket; eval $csym; $val; then
6908         echo "Looks like you have Berkeley networking support." >&4
6909         d_socket="$define"
6910         if set setsockopt val -f; eval $csym; $val; then
6911                 d_oldsock="$undef"
6912         else
6913                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6914                 d_oldsock="$define"
6915         fi
6916 else
6917         if $contains socklib libc.list >/dev/null 2>&1; then
6918                 echo "Looks like you have Berkeley networking support." >&4
6919                 d_socket="$define"
6920                 : we will have to assume that it supports the 4.2 BSD interface
6921                 d_oldsock="$undef"
6922         else
6923                 echo "You don't have Berkeley networking in libc$_a..." >&4
6924                 if test "X$d_socket" = "X$define"; then
6925                    echo "...but you seem to believe that you have sockets." >&4
6926                 else
6927                         for net in net socket
6928                         do
6929                                 if test -f /usr/lib/lib$net$_a; then
6930                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6931                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6932                                         if $contains socket libc.list >/dev/null 2>&1; then
6933                                                 d_socket="$define"
6934                                                 socketlib="-l$net"
6935                                                 case "$net" in
6936                                                 net)
6937                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6938                                                         sockethdr="-I/usr/netinclude"
6939                                                         ;;
6940                                                 esac
6941                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6942                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6943                                                         d_oldsock="$undef"
6944                                                 else
6945                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6946                                                         d_oldsock="$define"
6947                                                 fi
6948                                                 break
6949                                         fi
6950                                 fi
6951                         done
6952                         if test "X$d_socket" != "X$define"; then
6953                            echo "or anywhere else I see." >&4
6954                            d_socket="$undef"
6955                            d_oldsock="$undef"
6956                         fi
6957                 fi
6958         fi
6959 fi
6960
6961 : see if socketpair exists
6962 set socketpair d_sockpair
6963 eval $inlibc
6964
6965
6966 echo " "
6967 echo "Checking the availability of certain socket constants..." >& 4
6968 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6969         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6970         $cat >try.c <<EOF
6971 #include <sys/types.h>
6972 #include <sys/socket.h>
6973 int main() {
6974     int i = $ENUM;
6975 }
6976 EOF
6977         val="$undef"
6978         set try; if eval $compile; then
6979                 val="$define"
6980         fi
6981         set d_${enum}; eval $setvar
6982         $rm -f try.c try
6983 done
6984
6985 set sendmsg d_sendmsg
6986 eval $inlibc
6987
6988 set recvmsg d_recvmsg
6989 eval $inlibc
6990
6991 echo " "
6992 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6993 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6994 eval $hasfield
6995 case "$d_msghdr_s" in
6996 "$define")      echo "Yup, it does." >&4
6997                 ;;
6998 *)              echo "Nope, it doesn't." >&4
6999                 ;;
7000 esac
7001
7002 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7003 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7004 eval $hasfield
7005 case "$d_cmsghdr_s" in
7006 "$define")      echo "Yup, it does." >&4
7007                 ;;
7008 *)              echo "Nope, it doesn't." >&4
7009                 ;;
7010 esac
7011
7012 : check for const keyword
7013 echo " "
7014 echo 'Checking to see if your C compiler knows about "const"...' >&4
7015 $cat >const.c <<'EOCP'
7016 typedef struct spug { int drokk; } spug;
7017 int main()
7018 {
7019         const char *foo;
7020         const spug y;
7021 }
7022 EOCP
7023 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7024         val="$define"
7025         echo "Yup, it does."
7026 else
7027         val="$undef"
7028         echo "Nope, it doesn't."
7029 fi
7030 set d_const
7031 eval $setvar
7032
7033 : see if crypt exists
7034 echo " "
7035 if set crypt val -f d_crypt; eval $csym; $val; then
7036         echo 'crypt() found.' >&4
7037         val="$define"
7038         cryptlib=''
7039 else
7040         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7041         if $test -z "$cryptlib"; then
7042                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7043         else
7044                 cryptlib=-lcrypt
7045         fi
7046         if $test -z "$cryptlib"; then
7047                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7048         else
7049                 cryptlib=-lcrypt
7050         fi
7051         if $test -z "$cryptlib"; then
7052                 cryptlib=`./loc libcrypt$_a "" $libpth`
7053         else
7054                 cryptlib=-lcrypt
7055         fi
7056         if $test -z "$cryptlib"; then
7057                 echo 'crypt() NOT found.' >&4
7058                 val="$undef"
7059         else
7060                 val="$define"
7061         fi
7062 fi
7063 set d_crypt
7064 eval $setvar
7065
7066 : get csh whereabouts
7067 case "$csh" in
7068 'csh') val="$undef" ;;
7069 *) val="$define" ;;
7070 esac
7071 set d_csh
7072 eval $setvar
7073 : Respect a hint or command line value for full_csh.
7074 case "$full_csh" in
7075 '') full_csh=$csh ;;
7076 esac
7077
7078 : see if cuserid exists
7079 set cuserid d_cuserid
7080 eval $inlibc
7081
7082 : see if this is a limits.h system
7083 set limits.h i_limits
7084 eval $inhdr
7085
7086 : see if this is a float.h system
7087 set float.h i_float
7088 eval $inhdr
7089
7090 : See if number of significant digits in a double precision number is known
7091 echo " "
7092 $cat >dbl_dig.c <<EOM
7093 #$i_limits I_LIMITS
7094 #$i_float I_FLOAT
7095 #ifdef I_LIMITS
7096 #include <limits.h>
7097 #endif
7098 #ifdef I_FLOAT
7099 #include <float.h>
7100 #endif
7101 #ifdef DBL_DIG
7102 printf("Contains DBL_DIG");
7103 #endif
7104 EOM
7105 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7106 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7107         echo "DBL_DIG found." >&4
7108         val="$define"
7109 else
7110         echo "DBL_DIG NOT found." >&4
7111         val="$undef"
7112 fi
7113 $rm -f dbl_dig.?
7114 set d_dbl_dig
7115 eval $setvar
7116
7117
7118 if $test X"$use64bits" = X"$define"; then
7119         : see if dbminit64 exists
7120         set dbminit64 d_dbminit64
7121         eval $inlibc
7122
7123         : see if dbmclose64 exists
7124         set dbmclose64 d_dbmclose64
7125         eval $inlibc
7126
7127         : see if fetch64 exists
7128         set fetch64 d_fetch64
7129         eval $inlibc
7130
7131         : see if store64 exists
7132         set store64 d_store64
7133         eval $inlibc
7134
7135         : see if delete64 exists
7136         set delete64 d_delete64
7137         eval $inlibc
7138
7139         : see if firstkey64 exists
7140         set firstkey64 d_firstkey64
7141         eval $inlibc
7142
7143         : see if nextkey64 exists
7144         set nextkey64 d_nextkey64
7145         eval $inlibc
7146 else
7147         val="$undef"
7148         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7149         do
7150                 set $xxx
7151                 eval $setvar
7152         done
7153 fi
7154
7155 : see if difftime exists
7156 set difftime d_difftime
7157 eval $inlibc
7158
7159 : see if sys/stat.h is available
7160 set sys/stat.h i_sysstat
7161 eval $inhdr
7162
7163 : see if this is a dirent system
7164 echo " "
7165 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7166         val="$define"
7167         echo "<dirent.h> found." >&4
7168 else
7169         val="$undef"
7170         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7171                 echo "<sys/dir.h> found." >&4
7172                 echo " "
7173         else
7174                 xinc=`./findhdr sys/ndir.h`
7175         fi
7176         echo "<dirent.h> NOT found." >&4
7177 fi
7178 set i_dirent
7179 eval $setvar
7180
7181 : Look for type of directory structure.
7182 echo " "
7183 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7184
7185 case "$direntrytype" in
7186 ''|' ')
7187         case "$i_dirent" in
7188         $define) guess1='struct dirent' ;;
7189         *) guess1='struct direct'  ;;
7190         esac
7191         ;;
7192 *)      guess1="$direntrytype"
7193         ;;
7194 esac
7195
7196 case "$guess1" in
7197 'struct dirent') guess2='struct direct' ;;
7198 *) guess2='struct dirent' ;;
7199 esac
7200                 
7201 if $contains "$guess1" try.c >/dev/null 2>&1; then
7202         direntrytype="$guess1"
7203         echo "Your directory entries are $direntrytype." >&4
7204 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7205         direntrytype="$guess2"
7206         echo "Your directory entries seem to be $direntrytype." >&4
7207 else
7208         echo "I don't recognize your system's directory entries." >&4
7209         rp="What type is used for directory entries on this system?"
7210         dflt="$guess1"
7211         . ./myread
7212         direntrytype="$ans"
7213 fi
7214 $rm -f try.c
7215
7216
7217 : see if the directory entry stores field length
7218 echo " "
7219 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7220 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7221         echo "Good, your directory entry keeps length information in d_namlen." >&4
7222         val="$define"
7223 else
7224         echo "Your directory entry does not know about the d_namlen field." >&4
7225         val="$undef"
7226 fi
7227 set d_dirnamlen
7228 eval $setvar
7229 $rm -f try.c
7230
7231
7232 if $test X"$use64bits" = X"$define"; then
7233         : see if fstat64 exists
7234         set fstat64 d_fstat64
7235         eval $inlibc
7236
7237         : see if ftruncate64 exists
7238         set ftruncate64 d_ftruncate64
7239         eval $inlibc
7240
7241         : see if lockf64 exists
7242         set lockf64 d_lockf64
7243         eval $inlibc
7244
7245         : see if llseek exists
7246         set llseek d_llseek
7247         eval $inlibc
7248
7249         : see if lseek64 exists
7250         set lseek64 d_lseek64
7251         eval $inlibc
7252
7253         : see if lstat64 exists
7254         set lstat64 d_lstat64
7255         eval $inlibc
7256
7257         : see if open64 exists
7258         set open64 d_open64
7259         eval $inlibc
7260
7261         : see if opendir64 exists
7262         set opendir64 d_opendir64
7263         eval $inlibc
7264
7265         : see if readdir64 exists
7266         set readdir64 d_readdir64
7267         eval $inlibc
7268
7269         : see if seekdir64 exists
7270         set seekdir64 d_seekdir64
7271         eval $inlibc
7272
7273         : see if stat64 exists
7274         set stat64 d_stat64
7275         eval $inlibc
7276
7277         : see if telldir64 exists
7278         set telldir64 d_telldir64
7279         eval $inlibc
7280
7281         : see if truncate64 exists
7282         set truncate64 d_truncate64
7283         eval $inlibc
7284
7285         : check for off64_t
7286         echo " "
7287         echo $n "Checking to see if your system supports off64_t...$c" >&4
7288         $cat >try.c <<EOCP
7289 #include <sys/types.h>
7290 #include <unistd.h>
7291 off64_t foo() { off64_t x; x = 7; return x; }'
7292 EOCP
7293         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7294                 val="$define"
7295                 echo " Yup, it does." >&4
7296         else
7297                 val="$undef"
7298                 echo " Nope, it doesn't." >&4
7299         fi
7300         $rm -f try.*
7301         set d_off64_t
7302         eval $setvar
7303
7304         : check for offset_t
7305         echo " "
7306         echo $n "Checking to see if your system supports offset_t...$c" >&4
7307         $cat >try.c <<EOCP
7308 #include <sys/types.h>
7309 #include <unistd.h>
7310 offset_t foo() { offset_t x; x = 7; return x; }'
7311 EOCP
7312         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7313                 val="$define"
7314                 echo " Yup, it does." >&4
7315         else
7316                 val="$undef"
7317                 echo " Nope, it doesn't." >&4
7318         fi
7319         $rm -f try.*
7320         set d_offset_t
7321         eval $setvar
7322
7323         : check for ino64_t
7324         echo " "
7325         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7326         val="$undef"
7327         case "$i_sysstat" in
7328         "$define" )
7329                 $cat >try.c <<EOCP
7330 #include <sys/types.h>
7331 #include <sys/stat.h>
7332 ino64_t foo() { ino64_t x; x = 7; return x; }'
7333 EOCP
7334                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7335                         val="$define"
7336                 fi
7337                 $rm -f try.*
7338                 ;;
7339         esac
7340         if $test "X$val" = X"$define"; then
7341                 echo " Yup, it does." >&4
7342         else
7343                 echo " Nope, it doesn't." >&4
7344         fi
7345         set d_ino64_t
7346         eval $setvar
7347
7348         : check for struct flock64
7349         echo " "
7350         echo "Checking to see if your system supports struct flock64..." >&4
7351         if $h_fcntl; then
7352                 set d_flock64_s flock64 l_len define fcntl.h
7353                 eval $hasfield
7354         else
7355                 val="$undef"
7356                 set d_flock64_s
7357                 eval $setvar
7358         fi
7359         case "$d_flock64_s" in
7360         "$define")      echo "Yup, it does." >&4
7361                         ;;
7362         *)              echo "Nope, it doesn't." >&4
7363                         ;;
7364         esac
7365
7366         : check for struct dirent64
7367         echo " "
7368         echo "Checking to see if your system supports struct dirent64..." >&4
7369         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7370         eval $hasfield
7371         case "$d_dirent64_s" in
7372         "$define")      echo "Yup, it does." >&4
7373                         ;;
7374         *)              echo "Nope, it doesn't." >&4
7375                         ;;
7376         esac
7377
7378 else
7379         val="$undef"
7380         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
7381         do
7382                 set $xxx
7383                 eval $setvar
7384         done
7385 fi
7386
7387 : see if dlerror exists
7388 xxx_runnm="$runnm"
7389 runnm=false
7390 set dlerror d_dlerror
7391 eval $inlibc
7392 runnm="$xxx_runnm"
7393
7394 : see if dlfcn is available
7395 set dlfcn.h i_dlfcn
7396 eval $inhdr
7397
7398 case "$usedl" in
7399 $define|y|true)
7400         $cat << EOM
7401
7402 On a few systems, the dynamically loaded modules that perl generates and uses
7403 will need a different extension than shared libs. The default will probably
7404 be appropriate.
7405
7406 EOM
7407         case "$dlext" in
7408         '')     dflt="$so" ;;
7409         *)      dflt="$dlext" ;;
7410         esac
7411         rp='What is the extension of dynamically loaded modules'
7412         . ./myread
7413         dlext="$ans"
7414         ;;
7415 *)
7416         dlext="none"
7417         ;;
7418 esac
7419
7420 : Check if dlsym need a leading underscore
7421 echo " "
7422 val="$undef"
7423
7424 case "$dlsrc" in
7425 dl_dlopen.xs)
7426         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7427         $cat >dyna.c <<'EOM'
7428 fred () { }
7429 EOM
7430
7431 $cat >fred.c<<EOM
7432
7433 #include <stdio.h>
7434 #$i_dlfcn I_DLFCN
7435 #ifdef I_DLFCN
7436 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7437 #else
7438 #include <sys/types.h>
7439 #include <nlist.h>
7440 #include <link.h>
7441 #endif
7442
7443 extern int fred() ;
7444
7445 int main()
7446 {
7447     void * handle ;
7448     void * symbol ;
7449 #ifndef RTLD_LAZY
7450     int mode = 1 ;
7451 #else
7452     int mode = RTLD_LAZY ;
7453 #endif
7454     handle = dlopen("./dyna.$dlext", mode) ;
7455     if (handle == NULL) {
7456         printf ("1\n") ;
7457         fflush (stdout) ;
7458         exit(0);
7459     }
7460     symbol = dlsym(handle, "fred") ;
7461     if (symbol == NULL) {
7462         /* try putting a leading underscore */
7463         symbol = dlsym(handle, "_fred") ;
7464         if (symbol == NULL) {
7465             printf ("2\n") ;
7466             fflush (stdout) ;
7467             exit(0);
7468         }
7469         printf ("3\n") ;
7470     }
7471     else
7472         printf ("4\n") ;
7473     fflush (stdout) ;
7474     exit(0);
7475 }
7476 EOM
7477         : Call the object file tmp-dyna.o in case dlext=o.
7478         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7479                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7480                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7481                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7482                 xxx=`./fred`
7483                 case $xxx in
7484                 1)      echo "Test program failed using dlopen." >&4
7485                         echo "Perhaps you should not use dynamic loading." >&4;;
7486                 2)      echo "Test program failed using dlsym." >&4
7487                         echo "Perhaps you should not use dynamic loading." >&4;;
7488                 3)      echo "dlsym needs a leading underscore" >&4
7489                         val="$define" ;;
7490                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7491                 esac
7492         else
7493                 echo "I can't compile and run the test program." >&4
7494         fi
7495         ;;
7496 esac
7497                 
7498 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7499
7500 set d_dlsymun
7501 eval $setvar
7502
7503 hasproto='varname=$1; func=$2; shift; shift;
7504 while $test $# -ge 2; do
7505         case "$1" in
7506         $define) echo "#include <$2>";;
7507         esac ;
7508     shift 2;
7509 done > try.c;
7510 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7511 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7512         echo "$func() prototype found.";
7513         val="$define";
7514 else
7515         echo "$func() prototype NOT found.";
7516         val="$undef";
7517 fi;
7518 set $varname;
7519 eval $setvar;
7520 $rm -f try.c tryout.c'
7521
7522 : see if prototype for drand48 is available
7523 echo " "
7524 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7525 eval $hasproto
7526
7527 : see if dup2 exists
7528 set dup2 d_dup2
7529 eval $inlibc
7530
7531 : see if eaccess exists
7532 set eaccess d_eaccess
7533 eval $inlibc
7534
7535 : see if endgrent exists
7536 set endgrent d_endgrent
7537 eval $inlibc
7538
7539 : see if endhostent exists
7540 set endhostent d_endhent
7541 eval $inlibc
7542
7543 : see if endnetent exists
7544 set endnetent d_endnent
7545 eval $inlibc
7546
7547 : see if endprotoent exists
7548 set endprotoent d_endpent
7549 eval $inlibc
7550
7551 : see if endpwent exists
7552 set endpwent d_endpwent
7553 eval $inlibc
7554
7555 : see if endservent exists
7556 set endservent d_endsent
7557 eval $inlibc
7558
7559 : Locate the flags for 'open()'
7560 echo " "
7561 $cat >open3.c <<'EOCP'
7562 #include <sys/types.h>
7563 #ifdef I_FCNTL
7564 #include <fcntl.h>
7565 #endif
7566 #ifdef I_SYS_FILE
7567 #include <sys/file.h>
7568 #endif
7569 int main() {
7570         if(O_RDONLY);
7571 #ifdef O_TRUNC
7572         exit(0);
7573 #else
7574         exit(1);
7575 #endif
7576 }
7577 EOCP
7578 : check sys/file.h first to get FREAD on Sun
7579 if $test `./findhdr sys/file.h` && \
7580                 set open3 -DI_SYS_FILE && eval $compile; then
7581         h_sysfile=true;
7582         echo "<sys/file.h> defines the O_* constants..." >&4
7583         if ./open3; then
7584                 echo "and you have the 3 argument form of open()." >&4
7585                 val="$define"
7586         else
7587                 echo "but not the 3 argument form of open().  Oh, well." >&4
7588                 val="$undef"
7589         fi
7590 elif $test `./findhdr fcntl.h` && \
7591                 set open3 -DI_FCNTL && eval $compile; then
7592         h_fcntl=true;
7593         echo "<fcntl.h> defines the O_* constants..." >&4
7594         if ./open3; then
7595                 echo "and you have the 3 argument form of open()." >&4
7596                 val="$define"
7597         else
7598                 echo "but not the 3 argument form of open().  Oh, well." >&4
7599                 val="$undef"
7600         fi
7601 else
7602         val="$undef"
7603         echo "I can't find the O_* constant definitions!  You got problems." >&4
7604 fi
7605 set d_open3
7606 eval $setvar
7607 $rm -f open3*
7608
7609 : check for non-blocking I/O stuff
7610 case "$h_sysfile" in
7611 true) echo "#include <sys/file.h>" > head.c;;
7612 *)
7613         case "$h_fcntl" in
7614         true) echo "#include <fcntl.h>" > head.c;;
7615         *) echo "#include <sys/fcntl.h>" > head.c;;
7616         esac
7617         ;;
7618 esac
7619 echo " "
7620 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7621 case "$o_nonblock" in
7622 '')
7623         $cat head.c > try.c
7624         $cat >>try.c <<'EOCP'
7625 int main() {
7626 #ifdef O_NONBLOCK
7627         printf("O_NONBLOCK\n");
7628         exit(0);
7629 #endif
7630 #ifdef O_NDELAY
7631         printf("O_NDELAY\n");
7632         exit(0);
7633 #endif
7634 #ifdef FNDELAY
7635         printf("FNDELAY\n");
7636         exit(0);
7637 #endif
7638         exit(0);
7639 }
7640 EOCP
7641         set try
7642         if eval $compile_ok; then
7643                 o_nonblock=`./try`
7644                 case "$o_nonblock" in
7645                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7646                 *) echo "Seems like we can use $o_nonblock.";;
7647                 esac
7648         else
7649                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7650         fi
7651         ;;
7652 *) echo "Using $hint value $o_nonblock.";;
7653 esac
7654 $rm -f try try.* .out core
7655
7656 echo " "
7657 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7658 case "$eagain" in
7659 '')
7660         $cat head.c > try.c
7661         $cat >>try.c <<EOCP
7662 #include <errno.h>
7663 #include <sys/types.h>
7664 #include <signal.h>
7665 #define MY_O_NONBLOCK $o_nonblock
7666 #ifndef errno  /* XXX need better Configure test */
7667 extern int errno;
7668 #endif
7669 $signal_t blech(x) int x; { exit(3); }
7670 EOCP
7671         $cat >> try.c <<'EOCP'
7672 int main()
7673 {
7674         int pd[2];
7675         int pu[2];
7676         char buf[1];
7677         char string[100];
7678
7679         pipe(pd);       /* Down: child -> parent */
7680         pipe(pu);       /* Up: parent -> child */
7681         if (0 != fork()) {
7682                 int ret;
7683                 close(pd[1]);   /* Parent reads from pd[0] */
7684                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7685                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7686                         exit(1);
7687                 signal(SIGALRM, blech);
7688                 alarm(5);
7689                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7690                         exit(2);
7691                 sprintf(string, "%d\n", ret);
7692                 write(2, string, strlen(string));
7693                 alarm(0);
7694 #ifdef EAGAIN
7695                 if (errno == EAGAIN) {
7696                         printf("EAGAIN\n");
7697                         goto ok;
7698                 }
7699 #endif
7700 #ifdef EWOULDBLOCK
7701                 if (errno == EWOULDBLOCK)
7702                         printf("EWOULDBLOCK\n");
7703 #endif
7704         ok:
7705                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7706                 sleep(2);                               /* Give it time to close our pipe */
7707                 alarm(5);
7708                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7709                 alarm(0);
7710                 sprintf(string, "%d\n", ret);
7711                 write(3, string, strlen(string));
7712                 exit(0);
7713         }
7714
7715         close(pd[0]);                   /* We write to pd[1] */
7716         close(pu[1]);                   /* We read from pu[0] */
7717         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7718         close(pd[1]);                   /* Pipe pd is now fully closed! */
7719         exit(0);                                /* Bye bye, thank you for playing! */
7720 }
7721 EOCP
7722         set try
7723         if eval $compile_ok; then
7724                 echo "$startsh" >mtry
7725                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7726                 chmod +x mtry
7727                 ./mtry >/dev/null 2>&1
7728                 case $? in
7729                 0) eagain=`$cat try.out`;;
7730                 1) echo "Could not perform non-blocking setting!";;
7731                 2) echo "I did a successful read() for something that was not there!";;
7732                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7733                 *) echo "Something terribly wrong happened during testing.";;
7734                 esac
7735                 rd_nodata=`$cat try.ret`
7736                 echo "A read() system call with no data present returns $rd_nodata."
7737                 case "$rd_nodata" in
7738                 0|-1) ;;
7739                 *)
7740                         echo "(That's peculiar, fixing that to be -1.)"
7741                         rd_nodata=-1
7742                         ;;
7743                 esac
7744                 case "$eagain" in
7745                 '')
7746                         echo "Forcing errno EAGAIN on read() with no data available."
7747                         eagain=EAGAIN
7748                         ;;
7749                 *)
7750                         echo "Your read() sets errno to $eagain when no data is available."
7751                         ;;
7752                 esac
7753                 status=`$cat try.err`
7754                 case "$status" in
7755                 0) echo "And it correctly returns 0 to signal EOF.";;
7756                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7757                 *) echo "However, your read() returns '$status' on EOF??";;
7758                 esac
7759                 val="$define"
7760                 if test "$status" = "$rd_nodata"; then
7761                         echo "WARNING: you can't distinguish between EOF and no data!"
7762                         val="$undef"
7763                 fi
7764         else
7765                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7766                 eagain=EAGAIN
7767         fi
7768         set d_eofnblk
7769         eval $setvar
7770         ;;
7771 *)
7772         echo "Using $hint value $eagain."
7773         echo "Your read() returns $rd_nodata when no data is present."
7774         case "$d_eofnblk" in
7775         "$define") echo "And you can see EOF because read() returns 0.";;
7776         "$undef") echo "But you can't see EOF status from read() returned value.";;
7777         *)
7778                 echo "(Assuming you can't see EOF status from read anyway.)"
7779                 d_eofnblk=$undef
7780                 ;;
7781         esac
7782         ;;
7783 esac
7784 $rm -f try try.* .out core head.c mtry
7785
7786 : see if fchmod exists
7787 set fchmod d_fchmod
7788 eval $inlibc
7789
7790 : see if fchown exists
7791 set fchown d_fchown
7792 eval $inlibc
7793
7794 : see if this is an fcntl system
7795 set fcntl d_fcntl
7796 eval $inlibc
7797
7798 : see if sys/select.h has to be included
7799 set sys/select.h i_sysselct
7800 eval $inhdr
7801
7802 : see if we should include time.h, sys/time.h, or both
7803 echo " "
7804 if test "X$timeincl" = X; then
7805         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7806         $echo $n "I'm now running the test program...$c"
7807         $cat >try.c <<'EOCP'
7808 #include <sys/types.h>
7809 #ifdef I_TIME
7810 #include <time.h>
7811 #endif
7812 #ifdef I_SYSTIME
7813 #ifdef SYSTIMEKERNEL
7814 #define KERNEL
7815 #endif
7816 #include <sys/time.h>
7817 #endif
7818 #ifdef I_SYSSELECT
7819 #include <sys/select.h>
7820 #endif
7821 int main()
7822 {
7823         struct tm foo;
7824 #ifdef S_TIMEVAL
7825         struct timeval bar;
7826 #endif
7827 #ifdef S_TIMEZONE
7828         struct timezone tzp;
7829 #endif
7830         if (foo.tm_sec == foo.tm_sec)
7831                 exit(0);
7832 #ifdef S_TIMEVAL
7833         if (bar.tv_sec == bar.tv_sec)
7834                 exit(0);
7835 #endif
7836         exit(1);
7837 }
7838 EOCP
7839         flags=''
7840         for s_timezone in '-DS_TIMEZONE' ''; do
7841         sysselect=''
7842         for s_timeval in '-DS_TIMEVAL' ''; do
7843         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7844         for i_time in '' '-DI_TIME'; do
7845         for i_systime in '-DI_SYSTIME' ''; do
7846                 case "$flags" in
7847                 '') $echo $n ".$c"
7848                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7849                         if eval $compile; then
7850                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7851                                 shift
7852                                 flags="$*"
7853                                 echo " "
7854                                 $echo $n "Succeeded with $flags$c"
7855                         fi
7856                         ;;
7857                 esac
7858         done
7859         done
7860         done
7861         done
7862         done
7863         timeincl=''
7864         echo " "
7865         case "$flags" in
7866         *SYSTIMEKERNEL*) i_systimek="$define"
7867                 timeincl=`./findhdr sys/time.h`
7868                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7869         *) i_systimek="$undef";;
7870         esac
7871         case "$flags" in
7872         *I_TIME*) i_time="$define"
7873                 timeincl=`./findhdr time.h`" $timeincl"
7874                 echo "We'll include <time.h>." >&4;;
7875         *) i_time="$undef";;
7876         esac
7877         case "$flags" in
7878         *I_SYSTIME*) i_systime="$define"
7879                 timeincl=`./findhdr sys/time.h`" $timeincl"
7880                 echo "We'll include <sys/time.h>." >&4;;
7881         *) i_systime="$undef";;
7882         esac
7883         $rm -f try.c try
7884 fi
7885
7886 : check for fd_set items
7887 $cat <<EOM
7888
7889 Checking to see how well your C compiler handles fd_set and friends ...
7890 EOM
7891 $cat >fd_set.c <<EOCP
7892 #$i_systime I_SYS_TIME
7893 #$i_sysselct I_SYS_SELECT
7894 #$d_socket HAS_SOCKET
7895 #include <sys/types.h>
7896 #ifdef HAS_SOCKET
7897 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7898 #endif
7899 #ifdef I_SYS_TIME
7900 #include <sys/time.h>
7901 #endif
7902 #ifdef I_SYS_SELECT
7903 #include <sys/select.h>
7904 #endif
7905 int main() {
7906         fd_set fds;
7907
7908 #ifdef TRYBITS
7909         if(fds.fds_bits);
7910 #endif
7911
7912 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7913         exit(0);
7914 #else
7915         exit(1);
7916 #endif
7917 }
7918 EOCP
7919 set fd_set -DTRYBITS
7920 if eval $compile; then
7921         d_fds_bits="$define"
7922         d_fd_set="$define"
7923         echo "Well, your system knows about the normal fd_set typedef..." >&4
7924         if ./fd_set; then
7925                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7926                 d_fd_macros="$define"
7927         else
7928                 $cat >&4 <<'EOM'
7929 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7930 EOM
7931                 d_fd_macros="$undef"
7932         fi
7933 else
7934         $cat <<'EOM'
7935 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7936 EOM
7937         set fd_set
7938         if eval $compile; then
7939                 d_fds_bits="$undef"
7940                 d_fd_set="$define"
7941                 echo "Well, your system has some sort of fd_set available..." >&4
7942                 if ./fd_set; then
7943                         echo "and you have the normal fd_set macros." >&4
7944                         d_fd_macros="$define"
7945                 else
7946                         $cat <<'EOM'
7947 but not the normal fd_set macros!  Gross!  More work for me...
7948 EOM
7949                         d_fd_macros="$undef"
7950                 fi
7951         else
7952         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7953                 d_fd_set="$undef"
7954                 d_fds_bits="$undef"
7955                 d_fd_macros="$undef"
7956         fi
7957 fi
7958 $rm -f fd_set*
7959
7960 : see if fgetpos exists
7961 set fgetpos d_fgetpos
7962 eval $inlibc
7963
7964
7965 if $test X"$use64bits" = X"$define"; then
7966         : see if fgetpos64 exists
7967         set fgetpos64 d_fgetpos64
7968         eval $inlibc
7969
7970         : see if fopen64 exists
7971         set freopen64 d_fopen64
7972         eval $inlibc
7973
7974         : see if freopen64 exists
7975         set freopen64 d_freopen64
7976         eval $inlibc
7977
7978         : see if fseek64 exists
7979         set fseek64 d_fseek64
7980         eval $inlibc
7981
7982         : see if fseeko64 exists
7983         set fseeko64 d_fseeko64
7984         eval $inlibc
7985
7986         : see if fsetpos64 exists
7987         set fsetpos64 d_fsetpos64
7988         eval $inlibc
7989
7990         : see if ftell64 exists
7991         set ftell64 d_ftell64
7992         eval $inlibc
7993
7994         : see if ftello64 exists
7995         set ftello64 d_ftello64
7996         eval $inlibc
7997
7998         : see if tmpfile64 exists
7999         set tmpfile64 d_tmpfile64
8000         eval $inlibc
8001 else
8002         val="$undef"
8003         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8004         do
8005                 set $xxx
8006                 eval $setvar
8007         done
8008 fi
8009 : see if flock exists
8010 set flock d_flock
8011 eval $inlibc
8012
8013 : see if fork exists
8014 set fork d_fork
8015 eval $inlibc
8016
8017 : see if pathconf exists
8018 set pathconf d_pathconf
8019 eval $inlibc
8020
8021 : see if fpathconf exists
8022 set fpathconf d_fpathconf
8023 eval $inlibc
8024
8025 : see if fseeko exists
8026 set fseeko d_fseeko
8027 eval $inlibc
8028
8029 : see if fsetpos exists
8030 set fsetpos d_fsetpos
8031 eval $inlibc
8032
8033 : see if this is a sys/param system
8034 set sys/param.h i_sysparam
8035 eval $inhdr
8036
8037 : see if this is a sys/mount.h system
8038 set sys/mount.h i_sysmount
8039 eval $inhdr
8040
8041
8042 : see if statfs exists
8043 set statfs d_statfs
8044 eval $inlibc
8045
8046 : see if fstatfs exists
8047 set fstatfs d_fstatfs
8048 eval $inlibc
8049
8050 : see if statfs knows about mount flags
8051 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8052 eval $hasfield
8053
8054
8055 : see if statvfs exists
8056 set statvfs d_statvfs
8057 eval $inlibc
8058
8059 : see if fstatvfs exists
8060 set fstatvfs d_fstatvfs
8061 eval $inlibc
8062
8063
8064 : see if ftello exists
8065 set ftello d_ftello
8066 eval $inlibc
8067
8068 : see if getgrent exists
8069 set getgrent d_getgrent
8070 eval $inlibc
8071
8072 : see if gethostbyaddr exists
8073 set gethostbyaddr d_gethbyaddr
8074 eval $inlibc
8075
8076 : see if gethostbyname exists
8077 set gethostbyname d_gethbyname
8078 eval $inlibc
8079
8080 : see if gethostent exists
8081 set gethostent d_gethent
8082 eval $inlibc
8083
8084 : see how we will look up host name
8085 echo " "
8086 call=''
8087 if set gethostname val -f d_gethname; eval $csym; $val; then
8088         echo 'gethostname() found.' >&4
8089         d_gethname="$define"
8090         call=gethostname
8091 fi
8092 if set uname val -f d_uname; eval $csym; $val; then
8093         if ./xenix; then
8094                 $cat <<'EOM'
8095 uname() was found, but you're running xenix, and older versions of xenix
8096 have a broken uname(). If you don't really know whether your xenix is old
8097 enough to have a broken system call, use the default answer.
8098
8099 EOM
8100                 dflt=y
8101                 case "$d_uname" in
8102                 "$define") dflt=n;;
8103                 esac
8104                 rp='Is your uname() broken?'
8105                 . ./myread
8106                 case "$ans" in
8107                 n*) d_uname="$define"; call=uname;;
8108                 esac
8109         else
8110                 echo 'uname() found.' >&4
8111                 d_uname="$define"
8112                 case "$call" in
8113                 '') call=uname ;;
8114                 esac
8115         fi
8116 fi
8117 case "$d_gethname" in
8118 '') d_gethname="$undef";;
8119 esac
8120 case "$d_uname" in
8121 '') d_uname="$undef";;
8122 esac
8123 case "$d_uname$d_gethname" in
8124 *define*)
8125         dflt=n
8126         cat <<EOM
8127  
8128 Every now and then someone has a $call() that lies about the hostname
8129 but can't be fixed for political or economic reasons.  If you wish, I can
8130 pretend $call() isn't there and maybe compute hostname at run-time
8131 thanks to the '$phostname' command.
8132
8133 EOM
8134         rp="Shall I ignore $call() from now on?"
8135         . ./myread
8136         case "$ans" in
8137         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8138         esac;;
8139 esac
8140 case "$phostname" in
8141 '') aphostname='';;
8142 *) case "$aphostname" in
8143         /*) ;;
8144         *) set X $phostname
8145                 shift
8146                 file=$1
8147                 shift
8148                 file=`./loc $file $file $pth`
8149                 aphostname=`echo $file $*`
8150                 ;;
8151         esac
8152         ;;
8153 esac
8154 case "$d_uname$d_gethname" in
8155 *define*) ;;
8156 *)
8157         case "$phostname" in
8158         '')
8159                 echo "There will be no way for $package to get your hostname." >&4;;
8160         *)
8161         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8162                 ;;
8163         esac;;
8164 esac
8165 case "$d_phostname" in
8166 '') d_phostname="$undef";;
8167 esac
8168
8169 : see if this is a netdb.h system
8170 set netdb.h i_netdb
8171 eval $inhdr
8172
8173 : see if prototypes for various gethostxxx netdb.h functions are available
8174 echo " "
8175 set d_gethostprotos gethostent $i_netdb netdb.h
8176 eval $hasproto
8177
8178 : see if getlogin exists
8179 set getlogin d_getlogin
8180 eval $inlibc
8181
8182 : see if getmntent exists
8183 set getmntent d_getmntent
8184 eval $inlibc
8185
8186 : see if getnetbyaddr exists
8187 set getnetbyaddr d_getnbyaddr
8188 eval $inlibc
8189
8190 : see if getnetbyname exists
8191 set getnetbyname d_getnbyname
8192 eval $inlibc
8193
8194 : see if getnetent exists
8195 set getnetent d_getnent
8196 eval $inlibc
8197
8198 : see if prototypes for various getnetxxx netdb.h functions are available
8199 echo " "
8200 set d_getnetprotos getnetent $i_netdb netdb.h
8201 eval $hasproto
8202
8203
8204 : see if getprotobyname exists
8205 set getprotobyname d_getpbyname
8206 eval $inlibc
8207
8208 : see if getprotobynumber exists
8209 set getprotobynumber d_getpbynumber
8210 eval $inlibc
8211
8212 : see if getprotoent exists
8213 set getprotoent d_getpent
8214 eval $inlibc
8215
8216 : see if getpgid exists
8217 set getpgid d_getpgid
8218 eval $inlibc
8219
8220 : see if getpgrp2 exists
8221 set getpgrp2 d_getpgrp2
8222 eval $inlibc
8223
8224 : see if getppid exists
8225 set getppid d_getppid
8226 eval $inlibc
8227
8228 : see if getpriority exists
8229 set getpriority d_getprior
8230 eval $inlibc
8231
8232 : see if prototypes for various getprotoxxx netdb.h functions are available
8233 echo " "
8234 set d_getprotoprotos getprotoent $i_netdb netdb.h
8235 eval $hasproto
8236
8237 : see if getpwent exists
8238 set getpwent d_getpwent
8239 eval $inlibc
8240
8241
8242 : see if getservbyname exists
8243 set getservbyname d_getsbyname
8244 eval $inlibc
8245
8246 : see if getservbyport exists
8247 set getservbyport d_getsbyport
8248 eval $inlibc
8249
8250 : see if getservent exists
8251 set getservent d_getsent
8252 eval $inlibc
8253
8254 : see if prototypes for various getservxxx netdb.h functions are available
8255 echo " "
8256 set d_getservprotos getservent $i_netdb netdb.h
8257 eval $hasproto
8258
8259 : see if gettimeofday or ftime exists
8260 set gettimeofday d_gettimeod
8261 eval $inlibc
8262 case "$d_gettimeod" in
8263 "$undef")
8264         set ftime d_ftime 
8265         eval $inlibc
8266         ;;
8267 *)
8268         val="$undef"; set d_ftime; eval $setvar
8269         ;;
8270 esac
8271 case "$d_gettimeod$d_ftime" in
8272 "$undef$undef")
8273         echo " "
8274         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8275         ;;
8276 esac
8277
8278 : see if this is an grp system
8279 set grp.h i_grp
8280 eval $inhdr
8281
8282 case "$i_grp" in
8283 $define)
8284         xxx=`./findhdr grp.h`
8285         $cppstdin $cppflags $cppminus < $xxx >$$.h
8286
8287         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8288                 val="$define"
8289         else
8290                 val="$undef"
8291         fi
8292         set d_grpasswd
8293         eval $setvar
8294
8295         $rm -f $$.h
8296         ;;
8297 *)
8298         val="$undef";
8299         set d_grpasswd; eval $setvar
8300         ;;
8301 esac
8302
8303 : see if hasmntopt exists
8304 set hasmntopt d_hasmntopt
8305 eval $inlibc
8306
8307 : see if this is a netinet/in.h or sys/in.h system
8308 set netinet/in.h i_niin sys/in.h i_sysin
8309 eval $inhdr
8310
8311 : see if arpa/inet.h has to be included
8312 set arpa/inet.h i_arpainet
8313 eval $inhdr
8314
8315 : see if htonl --and friends-- exists
8316 val=''
8317 set htonl val
8318 eval $inlibc
8319
8320 : Maybe they are macros.
8321 case "$val" in
8322 $undef)
8323         $cat >htonl.c <<EOM
8324 #include <stdio.h>
8325 #include <sys/types.h>
8326 #$i_niin I_NETINET_IN
8327 #$i_sysin I_SYS_IN
8328 #$i_arpainet I_ARPA_INET
8329 #ifdef I_NETINET_IN
8330 #include <netinet/in.h>
8331 #endif
8332 #ifdef I_SYS_IN
8333 #include <sys/in.h>
8334 #endif
8335 #ifdef I_ARPA_INET
8336 #include <arpa/inet.h>
8337 #endif
8338 #ifdef htonl
8339 printf("Defined as a macro.");
8340 #endif
8341 EOM
8342         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8343         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8344                 val="$define"
8345                 echo "But it seems to be defined as a macro." >&4
8346         fi
8347         $rm -f htonl.?
8348         ;;
8349 esac
8350 set d_htonl
8351 eval $setvar
8352
8353 : see which of string.h or strings.h is needed
8354 echo " "
8355 strings=`./findhdr string.h`
8356 if $test "$strings" && $test -r "$strings"; then
8357         echo "Using <string.h> instead of <strings.h>." >&4
8358         val="$define"
8359 else
8360         val="$undef"
8361         strings=`./findhdr strings.h`
8362         if $test "$strings" && $test -r "$strings"; then
8363                 echo "Using <strings.h> instead of <string.h>." >&4
8364         else
8365                 echo "No string header found -- You'll surely have problems." >&4
8366         fi
8367 fi
8368 set i_string
8369 eval $setvar
8370 case "$i_string" in
8371 "$undef") strings=`./findhdr strings.h`;;
8372 *)        strings=`./findhdr string.h`;;
8373 esac
8374
8375 : index or strchr
8376 echo " "
8377 if set index val -f; eval $csym; $val; then
8378         if set strchr val -f d_strchr; eval $csym; $val; then
8379                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8380                         val="$define"
8381                         vali="$undef"
8382                         echo "strchr() found." >&4
8383                 else
8384                         val="$undef"
8385                         vali="$define"
8386                         echo "index() found." >&4
8387                 fi
8388         else
8389                 val="$undef"
8390                 vali="$define"
8391                 echo "index() found." >&4
8392         fi
8393 else
8394         if set strchr val -f d_strchr; eval $csym; $val; then
8395                 val="$define"
8396                 vali="$undef"
8397                 echo "strchr() found." >&4
8398         else
8399                 echo "No index() or strchr() found!" >&4
8400                 val="$undef"
8401                 vali="$undef"
8402         fi
8403 fi
8404 set d_strchr; eval $setvar
8405 val="$vali"
8406 set d_index; eval $setvar
8407
8408 : check whether inet_aton exists
8409 set inet_aton d_inetaton
8410 eval $inlibc
8411
8412 : see if inttypes.h is available
8413 : we want a real compile instead of Inhdr because some systems
8414 : have an inttypes.h which includes non-existent headers
8415 echo " "
8416 $cat >try.c <<EOCP
8417 #include <inttypes.h>
8418 int main() {
8419         static int32_t foo32 = 0x12345678;
8420 }
8421 EOCP
8422 set try
8423 if eval $compile; then
8424         echo "<inttypes.h> found." >&4
8425         val="$define"
8426 else
8427         echo "<inttypes.h> NOT found." >&4
8428         val="$undef"
8429 fi
8430 $rm -f try.c try
8431 set i_inttypes
8432 eval $setvar
8433
8434 : check for int64_t
8435 case "$use64bits" in
8436 "$define" )
8437         echo " "
8438         echo $n "Checking to see if your system supports int64_t...$c" >&4
8439         $cat >try.c <<EOCP
8440 #include <sys/types.h>
8441 #$i_inttypes I_INTTYPES
8442 #ifdef I_INTTYPES
8443 #include <inttypes.h>
8444 #endif
8445 int64_t foo() { int64_t x; x = 7; return x; }
8446 EOCP
8447         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8448                 val="$define"
8449                 echo " Yup, it does." >&4
8450         else
8451                 val="$undef"
8452                 echo " Nope, it doesn't." >&4
8453         fi
8454         $rm -f try.*
8455         ;;
8456 *)      val="$undef"
8457         ;;
8458 esac
8459 set d_int64t
8460 eval $setvar
8461
8462
8463 : Look for isascii
8464 echo " "
8465 $cat >isascii.c <<'EOCP'
8466 #include <stdio.h>
8467 #include <ctype.h>
8468 int main() {
8469         int c = 'A';
8470         if (isascii(c))
8471                 exit(0);
8472         else
8473                 exit(1);
8474 }
8475 EOCP
8476 set isascii
8477 if eval $compile; then
8478         echo "isascii() found." >&4
8479         val="$define"
8480 else
8481         echo "isascii() NOT found." >&4
8482         val="$undef"
8483 fi
8484 set d_isascii
8485 eval $setvar
8486 $rm -f isascii*
8487
8488 : see if killpg exists
8489 set killpg d_killpg
8490 eval $inlibc
8491
8492 : see if lchown exists
8493 echo " "
8494 $cat > try.c <<'EOCP'
8495 /* System header to define __stub macros and hopefully few prototypes,
8496     which can conflict with char lchown(); below.  */
8497 #include <assert.h>
8498 /* Override any gcc2 internal prototype to avoid an error.  */
8499 /* We use char because int might match the return type of a gcc2
8500    builtin and then its argument prototype would still apply.  */
8501 char lchown();
8502 int main() {
8503     /*  The GNU C library defines this for functions which it implements
8504         to always fail with ENOSYS.  Some functions are actually named
8505         something starting with __ and the normal name is an alias.  */
8506 #if defined (__stub_lchown) || defined (__stub___lchown)
8507 choke me
8508 #else
8509 lchown();
8510 #endif
8511 ; return 0; }
8512 EOCP
8513 set try
8514 if eval $compile; then
8515     $echo "lchown() found." >&4
8516     val="$define"
8517 else
8518     $echo "lchown() NOT found." >&4
8519     val="$undef"
8520 fi
8521 set d_lchown
8522 eval $setvar
8523
8524 : see if link exists
8525 set link d_link
8526 eval $inlibc
8527
8528 : see if localeconv exists
8529 set localeconv d_locconv
8530 eval $inlibc
8531
8532 : see if lockf exists
8533 set lockf d_lockf
8534 eval $inlibc
8535
8536 : check for length of double
8537 echo " "
8538 case "$doublesize" in
8539 '')
8540         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8541         $cat >try.c <<'EOCP'
8542 #include <stdio.h>
8543 int main()
8544 {
8545         printf("%d\n", sizeof(double));
8546 }
8547 EOCP
8548         set try
8549         if eval $compile_ok; then
8550                 doublesize=`./try`
8551                 $echo " $doublesize bytes." >&4
8552         else
8553                 dflt='8'
8554                 echo "(I can't seem to compile the test program.  Guessing...)"
8555                 rp="What is the size of a double precision number (in bytes)?"
8556                 . ./myread
8557                 doublesize="$ans"
8558         fi
8559         ;;
8560 esac
8561 $rm -f try.c try
8562
8563 : check for long doubles
8564 echo " "
8565 echo $n "Checking to see if your system supports long doubles...$c" >&4
8566 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8567 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8568         val="$define"
8569         echo " Yup, it does." >&4
8570 else
8571         val="$undef"
8572         echo " Nope, it doesn't." >&4
8573 fi
8574 $rm try.*
8575 set d_longdbl
8576 eval $setvar
8577
8578 : check for length of long double
8579 case "${d_longdbl}${longdblsize}" in
8580 $define)
8581         echo " "
8582         $echo $n "Checking to see how big your long doubles are...$c" >&4
8583         $cat >try.c <<'EOCP'
8584 #include <stdio.h>
8585 int main()
8586 {
8587         printf("%d\n", sizeof(long double));
8588 }
8589 EOCP
8590         set try
8591         if eval $compile; then
8592                 longdblsize=`./try`
8593                 $echo " $longdblsize bytes." >&4
8594         else
8595                 dflt='8'
8596                 echo " "
8597                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8598                 rp="What is the size of a long double (in bytes)?"
8599                 . ./myread
8600                 longdblsize="$ans"
8601         fi
8602         if $test "X$doublesize" = "X$longdblsize"; then
8603                 echo "(That isn't any different from an ordinary double.)"
8604         fi      
8605         ;;
8606 esac
8607 $rm -f try.c try
8608
8609 : check for long long
8610 echo " "
8611 echo $n "Checking to see if your system supports long long...$c" >&4
8612 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8613 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8614         val="$define"
8615         echo " Yup, it does." >&4
8616 else
8617         val="$undef"
8618         echo " Nope, it doesn't." >&4
8619 fi
8620 $rm try.*
8621 set d_longlong
8622 eval $setvar
8623
8624 : check for length of long long
8625 case "${d_longlong}${longlongsize}" in
8626 $define)
8627         echo " "
8628         $echo $n "Checking to see how big your long longs are...$c" >&4
8629         $cat >try.c <<'EOCP'
8630 #include <stdio.h>
8631 int main()
8632 {
8633         printf("%d\n", sizeof(long long));
8634 }
8635 EOCP
8636         set try
8637         if eval $compile_ok; then
8638                 longlongsize=`./try`
8639                 $echo " $longlongsize bytes." >&4
8640         else
8641                 dflt='8'
8642                 echo " "
8643                 echo "(I can't seem to compile the test program.  Guessing...)"
8644                 rp="What is the size of a long long (in bytes)?"
8645                 . ./myread
8646                 longlongsize="$ans"
8647         fi
8648         if $test "X$longsize" = "X$longlongsize"; then
8649                 echo "(That isn't any different from an ordinary long.)"
8650         fi      
8651         ;;
8652 esac
8653 $rm -f try.c try
8654
8655 : see if lstat exists
8656 set lstat d_lstat
8657 eval $inlibc
8658
8659 : see if madvise exists
8660 set madvise d_madvise
8661 eval $inlibc
8662
8663 : see if mblen exists
8664 set mblen d_mblen
8665 eval $inlibc
8666
8667 : see if mbstowcs exists
8668 set mbstowcs d_mbstowcs
8669 eval $inlibc
8670
8671 : see if mbtowc exists
8672 set mbtowc d_mbtowc
8673 eval $inlibc
8674
8675 : see if memcmp exists
8676 set memcmp d_memcmp
8677 eval $inlibc
8678
8679 : see if memcpy exists
8680 set memcpy d_memcpy
8681 eval $inlibc
8682
8683 : see if memmove exists
8684 set memmove d_memmove
8685 eval $inlibc
8686
8687 : see if memset exists
8688 set memset d_memset
8689 eval $inlibc
8690
8691 : see if mkdir exists
8692 set mkdir d_mkdir
8693 eval $inlibc
8694
8695 : see if mkfifo exists
8696 set mkfifo d_mkfifo
8697 eval $inlibc
8698
8699 : see if mktime exists
8700 set mktime d_mktime
8701 eval $inlibc
8702
8703 : see if this is a sys/mman.h system
8704 set sys/mman.h i_sysmman
8705 eval $inhdr
8706
8707 : see if mmap exists
8708 set mmap d_mmap
8709 eval $inlibc
8710 : see what shmat returns
8711 : default to something harmless
8712 mmaptype='void *'
8713 case "$i_sysmman$d_mmap" in
8714 "$define$define")
8715         $cat >mmap.c <<'END'
8716 #include <sys/mman.h>
8717 void *mmap();
8718 END
8719         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8720                 mmaptype='void *'
8721         else
8722                 mmaptype='caddr_t'
8723         fi
8724         echo "and it returns ($mmaptype)." >&4
8725         ;;
8726 esac
8727
8728
8729
8730 : see if mprotect exists
8731 set mprotect d_mprotect
8732 eval $inlibc
8733
8734 : see if msgctl exists
8735 set msgctl d_msgctl
8736 eval $inlibc
8737
8738 : see if msgget exists
8739 set msgget d_msgget
8740 eval $inlibc
8741
8742 : see if msgsnd exists
8743 set msgsnd d_msgsnd
8744 eval $inlibc
8745
8746 : see if msgrcv exists
8747 set msgrcv d_msgrcv
8748 eval $inlibc
8749
8750 : see how much of the 'msg*(2)' library is present.
8751 h_msg=true
8752 echo " "
8753 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8754 *"$undef"*) h_msg=false;;
8755 esac
8756 case "$osname" in
8757 freebsd)
8758     case "`ipcs 2>&1`" in
8759     "SVID messages"*"not configured"*)
8760         echo "Your $osname does not have the msg*(2) configured." >&4
8761         h_msg=false
8762         val="$undef"
8763         set msgctl d_msgctl
8764         eval $setvar
8765         set msgget d_msgget
8766         eval $setvar
8767         set msgsnd d_msgsnd
8768         eval $setvar
8769         set msgrcv d_msgrcv
8770         eval $setvar
8771         ;;
8772     esac
8773     ;;
8774 esac
8775 : we could also check for sys/ipc.h ...
8776 if $h_msg && $test `./findhdr sys/msg.h`; then
8777         echo "You have the full msg*(2) library." >&4
8778         val="$define"
8779 else
8780         echo "You don't have the full msg*(2) library." >&4
8781         val="$undef"
8782 fi
8783 set d_msg
8784 eval $setvar
8785
8786 : see if msync exists
8787 set msync d_msync
8788 eval $inlibc
8789
8790 : see if munmap exists
8791 set munmap d_munmap
8792 eval $inlibc
8793
8794 : see if nice exists
8795 set nice d_nice
8796 eval $inlibc
8797
8798 : see if POSIX threads are available
8799 if test "X$usethreads" = "X$define"; then
8800         set pthread.h i_pthread
8801         eval $inhdr
8802 else
8803         i_pthread="$undef"
8804 fi
8805
8806
8807
8808 : how to create joinable pthreads
8809 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8810         echo " "
8811         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8812         $cat >try.c <<'EOCP'
8813 #include <pthread.h>
8814 int main() {
8815     int detachstate = JOINABLE;
8816 }
8817 EOCP
8818         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8819         if eval $compile; then
8820                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8821                 val="$undef" # Yes, undef.
8822                 set d_old_pthread_create_joinable
8823                 eval $setvar
8824                 val=""
8825                 set old_pthread_create_joinable
8826                 eval $setvar
8827         else
8828                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8829                 if eval $compile; then
8830                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8831                         val="$define"
8832                         set d_old_pthread_create_joinable
8833                         eval $setvar
8834                         val=PTHREAD_CREATE_UNDETACHED
8835                         set old_pthread_create_joinable
8836                         eval $setvar
8837                 else            
8838                         set try -DJOINABLE=__UNDETACHED
8839                         if eval $compile; then
8840                                 echo "You seem to use __UNDETACHED." >&4
8841                                 val="$define"
8842                                 set d_old_pthread_create_joinable
8843                                 eval $setvar
8844                                 val=__UNDETACHED
8845                                 set old_pthread_create_joinable
8846                                 eval $setvar
8847                         else
8848                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8849                                 val="$define"
8850                                 set d_old_pthread_create_joinable
8851                                 eval $setvar
8852                                 val=0
8853                                 set old_pthread_create_joinable
8854                                 eval $setvar
8855                         fi
8856                 fi
8857         fi
8858         $rm -f try try.*
8859 else
8860     d_old_pthread_create_joinable="$undef"
8861     old_pthread_create_joinable=""
8862 fi
8863
8864 : see if pause exists
8865 set pause d_pause
8866 eval $inlibc
8867
8868 : see if pipe exists
8869 set pipe d_pipe
8870 eval $inlibc
8871
8872 : see if poll exists
8873 set poll d_poll
8874 eval $inlibc
8875
8876
8877 : see whether the various POSIXish _yields exist
8878 $cat >try.c <<EOP
8879 #include <pthread.h>
8880 #include <stdio.h>
8881 int main() {
8882 #ifdef SCHED_YIELD
8883         sched_yield();
8884 #else
8885 #ifdef PTHREAD_YIELD
8886         pthread_yield();
8887 #else
8888 #ifdef PTHREAD_YIELD_NULL
8889         pthread_yield(NULL);
8890 #endif
8891 #endif
8892 #endif
8893 }
8894 EOP
8895 : see if sched_yield exists
8896 set try -DSCHED_YIELD
8897 if eval $compile; then
8898     val="$define"
8899     sched_yield='sched_yield()'
8900 else
8901     val="$undef"
8902 fi
8903 case "$usethreads" in
8904 $define)
8905         case "$val" in
8906         $define) echo 'sched_yield() found.' >&4        ;;
8907         *)       echo 'sched_yield() NOT found.' >&4    ;;
8908         esac
8909 esac
8910 set d_sched_yield
8911 eval $setvar
8912
8913 : see if pthread_yield exists
8914 set try -DPTHREAD_YIELD
8915 if eval $compile; then
8916     val="$define"
8917     case "$sched_yield" in
8918     '') sched_yield='pthread_yield()' ;;
8919     esac
8920 else
8921     set try -DPTHREAD_YIELD_NULL
8922     if eval $compile; then
8923         val="$define"
8924         case "$sched_yield" in
8925         '') sched_yield='pthread_yield(NULL)' ;;
8926         esac
8927     else
8928         val="$undef"
8929     fi
8930 fi
8931 case "$usethreads" in
8932 $define)
8933         case "$val" in
8934         $define) echo 'pthread_yield() found.' >&4      ;;
8935         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8936         esac
8937         ;;
8938 esac
8939 set d_pthread_yield
8940 eval $setvar
8941
8942 case "$sched_yield" in
8943 '') sched_yield=undef ;;
8944 esac
8945
8946 $rm -f try try.*
8947
8948 : see if this is a pwd.h system
8949 set pwd.h i_pwd
8950 eval $inhdr
8951
8952 case "$i_pwd" in
8953 $define)
8954         xxx=`./findhdr pwd.h`
8955         $cppstdin $cppflags $cppminus < $xxx >$$.h
8956
8957         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8958                 val="$define"
8959         else
8960                 val="$undef"
8961         fi
8962         set d_pwquota
8963         eval $setvar
8964
8965         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8966                 val="$define"
8967         else
8968                 val="$undef"
8969         fi
8970         set d_pwage
8971         eval $setvar
8972
8973         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8974                 val="$define"
8975         else
8976                 val="$undef"
8977         fi
8978         set d_pwchange
8979         eval $setvar
8980
8981         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8982                 val="$define"
8983         else
8984                 val="$undef"
8985         fi
8986         set d_pwclass
8987         eval $setvar
8988
8989         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8990                 val="$define"
8991         else
8992                 val="$undef"
8993         fi
8994         set d_pwexpire
8995         eval $setvar
8996
8997         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8998                 val="$define"
8999         else
9000                 val="$undef"
9001         fi
9002         set d_pwcomment
9003         eval $setvar
9004
9005         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9006                 val="$define"
9007         else
9008                 val="$undef"
9009         fi
9010         set d_pwgecos
9011         eval $setvar
9012
9013         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9014                 val="$define"
9015         else
9016                 val="$undef"
9017         fi
9018         set d_pwpasswd
9019         eval $setvar
9020
9021         $rm -f $$.h
9022         ;;
9023 *)
9024         val="$undef"; 
9025         set d_pwquota; eval $setvar
9026         set d_pwage; eval $setvar
9027         set d_pwchange; eval $setvar
9028         set d_pwclass; eval $setvar
9029         set d_pwexpire; eval $setvar
9030         set d_pwcomment; eval $setvar
9031         set d_pwgecos; eval $setvar
9032         set d_pwpasswd; eval $setvar
9033         ;;
9034 esac
9035
9036 : see if readdir and friends exist
9037 set readdir d_readdir
9038 eval $inlibc
9039 set seekdir d_seekdir
9040 eval $inlibc
9041 set telldir d_telldir
9042 eval $inlibc
9043 set rewinddir d_rewinddir
9044 eval $inlibc
9045
9046 : see if readlink exists
9047 set readlink d_readlink
9048 eval $inlibc
9049
9050 : see if readv exists
9051 set readv d_readv
9052 eval $inlibc
9053
9054 : see if rename exists
9055 set rename d_rename
9056 eval $inlibc
9057
9058 : see if rmdir exists
9059 set rmdir d_rmdir
9060 eval $inlibc
9061
9062 : see if memory.h is available.
9063 val=''
9064 set memory.h val
9065 eval $inhdr
9066
9067 : See if it conflicts with string.h
9068 case "$val" in
9069 $define)
9070         case "$strings" in
9071         '') ;;
9072         *)
9073                 $cppstdin $cppflags $cppminus < $strings > mem.h
9074                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9075                         echo " "
9076                         echo "We won't be including <memory.h>."
9077                         val="$undef"
9078                 fi
9079                 $rm -f mem.h
9080                 ;;
9081         esac
9082 esac
9083 set i_memory
9084 eval $setvar
9085
9086 : can bcopy handle overlapping blocks?
9087 val="$undef"
9088 case "$d_bcopy" in
9089 "$define")
9090         echo " "
9091         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9092         $cat >try.c <<EOCP
9093 #$i_memory I_MEMORY
9094 #$i_stdlib I_STDLIB
9095 #$i_string I_STRING
9096 #$i_unistd I_UNISTD
9097 EOCP
9098         $cat >>try.c <<'EOCP'
9099 #include <stdio.h>
9100 #ifdef I_MEMORY
9101 #  include <memory.h>
9102 #endif
9103 #ifdef I_STDLIB
9104 #  include <stdlib.h>
9105 #endif
9106 #ifdef I_STRING
9107 #  include <string.h>
9108 #else
9109 #  include <strings.h>
9110 #endif
9111 #ifdef I_UNISTD
9112 #  include <unistd.h>  /* Needed for NetBSD */
9113 #endif
9114 int main()
9115 {
9116 char buf[128], abc[128];
9117 char *b;
9118 int len;
9119 int off;
9120 int align;
9121
9122 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9123
9124 for (align = 7; align >= 0; align--) {
9125         for (len = 36; len; len--) {
9126                 b = buf+align;
9127                 bcopy(abc, b, len);
9128                 for (off = 1; off <= len; off++) {
9129                         bcopy(b, b+off, len);
9130                         bcopy(b+off, b, len);
9131                         if (bcmp(b, abc, len))
9132                                 exit(1);
9133                 }
9134         }
9135 }
9136 exit(0);
9137 }
9138 EOCP
9139         set try
9140         if eval $compile_ok; then
9141                 if ./try 2>/dev/null; then
9142                         echo "Yes, it can."
9143                         val="$define"
9144                 else
9145                         echo "It can't, sorry."
9146                         case "$d_memmove" in
9147                         "$define") echo "But that's Ok since you have memmove()." ;;
9148                         esac
9149                 fi
9150         else
9151                 echo "(I can't compile the test program, so we'll assume not...)"
9152                 case "$d_memmove" in
9153                 "$define") echo "But that's Ok since you have memmove()." ;;
9154                 esac
9155         fi
9156         ;;
9157 esac
9158 $rm -f try.* try core
9159 set d_safebcpy
9160 eval $setvar
9161
9162 : can memcpy handle overlapping blocks?
9163 val="$undef"
9164 case "$d_memcpy" in
9165 "$define")
9166         echo " "
9167         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9168         $cat >try.c <<EOCP
9169 #$i_memory I_MEMORY
9170 #$i_stdlib I_STDLIB
9171 #$i_string I_STRING
9172 #$i_unistd I_UNISTD
9173 EOCP
9174         $cat >>try.c <<'EOCP'
9175 #include <stdio.h>
9176 #ifdef I_MEMORY
9177 #  include <memory.h>
9178 #endif
9179 #ifdef I_STDLIB
9180 #  include <stdlib.h>
9181 #endif
9182 #ifdef I_STRING
9183 #  include <string.h>
9184 #else
9185 #  include <strings.h>
9186 #endif
9187 #ifdef I_UNISTD
9188 #  include <unistd.h>  /* Needed for NetBSD */
9189 #endif
9190 int main()
9191 {
9192 char buf[128], abc[128];
9193 char *b;
9194 int len;
9195 int off;
9196 int align;
9197
9198 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9199    try to store the string in read-only memory. */
9200 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9201
9202 for (align = 7; align >= 0; align--) {
9203         for (len = 36; len; len--) {
9204                 b = buf+align;
9205                 memcpy(b, abc, len);
9206                 for (off = 1; off <= len; off++) {
9207                         memcpy(b+off, b, len);
9208                         memcpy(b, b+off, len);
9209                         if (memcmp(b, abc, len))
9210                                 exit(1);
9211                 }
9212         }
9213 }
9214 exit(0);
9215 }
9216 EOCP
9217         set try
9218         if eval $compile_ok; then
9219                 if ./try 2>/dev/null; then
9220                         echo "Yes, it can."
9221                         val="$define"
9222                 else
9223                         echo "It can't, sorry."
9224                         case "$d_memmove" in
9225                         "$define") echo "But that's Ok since you have memmove()." ;;
9226                         esac
9227                 fi
9228         else
9229                 echo "(I can't compile the test program, so we'll assume not...)"
9230                 case "$d_memmove" in
9231                 "$define") echo "But that's Ok since you have memmove()." ;;
9232                 esac
9233         fi
9234         ;;
9235 esac
9236 $rm -f try.* try core
9237 set d_safemcpy
9238 eval $setvar
9239
9240 : can memcmp be trusted to compare relative magnitude?
9241 val="$undef"
9242 case "$d_memcmp" in
9243 "$define")
9244         echo " "
9245         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9246         $cat >try.c <<EOCP
9247 #$i_memory I_MEMORY
9248 #$i_stdlib I_STDLIB
9249 #$i_string I_STRING
9250 #$i_unistd I_UNISTD
9251 EOCP
9252         $cat >>try.c <<'EOCP'
9253 #include <stdio.h>
9254 #ifdef I_MEMORY
9255 #  include <memory.h>
9256 #endif
9257 #ifdef I_STDLIB
9258 #  include <stdlib.h>
9259 #endif
9260 #ifdef I_STRING
9261 #  include <string.h>
9262 #else
9263 #  include <strings.h>
9264 #endif
9265 #ifdef I_UNISTD
9266 #  include <unistd.h>  /* Needed for NetBSD */
9267 #endif
9268 int main()
9269 {
9270 char a = -1;
9271 char b = 0;
9272 if ((a < b) && memcmp(&a, &b, 1) < 0)
9273         exit(1);
9274 exit(0);
9275 }
9276 EOCP
9277         set try
9278         if eval $compile_ok; then
9279                 if ./try 2>/dev/null; then
9280                         echo "Yes, it can."
9281                         val="$define"
9282                 else
9283                         echo "No, it can't (it uses signed chars)."
9284                 fi
9285         else
9286                 echo "(I can't compile the test program, so we'll assume not...)"
9287         fi
9288         ;;
9289 esac
9290 $rm -f try.* try core
9291 set d_sanemcmp
9292 eval $setvar
9293
9294 : see if select exists
9295 set select d_select
9296 eval $inlibc
9297
9298 : see if semctl exists
9299 set semctl d_semctl
9300 eval $inlibc
9301
9302 : see if semget exists
9303 set semget d_semget
9304 eval $inlibc
9305
9306 : see if semop exists
9307 set semop d_semop
9308 eval $inlibc
9309
9310 : see how much of the 'sem*(2)' library is present.
9311 h_sem=true
9312 echo " "
9313 case "$d_semctl$d_semget$d_semop" in
9314 *"$undef"*) h_sem=false;;
9315 esac
9316 case "$osname" in
9317 freebsd)
9318     case "`ipcs 2>&1`" in
9319     "SVID messages"*"not configured"*)
9320         echo "Your $osname does not have the sem*(2) configured." >&4
9321         h_sem=false
9322         val="$undef"
9323         set semctl d_semctl
9324         eval $setvar
9325         set semget d_semget
9326         eval $setvar
9327         set semop d_semop
9328         eval $setvar
9329         ;;
9330     esac
9331     ;;
9332 esac
9333 : we could also check for sys/ipc.h ...
9334 if $h_sem && $test `./findhdr sys/sem.h`; then
9335         echo "You have the full sem*(2) library." >&4
9336         val="$define"
9337 else
9338         echo "You don't have the full sem*(2) library." >&4
9339         val="$undef"
9340 fi
9341 set d_sem
9342 eval $setvar
9343
9344 : see whether sys/sem.h defines union semun
9345 echo " "
9346 $cat > try.c <<'END'
9347 #include <sys/types.h>
9348 #include <sys/ipc.h>
9349 #include <sys/sem.h>
9350 int main () { union semun semun; semun.buf = 0; }
9351 END
9352 set try
9353 if eval $compile; then
9354     echo "You have union semun in <sys/sem.h>." >&4
9355     val="$define"
9356 else
9357     echo "You do not have union semun in <sys/sem.h>." >&4
9358     val="$undef"
9359 fi
9360 $rm -f try try.c try.h
9361 set d_union_semun
9362 eval $setvar
9363
9364 : see how to do semctl IPC_STAT
9365 case "$d_sem" in
9366 $define)
9367     : see whether semctl IPC_STAT can use union semun
9368     echo " "
9369     $cat > try.h <<END
9370 #ifndef S_IRUSR
9371 #   ifdef S_IREAD
9372 #       define S_IRUSR S_IREAD
9373 #       define S_IWUSR S_IWRITE
9374 #       define S_IXUSR S_IEXEC
9375 #   else
9376 #       define S_IRUSR 0400
9377 #       define S_IWUSR 0200
9378 #       define S_IXUSR 0100
9379 #   endif
9380 #   define S_IRGRP (S_IRUSR>>3)
9381 #   define S_IWGRP (S_IWUSR>>3)
9382 #   define S_IXGRP (S_IXUSR>>3)
9383 #   define S_IROTH (S_IRUSR>>6)
9384 #   define S_IWOTH (S_IWUSR>>6)
9385 #   define S_IXOTH (S_IXUSR>>6)
9386 #endif
9387 #ifndef S_IRWXU
9388 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9389 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9390 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9391 #endif
9392 END
9393
9394     $cat > try.c <<END
9395 #include <sys/types.h>
9396 #include <sys/ipc.h>
9397 #include <sys/sem.h>
9398 #include <sys/stat.h>
9399 #include <stdio.h>
9400 #include <errno.h>
9401 #include "try.h"
9402 #ifndef errno
9403 extern int errno;
9404 #endif
9405 #$d_union_semun HAS_UNION_SEMUN
9406 int main() {
9407     union semun
9408 #ifndef HAS_UNION_SEMUN
9409     {
9410         int val;
9411         struct semid_ds *buf;
9412         unsigned short *array;
9413     }
9414 #endif
9415     arg;
9416     int sem, st;
9417
9418 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9419     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9420     if (sem > -1) {
9421         struct semid_ds argbuf;
9422         arg.buf = &argbuf;
9423 #       ifdef IPC_STAT
9424         st = semctl(sem, 0, IPC_STAT, arg);
9425         if (st == 0)
9426             printf("semun\n");
9427         else
9428 #       endif /* IPC_STAT */
9429             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9430 #       ifdef IPC_RMID
9431         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9432 #       endif /* IPC_RMID */
9433             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9434     } else
9435 #endif /* IPC_PRIVATE && ... */
9436         printf("semget failed: errno = %d\n", errno);
9437   return 0;
9438 }
9439 END
9440     val="$undef"
9441     set try
9442     if eval $compile; then
9443         xxx=`./try`
9444         case "$xxx" in
9445         semun) val="$define" ;;
9446         esac
9447     fi
9448     $rm -f try try.c
9449     set d_semctl_semun
9450     eval $setvar
9451     case "$d_semctl_semun" in
9452     $define)
9453         echo "You can use union semun for semctl IPC_STAT." >&4
9454         also='also'
9455         ;;
9456     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9457         also=''
9458         ;;
9459     esac
9460
9461     : see whether semctl IPC_STAT can use struct semid_ds pointer
9462     $cat > try.c <<'END'
9463 #include <sys/types.h>
9464 #include <sys/ipc.h>
9465 #include <sys/sem.h>
9466 #include <sys/stat.h>
9467 #include "try.h"
9468 #include <stdio.h>
9469 #include <errno.h>
9470 #ifndef errno
9471 extern int errno;
9472 #endif
9473 int main() {
9474     struct semid_ds arg;
9475     int sem, st;
9476
9477 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9478     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9479     if (sem > -1) {
9480 #       ifdef IPC_STAT
9481         st = semctl(sem, 0, IPC_STAT, &arg);
9482         if (st == 0)
9483             printf("semid_ds\n");
9484         else
9485 #       endif /* IPC_STAT */
9486             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9487 #       ifdef IPC_RMID
9488         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9489 #       endif /* IPC_RMID */
9490             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9491     } else
9492 #endif /* IPC_PRIVATE && ... */
9493         printf("semget failed: errno = %d\n", errno);
9494
9495     return 0;
9496 }
9497 END
9498     val="$undef"
9499     set try
9500     if eval $compile; then
9501         xxx=`./try`
9502         case "$xxx" in
9503         semid_ds) val="$define" ;;
9504         esac
9505     fi
9506     $rm -f try try.c
9507     set d_semctl_semid_ds
9508     eval $setvar
9509     case "$d_semctl_semid_ds" in
9510     $define)
9511         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9512         ;;
9513     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9514         ;;
9515     esac
9516     $rm -f try.h
9517     ;;
9518 *)  val="$undef"
9519
9520     # We do not have the full sem*(2) library, so assume we can not
9521     # use either.
9522
9523     set d_semctl_semun
9524     eval $setvar
9525
9526     set d_semctl_semid_ds
9527     eval $setvar
9528     ;;
9529 esac
9530
9531 : see if setegid exists
9532 set setegid d_setegid
9533 eval $inlibc
9534
9535 : see if seteuid exists
9536 set seteuid d_seteuid
9537 eval $inlibc
9538
9539 : see if setgrent exists
9540 set setgrent d_setgrent
9541 eval $inlibc
9542
9543 : see if sethostent exists
9544 set sethostent d_sethent
9545 eval $inlibc
9546
9547 : see if setlinebuf exists
9548 set setlinebuf d_setlinebuf
9549 eval $inlibc
9550
9551 : see if setlocale exists
9552 set setlocale d_setlocale
9553 eval $inlibc
9554
9555 : see if setnetent exists
9556 set setnetent d_setnent
9557 eval $inlibc
9558
9559 : see if setprotoent exists
9560 set setprotoent d_setpent
9561 eval $inlibc
9562
9563 : see if setpgid exists
9564 set setpgid d_setpgid
9565 eval $inlibc
9566
9567 : see if setpgrp2 exists
9568 set setpgrp2 d_setpgrp2
9569 eval $inlibc
9570
9571 : see if setpriority exists
9572 set setpriority d_setprior
9573 eval $inlibc
9574
9575 : see if setpwent exists
9576 set setpwent d_setpwent
9577 eval $inlibc
9578
9579 : see if setregid exists
9580 set setregid d_setregid
9581 eval $inlibc
9582 set setresgid d_setresgid
9583 eval $inlibc
9584
9585 : see if setreuid exists
9586 set setreuid d_setreuid
9587 eval $inlibc
9588 set setresuid d_setresuid
9589 eval $inlibc
9590
9591 : see if setrgid exists
9592 set setrgid d_setrgid
9593 eval $inlibc
9594
9595 : see if setruid exists
9596 set setruid d_setruid
9597 eval $inlibc
9598
9599 : see if setservent exists
9600 set setservent d_setsent
9601 eval $inlibc
9602
9603 : see if setsid exists
9604 set setsid d_setsid
9605 eval $inlibc
9606
9607 : see if setvbuf exists
9608 set setvbuf d_setvbuf
9609 eval $inlibc
9610
9611 : see if sfio.h is available
9612 set sfio.h i_sfio
9613 eval $inhdr
9614
9615
9616 : see if sfio library is available
9617 case "$i_sfio" in
9618 $define)
9619         val=''
9620         set sfreserve val
9621         eval $inlibc
9622         ;;
9623 *)
9624         val="$undef"
9625         ;;
9626 esac
9627 : Ok, but do we want to use it.
9628 case "$val" in
9629 $define)
9630         case "$usesfio" in
9631         true|$define|[yY]*) dflt='y';;
9632         *) dflt='n';;
9633         esac
9634         echo "$package can use the sfio library, but it is experimental."
9635         rp="You seem to have sfio available, do you want to try using it?"
9636         . ./myread
9637         case "$ans" in
9638         y|Y) ;;
9639         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9640                 val="$undef"
9641                 : Remove sfio from list of libraries to use
9642                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9643                 shift
9644                 libs="$*"
9645                 echo "libs = $libs" >&4
9646                 ;;
9647         esac
9648         ;;
9649 *)      case "$usesfio" in
9650         true|$define|[yY]*)
9651                 echo "Sorry, cannot find sfio on this machine" >&4
9652                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9653                 ;;
9654         esac
9655         ;;
9656 esac
9657 set d_sfio
9658 eval $setvar
9659 case "$d_sfio" in
9660 $define) usesfio='true';;
9661 *) usesfio='false';;
9662 esac
9663
9664 : see if shmctl exists
9665 set shmctl d_shmctl
9666 eval $inlibc
9667
9668 : see if shmget exists
9669 set shmget d_shmget
9670 eval $inlibc
9671
9672 : see if shmat exists
9673 set shmat d_shmat
9674 eval $inlibc
9675 : see what shmat returns
9676 case "$d_shmat" in
9677 "$define")
9678         $cat >shmat.c <<'END'
9679 #include <sys/shm.h>
9680 void *shmat();
9681 END
9682         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9683                 shmattype='void *'
9684         else
9685                 shmattype='char *'
9686         fi
9687         echo "and it returns ($shmattype)." >&4
9688         : see if a prototype for shmat is available
9689         xxx=`./findhdr sys/shm.h`
9690         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9691         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9692                 val="$define"
9693         else
9694                 val="$undef"
9695         fi
9696         $rm -f shmat.[co]
9697         ;;
9698 *)
9699         val="$undef"
9700         ;;
9701 esac
9702 set d_shmatprototype
9703 eval $setvar
9704
9705 : see if shmdt exists
9706 set shmdt d_shmdt
9707 eval $inlibc
9708
9709 : see how much of the 'shm*(2)' library is present.
9710 h_shm=true
9711 echo " "
9712 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9713 *"$undef"*) h_shm=false;;
9714 esac
9715 case "$osname" in
9716 freebsd)
9717     case "`ipcs 2>&1`" in
9718     "SVID shared memory"*"not configured"*)
9719         echo "Your $osname does not have the shm*(2) configured." >&4
9720         h_shm=false
9721         val="$undef"
9722         set shmctl d_shmctl
9723         evat $setvar
9724         set shmget d_shmget
9725         evat $setvar
9726         set shmat d_shmat
9727         evat $setvar
9728         set shmdt d_shmdt
9729         evat $setvar
9730         ;;
9731     esac
9732     ;;
9733 esac
9734 : we could also check for sys/ipc.h ...
9735 if $h_shm && $test `./findhdr sys/shm.h`; then
9736         echo "You have the full shm*(2) library." >&4
9737         val="$define"
9738 else
9739         echo "You don't have the full shm*(2) library." >&4
9740         val="$undef"
9741 fi
9742 set d_shm
9743 eval $setvar
9744
9745 echo " "
9746 : see if we have sigaction
9747 if set sigaction val -f d_sigaction; eval $csym; $val; then
9748         echo 'sigaction() found.' >&4
9749         $cat > try.c <<'EOP'
9750 #include <stdio.h>
9751 #include <sys/types.h>
9752 #include <signal.h>
9753 int main()
9754 {
9755     struct sigaction act, oact;
9756 }
9757 EOP
9758         set try
9759         if eval $compile_ok; then
9760                 val="$define"
9761         else
9762                 echo "But you don't seem to have a useable struct sigaction." >&4
9763                 val="$undef"
9764         fi
9765 else
9766         echo 'sigaction NOT found.' >&4
9767         val="$undef"
9768 fi
9769 set d_sigaction; eval $setvar
9770 $rm -f try try$_o try.c
9771
9772 : see if sigsetjmp exists
9773 echo " "
9774 case "$d_sigsetjmp" in
9775 '')
9776         $cat >try.c <<'EOP'
9777 #include <setjmp.h>
9778 sigjmp_buf env;
9779 int set = 1;
9780 int main()
9781 {
9782         if (sigsetjmp(env,1))
9783                 exit(set);
9784         set = 0;
9785         siglongjmp(env, 1);
9786         exit(1);
9787 }
9788 EOP
9789         set try
9790         if eval $compile; then
9791                 if ./try >/dev/null 2>&1; then
9792                         echo "POSIX sigsetjmp found." >&4
9793                         val="$define"
9794                 else
9795                         $cat >&4 <<EOM
9796 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9797 I'll ignore them.
9798 EOM
9799                         val="$undef"
9800                 fi
9801         else
9802                 echo "sigsetjmp not found." >&4
9803                 val="$undef"
9804         fi
9805         ;;
9806 *) val="$d_sigsetjmp"
9807         case "$d_sigsetjmp" in
9808         $define) echo "POSIX sigsetjmp found." >&4;;
9809         $undef) echo "sigsetjmp not found." >&4;;
9810         esac
9811         ;;
9812 esac
9813 set d_sigsetjmp
9814 eval $setvar
9815 $rm -f try.c try
9816
9817 : see if stat knows about block sizes
9818 echo " "
9819 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9820 eval $hasfield
9821
9822 : see if _ptr and _cnt from stdio act std
9823 echo " "
9824 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9825         echo "(Looks like you have stdio.h from Linux.)"
9826         case "$stdio_ptr" in
9827         '') stdio_ptr='((fp)->_IO_read_ptr)'
9828                 ptr_lval=$define
9829                 ;;
9830         *)      ptr_lval=$d_stdio_ptr_lval;;
9831         esac
9832         case "$stdio_cnt" in
9833         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9834                 cnt_lval=$undef
9835                 ;;
9836         *)      cnt_lval=$d_stdio_cnt_lval;;
9837         esac
9838         case "$stdio_base" in
9839         '') stdio_base='((fp)->_IO_read_base)';;
9840         esac
9841         case "$stdio_bufsiz" in
9842         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9843         esac
9844 else
9845         case "$stdio_ptr" in
9846         '') stdio_ptr='((fp)->_ptr)'
9847                 ptr_lval=$define
9848                 ;;
9849         *)      ptr_lval=$d_stdio_ptr_lval;;
9850         esac
9851         case "$stdio_cnt" in
9852         '') stdio_cnt='((fp)->_cnt)'
9853                 cnt_lval=$define
9854                 ;;
9855         *)      cnt_lval=$d_stdio_cnt_lval;;
9856         esac
9857         case "$stdio_base" in
9858         '') stdio_base='((fp)->_base)';;
9859         esac
9860         case "$stdio_bufsiz" in
9861         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9862         esac
9863 fi
9864 : test whether _ptr and _cnt really work
9865 echo "Checking how std your stdio is..." >&4
9866 $cat >try.c <<EOP
9867 #include <stdio.h>
9868 #define FILE_ptr(fp)    $stdio_ptr
9869 #define FILE_cnt(fp)    $stdio_cnt
9870 int main() {
9871         FILE *fp = fopen("try.c", "r");
9872         char c = getc(fp);
9873         if (
9874                 18 <= FILE_cnt(fp) &&
9875                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9876         )
9877                 exit(0);
9878         exit(1);
9879 }
9880 EOP
9881 val="$undef"
9882 set try
9883 if eval $compile; then
9884         if ./try; then
9885                 echo "Your stdio acts pretty std."
9886                 val="$define"
9887         else
9888                 echo "Your stdio isn't very std."
9889         fi
9890 else
9891         echo "Your stdio doesn't appear very std."
9892 fi
9893 $rm -f try.c try
9894 set d_stdstdio
9895 eval $setvar
9896
9897 : Can _ptr be used as an lvalue?
9898 case "$d_stdstdio$ptr_lval" in
9899 $define$define) val=$define ;;
9900 *) val=$undef ;;
9901 esac
9902 set d_stdio_ptr_lval
9903 eval $setvar
9904
9905 : Can _cnt be used as an lvalue?
9906 case "$d_stdstdio$cnt_lval" in
9907 $define$define) val=$define ;;
9908 *) val=$undef ;;
9909 esac
9910 set d_stdio_cnt_lval
9911 eval $setvar
9912
9913 : see if _base is also standard
9914 val="$undef"
9915 case "$d_stdstdio" in
9916 $define)
9917         $cat >try.c <<EOP
9918 #include <stdio.h>
9919 #define FILE_base(fp)   $stdio_base
9920 #define FILE_bufsiz(fp) $stdio_bufsiz
9921 int main() {
9922         FILE *fp = fopen("try.c", "r");
9923         char c = getc(fp);
9924         if (
9925                 19 <= FILE_bufsiz(fp) &&
9926                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9927         )
9928                 exit(0);
9929         exit(1);
9930 }
9931 EOP
9932         set try
9933         if eval $compile; then
9934                 if ./try; then
9935                         echo "And its _base field acts std."
9936                         val="$define"
9937                 else
9938                         echo "But its _base field isn't std."
9939                 fi
9940         else
9941                 echo "However, it seems to be lacking the _base field."
9942         fi
9943         $rm -f try.c try
9944         ;;
9945 esac
9946 set d_stdiobase
9947 eval $setvar
9948
9949 : see if strcoll exists
9950 set strcoll d_strcoll
9951 eval $inlibc
9952
9953 : check for structure copying
9954 echo " "
9955 echo "Checking to see if your C compiler can copy structs..." >&4
9956 $cat >try.c <<'EOCP'
9957 int main()
9958 {
9959         struct blurfl {
9960                 int dyick;
9961         } foo, bar;
9962
9963         foo = bar;
9964 }
9965 EOCP
9966 if $cc -c try.c >/dev/null 2>&1 ; then
9967         val="$define"
9968         echo "Yup, it can."
9969 else
9970         val="$undef"
9971         echo "Nope, it can't."
9972 fi
9973 set d_strctcpy
9974 eval $setvar
9975 $rm -f try.*
9976
9977 : see if strerror and/or sys_errlist[] exist
9978 echo " "
9979 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9980     if set strerror val -f d_strerror; eval $csym; $val; then
9981                 echo 'strerror() found.' >&4
9982                 d_strerror="$define"
9983                 d_strerrm='strerror(e)'
9984                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9985                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9986                         d_syserrlst="$define"
9987                 else
9988                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9989                         d_syserrlst="$undef"
9990                 fi
9991     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9992                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9993                 echo 'strerror() found in string header.' >&4
9994                 d_strerror="$define"
9995                 d_strerrm='strerror(e)'
9996                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9997                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9998                                 d_syserrlst="$define"
9999                 else
10000                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10001                         d_syserrlst="$undef"
10002                 fi
10003     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10004                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10005                 d_strerror="$undef"
10006                 d_syserrlst="$define"
10007                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10008     else
10009                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10010                 d_strerror="$undef"
10011                 d_syserrlst="$undef"
10012                 d_strerrm='"unknown"'
10013     fi
10014 fi
10015
10016 : see if strtod exists
10017 set strtod d_strtod
10018 eval $inlibc
10019
10020 : see if strtol exists
10021 set strtol d_strtol
10022 eval $inlibc
10023
10024 : see if strtoul exists
10025 set strtoul d_strtoul
10026 eval $inlibc
10027
10028 : see if strxfrm exists
10029 set strxfrm d_strxfrm
10030 eval $inlibc
10031
10032 : see if symlink exists
10033 set symlink d_symlink
10034 eval $inlibc
10035
10036 : see if syscall exists
10037 set syscall d_syscall
10038 eval $inlibc
10039
10040 : see if sysconf exists
10041 set sysconf d_sysconf
10042 eval $inlibc
10043
10044 : see if system exists
10045 set system d_system
10046 eval $inlibc
10047
10048 : see if tcgetpgrp exists
10049 set tcgetpgrp d_tcgetpgrp
10050 eval $inlibc
10051
10052 : see if tcsetpgrp exists
10053 set tcsetpgrp d_tcsetpgrp
10054 eval $inlibc
10055
10056 : see if sys/types.h has to be included
10057 set sys/types.h i_systypes
10058 eval $inhdr
10059
10060 : see if prototype for telldir is available
10061 echo " "
10062 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10063 eval $hasproto
10064
10065 : define an is-a-typedef? function
10066 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10067 case "$inclist" in
10068 "") inclist="sys/types.h";;
10069 esac;
10070 eval "varval=\$$var";
10071 case "$varval" in
10072 "")
10073         $rm -f temp.c;
10074         for inc in $inclist; do
10075                 echo "#include <$inc>" >>temp.c;
10076         done;
10077         echo "#ifdef $type" >> temp.c;
10078         echo "printf(\"We have $type\");" >> temp.c;
10079         echo "#endif" >> temp.c;
10080         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10081         if $contains $type temp.E >/dev/null 2>&1; then
10082                 eval "$var=\$type";
10083         else
10084                 eval "$var=\$def";
10085         fi;
10086         $rm -f temp.?;;
10087 *) eval "$var=\$varval";;
10088 esac'
10089
10090 : define an is-a-typedef? function that prompts if the type is not available.
10091 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10092 case "$inclist" in
10093 "") inclist="sys/types.h";;
10094 esac;
10095 eval "varval=\$$var";
10096 case "$varval" in
10097 "")
10098         $rm -f temp.c;
10099         for inc in $inclist; do
10100                 echo "#include <$inc>" >>temp.c;
10101         done;
10102         echo "#ifdef $type" >> temp.c;
10103         echo "printf(\"We have $type\");" >> temp.c;
10104         echo "#endif" >> temp.c;
10105         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10106         echo " " ;
10107         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10108         if $contains $type temp.E >/dev/null 2>&1; then
10109                 echo "$type found." >&4;
10110                 eval "$var=\$type";
10111         else
10112                 echo "$type NOT found." >&4;
10113                 dflt="$def";
10114                 . ./myread ;
10115                 eval "$var=\$ans";
10116         fi;
10117         $rm -f temp.?;;
10118 *) eval "$var=\$varval";;
10119 esac'
10120
10121 : see if this is a sys/times.h system
10122 set sys/times.h i_systimes
10123 eval $inhdr
10124
10125 : see if times exists
10126 echo " "
10127 if set times val -f d_times; eval $csym; $val; then
10128         echo 'times() found.' >&4
10129         d_times="$define"
10130         inc=''
10131         case "$i_systimes" in
10132         "$define") inc='sys/times.h';;
10133         esac
10134         rp="What is the type returned by times() on this system?"
10135         set clock_t clocktype long stdio.h sys/types.h $inc
10136         eval $typedef_ask
10137 else
10138         echo 'times() NOT found, hope that will do.' >&4
10139         d_times="$undef"
10140         clocktype='int'
10141 fi
10142
10143 : see if truncate exists
10144 set truncate d_truncate
10145 eval $inlibc
10146
10147 : see if tzname[] exists
10148 echo " "
10149 if set tzname val -a d_tzname; eval $csym; $val; then
10150         val="$define"
10151         echo 'tzname[] found.' >&4
10152 else
10153         val="$undef"
10154         echo 'tzname[] NOT found.' >&4
10155 fi
10156 set d_tzname
10157 eval $setvar
10158
10159 : see if umask exists
10160 set umask d_umask
10161 eval $inlibc
10162
10163 : backward compatibility for d_hvfork
10164 if test X$d_hvfork != X; then
10165         d_vfork="$d_hvfork"
10166         d_hvfork=''
10167 fi
10168 : see if there is a vfork
10169 val=''
10170 set vfork val
10171 eval $inlibc
10172
10173 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10174 : perl on Solaris 2.x, and probably elsewhere.
10175 case "$val" in
10176 $define)
10177         echo " "
10178         case "$usevfork" in
10179         false) dflt='n';;
10180         *) dflt='y';;
10181         esac
10182         cat <<'EOM'
10183  
10184 Perl can only use a vfork() that doesn't suffer from strict
10185 restrictions on calling functions or modifying global data in
10186 the child.  For example, glibc-2.1 contains such a vfork()
10187 that is unsuitable.  If your system provides a proper fork()
10188 call, chances are that you do NOT want perl to use vfork().
10189
10190 EOM
10191         rp="Do you still want to use vfork()?"
10192         . ./myread
10193         case "$ans" in
10194         y|Y) ;;
10195         *)
10196                 echo "Ok, we won't use vfork()."
10197                 val="$undef"
10198                 ;;
10199         esac
10200         ;;
10201 esac
10202 set d_vfork
10203 eval $setvar
10204 case "$d_vfork" in
10205 $define) usevfork='true';;
10206 *) usevfork='false';;
10207 esac
10208
10209 : see if this is an sysdir system
10210 set sys/dir.h i_sysdir
10211 eval $inhdr
10212
10213 : see if this is an sysndir system
10214 set sys/ndir.h i_sysndir
10215 eval $inhdr
10216
10217 : see if closedir exists
10218 set closedir d_closedir
10219 eval $inlibc
10220
10221 case "$d_closedir" in
10222 "$define")
10223         echo " "
10224         echo "Checking whether closedir() returns a status..." >&4
10225         cat > closedir.c <<EOM
10226 #$i_dirent I_DIRENT             /**/
10227 #$i_sysdir I_SYS_DIR            /**/
10228 #$i_sysndir I_SYS_NDIR          /**/
10229 #$i_systypes I_SYS_TYPES        /**/
10230
10231 #if defined(I_SYS_TYPES)
10232 #include <sys/types.h>
10233 #endif
10234 #if defined(I_DIRENT)
10235 #include <dirent.h>
10236 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10237 #include <sys/dir.h>
10238 #endif
10239 #else
10240 #ifdef I_SYS_NDIR
10241 #include <sys/ndir.h>
10242 #else
10243 #ifdef I_SYS_DIR
10244 #ifdef hp9000s500
10245 #include <ndir.h>       /* may be wrong in the future */
10246 #else
10247 #include <sys/dir.h>
10248 #endif
10249 #endif
10250 #endif
10251 #endif 
10252 int main() { return closedir(opendir(".")); }
10253 EOM
10254         set closedir
10255         if eval $compile_ok; then
10256                 if ./closedir > /dev/null 2>&1 ; then
10257                         echo "Yes, it does."
10258                         val="$undef"
10259                 else
10260                         echo "No, it doesn't."
10261                         val="$define"
10262                 fi
10263         else
10264                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10265                 val="$define"
10266         fi
10267         ;;
10268 *)
10269         val="$undef";
10270         ;;
10271 esac
10272 set d_void_closedir
10273 eval $setvar
10274 $rm -f closedir*
10275 : check for volatile keyword
10276 echo " "
10277 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10278 $cat >try.c <<'EOCP'
10279 int main()
10280 {
10281         typedef struct _goo_struct goo_struct;
10282         goo_struct * volatile goo = ((goo_struct *)0);
10283         struct _goo_struct {
10284                 long long_int;
10285                 int reg_int;
10286                 char char_var;
10287         };
10288         typedef unsigned short foo_t;
10289         char *volatile foo;
10290         volatile int bar;
10291         volatile foo_t blech;
10292         foo = foo;
10293 }
10294 EOCP
10295 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10296         val="$define"
10297         echo "Yup, it does."
10298 else
10299         val="$undef"
10300         echo "Nope, it doesn't."
10301 fi
10302 set d_volatile
10303 eval $setvar
10304 $rm -f try.*
10305
10306 : see if there is a wait4
10307 set wait4 d_wait4
10308 eval $inlibc
10309
10310 : see if waitpid exists
10311 set waitpid d_waitpid
10312 eval $inlibc
10313
10314 : see if wcstombs exists
10315 set wcstombs d_wcstombs
10316 eval $inlibc
10317
10318 : see if wctomb exists
10319 set wctomb d_wctomb
10320 eval $inlibc
10321
10322 : see if writev exists
10323 set writev d_writev
10324 eval $inlibc
10325
10326 : preserve RCS keywords in files with variable substitution, grrr
10327 Date='$Date'
10328 Id='$Id'
10329 Log='$Log'
10330 RCSfile='$RCSfile'
10331 Revision='$Revision'
10332
10333 case "$crosscompile" in
10334 ''|[nN]*) crosscompile="$undef" ;;
10335 esac
10336
10337 case "$osname" in
10338 next|rhapsody) multiarch="$define" ;;
10339 esac
10340 case "$multiarch" in
10341 ''|[nN]*) multiarch="$undef" ;;
10342 esac
10343
10344 : check for alignment requirements
10345 echo " "
10346 case "$crosscompile$multiarch" in
10347 *$define*)
10348         $cat <<EOM
10349 You seem to be either cross-compiling or doing a multiarchitecture build,
10350 skipping the memory alignment check.
10351
10352 EOM
10353         case "$alignbytes" in
10354         '') alignbytes=8 ;;
10355         esac
10356         ;;
10357 *)
10358         case "$alignbytes" in
10359         '') echo "Checking alignment constraints..." >&4
10360                 $cat >try.c <<'EOCP'
10361 struct foobar {
10362         char foo;
10363         double bar;
10364 } try_algn;
10365 int main()
10366 {
10367         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10368 }
10369 EOCP
10370                 set try
10371                 if eval $compile_ok; then
10372                         dflt=`./try`
10373                 else
10374                         dflt='8'
10375                         echo "(I can't seem to compile the test program...)"
10376                 fi
10377                 ;;
10378         *) dflt="$alignbytes"
10379                 ;;
10380         esac
10381         rp="Doubles must be aligned on a how-many-byte boundary?"
10382         . ./myread
10383         alignbytes="$ans"
10384         $rm -f try.c try
10385         ;;
10386 esac
10387
10388
10389 : check for ordering of bytes in a long
10390 echo " "
10391 case "$crosscompile$multiarch" in
10392 *$define*)
10393         $cat <<EOM
10394 You seem to be either cross-compiling or doing a multiarchitecture build,
10395 skipping the byteorder check.
10396
10397 EOM
10398         byteorder=''
10399         ;;
10400 *)
10401         case "$byteorder" in
10402         '')
10403                 $cat <<'EOM'
10404 In the following, larger digits indicate more significance.  A big-endian
10405 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10406 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10407 machines may have weird orders like 3412.  A Cray will report 87654321. If
10408 the test program works the default is probably right.
10409 I'm now running the test program...
10410 EOM
10411                 $cat >try.c <<'EOCP'
10412 #include <stdio.h>
10413 int main()
10414 {
10415         int i;
10416         union {
10417                 unsigned long l;
10418                 char c[sizeof(long)];
10419         } u;
10420
10421         if (sizeof(long) > 4)
10422                 u.l = (0x08070605L << 32) | 0x04030201L;
10423         else
10424                 u.l = 0x04030201L;
10425         for (i = 0; i < sizeof(long); i++)
10426                 printf("%c", u.c[i]+'0');
10427         printf("\n");
10428         exit(0);
10429 }
10430 EOCP
10431                 xxx_prompt=y
10432                 set try
10433                 if eval $compile && ./try > /dev/null; then
10434                         dflt=`./try`
10435                         case "$dflt" in
10436                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10437                                 echo "(The test program ran ok.)"
10438                                 echo "byteorder=$dflt"
10439                                 xxx_prompt=n
10440                         ;;
10441                         ????|????????) echo "(The test program ran ok.)" ;;
10442                         *) echo "(The test program didn't run right for some reason.)" ;;
10443                         esac
10444                 else
10445                         dflt='4321'
10446                         cat <<'EOM'
10447 (I can't seem to compile the test program.  Guessing big-endian...)
10448 EOM
10449                 fi
10450                 case "$xxx_prompt" in
10451                 y)
10452                         rp="What is the order of bytes in a long?"
10453                         . ./myread
10454                         byteorder="$ans"
10455                         ;;
10456                 *)      byteorder=$dflt
10457                         ;;
10458                 esac
10459                 ;;
10460         esac
10461         $rm -f try.c try
10462         ;;
10463 esac
10464
10465
10466 : how do we catenate cpp tokens here?
10467 echo " "
10468 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10469 $cat >cpp_stuff.c <<'EOCP'
10470 #define RCAT(a,b)a/**/b
10471 #define ACAT(a,b)a ## b
10472 RCAT(Rei,ser)
10473 ACAT(Cir,cus)
10474 EOCP
10475 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10476 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10477         echo "Oh!  Smells like ANSI's been here." >&4
10478         echo "We can catify or stringify, separately or together!"
10479         cpp_stuff=42
10480 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10481         echo "Ah, yes!  The good old days!" >&4
10482         echo "However, in the good old days we don't know how to stringify and"
10483         echo "catify at the same time."
10484         cpp_stuff=1
10485 else
10486         $cat >&4 <<EOM
10487 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10488 to have to edit the values of CAT[2-5] in config.h...
10489 EOM
10490         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10491 fi
10492 $rm -f cpp_stuff.*
10493
10494 : see if this is a db.h system
10495 set db.h i_db
10496 eval $inhdr
10497
10498 case "$i_db" in
10499 $define)
10500         : Check db version.
10501         echo " "
10502         echo "Checking Berkeley DB version ..." >&4
10503         $cat >try.c <<EOCP
10504 #$d_const HASCONST
10505 #ifndef HASCONST
10506 #define const
10507 #endif
10508 #include <sys/types.h>
10509 #include <stdio.h>
10510 #include <db.h>
10511 int main()
10512 {
10513 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10514     int Major, Minor, Patch ;
10515     unsigned long Version ;
10516     (void)db_version(&Major, &Minor, &Patch) ;
10517     printf("You have Berkeley DB Version 2 or greater\n");
10518
10519     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10520                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10521     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10522                 Major, Minor, Patch) ;
10523
10524     /* check that db.h & libdb are compatible */
10525     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10526         printf("db.h and libdb are incompatible\n") ;
10527         exit(3);        
10528     }
10529
10530     printf("db.h and libdb are compatible\n") ;
10531
10532     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10533                 + DB_VERSION_PATCH ;
10534
10535     /* needs to be >= 2.3.4 */
10536     if (Version < 2003004) {
10537     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10538         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10539         exit(2);        
10540     }
10541
10542     exit(0);
10543 #else
10544 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10545     printf("You have Berkeley DB Version 1\n");
10546     exit(0);    /* DB version < 2: the coast is clear. */
10547 #else
10548     exit(1);    /* <db.h> not Berkeley DB? */
10549 #endif
10550 #endif
10551 }
10552 EOCP
10553         set try
10554         if eval $compile && ./try; then
10555                 echo 'Looks OK.' >&4
10556         else
10557                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10558                 i_db=$undef
10559                 case " $libs " in
10560                 *"-ldb "*)
10561                         : Remove db from list of libraries to use
10562                         echo "Removing unusable -ldb from library list" >&4
10563                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10564                         shift
10565                         libs="$*"
10566                         echo "libs = $libs" >&4
10567                         ;;
10568                 esac
10569         fi
10570         $rm -f try.*
10571         ;;
10572 esac
10573
10574 case "$i_db" in
10575 define)
10576         : Check the return type needed for hash 
10577         echo " "
10578         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10579         $cat >try.c <<EOCP
10580 #$d_const HASCONST
10581 #ifndef HASCONST
10582 #define const
10583 #endif
10584 #include <sys/types.h>
10585 #include <db.h>
10586
10587 #ifndef DB_VERSION_MAJOR
10588 u_int32_t hash_cb (ptr, size)
10589 const void *ptr;
10590 size_t size;
10591 {
10592 }
10593 HASHINFO info;
10594 int main()
10595 {
10596         info.hash = hash_cb;
10597 }
10598 #endif
10599 EOCP
10600         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10601                 if $contains warning try.out >>/dev/null 2>&1 ; then
10602                         db_hashtype='int'
10603                 else
10604                         db_hashtype='u_int32_t'
10605                 fi
10606         else
10607                 : XXX Maybe we should just give up here.
10608                 db_hashtype=u_int32_t
10609                 $cat try.out >&4
10610                 echo "Help:  I can't seem to compile the db test program." >&4
10611                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10612         fi
10613         $rm -f try.*
10614         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10615         ;;
10616 *)      db_hashtype=u_int32_t
10617         ;;
10618 esac
10619 case "$i_db" in
10620 define)
10621         : Check the return type needed for prefix 
10622         echo " "
10623         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10624         cat >try.c <<EOCP
10625 #$d_const HASCONST
10626 #ifndef HASCONST
10627 #define const
10628 #endif
10629 #include <sys/types.h>
10630 #include <db.h>
10631
10632 #ifndef DB_VERSION_MAJOR
10633 size_t prefix_cb (key1, key2)
10634 const DBT *key1;
10635 const DBT *key2;
10636 {
10637 }
10638 BTREEINFO info;
10639 int main()
10640 {
10641         info.prefix = prefix_cb;
10642 }
10643 #endif
10644 EOCP
10645         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10646                 if $contains warning try.out >>/dev/null 2>&1 ; then
10647                         db_prefixtype='int'
10648                 else
10649                         db_prefixtype='size_t'
10650                 fi
10651         else
10652                 db_prefixtype='size_t'
10653                 : XXX Maybe we should just give up here.
10654                 $cat try.out >&4
10655                 echo "Help:  I can't seem to compile the db test program." >&4
10656                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10657         fi
10658         $rm -f try.*
10659         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10660         ;;
10661 *)      db_prefixtype='size_t'
10662         ;;
10663 esac
10664
10665 : check for void type
10666 echo " "
10667 echo "Checking to see how well your C compiler groks the void type..." >&4
10668 case "$voidflags" in
10669 '')
10670         $cat >try.c <<'EOCP'
10671 #if TRY & 1
10672 void sub() {
10673 #else
10674 sub() {
10675 #endif
10676         extern void moo();      /* function returning void */
10677         void (*goo)();          /* ptr to func returning void */
10678 #if TRY & 8
10679         void *hue;              /* generic ptr */
10680 #endif
10681 #if TRY & 2
10682         void (*foo[10])();
10683 #endif
10684
10685 #if TRY & 4
10686         if(goo == moo) {
10687                 exit(0);
10688         }
10689 #endif
10690         exit(0);
10691 }
10692 int main() { sub(); }
10693 EOCP
10694         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10695                 voidflags=$defvoidused
10696         echo "Good.  It appears to support void to the level $package wants.">&4
10697                 if $contains warning .out >/dev/null 2>&1; then
10698                         echo "However, you might get some warnings that look like this:"
10699                         $cat .out
10700                 fi
10701         else
10702 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10703                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10704                         echo "It supports 1..."
10705                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10706                                 echo "It also supports 2..."
10707                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10708                                         voidflags=7
10709                                         echo "And it supports 4 but not 8 definitely."
10710                                 else
10711                                         echo "It doesn't support 4..."
10712                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10713                                                 voidflags=11
10714                                                 echo "But it supports 8."
10715                                         else
10716                                                 voidflags=3
10717                                                 echo "Neither does it support 8."
10718                                         fi
10719                                 fi
10720                         else
10721                                 echo "It does not support 2..."
10722                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10723                                         voidflags=13
10724                                         echo "But it supports 4 and 8."
10725                                 else
10726                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10727                                                 voidflags=5
10728                                                 echo "And it supports 4 but has not heard about 8."
10729                                         else
10730                                                 echo "However it supports 8 but not 4."
10731                                         fi
10732                                 fi
10733                         fi
10734                 else
10735                         echo "There is no support at all for void."
10736                         voidflags=0
10737                 fi
10738         fi
10739 esac
10740 case "$voidflags" in
10741 "$defvoidused") ;;
10742 *)      $cat >&4 <<'EOM'
10743   Support flag bits are:
10744     1: basic void declarations.
10745     2: arrays of pointers to functions returning void.
10746     4: operations between pointers to and addresses of void functions.
10747     8: generic void pointers.
10748 EOM
10749         dflt="$voidflags";
10750         rp="Your void support flags add up to what?"
10751         . ./myread
10752         voidflags="$ans"
10753         ;;
10754 esac
10755 $rm -f try.* .out
10756
10757
10758 : How can we generate normalized random numbers ?
10759 echo " "
10760 echo "Looking for a random number function..." >&4
10761 case "$randfunc" in
10762 '')
10763         if set drand48 val -f; eval $csym; $val; then
10764                 dflt="drand48"
10765                 echo "Good, found drand48()." >&4
10766         elif set random val -f; eval $csym; $val; then
10767                 dflt="random"
10768                 echo "OK, found random()." >&4
10769         else
10770                 dflt="rand"
10771                 echo "Yick, looks like I have to use rand()." >&4
10772         fi
10773         echo " "
10774         ;;
10775 *)
10776         dflt="$randfunc"
10777         ;;
10778 esac
10779 cont=true
10780
10781 case "$ccflags" in
10782 *-Dmy_rand=*|*-Dmy_srand=*)
10783         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10784         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10785         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10786         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10787         ;;
10788 esac
10789
10790 while $test "$cont"; do
10791         rp="Use which function to generate random numbers?"
10792         . ./myread
10793         if $test "$ans" = "$dflt"; then
10794                 : null
10795         else
10796                 randbits=''
10797         fi
10798         randfunc="$ans"
10799         if set $ans val -f; eval $csym; $val; then
10800                 cont=''
10801         else
10802                 dflt=y
10803                 rp="I cannot find function $ans. Use that name anyway?"
10804                 . ./myread
10805                 dflt=rand
10806                 case "$ans" in
10807                         [yY]*) cont='';;
10808                 esac
10809         fi
10810         case "$cont" in
10811         '')
10812                 case "$randfunc" in
10813                 drand48)
10814                         drand01="drand48()"
10815                         seedfunc="srand48"
10816                         randbits=48
10817                         randseedtype=long
10818                         ;;
10819                 rand|random)
10820                         case "$randbits" in
10821                         '')
10822 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10823                                 $cat >try.c <<EOCP
10824 #$i_unistd I_UNISTD
10825 #$i_stdlib I_STDLIB
10826 #include <stdio.h>
10827 #ifdef I_UNISTD
10828 #  include <unistd.h>
10829 #endif
10830 #ifdef I_STDLIB
10831 #  include <stdlib.h>
10832 #endif
10833 int main()
10834 {
10835         register int i;
10836         register unsigned long tmp;
10837         register unsigned long max = 0L;
10838
10839         for (i = 1000; i; i--) {
10840                 tmp = (unsigned long) $randfunc();
10841                 if (tmp > max) max = tmp;
10842         }
10843         for (i = 0; max; i++)
10844                 max /= 2;
10845         printf("%d\n",i);
10846 }
10847 EOCP
10848                                 set try
10849                                 if eval $compile_ok; then
10850                                         dflt=`try`
10851                                 else
10852                                         dflt='?'
10853                                         echo "(I can't seem to compile the test program...)"
10854                                 fi
10855                                 ;;
10856                         *)
10857                                 dflt="$randbits"
10858                                 ;;
10859                         esac
10860                         rp="How many bits does your $randfunc() function produce?"
10861                         . ./myread
10862                         randbits="$ans"
10863                         $rm -f try.c try
10864                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10865                         seedfunc="s$randfunc"
10866                         randseedtype=unsigned
10867                         ;;
10868                 *)
10869                         dflt="31"
10870                         rp="How many bits does your $randfunc() function produce?"
10871                         . ./myread
10872                         randbits="$ans"
10873                         seedfunc="s$randfunc"
10874                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10875                         if set $seedfunc val -f; eval $csym; $val; then
10876                                 echo "(Using $seedfunc() to seed random generator)"
10877                         else
10878                                 echo "(Warning: no $seedfunc() to seed random generator)"
10879                                 seedfunc=rand
10880                         fi
10881                         randseedtype=unsigned
10882                         ;;
10883                 esac
10884                 ;;
10885         esac
10886 done
10887
10888 echo " "
10889 echo "Determining whether or not we are on an EBCDIC system..." >&4
10890 $cat >tebcdic.c <<'EOM'
10891 int main()
10892 {
10893   if ('M'==0xd4) return 0;
10894   return 1;
10895 }
10896 EOM
10897
10898 val=$undef
10899 set tebcdic
10900 if eval $compile_ok; then
10901         if ./tebcdic; then
10902                 echo "You have EBCDIC." >&4
10903                 val="$define"
10904         else
10905                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10906         fi
10907 else
10908         echo "I'm unable to compile the test program." >&4
10909         echo "I'll assume ASCII or some ISO Latin." >&4
10910 fi
10911 $rm -f tebcdic.c tebcdic
10912 set ebcdic
10913 eval $setvar
10914
10915 : see what type file positions are declared as in the library
10916 rp="What is the type for file position used by fsetpos()?"
10917 set fpos_t fpostype long stdio.h sys/types.h
10918 eval $typedef_ask
10919
10920 : Store the full pathname to the ar program for use in the C program
10921 : Respect a hint or command line value for full_ar.
10922 case "$full_ar" in
10923 '') full_ar=$ar ;;
10924 esac
10925
10926 : Store the full pathname to the sed program for use in the C program
10927 full_sed=$sed
10928
10929 : see what type gids are declared as in the kernel
10930 echo " "
10931 echo "Looking for the type for group ids returned by getgid()."
10932 set gid_t gidtype xxx stdio.h sys/types.h
10933 eval $typedef
10934 case "$gidtype" in
10935 xxx)
10936         xxx=`./findhdr sys/user.h`
10937         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10938         case $1 in
10939         unsigned) dflt="$1 $2" ;;
10940         *) dflt="$1" ;;
10941         esac
10942         ;;
10943 *) dflt="$gidtype";;
10944 esac
10945 case "$gidtype" in
10946 gid_t) echo "gid_t found." ;;
10947 *)      rp="What is the type for group ids returned by getgid()?"
10948         . ./myread
10949         gidtype="$ans"
10950         ;;
10951 esac
10952
10953 : see if getgroups exists
10954 set getgroups d_getgrps
10955 eval $inlibc
10956
10957 : see if setgroups exists
10958 set setgroups d_setgrps
10959 eval $inlibc
10960
10961
10962 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10963 echo " "
10964 case "$d_getgrps$d_setgrps" in
10965 *define*)
10966         case "$groupstype" in
10967         '') dflt="$gidtype" ;;
10968         *)  dflt="$groupstype" ;;
10969         esac
10970         $cat <<EOM
10971 What type of pointer is the second argument to getgroups() and setgroups()?
10972 Usually this is the same as group ids, $gidtype, but not always.
10973
10974 EOM
10975         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10976         . ./myread
10977         groupstype="$ans"
10978         ;;
10979 *)  groupstype="$gidtype";;
10980 esac
10981
10982 : see what type lseek is declared as in the kernel
10983 rp="What is the type used for lseek's offset on this system?"
10984 set off_t lseektype long stdio.h sys/types.h
10985 eval $typedef_ask
10986
10987 echo " "
10988 $echo $n "Checking to see how big your file offsets are...$c" >&4
10989 $cat >try.c <<EOCP
10990 #include <sys/types.h>
10991 #include <stdio.h>
10992 int main()
10993 {
10994         printf("%d\n", sizeof($lseektype));
10995 }
10996 EOCP
10997 set try
10998 if eval $compile_ok; then
10999         lseeksize=`./try`
11000         $echo " $lseeksize bytes." >&4
11001 else
11002         dflt='4'
11003         echo " "
11004         echo "(I can't seem to compile the test program.  Guessing...)"
11005         rp="What is the size of your file offsets (in bytes)?"
11006         . ./myread
11007         lseeksize="$ans"
11008 fi
11009 $rm -f try.c try
11010
11011 echo " "
11012 echo "Checking if your $make program sets \$(MAKE)..." >&4
11013 case "$make_set_make" in
11014 '')
11015         $sed 's/^X //' > testmake.mak << 'EOF'
11016 Xall:
11017 X       @echo 'maketemp="$(MAKE)"'
11018 EOF
11019         case "`$make -f testmake.mak 2>/dev/null`" in
11020         *maketemp=*) make_set_make='#' ;;
11021         *)      make_set_make="MAKE=$make" ;;
11022         esac
11023         $rm -f testmake.mak
11024         ;;
11025 esac
11026 case "$make_set_make" in
11027 '#') echo "Yup, it does.";;
11028 *) echo "Nope, it doesn't.";;
11029 esac
11030
11031 : see what type is used for mode_t
11032 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11033 set mode_t modetype int stdio.h sys/types.h
11034 eval $typedef_ask
11035
11036 : define a fucntion to check prototypes
11037 $cat > protochk <<EOSH
11038 $startsh
11039 cc="$cc"
11040 optimize="$optimize"
11041 ccflags="$ccflags"
11042 prototype="$prototype"
11043 define="$define"
11044 rm=$rm
11045 EOSH
11046
11047 $cat >> protochk <<'EOSH'
11048
11049 $rm -f try.c
11050 foo="$1"
11051 shift
11052 while test $# -ge 2; do
11053         case "$1" in
11054                 $define) echo "#include <$2>" >> try.c ;;
11055                 literal) echo "$2" >> try.c ;;
11056         esac
11057     shift 2
11058 done
11059 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11060 cat >> try.c <<'EOCP'
11061 #ifdef CAN_PROTOTYPE
11062 #define _(args) args
11063 #else
11064 #define _(args) ()
11065 #endif
11066 EOCP
11067 echo "$foo" >> try.c
11068 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11069 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11070 status=$?
11071 $rm -f try.[co]
11072 exit $status
11073 EOSH
11074 chmod +x protochk
11075 $eunicefix protochk
11076
11077 : see what type is used for size_t
11078 rp="What is the type used for the length parameter for string functions?"
11079 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11080 eval $typedef_ask
11081
11082 : check for type of arguments to gethostbyaddr. 
11083 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11084         case "$d_gethbyaddr" in
11085         $define)
11086                 $cat <<EOM
11087
11088 Checking to see what type of arguments are accepted by gethostbyaddr().
11089 EOM
11090                 hdrs="$define sys/types.h
11091                         $d_socket sys/socket.h 
11092                         $i_niin netinet/in.h 
11093                         $i_netdb netdb.h
11094                         $i_unistd unistd.h"
11095                 : The first arg can 'char *' or 'void *'
11096                 : The second arg is some of integral type
11097                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11098                         for yyy in size_t long int; do
11099                                 case "$netdb_host_type" in
11100                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11101                                         if ./protochk "$try" $hdrs; then
11102                                                 echo "Your system accepts $xxx for the first arg."
11103                                                 echo "...and $yyy for the second arg."
11104                                                 netdb_host_type="$xxx"
11105                                                 netdb_hlen_type="$yyy"
11106                                         fi
11107                                         ;;
11108                                 esac
11109                         done
11110                 done
11111                 : In case none of those worked, prompt the user.
11112                 case "$netdb_host_type" in
11113                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11114                         dflt='char *'
11115                         . ./myread
11116                         netdb_host_type=$ans
11117                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11118                         dflt="$sizetype"
11119                         . ./myread
11120                         netdb_hlen_type=$ans
11121                         ;;
11122                 esac
11123                 ;;
11124         *)      : no gethostbyaddr, so pick harmless defaults
11125                 netdb_host_type='char *'
11126                 netdb_hlen_type="$sizetype"
11127                 ;;
11128         esac
11129         # Remove the "const" if needed. -- but then we'll have a 
11130         # prototype clash!
11131         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11132 fi
11133
11134 : check for type of argument to gethostbyname. 
11135 if test "X$netdb_name_type" = X ; then
11136         case "$d_gethbyname" in
11137         $define)
11138                 $cat <<EOM
11139
11140 Checking to see what type of argument is accepted by gethostbyname().
11141 EOM
11142                 hdrs="$define sys/types.h
11143                         $d_socket sys/socket.h 
11144                         $i_niin netinet/in.h 
11145                         $i_netdb netdb.h
11146                         $i_unistd unistd.h"
11147                 for xxx in "const char *" "char *"; do
11148                         case "$netdb_name_type" in
11149                         '')     try="extern struct hostent *gethostbyname($xxx);"
11150                                 if ./protochk "$try" $hdrs; then
11151                                         echo "Your system accepts $xxx."
11152                                         netdb_name_type="$xxx"
11153                                 fi
11154                                 ;;
11155                         esac
11156                 done
11157                 : In case none of those worked, prompt the user.
11158                 case "$netdb_name_type" in
11159                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11160                         dflt='char *'
11161                         . ./myread
11162                         netdb_name_type=$ans
11163                         ;;
11164                 esac
11165                 ;;
11166         *)      : no gethostbyname, so pick harmless default
11167                 netdb_name_type='char *'
11168                 ;;
11169         esac
11170 fi
11171
11172 : check for type of 1st argument to getnetbyaddr. 
11173 if test "X$netdb_net_type" = X ; then
11174         case "$d_getnbyaddr" in
11175         $define)
11176                 $cat <<EOM
11177
11178 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11179 EOM
11180                 hdrs="$define sys/types.h
11181                         $d_socket sys/socket.h 
11182                         $i_niin netinet/in.h 
11183                         $i_netdb netdb.h
11184                         $i_unistd unistd.h"
11185                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11186                         case "$netdb_net_type" in
11187                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11188                                 if ./protochk "$try" $hdrs; then
11189                                         echo "Your system accepts $xxx."
11190                                         netdb_net_type="$xxx"
11191                                 fi
11192                                 ;;
11193                         esac
11194                 done
11195                 : In case none of those worked, prompt the user.
11196                 case "$netdb_net_type" in
11197                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11198                         dflt='long'
11199                         . ./myread
11200                         netdb_net_type=$ans
11201                         ;;
11202                 esac
11203                 ;;
11204         *)      : no getnetbyaddr, so pick harmless default
11205                 netdb_net_type='long'
11206                 ;;
11207         esac
11208 fi
11209 : locate the preferred pager for this system
11210 case "$pager" in
11211 '')
11212         dflt=''
11213         case "$pg" in
11214         /*) dflt=$pg;;
11215         esac
11216         case "$more" in
11217         /*) dflt=$more;;
11218         esac
11219         case "$less" in
11220         /*) dflt=$less;;
11221         esac
11222         case "$dflt" in
11223         '') dflt=/usr/ucb/more;;
11224         esac
11225         ;;
11226 *) dflt="$pager";;
11227 esac
11228 echo " "
11229 fn=f/
11230 rp='What pager is used on your system?'
11231 . ./getfile
11232 pager="$ans"
11233
11234 : see what type pids are declared as in the kernel
11235 rp="What is the type of process ids on this system?"
11236 set pid_t pidtype int stdio.h sys/types.h
11237 eval $typedef_ask
11238
11239 : check for length of pointer
11240 echo " "
11241 case "$ptrsize" in
11242 '')
11243         $echo $n "Checking to see how big your pointers are...$c" >&4
11244         if test "$voidflags" -gt 7; then
11245                 echo '#define VOID_PTR char *' > try.c
11246         else
11247                 echo '#define VOID_PTR void *' > try.c
11248         fi
11249         $cat >>try.c <<'EOCP'
11250 #include <stdio.h>
11251 int main()
11252 {
11253         printf("%d\n", sizeof(VOID_PTR));
11254         exit(0);
11255 }
11256 EOCP
11257         set try
11258         if eval $compile_ok; then
11259                 ptrsize=`./try`
11260                 $echo " $ptrsize bytes." >&4
11261         else
11262                 dflt='4'
11263                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11264                 rp="What is the size of a pointer (in bytes)?"
11265                 . ./myread
11266                 ptrsize="$ans"
11267         fi
11268         ;;
11269 esac
11270 $rm -f try.c try
11271
11272 : see if ar generates random libraries by itself
11273 echo " "
11274 echo "Checking how to generate random libraries on your machine..." >&4
11275 echo 'int bar1() { return bar2(); }' > bar1.c
11276 echo 'int bar2() { return 2; }' > bar2.c
11277 $cat > foo.c <<'EOP'
11278 int main() { printf("%d\n", bar1()); exit(0); }
11279 EOP
11280 $cc $ccflags -c bar1.c >/dev/null 2>&1
11281 $cc $ccflags -c bar2.c >/dev/null 2>&1
11282 $cc $ccflags -c foo.c >/dev/null 2>&1
11283 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11284 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11285         ./foobar >/dev/null 2>&1; then
11286         echo "$ar appears to generate random libraries itself."
11287         orderlib=false
11288         ranlib=":"
11289 elif $ar ts bar$_a >/dev/null 2>&1 &&
11290         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11291         ./foobar >/dev/null 2>&1; then
11292                 echo "a table of contents needs to be added with '$ar ts'."
11293                 orderlib=false
11294                 ranlib="$ar ts"
11295 else
11296         case "$ranlib" in
11297         :) ranlib='';;
11298         '')
11299                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11300                 $test -f $ranlib || ranlib=''
11301                 ;;
11302         esac
11303         if $test -n "$ranlib"; then
11304                 echo "your system has '$ranlib'; we'll use that."
11305                 orderlib=false
11306         else
11307                 echo "your system doesn't seem to support random libraries"
11308                 echo "so we'll use lorder and tsort to order the libraries."
11309                 orderlib=true
11310                 ranlib=":"
11311         fi
11312 fi
11313 $rm -f foo* bar* 
11314
11315 : check for type of arguments to select. 
11316 case "$selecttype" in
11317 '') case "$d_select" in
11318         $define)
11319                 $cat <<EOM
11320 Checking to see what type of arguments are accepted by select().
11321 EOM
11322                 hdrs="$define sys/types.h
11323                         $i_systime sys/time.h 
11324                         $i_sysselct sys/select.h
11325                         $d_socket sys/socket.h"
11326                 : The first arg can be int, unsigned, or size_t
11327                 : The last arg may or may not be 'const'
11328                 val=''
11329                 : void pointer has been seen but using that
11330                 : breaks the selectminbits test
11331                 for xxx in 'fd_set *' 'int *'; do
11332                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11333                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11334                                         case "$val" in
11335                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11336                                                 if ./protochk "$try" $hdrs; then
11337                                                         echo "Your system accepts $xxx."
11338                                                         val="$xxx"
11339                                                 fi
11340                                                 ;;
11341                                         esac
11342                                 done
11343                         done
11344                 done
11345                 case "$val" in
11346                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11347                         case "$d_fd_set" in
11348                                 $define) dflt="fd_set *" ;;
11349                                 *)              dflt="int *" ;;
11350                         esac
11351                         . ./myread
11352                         val=$ans
11353                         ;;
11354                 esac
11355                 selecttype="$val"
11356                 ;;
11357         *)      : no select, so pick a harmless default
11358                 selecttype='int *'
11359                 ;;
11360         esac
11361         ;;
11362 esac
11363
11364 : check for the select 'width'
11365 case "$selectminbits" in
11366 '') case "$d_select" in
11367         $define)
11368                 $cat <<EOM
11369
11370 Checking to see on how many bits at a time your select() operates...
11371 EOM
11372                 $cat >try.c <<EOCP
11373 #include <sys/types.h>
11374 #$i_time I_TIME
11375 #$i_systime I_SYS_TIME
11376 #$i_systimek I_SYS_TIME_KERNEL
11377 #ifdef I_TIME
11378 #   include <time.h>
11379 #endif
11380 #ifdef I_SYS_TIME
11381 #   ifdef I_SYS_TIME_KERNEL
11382 #       define KERNEL
11383 #   endif
11384 #   include <sys/time.h>
11385 #   ifdef I_SYS_TIME_KERNEL
11386 #       undef KERNEL
11387 #   endif
11388 #endif
11389 #$i_sysselct I_SYS_SELECT
11390 #ifdef I_SYS_SELECT
11391 #include <sys/select.h>
11392 #endif
11393 #include <stdio.h>
11394 $selecttype b;
11395 #define S sizeof(*(b))
11396 #define MINBITS 64
11397 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11398 #define NBITS  (NBYTES * 8)
11399 int main() {
11400     char s[NBYTES];
11401     struct timeval t;
11402     int i;
11403     FILE* fp;
11404     int fd;
11405
11406     fclose(stdin);
11407     fp = fopen("try.c", "r");
11408     if (fp == 0)
11409       exit(1);
11410     fd = fileno(fp);
11411     if (fd < 0)
11412       exit(2);
11413     b = ($selecttype)s;
11414     for (i = 0; i < NBITS; i++)
11415         FD_SET(i, b);
11416     t.tv_sec  = 0;
11417     t.tv_usec = 0;
11418     select(fd + 1, b, 0, 0, &t);
11419     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11420     printf("%d\n", i + 1);
11421     return 0;
11422 }
11423 EOCP
11424                 set try
11425                 if eval $compile_ok; then
11426                         selectminbits=`./try`
11427                         case "$selectminbits" in
11428                         '')     cat >&4 <<EOM
11429 Cannot figure out on how many bits at a time your select() operates.
11430 I'll play safe and guess it is 32 bits.
11431 EOM
11432                                 selectminbits=32
11433                                 bits="32 bits"
11434                                 ;;
11435                         1)      bits="1 bit" ;;
11436                         *)      bits="$selectminbits bits" ;;
11437                         esac
11438                         echo "Your select() operates on $bits at a time." >&4
11439                 else
11440                         rp='What is the minimum number of bits your select() operates on?'
11441                         case "$byteorder" in
11442                         1234|12345678)  dflt=32 ;;
11443                         *)              dflt=1  ;;
11444                         esac
11445                         . ./myread
11446                         val=$ans
11447                         selectminbits="$val"
11448                 fi
11449                 $rm -f try.* try
11450                 ;;
11451         *)      : no select, so pick a harmless default
11452                 selectminbits='32'
11453                 ;;
11454         esac
11455         ;;
11456 esac
11457
11458 : Trace out the files included by signal.h, then look for SIGxxx names.
11459 : Remove SIGARRAYSIZE used by HPUX.
11460 : Remove SIGSTKSIZE used by Linux.
11461 : Remove SIGSTKSZ used by Posix.
11462 : Remove SIGTYP void lines used by OS2.
11463 xxx=`echo '#include <signal.h>' |
11464         $cppstdin $cppminus $cppflags 2>/dev/null |
11465         $grep '^[       ]*#.*include' | 
11466         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11467 : Check this list of files to be sure we have parsed the cpp output ok.
11468 : This will also avoid potentially non-existent files, such 
11469 : as ../foo/bar.h
11470 xxxfiles=''
11471 for xx in $xxx /dev/null ; do
11472         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11473 done
11474 : If we have found no files, at least try signal.h
11475 case "$xxxfiles" in
11476 '')     xxxfiles=`./findhdr signal.h` ;;
11477 esac
11478 xxx=`awk '
11479 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11480         print substr($2, 4, 20)
11481 }
11482 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11483         print substr($3, 4, 20)
11484 }' $xxxfiles`
11485 : Append some common names just in case the awk scan failed.
11486 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11487 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11488 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11489 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11490 : generate a few handy files for later
11491 $cat > signal.c <<'EOCP'
11492 #include <sys/types.h>
11493 #include <signal.h>
11494 #include <stdio.h>
11495 int main() {
11496
11497 /* Strange style to avoid deeply-nested #if/#else/#endif */
11498 #ifndef NSIG
11499 #  ifdef _NSIG
11500 #    define NSIG (_NSIG)
11501 #  endif
11502 #endif
11503
11504 #ifndef NSIG
11505 #  ifdef SIGMAX
11506 #    define NSIG (SIGMAX+1)
11507 #  endif
11508 #endif
11509
11510 #ifndef NSIG
11511 #  ifdef SIG_MAX
11512 #    define NSIG (SIG_MAX+1)
11513 #  endif
11514 #endif
11515
11516 #ifndef NSIG
11517 #  ifdef MAXSIG
11518 #    define NSIG (MAXSIG+1)
11519 #  endif
11520 #endif
11521
11522 #ifndef NSIG
11523 #  ifdef MAX_SIG
11524 #    define NSIG (MAX_SIG+1)
11525 #  endif
11526 #endif
11527
11528 #ifndef NSIG
11529 #  ifdef SIGARRAYSIZE
11530 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11531 #  endif
11532 #endif
11533
11534 #ifndef NSIG
11535 #  ifdef _sys_nsig
11536 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11537 #  endif
11538 #endif
11539
11540 /* Default to some arbitrary number that's big enough to get most
11541    of the common signals.
11542 */
11543 #ifndef NSIG
11544 #    define NSIG 50
11545 #endif
11546
11547 printf("NSIG %d\n", NSIG);
11548
11549 #ifndef JUST_NSIG
11550
11551 EOCP
11552
11553 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11554 {
11555         printf "#ifdef SIG"; printf $1; printf "\n"
11556         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11557         printf $1; printf ");\n"
11558         printf "#endif\n"
11559 }
11560 END {
11561         printf "#endif /* JUST_NSIG */\n";
11562         printf "}\n";
11563 }
11564 ' >>signal.c
11565 $cat >signal.awk <<'EOP'
11566 BEGIN { ndups = 0 }
11567 $1 ~ /^NSIG$/ { nsig = $2 }
11568 ($1 !~ /^NSIG$/) && (NF == 2) {
11569     if ($2 > maxsig) { maxsig = $2 }
11570     if (sig_name[$2]) {
11571         dup_name[ndups] = $1
11572         dup_num[ndups] = $2
11573         ndups++ 
11574     }
11575     else {
11576         sig_name[$2] = $1
11577         sig_num[$2] = $2
11578     }
11579 }
11580 END { 
11581     if (nsig == 0) {
11582         nsig = maxsig + 1
11583     }
11584     printf("NSIG %d\n", nsig);
11585     for (n = 1; n < nsig; n++) {
11586         if (sig_name[n]) {
11587             printf("%s %d\n", sig_name[n], sig_num[n])
11588         }
11589         else {
11590             printf("NUM%d %d\n", n, n) 
11591         }
11592     }
11593     for (n = 0; n < ndups; n++) {
11594         printf("%s %d\n", dup_name[n], dup_num[n])
11595     }
11596 }
11597 EOP
11598 $cat >signal_cmd <<EOS
11599 $startsh
11600 if $test -s signal.lst; then
11601     echo "Using your existing signal.lst file"
11602         exit 0
11603 fi
11604 xxx="$xxx"
11605 EOS
11606 $cat >>signal_cmd <<'EOS'
11607
11608 set signal
11609 if eval $compile_ok; then
11610         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11611 else
11612         echo "(I can't seem be able to compile the whole test program)" >&4
11613         echo "(I'll try it in little pieces.)" >&4
11614         set signal -DJUST_NSIG
11615         if eval $compile_ok; then
11616                 ./signal$_exe > signal.nsg
11617                 $cat signal.nsg
11618         else
11619                 echo "I can't seem to figure out how many signals you have." >&4
11620                 echo "Guessing 50." >&4
11621                 echo 'NSIG 50' > signal.nsg
11622         fi
11623         : Now look at all the signal names, one at a time.
11624         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11625                 $cat > signal.c <<EOCP
11626 #include <sys/types.h>
11627 #include <signal.h>
11628 #include <stdio.h>
11629 int main() {
11630 printf("$xx %d\n", SIG${xx});
11631 return 0;
11632 }
11633 EOCP
11634                 set signal
11635                 if eval $compile; then
11636                         echo "SIG${xx} found."
11637                         ./signal$_exe  >> signal.ls1
11638                 else
11639                         echo "SIG${xx} NOT found."
11640                 fi
11641         done
11642         if $test -s signal.ls1; then
11643                 $cat signal.nsg signal.ls1 |
11644                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11645         fi
11646
11647 fi
11648 if $test -s signal.lst; then
11649         :
11650 else
11651         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11652         echo 'kill -l' >signal
11653         set X `csh -f <signal`
11654         $rm -f signal
11655         shift
11656         case $# in
11657         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11658         esac
11659         echo $@ | $tr ' ' $trnl | \
11660             $awk '{ printf "%s %d\n", $1, ++s; }
11661                   END { printf "NSIG %d\n", ++s }' >signal.lst
11662 fi
11663 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11664 EOS
11665 chmod a+x signal_cmd
11666 $eunicefix signal_cmd
11667
11668 : generate list of signal names
11669 echo " "
11670 case "$sig_name_init" in
11671 '') doinit=yes ;;
11672 *)  case "$sig_num_init" in
11673     ''|*,*) doinit=yes ;;
11674     esac ;;
11675 esac
11676 case "$doinit" in
11677 yes)
11678         echo "Generating a list of signal names and numbers..." >&4
11679         . ./signal_cmd
11680         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11681         sig_name=`$awk 'BEGIN { printf "ZERO " }
11682                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11683         sig_num=`$awk  'BEGIN { printf "0 " }
11684                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11685         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11686                              !/^NSIG/   { printf "\"%s\", ", $1 }
11687                              END        { printf "0\n" }' signal.lst`
11688         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11689                              !/^NSIG/   { printf "%d, ", $2}
11690                              END        { printf "0\n"}' signal.lst`
11691         ;;
11692 esac
11693 echo "The following $sig_count signals are available:"
11694 echo " "
11695 echo $sig_name | $awk \
11696 'BEGIN { linelen = 0 }
11697 {
11698         for (i = 1; i <= NF; i++) {
11699                 name = "SIG" $i " "
11700                 linelen = linelen + length(name)
11701                 if (linelen > 70) {
11702                         printf "\n"
11703                         linelen = length(name)
11704                 }
11705                 printf "%s", name
11706         }
11707         printf "\n"
11708 }'
11709 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11710
11711 : see what type is used for signed size_t
11712 set ssize_t ssizetype int stdio.h sys/types.h
11713 eval $typedef
11714 dflt="$ssizetype"
11715 $cat > ssize.c <<EOM
11716 #include <stdio.h>
11717 #include <sys/types.h>
11718 #define Size_t $sizetype
11719 #define SSize_t $dflt
11720 int main()
11721 {
11722         if (sizeof(Size_t) == sizeof(SSize_t))
11723                 printf("$dflt\n");
11724         else if (sizeof(Size_t) == sizeof(int))
11725                 printf("int\n");
11726         else 
11727                 printf("long\n");
11728         exit(0);
11729 }
11730 EOM
11731 echo " "
11732 set ssize
11733 if eval $compile_ok && ./ssize > /dev/null; then
11734         ssizetype=`./ssize`
11735         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11736 else
11737         $cat >&4 <<EOM
11738 Help! I can't compile and run the ssize_t test program: please enlighten me!
11739 (This is probably a misconfiguration in your system or libraries, and
11740 you really ought to fix it.  Still, I'll try anyway.)
11741
11742 I need a type that is the same size as $sizetype, but is guaranteed to
11743 be signed.  Common values are ssize_t, int and long.
11744
11745 EOM
11746         rp="What signed type is the same size as $sizetype?"
11747         . ./myread
11748         ssizetype="$ans"
11749 fi
11750 $rm -f ssize ssize.*
11751
11752 : see what type of char stdio uses.
11753 echo " "
11754 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11755         echo "Your stdio uses unsigned chars." >&4
11756         stdchar="unsigned char"
11757 else
11758         echo "Your stdio uses signed chars." >&4
11759         stdchar="char"
11760 fi
11761
11762 : see if time exists
11763 echo " "
11764 if test "X$d_time" = X -o X"$timetype" = X; then
11765     if set time val -f d_time; eval $csym; $val; then
11766                 echo 'time() found.' >&4
11767                 val="$define"
11768                 rp="What is the type returned by time() on this system?"
11769                 set time_t timetype long stdio.h sys/types.h
11770                 eval $typedef_ask
11771     else
11772                 echo 'time() not found, hope that will do.' >&4
11773                 val="$undef"
11774                 timetype='int';
11775     fi
11776     set d_time
11777     eval $setvar
11778 fi
11779
11780 : see what type uids are declared as in the kernel
11781 echo " "
11782 echo "Looking for the type for user ids returned by getuid()."
11783 set uid_t uidtype xxx stdio.h sys/types.h
11784 eval $typedef
11785 case "$uidtype" in
11786 xxx)
11787         xxx=`./findhdr sys/user.h`
11788         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11789         case $1 in
11790         unsigned) dflt="$1 $2" ;;
11791         *) dflt="$1" ;;
11792         esac
11793         ;;
11794 *) dflt="$uidtype";;
11795 esac
11796 case "$uidtype" in
11797 uid_t)  echo "uid_t found." ;;
11798 *)      rp="What is the type for user ids returned by getuid()?"
11799         . ./myread
11800         uidtype="$ans"
11801         ;;
11802 esac
11803
11804 : see if dbm.h is available
11805 : see if dbmclose exists
11806 set dbmclose d_dbmclose
11807 eval $inlibc
11808
11809 case "$d_dbmclose" in
11810 $define)
11811         set dbm.h i_dbm
11812         eval $inhdr
11813         case "$i_dbm" in
11814         $define)
11815                 val="$undef"
11816                 set i_rpcsvcdbm
11817                 eval $setvar
11818                 ;;
11819         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11820                 eval $inhdr
11821                 ;;
11822         esac
11823         ;;
11824 *)      echo "We won't be including <dbm.h>"
11825         val="$undef"
11826         set i_dbm
11827         eval $setvar
11828         val="$undef"
11829         set i_rpcsvcdbm
11830         eval $setvar
11831         ;;
11832 esac
11833
11834 : see if this is a sys/file.h system
11835 val=''
11836 set sys/file.h val
11837 eval $inhdr
11838
11839 : do we need to include sys/file.h ?
11840 case "$val" in
11841 "$define")
11842         echo " "
11843         if $h_sysfile; then
11844                 val="$define"
11845                 echo "We'll be including <sys/file.h>." >&4
11846         else
11847                 val="$undef"
11848                 echo "We won't be including <sys/file.h>." >&4
11849         fi
11850         ;;
11851 *)
11852         h_sysfile=false
11853         ;;
11854 esac
11855 set i_sysfile
11856 eval $setvar
11857
11858 : see if fcntl.h is there
11859 val=''
11860 set fcntl.h val
11861 eval $inhdr
11862
11863 : see if we can include fcntl.h
11864 case "$val" in
11865 "$define")
11866         echo " "
11867         if $h_fcntl; then
11868                 val="$define"
11869                 echo "We'll be including <fcntl.h>." >&4
11870         else
11871                 val="$undef"
11872                 if $h_sysfile; then
11873         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11874                 else
11875                         echo "We won't be including <fcntl.h>." >&4
11876                 fi
11877         fi
11878         ;;
11879 *)
11880         h_fcntl=false
11881         val="$undef"
11882         ;;
11883 esac
11884 set i_fcntl
11885 eval $setvar
11886
11887 : see if locale.h is available
11888 set locale.h i_locale
11889 eval $inhdr
11890
11891 : see if mach cthreads are available
11892 if test "X$usethreads" = "X$define"; then
11893         set mach/cthreads.h i_machcthr
11894         eval $inhdr
11895 else
11896         i_machcthr="$undef"
11897 fi
11898
11899
11900
11901 : see if this is a math.h system
11902 set math.h i_math
11903 eval $inhdr
11904
11905 : see if this is a mntent.h system
11906 set mntent.h i_mntent
11907 eval $inhdr
11908
11909 : see if ndbm.h is available
11910 set ndbm.h t_ndbm
11911 eval $inhdr
11912 case "$t_ndbm" in
11913 $define)
11914         : see if dbm_open exists
11915         set dbm_open d_dbm_open
11916         eval $inlibc
11917         case "$d_dbm_open" in
11918         $undef)
11919                 t_ndbm="$undef"
11920                 echo "We won't be including <ndbm.h>"
11921                 ;;
11922         esac
11923         ;;
11924 esac
11925 val="$t_ndbm"
11926 set i_ndbm
11927 eval $setvar
11928
11929 : see if net/errno.h is available
11930 val=''
11931 set net/errno.h val
11932 eval $inhdr
11933
11934 : Unfortunately, it causes problems on some systems.  Arrgh.
11935 case "$val" in
11936 $define)
11937         cat > try.c <<'EOM'
11938 #include <stdio.h>
11939 #include <errno.h>
11940 #include <net/errno.h>
11941 int func()
11942 {
11943         return ENOTSOCK;
11944 }
11945 EOM
11946         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11947                 echo "We'll be including <net/errno.h>." >&4
11948         else
11949                 echo "We won't be including <net/errno.h>." >&4
11950                 val="$undef"
11951         fi
11952         $rm -f try.* try
11953         ;;
11954 esac
11955 set i_neterrno
11956 eval $setvar
11957
11958 : see if this is a poll.h system
11959 set poll.h i_poll
11960 eval $inhdr
11961
11962 : get C preprocessor symbols handy
11963 echo " "
11964 $echo $n "Hmm... $c"
11965 echo $al | $tr ' ' $trnl >Cppsym.know
11966 $cat <<EOSS >Cppsym
11967 $startsh
11968 case "\$1" in
11969 -l) list=true
11970         shift
11971         ;;
11972 esac
11973 unknown=''
11974 case "\$list\$#" in
11975 1|2)
11976         for sym do
11977                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11978                         exit 0
11979                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11980                         :
11981                 else
11982                         unknown="\$unknown \$sym"
11983                 fi
11984         done
11985         set X \$unknown
11986         shift
11987         ;;
11988 esac
11989 case \$# in
11990 0) exit 1;;
11991 esac
11992 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11993 #ifdef \1\\
11994 exit 0; _ _ _ _\1\\      \1\\
11995 #endif\\
11996 /' >Cppsym\$\$
11997 echo "exit 1; _ _ _" >>Cppsym\$\$
11998 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11999 case "\$list" in
12000 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12001 *)
12002         sh Cppsym2\$\$
12003         status=\$?
12004         ;;
12005 esac
12006 $rm -f Cppsym\$\$ Cppsym2\$\$
12007 exit \$status
12008 EOSS
12009 chmod +x Cppsym
12010 $eunicefix Cppsym
12011 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12012
12013 : now check the C compiler for additional symbols
12014 postprocess_cc_v=''
12015 case "$osname" in
12016 aix) postprocess_cc_v="|$tr , ' '" ;;
12017 esac
12018 $cat >ccsym <<EOS
12019 $startsh
12020 $cat >tmp.c <<EOF
12021 extern int foo;
12022 EOF
12023 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12024 do
12025         case "\$i" in
12026         -D*) echo "\$i" | $sed 's/^-D//';;
12027         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12028         esac
12029 done
12030 $rm -f try.c
12031 EOS
12032 postprocess_cc_v=''
12033 chmod +x ccsym
12034 $eunicefix ccsym
12035 ./ccsym > ccsym1.raw
12036 if $test -s ccsym1.raw; then
12037        $sort ccsym1.raw | $uniq >ccsym.raw
12038 else
12039        mv ccsym1.raw ccsym.raw
12040 fi
12041
12042 $awk '/\=/ { print $0; next }
12043         { print $0"=1" }' ccsym.raw >ccsym.list
12044 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12045 $comm -13 ccsym.true ccsym.list >ccsym.own
12046 $comm -12 ccsym.true ccsym.list >ccsym.com
12047 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12048 also=''
12049 if $test -z ccsym.raw; then
12050         echo "Your C compiler doesn't seem to define any symbols!" >&4
12051         echo " "
12052         echo "However, your C preprocessor defines the following symbols:"
12053         $cat Cppsym.true
12054         ccsymbols=''
12055         cppsymbols=`$cat Cppsym.true`
12056         cppsymbols=`echo $cppsymbols`
12057         cppccsymbols="$cppsymbols"
12058 else
12059         if $test -s ccsym.com; then
12060                 echo "Your C compiler and pre-processor define these symbols:"
12061                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12062                 also='also '
12063                 symbols='ones'
12064                 cppccsymbols=`$cat ccsym.com`
12065                 cppccsymbols=`echo $cppccsymbols`
12066                 $test "$silent" || sleep 1
12067         fi
12068         if $test -s ccsym.cpp; then
12069                 $test "$also" && echo " "
12070                 echo "Your C pre-processor ${also}defines the following symbols:"
12071                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12072                 also='further '
12073                 cppsymbols=`$cat ccsym.cpp`
12074                 cppsymbols=`echo $cppsymbols`
12075                 $test "$silent" || sleep 1
12076         fi
12077         if $test -s ccsym.own; then
12078                 $test "$also" && echo " "
12079                 echo "Your C compiler ${also}defines the following cpp symbols:"
12080                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12081                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12082                 ccsymbols=`$cat ccsym.own`
12083                 ccsymbols=`echo $ccsymbols`
12084                 $test "$silent" || sleep 1
12085         fi
12086 fi
12087 $rm -f ccsym*
12088
12089 : see if this is a termio system
12090 val="$undef"
12091 val2="$undef"
12092 val3="$undef"
12093 if $test `./findhdr termios.h`; then
12094         set tcsetattr i_termios
12095         eval $inlibc
12096         val3="$i_termios"
12097 fi
12098 echo " "
12099 case "$val3" in
12100 "$define") echo "You have POSIX termios.h... good!" >&4;;
12101 *) if ./Cppsym pyr; then
12102                 case "`/bin/universe`" in
12103                 ucb) if $test `./findhdr sgtty.h`; then
12104                                 val2="$define"
12105                                 echo "<sgtty.h> found." >&4
12106                         else
12107                                 echo "System is pyramid with BSD universe."
12108                                 echo "<sgtty.h> not found--you could have problems." >&4
12109                         fi;;
12110                 *) if $test `./findhdr termio.h`; then
12111                                 val="$define"
12112                                 echo "<termio.h> found." >&4
12113                         else
12114                                 echo "System is pyramid with USG universe."
12115                                 echo "<termio.h> not found--you could have problems." >&4
12116                         fi;;
12117                 esac
12118         elif ./usg; then
12119                 if $test `./findhdr termio.h`; then
12120                         echo "<termio.h> found." >&4
12121                         val="$define"
12122                 elif $test `./findhdr sgtty.h`; then
12123                         echo "<sgtty.h> found." >&4
12124                         val2="$define"
12125                 else
12126 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12127                 fi
12128         else
12129                 if $test `./findhdr sgtty.h`; then
12130                         echo "<sgtty.h> found." >&4
12131                         val2="$define"
12132                 elif $test `./findhdr termio.h`; then
12133                         echo "<termio.h> found." >&4
12134                         val="$define"
12135                 else
12136 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12137                 fi
12138         fi;;
12139 esac
12140 set i_termio; eval $setvar
12141 val=$val2; set i_sgtty; eval $setvar
12142 val=$val3; set i_termios; eval $setvar
12143
12144 : see if stdarg is available
12145 echo " "
12146 if $test `./findhdr stdarg.h`; then
12147         echo "<stdarg.h> found." >&4
12148         valstd="$define"
12149 else
12150         echo "<stdarg.h> NOT found." >&4
12151         valstd="$undef"
12152 fi
12153
12154 : see if varags is available
12155 echo " "
12156 if $test `./findhdr varargs.h`; then
12157         echo "<varargs.h> found." >&4
12158 else
12159         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12160 fi
12161
12162 : set up the varargs testing programs
12163 $cat > varargs.c <<EOP
12164 #ifdef I_STDARG
12165 #include <stdarg.h>
12166 #endif
12167 #ifdef I_VARARGS
12168 #include <varargs.h>
12169 #endif
12170
12171 #ifdef I_STDARG
12172 int f(char *p, ...)
12173 #else
12174 int f(va_alist)
12175 va_dcl
12176 #endif
12177 {
12178         va_list ap;
12179 #ifndef I_STDARG
12180         char *p;
12181 #endif
12182 #ifdef I_STDARG
12183         va_start(ap,p);
12184 #else
12185         va_start(ap);
12186         p = va_arg(ap, char *);
12187 #endif
12188         va_end(ap);
12189 }
12190 EOP
12191 $cat > varargs <<EOP
12192 $startsh
12193 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12194         echo "true"
12195 else
12196         echo "false"
12197 fi
12198 $rm -f varargs$_o
12199 EOP
12200 chmod +x varargs
12201
12202 : now check which varargs header should be included
12203 echo " "
12204 i_varhdr=''
12205 case "$valstd" in
12206 "$define")
12207         if `./varargs I_STDARG`; then
12208                 val='stdarg.h'
12209         elif `./varargs I_VARARGS`; then
12210                 val='varargs.h'
12211         fi
12212         ;;
12213 *)
12214         if `./varargs I_VARARGS`; then
12215                 val='varargs.h'
12216         fi
12217         ;;
12218 esac
12219 case "$val" in
12220 '')
12221 echo "I could not find the definition for va_dcl... You have problems..." >&4
12222         val="$undef"; set i_stdarg; eval $setvar
12223         val="$undef"; set i_varargs; eval $setvar
12224         ;;
12225 *) 
12226         set i_varhdr
12227         eval $setvar
12228         case "$i_varhdr" in
12229         stdarg.h)
12230                 val="$define"; set i_stdarg; eval $setvar
12231                 val="$undef"; set i_varargs; eval $setvar
12232                 ;;
12233         varargs.h)
12234                 val="$undef"; set i_stdarg; eval $setvar
12235                 val="$define"; set i_varargs; eval $setvar
12236                 ;;
12237         esac
12238         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12239 esac
12240 $rm -f varargs*
12241
12242 : see if stddef is available
12243 set stddef.h i_stddef
12244 eval $inhdr
12245
12246 : see if sys/access.h is available
12247 set sys/access.h i_sysaccess
12248 eval $inhdr
12249
12250 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12251 set sys/filio.h i_sysfilio
12252 eval $inhdr
12253 echo " "
12254 if $test `./findhdr sys/ioctl.h`; then
12255         val="$define"
12256         echo '<sys/ioctl.h> found.' >&4
12257 else
12258         val="$undef"
12259         if $test $i_sysfilio = "$define"; then
12260             echo '<sys/ioctl.h> NOT found.' >&4
12261         else
12262                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12263                 $test $i_termio = "$define" && xxx="termio.h"
12264                 $test $i_termios = "$define" && xxx="termios.h"
12265 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12266         fi
12267 fi
12268 set i_sysioctl
12269 eval $setvar
12270
12271 : see if sys/resource.h has to be included
12272 set sys/resource.h i_sysresrc
12273 eval $inhdr
12274
12275 : see if sys/security.h is available
12276 set sys/security.h i_syssecrt
12277 eval $inhdr
12278
12279 : see if this is a sys/statvfs.h system
12280 set sys/statvfs.h i_sysstatvfs
12281 eval $inhdr
12282
12283 : see if this is a sys/un.h system
12284 set sys/un.h i_sysun
12285 eval $inhdr
12286
12287 : see if this is a syswait system
12288 set sys/wait.h i_syswait
12289 eval $inhdr
12290
12291 : see if this is an utime system
12292 set utime.h i_utime
12293 eval $inhdr
12294
12295 : see if this is a values.h system
12296 set values.h i_values
12297 eval $inhdr
12298
12299 : see if this is a vfork system
12300 case "$d_vfork" in
12301 "$define")
12302         set vfork.h i_vfork
12303         eval $inhdr
12304         ;;
12305 *)
12306         i_vfork="$undef"
12307         ;;
12308 esac
12309
12310 : see if gdbm.h is available
12311 set gdbm.h t_gdbm
12312 eval $inhdr
12313 case "$t_gdbm" in
12314 $define)
12315         : see if gdbm_open exists
12316         set gdbm_open d_gdbm_open
12317         eval $inlibc
12318         case "$d_gdbm_open" in
12319         $undef)
12320                 t_gdbm="$undef"
12321                 echo "We won't be including <gdbm.h>"
12322                 ;;
12323         esac
12324         ;;
12325 esac
12326 val="$t_gdbm"
12327 set i_gdbm
12328 eval $setvar
12329
12330 echo " "
12331 echo "Looking for extensions..." >&4
12332 tdir=`pwd`
12333 cd $rsrc/ext
12334 : If we are using the old config.sh, known_extensions may contain
12335 : old or inaccurate or duplicate values.
12336 known_extensions=''
12337 nonxs_extensions=''
12338 : We do not use find because it might not be available.
12339 : We do not just use MANIFEST because the user may have dropped
12340 : some additional extensions into the source tree and expect them
12341 : to be built.
12342 for xxx in * ; do
12343         case "$xxx" in
12344         DynaLoader|dynaload) ;;
12345         *)      if $test -f $xxx/$xxx.xs; then
12346                         known_extensions="$known_extensions $xxx"
12347                 elif $test -f $xxx/Makefile.PL; then
12348                         nonxs_extensions="$nonxs_extensions $xxx"
12349                 else
12350                         if $test -d $xxx; then
12351                                 # Look for nested extensions, eg. Devel/Dprof.
12352                                 cd $xxx
12353                                 for yyy in * ; do
12354                                 if $test -f $yyy/$yyy.xs; then
12355                                         known_extensions="$known_extensions $xxx/$yyy"
12356                                 elif $test -f $yyy/Makefile.PL; then
12357                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12358                                 fi
12359                                 done
12360                                 cd ..
12361                         fi
12362                 fi 
12363                 ;;
12364         esac
12365 done
12366 set X $nonxs_extensions
12367 shift
12368 nonxs_extensions="$*"
12369 set X $known_extensions
12370 shift
12371 known_extensions="$*"
12372 cd $tdir
12373
12374 : Now see which are supported on this system.
12375 avail_ext=''
12376 for xxx in $known_extensions ; do
12377         case "$xxx" in
12378         DB_File|db_file)
12379                 case "$i_db" in
12380                 $define) avail_ext="$avail_ext $xxx" ;;
12381                 esac
12382                 ;;
12383         GDBM_File|gdbm_fil)
12384                 case "$i_gdbm" in 
12385                 $define) avail_ext="$avail_ext $xxx" ;;
12386                 esac
12387                 ;;
12388         NDBM_File|ndbm_fil)
12389                 case "$i_ndbm" in
12390                 $define) avail_ext="$avail_ext $xxx" ;;
12391                 esac
12392                 ;;
12393         ODBM_File|odbm_fil) 
12394                 case "${i_dbm}${i_rpcsvcdbm}" in
12395                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12396                 esac
12397                 ;;
12398         POSIX|posix)
12399                 case "$useposix" in
12400                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12401                 esac
12402                 ;;
12403         Opcode|opcode)
12404                 case "$useopcode" in
12405                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12406                 esac
12407                 ;;
12408         Socket|socket)
12409                 case "$d_socket" in 
12410                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12411                 esac
12412                 ;;
12413         Thread|thread)
12414                 case "$usethreads" in 
12415                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12416                 esac
12417                 ;;
12418         IPC/SysV|ipc/sysv)
12419                 : XXX Do we need a useipcsysv variable here
12420                 case "${d_msg}${d_sem}${d_shm}" in 
12421                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12422                 esac
12423                 ;;
12424         *)      avail_ext="$avail_ext $xxx"
12425                 ;;
12426         esac
12427 done
12428
12429 set X $avail_ext
12430 shift
12431 avail_ext="$*"
12432
12433 : Now see which nonxs extensions are supported on this system.
12434 : For now assume all are.
12435 nonxs_ext=''
12436 for xxx in $nonxs_extensions ; do
12437         case "$xxx" in
12438         *)      nonxs_ext="$nonxs_ext $xxx"
12439                 ;;
12440         esac
12441 done
12442
12443 set X $nonxs_ext
12444 shift
12445 nonxs_ext="$*"
12446
12447 case $usedl in
12448 $define)
12449         $cat <<EOM
12450 A number of extensions are supplied with $package.  You may choose to
12451 compile these extensions for dynamic loading (the default), compile
12452 them into the $package executable (static loading), or not include
12453 them at all.  Answer "none" to include no extensions.
12454 Note that DynaLoader is always built and need not be mentioned here.
12455
12456 EOM
12457         case "$dynamic_ext" in
12458         '') dflt="$avail_ext" ;;
12459         *)      dflt="$dynamic_ext"
12460                 # Perhaps we are reusing an old out-of-date config.sh.
12461                 case "$hint" in
12462                 previous)
12463                         if test X"$dynamic_ext" != X"$avail_ext"; then
12464                                 $cat <<EOM
12465 NOTICE:  Your previous config.sh list may be incorrect. 
12466 The extensions now available to you are 
12467         ${avail_ext}
12468 but the default list from your previous config.sh is
12469         ${dynamic_ext} 
12470
12471 EOM
12472                         fi
12473                         ;;
12474                 esac
12475                 ;;
12476         esac
12477         case "$dflt" in
12478         '')     dflt=none;;
12479         esac
12480         rp="What extensions do you wish to load dynamically?"
12481         . ./myread
12482         case "$ans" in
12483         none) dynamic_ext=' ' ;;
12484         *) dynamic_ext="$ans" ;;
12485         esac
12486
12487         case "$static_ext" in
12488         '')
12489                 : Exclude those already listed in dynamic linking
12490                 dflt=''
12491                 for xxx in $avail_ext; do
12492                         case " $dynamic_ext " in
12493                         *" $xxx "*) ;;
12494                         *) dflt="$dflt $xxx" ;;
12495                         esac
12496                 done
12497                 set X $dflt
12498                 shift
12499                 dflt="$*"
12500                 ;;
12501         *)  dflt="$static_ext" 
12502                 ;;
12503         esac
12504
12505         case "$dflt" in
12506         '')     dflt=none;;
12507         esac
12508         rp="What extensions do you wish to load statically?"
12509         . ./myread
12510         case "$ans" in
12511         none) static_ext=' ' ;;
12512         *) static_ext="$ans" ;;
12513         esac
12514         ;;
12515 *)
12516         $cat <<EOM
12517 A number of extensions are supplied with $package.  Answer "none" 
12518 to include no extensions. 
12519 Note that DynaLoader is always built and need not be mentioned here.
12520
12521 EOM
12522         case "$static_ext" in
12523         '') dflt="$avail_ext" ;;
12524         *)      dflt="$static_ext"
12525                 # Perhaps we are reusing an old out-of-date config.sh.
12526                 case "$hint" in
12527                 previous)
12528                         if test X"$static_ext" != X"$avail_ext"; then
12529                                 $cat <<EOM
12530 NOTICE:  Your previous config.sh list may be incorrect. 
12531 The extensions now available to you are 
12532         ${avail_ext}
12533 but the default list from your previous config.sh is
12534         ${static_ext} 
12535
12536 EOM
12537                         fi
12538                         ;;
12539                 esac
12540                 ;;
12541         esac
12542         : Exclude those that are not xs extensions
12543         case "$dflt" in
12544         '')     dflt=none;;
12545         esac
12546         rp="What extensions do you wish to include?"
12547         . ./myread
12548         case "$ans" in
12549         none) static_ext=' ' ;;
12550         *) static_ext="$ans" ;;
12551         esac
12552         ;;
12553 esac
12554
12555 set X $dynamic_ext $static_ext $nonxs_ext
12556 shift
12557 extensions="$*"
12558
12559 : Remove build directory name from cppstdin so it can be used from
12560 : either the present location or the final installed location.
12561 echo " "
12562 : Get out of the UU directory to get correct path name.
12563 cd ..
12564 case "$cppstdin" in
12565 `pwd`/cppstdin)
12566         echo "Stripping down cppstdin path name"
12567         cppstdin=cppstdin
12568         ;;
12569 esac
12570 cd UU
12571
12572 : end of configuration questions
12573 echo " "
12574 echo "End of configuration questions."
12575 echo " "
12576
12577 : back to where it started
12578 if test -d ../UU; then
12579         cd ..
12580 fi
12581
12582 : configuration may be patched via a 'config.over' file
12583 if $test -f config.over; then
12584         echo " "
12585         dflt=y
12586         rp='I see a config.over file.  Do you wish to load it?'
12587         . UU/myread
12588         case "$ans" in
12589         n*) echo "OK, I'll ignore it.";;
12590         *)      . ./config.over
12591                 echo "Configuration override changes have been loaded."
12592                 ;;
12593         esac
12594 fi
12595
12596 : in case they want portability, strip down executable paths
12597 case "$d_portable" in
12598 "$define")
12599         echo " "
12600         echo "Stripping down executable paths..." >&4
12601         for file in $loclist $trylist; do
12602                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12603                         eval $file="\$file"
12604                 fi
12605         done
12606         ;;
12607 esac
12608
12609 : create config.sh file
12610 echo " "
12611 echo "Creating config.sh..." >&4
12612 $spitshell <<EOT >config.sh
12613 $startsh
12614 #
12615 # This file was produced by running the Configure script. It holds all the
12616 # definitions figured out by Configure. Should you modify one of these values,
12617 # do not forget to propagate your changes by running "Configure -der". You may
12618 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12619 #
12620
12621 # Package name      : $package
12622 # Source directory  : $src
12623 # Configuration time: $cf_time
12624 # Configured by     : $cf_by
12625 # Target system     : $myuname
12626
12627 Author='$Author'
12628 Date='$Date'
12629 Header='$Header'
12630 Id='$Id'
12631 Locker='$Locker'
12632 Log='$Log'
12633 Mcc='$Mcc'
12634 RCSfile='$RCSfile'
12635 Revision='$Revision'
12636 Source='$Source'
12637 State='$State'
12638 _a='$_a'
12639 _exe='$_exe'
12640 _o='$_o'
12641 afs='$afs'
12642 alignbytes='$alignbytes'
12643 ansi2knr='$ansi2knr'
12644 aphostname='$aphostname'
12645 apiversion='$apiversion'
12646 ar='$ar'
12647 archlib='$archlib'
12648 archlibexp='$archlibexp'
12649 archname64='$archname64'
12650 archname='$archname'
12651 archobjs='$archobjs'
12652 awk='$awk'
12653 baserev='$baserev'
12654 bash='$bash'
12655 bin='$bin'
12656 binexp='$binexp'
12657 bison='$bison'
12658 byacc='$byacc'
12659 byteorder='$byteorder'
12660 c='$c'
12661 castflags='$castflags'
12662 cat='$cat'
12663 cc='$cc'
12664 cccdlflags='$cccdlflags'
12665 ccdlflags='$ccdlflags'
12666 ccflags='$ccflags'
12667 ccsymbols='$ccsymbols'
12668 cf_by='$cf_by'
12669 cf_email='$cf_email'
12670 cf_time='$cf_time'
12671 chgrp='$chgrp'
12672 chmod='$chmod'
12673 chown='$chown'
12674 clocktype='$clocktype'
12675 comm='$comm'
12676 compress='$compress'
12677 contains='$contains'
12678 cp='$cp'
12679 cpio='$cpio'
12680 cpp='$cpp'
12681 cpp_stuff='$cpp_stuff'
12682 cppccsymbols='$cppccsymbols'
12683 cppflags='$cppflags'
12684 cpplast='$cpplast'
12685 cppminus='$cppminus'
12686 cpprun='$cpprun'
12687 cppstdin='$cppstdin'
12688 cppsymbols='$cppsymbols'
12689 crosscompile='$crosscompile'
12690 cryptlib='$cryptlib'
12691 csh='$csh'
12692 d_Gconvert='$d_Gconvert'
12693 d_access='$d_access'
12694 d_accessx='$d_accessx'
12695 d_alarm='$d_alarm'
12696 d_archlib='$d_archlib'
12697 d_attribut='$d_attribut'
12698 d_bcmp='$d_bcmp'
12699 d_bcopy='$d_bcopy'
12700 d_bsd='$d_bsd'
12701 d_bsdgetpgrp='$d_bsdgetpgrp'
12702 d_bsdsetpgrp='$d_bsdsetpgrp'
12703 d_bzero='$d_bzero'
12704 d_casti32='$d_casti32'
12705 d_castneg='$d_castneg'
12706 d_charvspr='$d_charvspr'
12707 d_chown='$d_chown'
12708 d_chroot='$d_chroot'
12709 d_chsize='$d_chsize'
12710 d_closedir='$d_closedir'
12711 d_cmsghdr_s='$d_cmsghdr_s'
12712 d_const='$d_const'
12713 d_crypt='$d_crypt'
12714 d_csh='$d_csh'
12715 d_cuserid='$d_cuserid'
12716 d_dbl_dig='$d_dbl_dig'
12717 d_dbmclose64='$d_dbmclose64'
12718 d_dbminit64='$d_dbminit64'
12719 d_delete64='$d_delete64'
12720 d_difftime='$d_difftime'
12721 d_dirent64_s='$d_dirent64_s'
12722 d_dirnamlen='$d_dirnamlen'
12723 d_dlerror='$d_dlerror'
12724 d_dlopen='$d_dlopen'
12725 d_dlsymun='$d_dlsymun'
12726 d_dosuid='$d_dosuid'
12727 d_drand48proto='$d_drand48proto'
12728 d_dup2='$d_dup2'
12729 d_eaccess='$d_eaccess'
12730 d_endgrent='$d_endgrent'
12731 d_endhent='$d_endhent'
12732 d_endnent='$d_endnent'
12733 d_endpent='$d_endpent'
12734 d_endpwent='$d_endpwent'
12735 d_endsent='$d_endsent'
12736 d_eofnblk='$d_eofnblk'
12737 d_eunice='$d_eunice'
12738 d_fchmod='$d_fchmod'
12739 d_fchown='$d_fchown'
12740 d_fcntl='$d_fcntl'
12741 d_fd_macros='$d_fd_macros'
12742 d_fd_set='$d_fd_set'
12743 d_fds_bits='$d_fds_bits'
12744 d_fetch64='$d_fetch64'
12745 d_fgetpos64='$d_fgetpos64'
12746 d_fgetpos='$d_fgetpos'
12747 d_firstkey64='$d_firstkey64'
12748 d_flexfnam='$d_flexfnam'
12749 d_flock64_s='$d_flock64_s'
12750 d_flock='$d_flock'
12751 d_fopen64='$d_fopen64'
12752 d_fork='$d_fork'
12753 d_fpathconf='$d_fpathconf'
12754 d_freopen64='$d_freopen64'
12755 d_fseek64='$d_fseek64'
12756 d_fseeko64='$d_fseeko64'
12757 d_fseeko='$d_fseeko'
12758 d_fsetpos64='$d_fsetpos64'
12759 d_fsetpos='$d_fsetpos'
12760 d_fstat64='$d_fstat64'
12761 d_fstatfs='$d_fstatfs'
12762 d_fstatvfs='$d_fstatvfs'
12763 d_ftell64='$d_ftell64'
12764 d_ftello64='$d_ftello64'
12765 d_ftello='$d_ftello'
12766 d_ftime='$d_ftime'
12767 d_ftruncate64='$d_ftruncate64'
12768 d_getgrent='$d_getgrent'
12769 d_getgrps='$d_getgrps'
12770 d_gethbyaddr='$d_gethbyaddr'
12771 d_gethbyname='$d_gethbyname'
12772 d_gethent='$d_gethent'
12773 d_gethname='$d_gethname'
12774 d_gethostprotos='$d_gethostprotos'
12775 d_getlogin='$d_getlogin'
12776 d_getmntent='$d_getmntent'
12777 d_getnbyaddr='$d_getnbyaddr'
12778 d_getnbyname='$d_getnbyname'
12779 d_getnent='$d_getnent'
12780 d_getnetprotos='$d_getnetprotos'
12781 d_getpbyname='$d_getpbyname'
12782 d_getpbynumber='$d_getpbynumber'
12783 d_getpent='$d_getpent'
12784 d_getpgid='$d_getpgid'
12785 d_getpgrp2='$d_getpgrp2'
12786 d_getpgrp='$d_getpgrp'
12787 d_getppid='$d_getppid'
12788 d_getprior='$d_getprior'
12789 d_getprotoprotos='$d_getprotoprotos'
12790 d_getpwent='$d_getpwent'
12791 d_getsbyname='$d_getsbyname'
12792 d_getsbyport='$d_getsbyport'
12793 d_getsent='$d_getsent'
12794 d_getservprotos='$d_getservprotos'
12795 d_gettimeod='$d_gettimeod'
12796 d_gnulibc='$d_gnulibc'
12797 d_grpasswd='$d_grpasswd'
12798 d_hasmntopt='$d_hasmntopt'
12799 d_htonl='$d_htonl'
12800 d_index='$d_index'
12801 d_inetaton='$d_inetaton'
12802 d_ino64_t='$d_ino64_t'
12803 d_int64t='$d_int64t'
12804 d_iovec_s='$d_iovec_s'
12805 d_isascii='$d_isascii'
12806 d_killpg='$d_killpg'
12807 d_lchown='$d_lchown'
12808 d_link='$d_link'
12809 d_llseek='$d_llseek'
12810 d_locconv='$d_locconv'
12811 d_lockf64='$d_lockf64'
12812 d_lockf='$d_lockf'
12813 d_longdbl='$d_longdbl'
12814 d_longlong='$d_longlong'
12815 d_lseek64='$d_lseek64'
12816 d_lstat64='$d_lstat64'
12817 d_lstat='$d_lstat'
12818 d_madvise='$d_madvise'
12819 d_mblen='$d_mblen'
12820 d_mbstowcs='$d_mbstowcs'
12821 d_mbtowc='$d_mbtowc'
12822 d_memcmp='$d_memcmp'
12823 d_memcpy='$d_memcpy'
12824 d_memmove='$d_memmove'
12825 d_memset='$d_memset'
12826 d_mkdir='$d_mkdir'
12827 d_mkfifo='$d_mkfifo'
12828 d_mktime='$d_mktime'
12829 d_mmap='$d_mmap'
12830 d_mprotect='$d_mprotect'
12831 d_msg='$d_msg'
12832 d_msg_ctrunc='$d_msg_ctrunc'
12833 d_msg_dontroute='$d_msg_dontroute'
12834 d_msg_oob='$d_msg_oob'
12835 d_msg_peek='$d_msg_peek'
12836 d_msg_proxy='$d_msg_proxy'
12837 d_msgctl='$d_msgctl'
12838 d_msgget='$d_msgget'
12839 d_msghdr_s='$d_msghdr_s'
12840 d_msgrcv='$d_msgrcv'
12841 d_msgsnd='$d_msgsnd'
12842 d_msync='$d_msync'
12843 d_munmap='$d_munmap'
12844 d_mymalloc='$d_mymalloc'
12845 d_nextkey64='$d_nextkey64'
12846 d_nice='$d_nice'
12847 d_off64_t='$d_off64_t'
12848 d_offset_t='$d_offset_t'
12849 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12850 d_oldpthreads='$d_oldpthreads'
12851 d_oldsock='$d_oldsock'
12852 d_open3='$d_open3'
12853 d_open64='$d_open64'
12854 d_opendir64='$d_opendir64'
12855 d_pathconf='$d_pathconf'
12856 d_pause='$d_pause'
12857 d_phostname='$d_phostname'
12858 d_pipe='$d_pipe'
12859 d_poll='$d_poll'
12860 d_portable='$d_portable'
12861 d_pthread_yield='$d_pthread_yield'
12862 d_pwage='$d_pwage'
12863 d_pwchange='$d_pwchange'
12864 d_pwclass='$d_pwclass'
12865 d_pwcomment='$d_pwcomment'
12866 d_pwexpire='$d_pwexpire'
12867 d_pwgecos='$d_pwgecos'
12868 d_pwpasswd='$d_pwpasswd'
12869 d_pwquota='$d_pwquota'
12870 d_readdir64='$d_readdir64'
12871 d_readdir='$d_readdir'
12872 d_readlink='$d_readlink'
12873 d_readv='$d_readv'
12874 d_recvmsg='$d_recvmsg'
12875 d_rename='$d_rename'
12876 d_rewinddir='$d_rewinddir'
12877 d_rmdir='$d_rmdir'
12878 d_safebcpy='$d_safebcpy'
12879 d_safemcpy='$d_safemcpy'
12880 d_sanemcmp='$d_sanemcmp'
12881 d_sched_yield='$d_sched_yield'
12882 d_scm_rights='$d_scm_rights'
12883 d_seekdir64='$d_seekdir64'
12884 d_seekdir='$d_seekdir'
12885 d_select='$d_select'
12886 d_sem='$d_sem'
12887 d_semctl='$d_semctl'
12888 d_semctl_semid_ds='$d_semctl_semid_ds'
12889 d_semctl_semun='$d_semctl_semun'
12890 d_semget='$d_semget'
12891 d_semop='$d_semop'
12892 d_sendmsg='$d_sendmsg'
12893 d_setegid='$d_setegid'
12894 d_seteuid='$d_seteuid'
12895 d_setgrent='$d_setgrent'
12896 d_setgrps='$d_setgrps'
12897 d_sethent='$d_sethent'
12898 d_setlinebuf='$d_setlinebuf'
12899 d_setlocale='$d_setlocale'
12900 d_setnent='$d_setnent'
12901 d_setpent='$d_setpent'
12902 d_setpgid='$d_setpgid'
12903 d_setpgrp2='$d_setpgrp2'
12904 d_setpgrp='$d_setpgrp'
12905 d_setprior='$d_setprior'
12906 d_setpwent='$d_setpwent'
12907 d_setregid='$d_setregid'
12908 d_setresgid='$d_setresgid'
12909 d_setresuid='$d_setresuid'
12910 d_setreuid='$d_setreuid'
12911 d_setrgid='$d_setrgid'
12912 d_setruid='$d_setruid'
12913 d_setsent='$d_setsent'
12914 d_setsid='$d_setsid'
12915 d_setvbuf='$d_setvbuf'
12916 d_sfio='$d_sfio'
12917 d_shm='$d_shm'
12918 d_shmat='$d_shmat'
12919 d_shmatprototype='$d_shmatprototype'
12920 d_shmctl='$d_shmctl'
12921 d_shmdt='$d_shmdt'
12922 d_shmget='$d_shmget'
12923 d_sigaction='$d_sigaction'
12924 d_sigsetjmp='$d_sigsetjmp'
12925 d_socket='$d_socket'
12926 d_sockpair='$d_sockpair'
12927 d_stat64='$d_stat64'
12928 d_statblks='$d_statblks'
12929 d_statfs='$d_statfs'
12930 d_statfsflags='$d_statfsflags'
12931 d_statvfs='$d_statvfs'
12932 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12933 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12934 d_stdiobase='$d_stdiobase'
12935 d_stdstdio='$d_stdstdio'
12936 d_store64='$d_store64'
12937 d_strchr='$d_strchr'
12938 d_strcoll='$d_strcoll'
12939 d_strctcpy='$d_strctcpy'
12940 d_strerrm='$d_strerrm'
12941 d_strerror='$d_strerror'
12942 d_strtod='$d_strtod'
12943 d_strtol='$d_strtol'
12944 d_strtoul='$d_strtoul'
12945 d_strxfrm='$d_strxfrm'
12946 d_suidsafe='$d_suidsafe'
12947 d_symlink='$d_symlink'
12948 d_syscall='$d_syscall'
12949 d_sysconf='$d_sysconf'
12950 d_sysernlst='$d_sysernlst'
12951 d_syserrlst='$d_syserrlst'
12952 d_system='$d_system'
12953 d_tcgetpgrp='$d_tcgetpgrp'
12954 d_tcsetpgrp='$d_tcsetpgrp'
12955 d_telldir64='$d_telldir64'
12956 d_telldir='$d_telldir'
12957 d_telldirproto='$d_telldirproto'
12958 d_time='$d_time'
12959 d_times='$d_times'
12960 d_tmpfile64='$d_tmpfile64'
12961 d_truncate64='$d_truncate64'
12962 d_truncate='$d_truncate'
12963 d_tzname='$d_tzname'
12964 d_umask='$d_umask'
12965 d_uname='$d_uname'
12966 d_union_semun='$d_union_semun'
12967 d_vfork='$d_vfork'
12968 d_void_closedir='$d_void_closedir'
12969 d_voidsig='$d_voidsig'
12970 d_voidtty='$d_voidtty'
12971 d_volatile='$d_volatile'
12972 d_vprintf='$d_vprintf'
12973 d_wait4='$d_wait4'
12974 d_waitpid='$d_waitpid'
12975 d_wcstombs='$d_wcstombs'
12976 d_wctomb='$d_wctomb'
12977 d_writev='$d_writev'
12978 d_xenix='$d_xenix'
12979 date='$date'
12980 db_hashtype='$db_hashtype'
12981 db_prefixtype='$db_prefixtype'
12982 defvoidused='$defvoidused'
12983 direntrytype='$direntrytype'
12984 dlext='$dlext'
12985 dlsrc='$dlsrc'
12986 doublesize='$doublesize'
12987 drand01='$drand01'
12988 dynamic_ext='$dynamic_ext'
12989 eagain='$eagain'
12990 ebcdic='$ebcdic'
12991 echo='$echo'
12992 egrep='$egrep'
12993 emacs='$emacs'
12994 eunicefix='$eunicefix'
12995 exe_ext='$exe_ext'
12996 expr='$expr'
12997 extensions='$extensions'
12998 find='$find'
12999 firstmakefile='$firstmakefile'
13000 flex='$flex'
13001 fpostype='$fpostype'
13002 freetype='$freetype'
13003 full_ar='$full_ar'
13004 full_csh='$full_csh'
13005 full_sed='$full_sed'
13006 gccversion='$gccversion'
13007 gidtype='$gidtype'
13008 glibpth='$glibpth'
13009 grep='$grep'
13010 groupcat='$groupcat'
13011 groupstype='$groupstype'
13012 gzip='$gzip'
13013 h_fcntl='$h_fcntl'
13014 h_sysfile='$h_sysfile'
13015 hint='$hint'
13016 hostcat='$hostcat'
13017 huge='$huge'
13018 i_arpainet='$i_arpainet'
13019 i_bsdioctl='$i_bsdioctl'
13020 i_db='$i_db'
13021 i_dbm='$i_dbm'
13022 i_dirent='$i_dirent'
13023 i_dld='$i_dld'
13024 i_dlfcn='$i_dlfcn'
13025 i_fcntl='$i_fcntl'
13026 i_float='$i_float'
13027 i_gdbm='$i_gdbm'
13028 i_grp='$i_grp'
13029 i_inttypes='$i_inttypes'
13030 i_limits='$i_limits'
13031 i_locale='$i_locale'
13032 i_machcthr='$i_machcthr'
13033 i_malloc='$i_malloc'
13034 i_math='$i_math'
13035 i_memory='$i_memory'
13036 i_mntent='$i_mntent'
13037 i_ndbm='$i_ndbm'
13038 i_netdb='$i_netdb'
13039 i_neterrno='$i_neterrno'
13040 i_niin='$i_niin'
13041 i_poll='$i_poll'
13042 i_pthread='$i_pthread'
13043 i_pwd='$i_pwd'
13044 i_rpcsvcdbm='$i_rpcsvcdbm'
13045 i_sfio='$i_sfio'
13046 i_sgtty='$i_sgtty'
13047 i_stdarg='$i_stdarg'
13048 i_stddef='$i_stddef'
13049 i_stdlib='$i_stdlib'
13050 i_string='$i_string'
13051 i_sysaccess='$i_sysaccess'
13052 i_sysdir='$i_sysdir'
13053 i_sysfile='$i_sysfile'
13054 i_sysfilio='$i_sysfilio'
13055 i_sysin='$i_sysin'
13056 i_sysioctl='$i_sysioctl'
13057 i_sysmman='$i_sysmman'
13058 i_sysmount='$i_sysmount'
13059 i_sysndir='$i_sysndir'
13060 i_sysparam='$i_sysparam'
13061 i_sysresrc='$i_sysresrc'
13062 i_syssecrt='$i_syssecrt'
13063 i_sysselct='$i_sysselct'
13064 i_syssockio='$i_syssockio'
13065 i_sysstat='$i_sysstat'
13066 i_sysstatvfs='$i_sysstatvfs'
13067 i_systime='$i_systime'
13068 i_systimek='$i_systimek'
13069 i_systimes='$i_systimes'
13070 i_systypes='$i_systypes'
13071 i_sysuio='$i_sysuio'
13072 i_sysun='$i_sysun'
13073 i_syswait='$i_syswait'
13074 i_termio='$i_termio'
13075 i_termios='$i_termios'
13076 i_time='$i_time'
13077 i_unistd='$i_unistd'
13078 i_utime='$i_utime'
13079 i_values='$i_values'
13080 i_varargs='$i_varargs'
13081 i_varhdr='$i_varhdr'
13082 i_vfork='$i_vfork'
13083 ignore_versioned_solibs='$ignore_versioned_solibs'
13084 incpath='$incpath'
13085 inews='$inews'
13086 installarchlib='$installarchlib'
13087 installbin='$installbin'
13088 installman1dir='$installman1dir'
13089 installman3dir='$installman3dir'
13090 installprivlib='$installprivlib'
13091 installscript='$installscript'
13092 installsitearch='$installsitearch'
13093 installsitelib='$installsitelib'
13094 installusrbinperl='$installusrbinperl'
13095 intsize='$intsize'
13096 known_extensions='$known_extensions'
13097 ksh='$ksh'
13098 large='$large'
13099 ld='$ld'
13100 lddlflags='$lddlflags'
13101 ldflags='$ldflags'
13102 less='$less'
13103 lib_ext='$lib_ext'
13104 libc='$libc'
13105 libperl='$libperl'
13106 libpth='$libpth'
13107 libs='$libs'
13108 libswanted='$libswanted'
13109 line='$line'
13110 lint='$lint'
13111 lkflags='$lkflags'
13112 ln='$ln'
13113 lns='$lns'
13114 locincpth='$locincpth'
13115 loclibpth='$loclibpth'
13116 longdblsize='$longdblsize'
13117 longlongsize='$longlongsize'
13118 longsize='$longsize'
13119 lp='$lp'
13120 lpr='$lpr'
13121 ls='$ls'
13122 lseeksize='$lseeksize'
13123 lseektype='$lseektype'
13124 mail='$mail'
13125 mailx='$mailx'
13126 make='$make'
13127 make_set_make='$make_set_make'
13128 mallocobj='$mallocobj'
13129 mallocsrc='$mallocsrc'
13130 malloctype='$malloctype'
13131 man1dir='$man1dir'
13132 man1direxp='$man1direxp'
13133 man1ext='$man1ext'
13134 man3dir='$man3dir'
13135 man3direxp='$man3direxp'
13136 man3ext='$man3ext'
13137 medium='$medium'
13138 mips='$mips'
13139 mips_type='$mips_type'
13140 mkdir='$mkdir'
13141 mmaptype='$mmaptype'
13142 models='$models'
13143 modetype='$modetype'
13144 more='$more'
13145 multiarch='$multiarch'
13146 mv='$mv'
13147 myarchname='$myarchname'
13148 mydomain='$mydomain'
13149 myhostname='$myhostname'
13150 myuname='$myuname'
13151 n='$n'
13152 netdb_hlen_type='$netdb_hlen_type'
13153 netdb_host_type='$netdb_host_type'
13154 netdb_name_type='$netdb_name_type'
13155 netdb_net_type='$netdb_net_type'
13156 nm='$nm'
13157 nm_opt='$nm_opt'
13158 nm_so_opt='$nm_so_opt'
13159 nonxs_ext='$nonxs_ext'
13160 nroff='$nroff'
13161 o_nonblock='$o_nonblock'
13162 obj_ext='$obj_ext'
13163 old_pthread_create_joinable='$old_pthread_create_joinable'
13164 optimize='$optimize'
13165 orderlib='$orderlib'
13166 osname='$osname'
13167 osvers='$osvers'
13168 package='$package'
13169 pager='$pager'
13170 passcat='$passcat'
13171 patchlevel='$patchlevel'
13172 path_sep='$path_sep'
13173 perl='$perl'
13174 perladmin='$perladmin'
13175 perlpath='$perlpath'
13176 pg='$pg'
13177 phostname='$phostname'
13178 pidtype='$pidtype'
13179 plibpth='$plibpth'
13180 pmake='$pmake'
13181 pr='$pr'
13182 prefix='$prefix'
13183 prefixexp='$prefixexp'
13184 privlib='$privlib'
13185 privlibexp='$privlibexp'
13186 prototype='$prototype'
13187 ptrsize='$ptrsize'
13188 randbits='$randbits'
13189 randfunc='$randfunc'
13190 randseedtype='$randseedtype'
13191 ranlib='$ranlib'
13192 rd_nodata='$rd_nodata'
13193 rm='$rm'
13194 rmail='$rmail'
13195 runnm='$runnm'
13196 sched_yield='$sched_yield'
13197 scriptdir='$scriptdir'
13198 scriptdirexp='$scriptdirexp'
13199 sed='$sed'
13200 seedfunc='$seedfunc'
13201 selectminbits='$selectminbits'
13202 selecttype='$selecttype'
13203 sendmail='$sendmail'
13204 sh='$sh'
13205 shar='$shar'
13206 sharpbang='$sharpbang'
13207 shmattype='$shmattype'
13208 shortsize='$shortsize'
13209 shrpenv='$shrpenv'
13210 shsharp='$shsharp'
13211 sig_count='$sig_count'
13212 sig_name='$sig_name'
13213 sig_name_init='$sig_name_init'
13214 sig_num='$sig_num'
13215 sig_num_init='$sig_num_init'
13216 signal_t='$signal_t'
13217 sitearch='$sitearch'
13218 sitearchexp='$sitearchexp'
13219 sitelib='$sitelib'
13220 sitelibexp='$sitelibexp'
13221 sizetype='$sizetype'
13222 sleep='$sleep'
13223 smail='$smail'
13224 small='$small'
13225 so='$so'
13226 sockethdr='$sockethdr'
13227 socketlib='$socketlib'
13228 sort='$sort'
13229 spackage='$spackage'
13230 spitshell='$spitshell'
13231 split='$split'
13232 src='$src'
13233 ssizetype='$ssizetype'
13234 startperl='$startperl'
13235 startsh='$startsh'
13236 static_ext='$static_ext'
13237 stdchar='$stdchar'
13238 stdio_base='$stdio_base'
13239 stdio_bufsiz='$stdio_bufsiz'
13240 stdio_cnt='$stdio_cnt'
13241 stdio_filbuf='$stdio_filbuf'
13242 stdio_ptr='$stdio_ptr'
13243 strings='$strings'
13244 submit='$submit'
13245 subversion='$subversion'
13246 sysman='$sysman'
13247 tail='$tail'
13248 tar='$tar'
13249 tbl='$tbl'
13250 tee='$tee'
13251 test='$test'
13252 timeincl='$timeincl'
13253 timetype='$timetype'
13254 touch='$touch'
13255 tr='$tr'
13256 trnl='$trnl'
13257 troff='$troff'
13258 uidtype='$uidtype'
13259 uname='$uname'
13260 uniq='$uniq'
13261 use64bits='$use64bits'
13262 usedl='$usedl'
13263 usemultiplicity='$usemultiplicity'
13264 usemymalloc='$usemymalloc'
13265 usenm='$usenm'
13266 useopcode='$useopcode'
13267 useperlio='$useperlio'
13268 useposix='$useposix'
13269 usesfio='$usesfio'
13270 useshrplib='$useshrplib'
13271 usethreads='$usethreads'
13272 usevfork='$usevfork'
13273 usrinc='$usrinc'
13274 uuname='$uuname'
13275 version='$version'
13276 vi='$vi'
13277 voidflags='$voidflags'
13278 xlibpth='$xlibpth'
13279 zcat='$zcat'
13280 zip='$zip'
13281 EOT
13282
13283 : Add in command line options if available
13284 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13285
13286 : add special variables
13287 $test -f $src/patchlevel.h && \
13288 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13289 echo "CONFIGDOTSH=true" >>config.sh
13290
13291 : propagate old symbols
13292 if $test -f UU/config.sh; then
13293         <UU/config.sh sort | uniq >UU/oldconfig.sh
13294         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13295         sort | uniq -u >UU/oldsyms
13296         set X `cat UU/oldsyms`
13297         shift
13298         case $# in
13299         0) ;;
13300         *)
13301                 cat <<EOM
13302 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13303 EOM
13304                 echo "# Variables propagated from previous config.sh file." >>config.sh
13305                 for sym in `cat UU/oldsyms`; do
13306                         echo "    Propagating $hint variable "'$'"$sym..."
13307                         eval 'tmp="$'"${sym}"'"'
13308                         echo "$tmp" | \
13309                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13310                 done
13311                 ;;
13312         esac
13313 fi
13314
13315 : Finish up by extracting the .SH files
13316 case "$alldone" in
13317 exit)
13318         $rm -rf UU
13319         echo "Done."
13320         exit 0
13321         ;;
13322 cont)
13323         ;;
13324 '')
13325         dflt=''
13326         nostick=true
13327         $cat <<EOM
13328
13329 If you'd like to make any changes to the config.sh file before I begin
13330 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13331
13332 EOM
13333         rp="Press return or use a shell escape to edit config.sh:"
13334         . UU/myread
13335         nostick=''
13336         case "$ans" in
13337         '') ;;
13338         *) : in case they cannot read
13339                 sh 1>&4 -c "$ans";;
13340         esac
13341         ;;
13342 esac
13343
13344 : if this fails, just run all the .SH files by hand
13345 . ./config.sh
13346
13347 echo " "
13348 exec 1>&4
13349 . ./UU/extract
13350
13351 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13352         dflt=y
13353         case "$silent" in
13354         true) ;;
13355         *)
13356                 $cat <<EOM
13357
13358 Now you need to generate make dependencies by running "$make depend".
13359 You might prefer to run it in background: "$make depend > makedepend.out &"
13360 It can take a while, so you might not want to run it right now.
13361
13362 EOM
13363                 ;;
13364         esac
13365         rp="Run $make depend now?"
13366         . UU/myread
13367         case "$ans" in
13368         y*)
13369                 $make depend && echo "Now you must run a $make."
13370                 ;;
13371         *)
13372                 echo "You must run '$make depend' then '$make'."
13373                 ;;
13374         esac
13375 elif test -f [Mm]akefile; then
13376         echo " "
13377         echo "Now you must run a $make."
13378 else
13379         echo "Done."
13380 fi
13381
13382 if $test -f Policy.sh; then
13383     $cat <<EOM
13384
13385 If you compile $package on a different machine or from a different object
13386 directory, copy the Policy.sh file from this object directory to the
13387 new one before you run Configure -- this will help you with most of
13388 the policy defaults.
13389
13390 EOM
13391 fi
13392 if $test -f config.msg; then
13393     echo "Hmm.  I also noted the following information while running:"
13394     echo " "
13395     $cat config.msg >&4
13396     $rm -f config.msg
13397 fi
13398 $rm -f kit*isdone ark*isdone
13399 $rm -rf UU
13400
13401 : End of Configure
13402