6d937e1fc378454bc23f05a1592b5eb07bcd6372
[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 Aug  2 10:49:27 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 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 contains=''
302 cpp_stuff=''
303 cpplast=''
304 cppminus=''
305 cpprun=''
306 cppstdin=''
307 crosscompile=''
308 d_access=''
309 d_accessx=''
310 d_alarm=''
311 d_attribut=''
312 d_bcmp=''
313 d_bcopy=''
314 d_bzero=''
315 d_casti32=''
316 castflags=''
317 d_castneg=''
318 d_chown=''
319 d_chroot=''
320 d_chsize=''
321 d_closedir=''
322 d_void_closedir=''
323 d_const=''
324 cryptlib=''
325 d_crypt=''
326 d_csh=''
327 full_csh=''
328 d_cuserid=''
329 d_dbl_dig=''
330 d_difftime=''
331 d_dlerror=''
332 d_dlopen=''
333 d_dlsymun=''
334 d_dosuid=''
335 d_suidsafe=''
336 d_drand48proto=''
337 d_dup2=''
338 d_eaccess=''
339 d_endgrent=''
340 d_endhent=''
341 d_endnent=''
342 d_endpent=''
343 d_endpwent=''
344 d_endsent=''
345 d_endspent=''
346 d_fchmod=''
347 d_fchown=''
348 d_fcntl=''
349 d_fd_macros=''
350 d_fd_set=''
351 d_fds_bits=''
352 d_fgetpos=''
353 d_flexfnam=''
354 d_flock=''
355 d_fork=''
356 d_fseeko=''
357 d_fsetpos=''
358 d_ftello=''
359 d_ftime=''
360 d_gettimeod=''
361 d_Gconvert=''
362 d_getgrent=''
363 d_getgrps=''
364 d_gethbyaddr=''
365 d_gethbyname=''
366 d_gethent=''
367 aphostname=''
368 d_gethname=''
369 d_phostname=''
370 d_uname=''
371 d_gethostprotos=''
372 d_getlogin=''
373 d_getmntent=''
374 d_getnbyaddr=''
375 d_getnbyname=''
376 d_getnent=''
377 d_getnetprotos=''
378 d_getpent=''
379 d_getpgid=''
380 d_getpgrp2=''
381 d_bsdgetpgrp=''
382 d_getpgrp=''
383 d_getppid=''
384 d_getprior=''
385 d_getpbyname=''
386 d_getpbynumber=''
387 d_getprotoprotos=''
388 d_getpwent=''
389 d_getsent=''
390 d_getservprotos=''
391 d_getspent=''
392 d_getspnam=''
393 d_getsbyname=''
394 d_getsbyport=''
395 d_gnulibc=''
396 d_hasmntopt=''
397 d_htonl=''
398 d_inetaton=''
399 d_isascii=''
400 d_killpg=''
401 d_lchown=''
402 d_link=''
403 d_locconv=''
404 d_lockf=''
405 d_longdbl=''
406 longdblsize=''
407 d_longlong=''
408 longlongsize=''
409 d_lstat=''
410 d_madvise=''
411 d_mblen=''
412 d_mbstowcs=''
413 d_mbtowc=''
414 d_memchr=''
415 d_memcmp=''
416 d_memcpy=''
417 d_memmove=''
418 d_memset=''
419 d_mkdir=''
420 d_mkfifo=''
421 d_mktime=''
422 d_mmap=''
423 mmaptype=''
424 d_mprotect=''
425 d_msg=''
426 d_msgctl=''
427 d_msgget=''
428 d_msgrcv=''
429 d_msgsnd=''
430 d_msync=''
431 d_munmap=''
432 d_nice=''
433 d_open3=''
434 d_fpathconf=''
435 d_pathconf=''
436 d_pause=''
437 d_pipe=''
438 d_poll=''
439 d_portable=''
440 d_old_pthread_create_joinable=''
441 old_pthread_create_joinable=''
442 d_pthread_yield=''
443 d_sched_yield=''
444 sched_yield=''
445 d_readdir=''
446 d_rewinddir=''
447 d_seekdir=''
448 d_telldir=''
449 d_readlink=''
450 d_readv=''
451 d_rename=''
452 d_rmdir=''
453 d_safebcpy=''
454 d_safemcpy=''
455 d_sanemcmp=''
456 d_select=''
457 d_sem=''
458 d_semctl=''
459 d_semget=''
460 d_semop=''
461 d_setegid=''
462 d_seteuid=''
463 d_setgrent=''
464 d_setgrps=''
465 d_sethent=''
466 d_setlinebuf=''
467 d_setlocale=''
468 d_setnent=''
469 d_setpent=''
470 d_setpgid=''
471 d_setpgrp2=''
472 d_bsdsetpgrp=''
473 d_setpgrp=''
474 d_setprior=''
475 d_setpwent=''
476 d_setregid=''
477 d_setresgid=''
478 d_setresuid=''
479 d_setreuid=''
480 d_setrgid=''
481 d_setruid=''
482 d_setsent=''
483 d_setsid=''
484 d_setspent=''
485 d_setvbuf=''
486 d_sfio=''
487 usesfio=''
488 d_shm=''
489 d_shmat=''
490 d_shmatprototype=''
491 shmattype=''
492 d_shmctl=''
493 d_shmdt=''
494 d_shmget=''
495 d_sigaction=''
496 d_sigsetjmp=''
497 d_cmsghdr_s=''
498 d_msg_ctrunc=''
499 d_msg_dontroute=''
500 d_msg_oob=''
501 d_msg_peek=''
502 d_msg_proxy=''
503 d_msghdr_s=''
504 d_oldsock=''
505 d_recvmsg=''
506 d_scm_rights=''
507 d_sendmsg=''
508 d_socket=''
509 d_sockpair=''
510 sockethdr=''
511 socketlib=''
512 d_statblks=''
513 d_fstatfs=''
514 d_statfs=''
515 d_statfsflags=''
516 d_fstatvfs=''
517 d_statvfs=''
518 d_stdio_cnt_lval=''
519 d_stdio_ptr_lval=''
520 d_stdiobase=''
521 d_stdstdio=''
522 stdio_base=''
523 stdio_bufsiz=''
524 stdio_cnt=''
525 stdio_filbuf=''
526 stdio_ptr=''
527 d_index=''
528 d_strchr=''
529 d_strcoll=''
530 d_strctcpy=''
531 d_strerrm=''
532 d_strerror=''
533 d_sysernlst=''
534 d_syserrlst=''
535 d_strtod=''
536 d_strtol=''
537 d_strtoul=''
538 d_strxfrm=''
539 d_symlink=''
540 d_syscall=''
541 d_sysconf=''
542 d_system=''
543 d_tcgetpgrp=''
544 d_tcsetpgrp=''
545 d_telldirproto=''
546 d_time=''
547 timetype=''
548 clocktype=''
549 d_times=''
550 d_truncate=''
551 d_tzname=''
552 d_umask=''
553 d_semctl_semid_ds=''
554 d_semctl_semun=''
555 d_union_semun=''
556 d_vfork=''
557 usevfork=''
558 d_voidsig=''
559 signal_t=''
560 d_volatile=''
561 d_charvspr=''
562 d_vprintf=''
563 d_wait4=''
564 d_waitpid=''
565 d_wcstombs=''
566 d_wctomb=''
567 d_writev=''
568 d_dbmclose64=''
569 d_dbminit64=''
570 d_delete64=''
571 d_fetch64=''
572 d_firstkey64=''
573 d_nextkey64=''
574 d_store64=''
575 dlext=''
576 cccdlflags=''
577 ccdlflags=''
578 dlsrc=''
579 ld=''
580 lddlflags=''
581 usedl=''
582 doublesize=''
583 ebcdic=''
584 fflushNULL=''
585 fflushall=''
586 fpostype=''
587 gidtype=''
588 groupstype=''
589 h_fcntl=''
590 h_sysfile=''
591 i_arpainet=''
592 db_hashtype=''
593 db_prefixtype=''
594 i_db=''
595 i_dbm=''
596 i_rpcsvcdbm=''
597 d_dirnamlen=''
598 direntrytype=''
599 i_dirent=''
600 i_dld=''
601 i_dlfcn=''
602 i_fcntl=''
603 i_float=''
604 i_gdbm=''
605 d_grpasswd=''
606 i_grp=''
607 d_int64t=''
608 i_inttypes=''
609 i_limits=''
610 i_locale=''
611 i_machcthr=''
612 i_malloc=''
613 i_math=''
614 i_memory=''
615 i_mntent=''
616 i_ndbm=''
617 i_netdb=''
618 i_neterrno=''
619 i_netinettcp=''
620 i_niin=''
621 i_sysin=''
622 i_poll=''
623 i_pthread=''
624 d_pwage=''
625 d_pwchange=''
626 d_pwclass=''
627 d_pwcomment=''
628 d_pwexpire=''
629 d_pwgecos=''
630 d_pwpasswd=''
631 d_pwquota=''
632 i_pwd=''
633 i_sfio=''
634 i_shadow=''
635 i_socks=''
636 i_stddef=''
637 i_stdlib=''
638 i_string=''
639 strings=''
640 i_sysaccess=''
641 i_sysdir=''
642 i_sysfile=''
643 d_voidtty=''
644 i_bsdioctl=''
645 i_sysfilio=''
646 i_sysioctl=''
647 i_syssockio=''
648 i_sysmman=''
649 i_sysmount=''
650 i_sysndir=''
651 i_sysparam=''
652 i_sysresrc=''
653 i_syssecrt=''
654 i_sysselct=''
655 i_sysstat=''
656 i_sysstatvfs=''
657 i_systimes=''
658 i_systypes=''
659 d_iovec_s=''
660 i_sysuio=''
661 i_sysun=''
662 i_syswait=''
663 i_sgtty=''
664 i_termio=''
665 i_termios=''
666 i_systime=''
667 i_systimek=''
668 i_time=''
669 timeincl=''
670 i_unistd=''
671 i_utime=''
672 i_values=''
673 i_stdarg=''
674 i_varargs=''
675 i_varhdr=''
676 i_vfork=''
677 installprefix=''
678 installprefixexp=''
679 installstyle=''
680 installusrbinperl=''
681 intsize=''
682 longsize=''
683 shortsize=''
684 d_dirent64_s=''
685 d_flock64_s=''
686 d_fstat64=''
687 d_ftruncate64=''
688 d_ino64_t=''
689 d_llseek=''
690 d_lockf64=''
691 d_lseek64=''
692 d_lstat64=''
693 d_off64_t=''
694 d_offset_t=''
695 d_open64=''
696 d_opendir64=''
697 d_readdir64=''
698 d_seekdir64=''
699 d_stat64=''
700 d_telldir64=''
701 d_truncate64=''
702 libc=''
703 ldlibpthname=''
704 libperl=''
705 shrpenv=''
706 useshrplib=''
707 glibpth=''
708 libpth=''
709 loclibpth=''
710 plibpth=''
711 xlibpth=''
712 ignore_versioned_solibs=''
713 libs=''
714 lns=''
715 d_PRIEldbl=''
716 d_PRIFldbl=''
717 d_PRIGldbl=''
718 d_PRIeldbl=''
719 d_PRIfldbl=''
720 d_PRIgldbl=''
721 sPRIEldbl=''
722 sPRIFldbl=''
723 sPRIGldbl=''
724 sPRIeldbl=''
725 sPRIfldbl=''
726 sPRIgldbl=''
727 lseeksize=''
728 lseektype=''
729 make_set_make=''
730 d_mymalloc=''
731 freetype=''
732 mallocobj=''
733 mallocsrc=''
734 malloctype=''
735 usemymalloc=''
736 installman1dir=''
737 man1dir=''
738 man1direxp=''
739 man1ext=''
740 installman3dir=''
741 man3dir=''
742 man3direxp=''
743 man3ext=''
744 huge=''
745 large=''
746 medium=''
747 models=''
748 small=''
749 split=''
750 modetype=''
751 multiarch=''
752 mydomain=''
753 myhostname=''
754 phostname=''
755 c=''
756 n=''
757 d_eofnblk=''
758 eagain=''
759 o_nonblock=''
760 rd_nodata=''
761 netdb_hlen_type=''
762 netdb_host_type=''
763 netdb_name_type=''
764 netdb_net_type=''
765 groupcat=''
766 hostcat=''
767 passcat=''
768 orderlib=''
769 ranlib=''
770 package=''
771 spackage=''
772 pager=''
773 apiversion=''
774 patchlevel=''
775 subversion=''
776 version=''
777 perladmin=''
778 perlpath=''
779 pidtype=''
780 prefix=''
781 prefixexp=''
782 installprivlib=''
783 privlib=''
784 privlibexp=''
785 prototype=''
786 ptrsize=''
787 d_PRIX64=''
788 d_PRId64=''
789 d_PRIi64=''
790 d_PRIo64=''
791 d_PRIu64=''
792 d_PRIx64=''
793 sPRIX64=''
794 sPRId64=''
795 sPRIi64=''
796 sPRIo64=''
797 sPRIu64=''
798 sPRIx64=''
799 drand01=''
800 randbits=''
801 randfunc=''
802 randseedtype=''
803 seedfunc=''
804 installscript=''
805 scriptdir=''
806 scriptdirexp=''
807 selectminbits=''
808 selecttype=''
809 sh=''
810 sig_count=''
811 sig_name=''
812 sig_name_init=''
813 sig_num=''
814 sig_num_init=''
815 installsitearch=''
816 sitearch=''
817 sitearchexp=''
818 installsitelib=''
819 sitelib=''
820 sitelibexp=''
821 siteprefix=''
822 siteprefixexp=''
823 sizetype=''
824 so=''
825 sharpbang=''
826 shsharp=''
827 spitshell=''
828 src=''
829 ssizetype=''
830 startperl=''
831 startsh=''
832 stdchar=''
833 d_fgetpos64=''
834 d_fopen64=''
835 d_freopen64=''
836 d_fseek64=''
837 d_fseeko64=''
838 d_fsetpos64=''
839 d_ftell64=''
840 d_ftello64=''
841 d_tmpfile64=''
842 d_stdio_stream_array=''
843 stdio_stream_array=''
844 d_strtoull=''
845 sysman=''
846 trnl=''
847 uidtype=''
848 archname64=''
849 use64bits=''
850 usemultiplicity=''
851 nm_opt=''
852 nm_so_opt=''
853 runnm=''
854 usenm=''
855 useperlio=''
856 usesocks=''
857 d_oldpthreads=''
858 usethreads=''
859 incpath=''
860 mips=''
861 mips_type=''
862 usrinc=''
863 d_vendorlib=''
864 installvendorlib=''
865 vendorlib=''
866 vendorlibexp=''
867 usevendorprefix=''
868 vendorprefix=''
869 vendorprefixexp=''
870 defvoidused=''
871 voidflags=''
872 CONFIG=''
873
874 define='define'
875 undef='undef'
876 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
877 rmlist=''
878
879 : We must find out about Eunice early
880 eunicefix=':'
881 if test -f /etc/unixtovms; then
882         eunicefix=/etc/unixtovms
883 fi
884 if test -f /etc/unixtovms.exe; then
885         eunicefix=/etc/unixtovms.exe
886 fi
887
888 i_whoami=''
889 : Possible local include directories to search.
890 : Set locincpth to "" in a hint file to defeat local include searches.
891 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
892 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
893 :
894 : no include file wanted by default
895 inclwanted=''
896
897 : list of known cpp symbols, sorted alphabetically
898 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
899 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
900 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
901 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
902 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
903 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
904 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
905 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
906 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
907 al="$al VMS Xenix286"
908 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
909 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
910 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
911 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
912 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
913 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
914 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
915 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
916 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
917 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
918 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
919 al="$al __SVR4_2__ __UMAXV__"
920 al="$al ____386BSD____ __alpha __alpha__ __amiga"
921 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
922 al="$al __host_mips__"
923 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
924 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
925 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
926 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
927 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
928 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
929 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
930 al="$al __mc88100 __mc88100__ __mips __mips__"
931 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
932 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
933 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
934 al="$al _host_mips _mips _unix"
935 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
936 al="$al apollo ardent att386 att3b"
937 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
938 al="$al cadmus clipper concurrent convex cray ctix"
939 al="$al dmert encore gcos gcx gimpel gould"
940 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
941 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
942 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
943 al="$al i186 i286 i386 i486 i8086"
944 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
945 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
946 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
947 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
948 al="$al mc88000 mc88100 merlin mert mips mvs n16"
949 al="$al ncl_el ncl_mr"
950 al="$al news1500 news1700 news1800 news1900 news3700"
951 al="$al news700 news800 news900 ns16000 ns32000"
952 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
953 al="$al parisc pc532 pdp11 plexus posix pyr"
954 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
955 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
956 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
957 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
958 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
959 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
960 al="$al xenix z8000"
961
962 : Trailing extension.  Override this in a hint file, if needed.
963 _exe=''
964 : Extra object files, if any, needed on this platform.
965 archobjs=''
966 groupstype=''
967 : change the next line if compiling for Xenix/286 on Xenix/386
968 xlibpth='/usr/lib/386 /lib/386'
969
970 : Possible local library directories to search.
971 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
972 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
973
974 : general looking path for locating libraries
975 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
976 glibpth="$glibpth /lib /usr/lib $xlibpth"
977 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
978 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
979
980 : Private path used by Configure to find libraries.  Its value
981 : is prepended to libpth. This variable takes care of special
982 : machines, like the mips.  Usually, it should be empty.
983 plibpth=''
984
985 : default library list
986 libswanted=''
987 : some systems want to use only the non-versioned libso:s
988 ignore_versioned_solibs=''
989 : full support for void wanted by default
990 defvoidused=15
991
992 : set useposix=false in your hint file to disable the POSIX extension.
993 useposix=true
994 : set useopcode=false in your hint file to disable the Opcode extension.
995 useopcode=true
996 : set usemultiplicity on the Configure command line to enable multiplicity.
997 : set usesocks on the Configure command line to enable socks.
998 : set usethreads on the Configure command line to enable threads.
999 : List of libraries we want.
1000 : If anyone needs -lnet, put it in a hint file.
1001 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
1002 libswanted="$libswanted dld ld sun m rt c cposix posix"
1003 libswanted="$libswanted ndir dir crypt sec"
1004 libswanted="$libswanted ucb bsd BSD PW x"
1005 : We probably want to search /usr/shlib before most other libraries.
1006 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1007 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1008 glibpth="/usr/shlib $glibpth"
1009 : Do not use vfork unless overridden by a hint file.
1010 usevfork=false
1011
1012 : Find the basic shell for Bourne shell scripts
1013 case "$sh" in
1014 '')
1015         case "$SYSTYPE" in
1016         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1017         *) xxx='/bin/sh';;
1018         esac
1019         if test -f "$xxx"; then
1020                 sh="$xxx"
1021         else
1022                 : Build up a list and do a single loop so we can 'break' out.
1023                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1024                 for xxx in sh bash ksh pdksh ash; do
1025                         for p in $pth; do
1026                                 try="$try ${p}/${xxx}"
1027                         done
1028                 done
1029                 for xxx in $try; do
1030                         if test -f "$xxx"; then
1031                                 sh="$xxx";
1032                                 break
1033                         elif test -f "$xxx.exe"; then
1034                                 sh="$xxx";
1035                                 break
1036                         fi
1037                 done
1038         fi
1039         ;;
1040 esac
1041
1042 case "$sh" in
1043 '')     cat <<EOM >&2
1044 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1045
1046 Usually it's in /bin/sh.  How did you even get this far?
1047 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1048 we'll try to straighten this all out.
1049 EOM
1050         exit 1
1051         ;;
1052 esac
1053
1054 : see if sh knows # comments
1055 if `$sh -c '#' >/dev/null 2>&1`; then
1056         shsharp=true
1057         spitshell=cat
1058         xcat=/bin/cat
1059         test -f $xcat || xcat=/usr/bin/cat
1060         echo "#!$xcat" >try
1061         $eunicefix try
1062         chmod +x try
1063         ./try > today
1064         if test -s today; then
1065                 sharpbang='#!'
1066         else
1067                 echo "#! $xcat" > try
1068                 $eunicefix try
1069                 chmod +x try
1070                 ./try > today
1071                 if test -s today; then
1072                         sharpbang='#! '
1073                 else
1074                         sharpbang=': use '
1075                 fi
1076         fi
1077 else
1078         echo " "
1079         echo "Your $sh doesn't grok # comments--I will strip them later on."
1080         shsharp=false
1081         cd ..
1082         echo "exec grep -v '^[  ]*#'" >spitshell
1083         chmod +x spitshell
1084         $eunicefix spitshell
1085         spitshell=`pwd`/spitshell
1086         cd UU
1087         echo "I presume that if # doesn't work, #! won't work either!"
1088         sharpbang=': use '
1089 fi
1090 rm -f try today
1091
1092 : figure out how to guarantee sh startup
1093 case "$startsh" in
1094 '') startsh=${sharpbang}${sh} ;;
1095 *)
1096 esac
1097 cat >try <<EOSS
1098 $startsh
1099 set abc
1100 test "$?abc" != 1
1101 EOSS
1102
1103 chmod +x try
1104 $eunicefix try
1105 if ./try; then
1106         : echo "Yup, it does."
1107 else
1108         echo "Hmm... '$startsh' does not guarantee sh startup..."
1109         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1110 fi
1111 rm -f try
1112
1113
1114 : Save command line options in file UU/cmdline.opt for later use in
1115 : generating config.sh.
1116 cat > cmdline.opt <<EOSH
1117 # Configure command line arguments.
1118 config_arg0='$0'
1119 config_args='$*'
1120 config_argc=$#
1121 EOSH
1122 argn=1
1123 for arg in "$@"; do
1124         cat >>cmdline.opt <<EOSH
1125 config_arg$argn='$arg'
1126 EOSH
1127         argn=`expr $argn + 1`
1128 done
1129
1130 : produce awk script to parse command line options
1131 cat >options.awk <<'EOF'
1132 BEGIN {
1133         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1134
1135         len = length(optstr);
1136         for (i = 1; i <= len; i++) {
1137                 c = substr(optstr, i, 1);
1138                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1139                 if (a == ":") {
1140                         arg[c] = 1;
1141                         i++;
1142                 }
1143                 opt[c] = 1;
1144         }
1145 }
1146 {
1147         expect = 0;
1148         str = $0;
1149         if (substr(str, 1, 1) != "-") {
1150                 printf("'%s'\n", str);
1151                 next;
1152         }
1153         len = length($0);
1154         for (i = 2; i <= len; i++) {
1155                 c = substr(str, i, 1);
1156                 if (!opt[c]) {
1157                         printf("-%s\n", substr(str, i));
1158                         next;
1159                 }
1160                 printf("-%s\n", c);
1161                 if (arg[c]) {
1162                         if (i < len)
1163                                 printf("'%s'\n", substr(str, i + 1));
1164                         else
1165                                 expect = 1;
1166                         next;
1167                 }
1168         }
1169 }
1170 END {
1171         if (expect)
1172                 print "?";
1173 }
1174 EOF
1175
1176 : process the command line options
1177 set X `for arg in "$@"; do echo "X$arg"; done |
1178         sed -e s/X// | awk -f options.awk`
1179 eval "set $*"
1180 shift
1181 rm -f options.awk
1182
1183 : set up default values
1184 fastread=''
1185 reuseval=false
1186 config_sh=''
1187 alldone=''
1188 error=''
1189 silent=''
1190 extractsh=''
1191 override=''
1192 knowitall=''
1193 rm -f optdef.sh
1194 cat >optdef.sh <<EOS
1195 $startsh
1196 EOS
1197
1198
1199 : option parsing
1200 while test $# -gt 0; do
1201         case "$1" in
1202         -d) shift; fastread=yes;;
1203         -e) shift; alldone=cont;;
1204         -f)
1205                 shift
1206                 cd ..
1207                 if test -r "$1"; then
1208                         config_sh="$1"
1209                 else
1210                         echo "$me: cannot read config file $1." >&2
1211                         error=true
1212                 fi
1213                 cd UU
1214                 shift;;
1215         -h) shift; error=true;;
1216         -r) shift; reuseval=true;;
1217         -s) shift; silent=true; realsilent=true;;
1218         -E) shift; alldone=exit;;
1219         -K) shift; knowitall=true;;
1220         -O) shift; override=true;;
1221         -S) shift; silent=true; extractsh=true;;
1222         -D)
1223                 shift
1224                 case "$1" in
1225                 *=)
1226                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1227                         echo "$me: ignoring -D $1" >&2
1228                         ;;
1229                 *=*) echo "$1" | \
1230                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1231                 *) echo "$1='define'" >> optdef.sh;;
1232                 esac
1233                 shift
1234                 ;;
1235         -U)
1236                 shift
1237                 case "$1" in
1238                 *=) echo "$1" >> optdef.sh;;
1239                 *=*)
1240                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1241                         echo "$me: ignoring -U $1" >&2
1242                         ;;
1243                 *) echo "$1='undef'" >> optdef.sh;;
1244                 esac
1245                 shift
1246                 ;;
1247         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1248                 exit 0;;
1249         --) break;;
1250         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1251         *) break;;
1252         esac
1253 done
1254
1255 case "$error" in
1256 true)
1257         cat >&2 <<EOM
1258 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1259                  [-U symbol] [-U symbol=]
1260   -d : use defaults for all answers.
1261   -e : go on without questioning past the production of config.sh.
1262   -f : specify an alternate default configuration file.
1263   -h : print this help message and exit (with an error status).
1264   -r : reuse C symbols value if possible (skips costly nm extraction).
1265   -s : silent mode, only echoes questions and essential information.
1266   -D : define symbol to have some value:
1267          -D symbol         symbol gets the value 'define'
1268          -D symbol=value   symbol gets the value 'value'
1269   -E : stop at the end of questions, after having produced config.sh.
1270   -K : do not use unless you know what you are doing.
1271   -O : let -D and -U override definitions from loaded configuration file.
1272   -S : perform variable substitutions on all .SH files (can mix with -f)
1273   -U : undefine symbol:
1274          -U symbol    symbol gets the value 'undef'
1275          -U symbol=   symbol gets completely empty
1276   -V : print version number and exit (with a zero status).
1277 EOM
1278         exit 1
1279         ;;
1280 esac
1281
1282 : Sanity checks
1283 case "$fastread$alldone" in
1284 yescont|yesexit) ;;
1285 *)
1286         if test ! -t 0; then
1287                 echo "Say 'sh Configure', not 'sh <Configure'"
1288                 exit 1
1289         fi
1290         ;;
1291 esac
1292
1293 exec 4>&1
1294 case "$silent" in
1295 true) exec 1>/dev/null;;
1296 esac
1297
1298 : run the defines and the undefines, if any, but leave the file out there...
1299 touch optdef.sh
1300 . ./optdef.sh
1301
1302 : set package name
1303 package=perl5
1304 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1305 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1306 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1307 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1308 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1309 esac
1310
1311 : Some greps do not return status, grrr.
1312 echo "grimblepritz" >grimble
1313 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1314         contains=contains
1315 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1316         contains=grep
1317 else
1318         contains=contains
1319 fi
1320 rm -f grimble
1321 : the following should work in any shell
1322 case "$contains" in
1323 contains*)
1324         echo " "
1325         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1326         cat >contains <<'EOSS'
1327 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1328 EOSS
1329 chmod +x contains
1330 esac
1331
1332 : Find the path to the source tree
1333 case "$src" in
1334 '') case "$0" in
1335     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1336          case "$src" in
1337          /*)    ;;
1338          *)     src=`cd ../$src && pwd` ;;
1339          esac
1340          ;;
1341     *)   src='.';;
1342     esac;;
1343 esac
1344 case "$src" in
1345 '')     src=/
1346         rsrc=/
1347         ;;
1348 /*) rsrc="$src";;
1349 *) rsrc="../$src";;
1350 esac
1351 if test -f $rsrc/Configure && \
1352         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1353 then
1354    : found it, so we are ok.
1355 else
1356         rsrc=''
1357         for src in . .. ../.. ../../.. ../../../..; do
1358                 if test -f ../$src/Configure && \
1359                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1360                 then
1361                         rsrc=../$src
1362                         break
1363                 fi
1364         done
1365 fi
1366 case "$rsrc" in
1367 '')
1368         cat <<EOM >&4
1369
1370 Sorry, I can't seem to locate the source dir for $package.  Please start
1371 Configure with an explicit path -- i.e. /some/path/Configure.
1372
1373 EOM
1374         exit 1
1375         ;;
1376 ../.)   rsrc='..';;
1377 *)
1378         echo " "
1379         echo "Sources for $package found in \"$src\"." >&4
1380         ;;
1381 esac
1382
1383 : script used to extract .SH files with variable substitutions
1384 cat >extract <<'EOS'
1385 CONFIGDOTSH=true
1386 echo "Doing variable substitutions on .SH files..."
1387 if test -f $src/MANIFEST; then
1388         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1389 else
1390         echo "(Looking for .SH files under the source directory.)"
1391         set x `(cd $src; find . -name "*.SH" -print)`
1392 fi
1393 shift
1394 case $# in
1395 0) set x `(cd $src; echo *.SH)`; shift;;
1396 esac
1397 if test ! -f $src/$1; then
1398         shift
1399 fi
1400 mkdir_p='
1401 name=$1;
1402 create="";
1403 while test $name; do
1404         if test ! -d "$name"; then
1405                 create="$name $create";
1406                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1407                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1408         else
1409                 name="";
1410         fi;
1411 done;
1412 for file in $create; do
1413         mkdir $file;
1414 done
1415 '
1416 for file in $*; do
1417         case "$src" in
1418         ".")
1419                 case "$file" in
1420                 */*)
1421                         dir=`expr X$file : 'X\(.*\)/'`
1422                         file=`expr X$file : 'X.*/\(.*\)'`
1423                         (cd $dir && . ./$file)
1424                         ;;
1425                 *)
1426                         . ./$file
1427                         ;;
1428                 esac
1429                 ;;
1430         *)
1431                 case "$file" in
1432                 */*)
1433                         dir=`expr X$file : 'X\(.*\)/'`
1434                         file=`expr X$file : 'X.*/\(.*\)'`
1435                         (set x $dir; shift; eval $mkdir_p)
1436                         sh <$src/$dir/$file
1437                         ;;
1438                 *)
1439                         sh <$src/$file
1440                         ;;
1441                 esac
1442                 ;;
1443         esac
1444 done
1445 if test -f $src/config_h.SH; then
1446         if test ! -f config.h; then
1447         : oops, they left it out of MANIFEST, probably, so do it anyway.
1448         . $src/config_h.SH
1449         fi
1450 fi
1451 EOS
1452
1453 : extract files and exit if asked to do so
1454 case "$extractsh" in
1455 true)
1456         case "$realsilent" in
1457         true) ;;
1458         *) exec 1>&4;;
1459         esac
1460         case "$config_sh" in
1461         '') config_sh='config.sh';;
1462         esac
1463         echo " "
1464         echo "Fetching answers from $config_sh..."
1465         cd ..
1466         . $config_sh
1467         test "$override" && . ./optdef.sh
1468         echo " "
1469         . UU/extract
1470         rm -rf UU
1471         echo "Done."
1472         exit 0
1473         ;;
1474 esac
1475
1476 : Eunice requires " " instead of "", can you believe it
1477 echo " "
1478 : Here we go...
1479 echo "Beginning of configuration questions for $package."
1480
1481 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1482
1483 : first determine how to suppress newline on echo command
1484 echo " "
1485 echo "Checking echo to see how to suppress newlines..."
1486 (echo "hi there\c" ; echo " ") >.echotmp
1487 if $contains c .echotmp >/dev/null 2>&1 ; then
1488         echo "...using -n."
1489         n='-n'
1490         c=''
1491 else
1492         cat <<'EOM'
1493 ...using \c
1494 EOM
1495         n=''
1496         c='\c'
1497 fi
1498 echo $n "The star should be here-->$c"
1499 echo '*'
1500 rm -f .echotmp
1501
1502 : Now test for existence of everything in MANIFEST
1503 echo " "
1504 if test -f $rsrc/MANIFEST; then
1505         echo "First let's make sure your kit is complete.  Checking..." >&4
1506         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1507         rm -f missing
1508         tmppwd=`pwd`
1509         for filelist in x??; do
1510                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1511         done
1512         if test -s missing; then
1513                 cat missing >&4
1514                 cat >&4 <<'EOM'
1515
1516 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1517
1518 You have the option of continuing the configuration process, despite the
1519 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1520 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1521 and contact the author (perlbug@perl.com).
1522
1523 EOM
1524                 echo $n "Continue? [n] $c" >&4
1525                 read ans
1526                 case "$ans" in
1527                 y*)
1528                         echo "Continuing..." >&4
1529                         rm -f missing
1530                         ;;
1531                 *)
1532                         echo "ABORTING..." >&4
1533                         kill $$
1534                         ;;
1535                 esac
1536         else
1537                 echo "Looks good..."
1538         fi
1539 else
1540         echo "There is no MANIFEST file.  I hope your kit is complete !"
1541 fi
1542 rm -f missing x??
1543
1544 echo " "
1545 : Find the appropriate value for a newline for tr
1546 if test -n "$DJGPP"; then
1547        trnl='\012'
1548 fi
1549 if test X"$trnl" = X; then
1550         case "`echo foo|tr '\n' x 2>/dev/null`" in
1551         foox) trnl='\n' ;;
1552         esac
1553 fi
1554 if test X"$trnl" = X; then
1555         case "`echo foo|tr '\012' x 2>/dev/null`" in
1556         foox) trnl='\012' ;;
1557         esac
1558 fi
1559 if test X"$trnl" = X; then
1560         cat <<EOM >&2
1561
1562 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1563
1564 EOM
1565         exit 1
1566 fi
1567
1568 : compute the number of columns on the terminal for proper question formatting
1569 case "$COLUMNS" in
1570 '') COLUMNS='80';;
1571 esac
1572
1573 : set up the echo used in my read
1574 myecho="case \"\$xxxm\" in
1575 '') echo $n \"\$rp $c\" >&4;;
1576 *) case \"\$rp\" in
1577         '') echo $n \"[\$xxxm] $c\";;
1578         *)
1579                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1580                         echo \"\$rp\" >&4
1581                         echo $n \"[\$xxxm] $c\" >&4
1582                 else
1583                         echo $n \"\$rp [\$xxxm] $c\" >&4
1584                 fi
1585                 ;;
1586         esac;;
1587 esac"
1588
1589 : now set up to do reads with possible shell escape and default assignment
1590 cat <<EOSC >myread
1591 $startsh
1592 xxxm=\$dflt
1593 $myecho
1594 ans='!'
1595 case "\$fastread" in
1596 yes) case "\$dflt" in
1597         '') ;;
1598         *) ans='';
1599                 case "\$silent-\$rp" in
1600                 true-) ;;
1601                 *) echo " " >&4;;
1602                 esac;;
1603         esac;;
1604 *) case "\$silent" in
1605         true) case "\$rp" in
1606                 '') ans='';;
1607                 esac;;
1608         esac;;
1609 esac
1610 while expr "X\$ans" : "X!" >/dev/null; do
1611         read answ
1612         set x \$xxxm
1613         shift
1614         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1615         case  "\$answ" in
1616         "!")
1617                 sh 1>&4
1618                 echo " "
1619                 $myecho
1620                 ;;
1621         !*)
1622                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1623                 shift
1624                 sh 1>&4 -c "\$*"
1625                 echo " "
1626                 $myecho
1627                 ;;
1628         "\$ans")
1629                 case "\$ans" in
1630                 \\&*)
1631                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1632                         shift
1633                         case "\$1" in
1634                         -d)
1635                                 fastread=yes
1636                                 echo "(OK, I'll run with -d after this question.)" >&4
1637                                 ;;
1638                         -*)
1639                                 echo "*** Sorry, \$1 not supported yet." >&4
1640                                 ;;
1641                         esac
1642                         $myecho
1643                         ans=!
1644                         ;;
1645                 esac;;
1646         *)
1647                 case "\$aok" in
1648                 y)
1649                         echo "*** Substitution done -- please confirm."
1650                         xxxm="\$ans"
1651                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1652                         xxxm="\$ans"
1653                         ans=!
1654                         ;;
1655                 *)
1656                         echo "*** Error -- try again."
1657                         ans=!
1658                         ;;
1659                 esac
1660                 $myecho
1661                 ;;
1662         esac
1663         case "\$ans\$xxxm\$nostick" in
1664         '')
1665                 ans=!
1666                 $myecho
1667                 ;;
1668         esac
1669 done
1670 case "\$ans" in
1671 '') ans="\$xxxm";;
1672 esac
1673 EOSC
1674
1675 : create .config dir to save info across Configure sessions
1676 test -d ../.config || mkdir ../.config
1677 cat >../.config/README <<EOF
1678 This directory created by Configure to save information that should
1679 persist across sessions for $package.
1680
1681 You may safely delete it if you wish.
1682 EOF
1683
1684 : general instructions
1685 needman=true
1686 firsttime=true
1687 user=`(logname) 2>/dev/null`
1688 case "$user" in
1689 '') user=`whoami 2>&1`;;
1690 esac
1691 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1692         firsttime=false
1693         echo " "
1694         rp='Would you like to see the instructions?'
1695         dflt=n
1696         . ./myread
1697         case "$ans" in
1698         [yY]*) ;;
1699         *) needman=false;;
1700         esac
1701 fi
1702 if $needman; then
1703         cat <<EOH
1704
1705 This installation shell script will examine your system and ask you questions
1706 to determine how the perl5 package should be installed. If you get
1707 stuck on a question, you may use a ! shell escape to start a subshell or
1708 execute a command.  Many of the questions will have default answers in square
1709 brackets; typing carriage return will give you the default.
1710
1711 On some of the questions which ask for file or directory names you are allowed
1712 to use the ~name construct to specify the login directory belonging to "name",
1713 even if you don't have a shell which knows about that.  Questions where this is
1714 allowed will be marked "(~name ok)".
1715
1716 EOH
1717         rp=''
1718         dflt='Type carriage return to continue'
1719         . ./myread
1720         cat <<'EOH'
1721
1722 The prompter used in this script allows you to use shell variables and
1723 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1724 in the default answer, as if the default line was a set of arguments given to a
1725 script shell.  This means you may also use $* to repeat the whole default line,
1726 so you do not have to re-type everything to add something to the default.
1727
1728 Everytime there is a substitution, you will have to confirm.  If there is an
1729 error (e.g. an unmatched backtick), the default answer will remain unchanged
1730 and you will be prompted again.
1731
1732 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1733 the questions and use the computed defaults (or the previous answers if there
1734 was already a config.sh file). Type 'Configure -h' for a list of options.
1735 You may also start interactively and then answer '& -d' at any prompt to turn
1736 on the non-interactive behaviour for the remainder of the execution.
1737
1738 EOH
1739         . ./myread
1740         cat <<EOH
1741
1742 Much effort has been expended to ensure that this shell script will run on any
1743 Unix system.  If despite that it blows up on yours, your best bet is to edit
1744 Configure and run it again.  If you can't run Configure for some reason,
1745 you'll have to generate a config.sh file by hand.  Whatever problems you
1746 have, let me (perlbug@perl.com) know how I blew it.
1747
1748 This installation script affects things in two ways:
1749
1750 1) it may do direct variable substitutions on some of the files included
1751    in this kit.
1752 2) it builds a config.h file for inclusion in C programs.  You may edit
1753    any of these files as the need arises after running this script.
1754
1755 If you make a mistake on a question, there is no easy way to back up to it
1756 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1757 files.  Configure will offer to let you do this before it runs the SH files.
1758
1759 EOH
1760         dflt='Type carriage return to continue'
1761         . ./myread
1762         case "$firsttime" in
1763         true) echo $user >>../.config/instruct;;
1764         esac
1765 fi
1766
1767 : find out where common programs are
1768 echo " "
1769 echo "Locating common programs..." >&4
1770 cat <<EOSC >loc
1771 $startsh
1772 case \$# in
1773 0) exit 1;;
1774 esac
1775 thing=\$1
1776 shift
1777 dflt=\$1
1778 shift
1779 for dir in \$*; do
1780         case "\$thing" in
1781         .)
1782         if test -d \$dir/\$thing; then
1783                 echo \$dir
1784                 exit 0
1785         fi
1786         ;;
1787         *)
1788         for thisthing in \$dir/\$thing; do
1789                 : just loop through to pick last item
1790         done
1791         if test -f \$thisthing; then
1792                 echo \$thisthing
1793                 exit 0
1794         elif test -f \$dir/\$thing.exe; then
1795                 if test -n "$DJGPP"; then
1796                         echo \$dir/\$thing.exe
1797                 else
1798                         : on Eunice apparently
1799                         echo \$dir/\$thing
1800                 fi
1801                 exit 0
1802         fi
1803         ;;
1804         esac
1805 done
1806 echo \$dflt
1807 exit 1
1808 EOSC
1809 chmod +x loc
1810 $eunicefix loc
1811 loclist="
1812 awk
1813 cat
1814 comm
1815 cp
1816 echo
1817 expr
1818 grep
1819 ls
1820 make
1821 mkdir
1822 rm
1823 sed
1824 sort
1825 touch
1826 tr
1827 uniq
1828 "
1829 trylist="
1830 Mcc
1831 ar
1832 byacc
1833 cpp
1834 csh
1835 date
1836 egrep
1837 gzip
1838 less
1839 ln
1840 more
1841 nm
1842 nroff
1843 pg
1844 test
1845 uname
1846 zip
1847 "
1848 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1849 pth="$pth /lib /usr/lib"
1850 for file in $loclist; do
1851         eval xxx=\$$file
1852         case "$xxx" in
1853         /*|?:[\\/]*)
1854                 if test -f "$xxx"; then
1855                         : ok
1856                 else
1857                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1858                         xxx=`./loc $file $file $pth`
1859                 fi
1860                 ;;
1861         '') xxx=`./loc $file $file $pth`;;
1862         *) xxx=`./loc $xxx $xxx $pth`;;
1863         esac
1864         eval $file=$xxx
1865         eval _$file=$xxx
1866         case "$xxx" in
1867         /*)
1868                 echo $file is in $xxx.
1869                 ;;
1870         ?:[\\/]*)
1871                 echo $file is in $xxx.
1872                 ;;
1873         *)
1874                 echo "I don't know where '$file' is, and my life depends on it." >&4
1875                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1876                 exit 1
1877                 ;;
1878         esac
1879 done
1880 echo " "
1881 echo "Don't worry if any of the following aren't found..."
1882 say=offhand
1883 for file in $trylist; do
1884         eval xxx=\$$file
1885         case "$xxx" in
1886         /*|?:[\\/]*)
1887                 if test -f "$xxx"; then
1888                         : ok
1889                 else
1890                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1891                         xxx=`./loc $file $file $pth`
1892                 fi
1893                 ;;
1894         '') xxx=`./loc $file $file $pth`;;
1895         *) xxx=`./loc $xxx $xxx $pth`;;
1896         esac
1897         eval $file=$xxx
1898         eval _$file=$xxx
1899         case "$xxx" in
1900         /*)
1901                 echo $file is in $xxx.
1902                 ;;
1903         ?:[\\/]*)
1904                 echo $file is in $xxx.
1905                 ;;
1906         *)
1907                 echo "I don't see $file out there, $say."
1908                 say=either
1909                 ;;
1910         esac
1911 done
1912 case "$egrep" in
1913 egrep)
1914         echo "Substituting grep for egrep."
1915         egrep=$grep
1916         ;;
1917 esac
1918 case "$ln" in
1919 ln)
1920         echo "Substituting cp for ln."
1921         ln=$cp
1922         ;;
1923 esac
1924 case "$test" in
1925 test)
1926         echo "Hopefully test is built into your sh."
1927         ;;
1928 *)
1929         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1930                 echo "Using the test built into your sh."
1931                 test=test
1932                 _test=test
1933         fi
1934         ;;
1935 esac
1936 case "$echo" in
1937 echo)
1938         echo "Hopefully echo is built into your sh."
1939         ;;
1940 '') ;;
1941 *)
1942         echo " "
1943 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1944         $echo $n "hi there$c" >foo1
1945         echo $n "hi there$c" >foo2
1946         if cmp foo1 foo2 >/dev/null 2>&1; then
1947                 echo "They are compatible.  In fact, they may be identical."
1948         else
1949                 case "$n" in
1950                 '-n') n='' c='\c';;
1951                 *) n='-n' c='';;
1952                 esac
1953                 cat <<FOO
1954 They are not compatible!  You are probably running ksh on a non-USG system.
1955 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1956 have echo built in and we may have to run some Bourne shell scripts.  That
1957 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1958
1959 FOO
1960                 $echo $n "The star should be here-->$c"
1961                 $echo "*"
1962         fi
1963         $rm -f foo1 foo2
1964         ;;
1965 esac
1966
1967 : determine whether symbolic links are supported
1968 echo " "
1969 $touch blurfl
1970 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1971         echo "Symbolic links are supported." >&4
1972         lns="$ln -s"
1973 else
1974         echo "Symbolic links are NOT supported." >&4
1975         lns="$ln"
1976 fi
1977 $rm -f blurfl sym
1978
1979 : see whether [:lower:] and [:upper:] are supported character classes
1980 echo " "
1981 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1982 ABYZ)
1983         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1984         up='[:upper:]'
1985         low='[:lower:]'
1986         ;;
1987 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1988         # (0xc9 and 0xd1), therefore that is a nice testing point.
1989         if test "X$up" = X -o "X$low" = X; then
1990             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1991             ij) up='[A-Z]'
1992                 low='[a-z]'
1993                 ;;
1994             esac
1995         fi
1996         if test "X$up" = X -o "X$low" = X; then
1997             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1998             ij) up='A-Z'
1999                 low='a-z'
2000                 ;;
2001             esac
2002         fi
2003         if test "X$up" = X -o "X$low" = X; then
2004             case "`echo IJ | od -x 2>/dev/null`" in
2005             *C9D1*|*c9d1*)
2006                 echo "Hey, this might be EBCDIC." >&4
2007                 if test "X$up" = X -o "X$low" = X; then
2008                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2009                     ij) up='[A-IJ-RS-Z]'
2010                         low='[a-ij-rs-z]'
2011                         ;;
2012                     esac
2013                 fi
2014                 if test "X$up" = X -o "X$low" = X; then
2015                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2016                     ij) up='A-IJ-RS-Z'
2017                         low='a-ij-rs-z'
2018                         ;;
2019                     esac
2020                 fi
2021                 ;;
2022             esac
2023         fi
2024 esac
2025 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2026 ij)
2027     echo "Using $up and $low to convert case." >&4
2028     ;;
2029 *)
2030     echo "I don't know how to translate letters from upper to lower case." >&4
2031     echo "Your tr is not acting any way I know of." >&4
2032     exit 1
2033     ;;
2034 esac
2035 : set up the translation script tr, must be called with ./tr of course
2036 cat >tr <<EOSC
2037 $startsh
2038 case "\$1\$2" in
2039 '[A-Z][a-z]') exec $tr '$up' '$low';;
2040 '[a-z][A-Z]') exec $tr '$low' '$up';;
2041 esac
2042 exec $tr "\$@"
2043 EOSC
2044 chmod +x tr
2045 $eunicefix tr
2046
2047 : Try to determine whether config.sh was made on this system
2048 case "$config_sh" in
2049 '')
2050 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2051 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2052 # because the A-Z/a-z are not consecutive.
2053 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2054         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2055 newmyuname="$myuname"
2056 dflt=n
2057 case "$knowitall" in
2058 '')
2059         if test -f ../config.sh; then
2060                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2061                         eval "`grep myuname= ../config.sh`"
2062                 fi
2063                 if test "X$myuname" = "X$newmyuname"; then
2064                         dflt=y
2065                 fi
2066         fi
2067         ;;
2068 *) dflt=y;;
2069 esac
2070
2071 : Get old answers from old config file if Configure was run on the
2072 : same system, otherwise use the hints.
2073 hint=default
2074 cd ..
2075 if test -f config.sh; then
2076         echo " "
2077         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2078         . UU/myread
2079         case "$ans" in
2080         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2081         *)  echo "Fetching default answers from your old config.sh file..." >&4
2082                 tmp_n="$n"
2083                 tmp_c="$c"
2084                 tmp_sh="$sh"
2085                 . ./config.sh
2086                 cp config.sh UU
2087                 n="$tmp_n"
2088                 c="$tmp_c"
2089                 : Older versions did not always set $sh.  Catch re-use of such
2090                 : an old config.sh.
2091                 case "$sh" in
2092                 '') sh="$tmp_sh" ;;
2093                 esac
2094                 hint=previous
2095                 ;;
2096         esac
2097 fi
2098 if test ! -f config.sh; then
2099         $cat <<EOM
2100
2101 First time through, eh?  I have some defaults handy for some systems
2102 that need some extra help getting the Configure answers right:
2103
2104 EOM
2105         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2106         dflt=''
2107         : Half the following guesses are probably wrong... If you have better
2108         : tests or hints, please send them to perlbug@perl.com
2109         : The metaconfig authors would also appreciate a copy...
2110         $test -f /irix && osname=irix
2111         $test -f /xenix && osname=sco_xenix
2112         $test -f /dynix && osname=dynix
2113         $test -f /dnix && osname=dnix
2114         $test -f /lynx.os && osname=lynxos
2115         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2116         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2117         $test -f /bin/mips && /bin/mips && osname=mips
2118         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2119                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2120         $test -d /usr/apollo/bin && osname=apollo
2121         $test -f /etc/saf/_sactab && osname=svr4
2122         $test -d /usr/include/minix && osname=minix
2123         if $test -d /MachTen -o -d /MachTen_Folder; then
2124                 osname=machten
2125                 if $test -x /sbin/version; then
2126                         osvers=`/sbin/version | $awk '{print $2}' |
2127                         $sed -e 's/[A-Za-z]$//'`
2128                 elif $test -x /usr/etc/version; then
2129                         osvers=`/usr/etc/version | $awk '{print $2}' |
2130                         $sed -e 's/[A-Za-z]$//'`
2131                 else
2132                         osvers="$2.$3"
2133                 fi
2134         fi
2135        $test -f /sys/posix.dll &&
2136                $test -f /usr/bin/what &&
2137                set X `/usr/bin/what /sys/posix.dll` &&
2138                $test "$3" = UWIN &&
2139                osname=uwin &&
2140                osvers="$5"
2141         if $test -f $uname; then
2142                 set X $myuname
2143                 shift
2144
2145                 case "$5" in
2146                 fps*) osname=fps ;;
2147                 mips*)
2148                         case "$4" in
2149                         umips) osname=umips ;;
2150                         *) osname=mips ;;
2151                         esac;;
2152                 [23]100) osname=mips ;;
2153                 next*) osname=next ;;
2154                 i386*)
2155                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2156                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2157                                 osname='sco'
2158                                 osvers=$tmp
2159                         elif $test -f /etc/kconfig; then
2160                                 osname=isc
2161                                 if test "$lns" = "$ln -s"; then
2162                                         osvers=4
2163                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2164                                         osvers=3
2165                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2166                                         osvers=2
2167                                 fi
2168                         fi
2169                         tmp=''
2170                         ;;
2171                 pc*)
2172                         if test -n "$DJGPP"; then
2173                                 osname=dos
2174                                 osvers=djgpp
2175                         fi
2176                         ;;
2177                 esac
2178
2179                 case "$1" in
2180                 aix) osname=aix
2181                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2182                         case "$tmp" in
2183                         'not found') osvers="$4"."$3" ;;
2184                         '<3240'|'<>3240') osvers=3.2.0 ;;
2185                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2186                         '=3250'|'>3250') osvers=3.2.5 ;;
2187                         *) osvers=$tmp;;
2188                         esac
2189                         ;;
2190                 *dc.osx) osname=dcosx
2191                         osvers="$3"
2192                         ;;
2193                 dnix) osname=dnix
2194                         osvers="$3"
2195                         ;;
2196                 domainos) osname=apollo
2197                         osvers="$3"
2198                         ;;
2199                 dgux) osname=dgux 
2200                         osvers="$3"
2201                         ;;
2202                 dynixptx*) osname=dynixptx
2203                         osvers=`echo "$4"|sed 's/^v//'`
2204                         ;;
2205                 freebsd) osname=freebsd 
2206                         osvers="$3" ;;
2207                 genix) osname=genix ;;
2208                 hp*) osname=hpux 
2209                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2210                         ;;
2211                 irix*) osname=irix
2212                         case "$3" in
2213                         4*) osvers=4 ;;
2214                         5*) osvers=5 ;;
2215                         *)      osvers="$3" ;;
2216                         esac
2217                         ;;
2218                 linux) osname=linux
2219                         case "$3" in
2220                         *)      osvers="$3" ;;
2221                         esac
2222                         ;;
2223                 MiNT) osname=mint
2224                         ;;
2225                 netbsd*) osname=netbsd
2226                         osvers="$3"
2227                         ;;
2228                 news-os) osvers="$3"
2229                         case "$3" in
2230                         4*) osname=newsos4 ;;
2231                         *) osname=newsos ;;
2232                         esac
2233                         ;;
2234                 bsd386) osname=bsd386
2235                         osvers=`$uname -r`
2236                         ;;
2237                 POSIX-BC | posix-bc ) osname=posix-bc
2238                         osvers="$3"
2239                         ;;
2240                 powerux | power_ux | powermax_os | powermaxos | \
2241                 powerunix | power_unix) osname=powerux
2242                         osvers="$3"
2243                         ;;
2244                 next*) osname=next ;;
2245                 solaris) osname=solaris
2246                         case "$3" in
2247                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2248                         *)      osvers="$3" ;;
2249                         esac
2250                         ;;
2251                 sunos) osname=sunos
2252                         case "$3" in
2253                         5*) osname=solaris
2254                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2255                         *)      osvers="$3" ;;
2256                         esac
2257                         ;;
2258                 titanos) osname=titanos
2259                         case "$3" in
2260                         1*) osvers=1 ;;
2261                         2*) osvers=2 ;;
2262                         3*) osvers=3 ;;
2263                         4*) osvers=4 ;;
2264                         *)      osvers="$3" ;;
2265                         esac
2266                         ;;
2267                 ultrix) osname=ultrix
2268                         osvers="$3"
2269                         ;;
2270                 osf1|mls+)      case "$5" in
2271                                 alpha)
2272                                         osname=dec_osf
2273                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2274                                         ;;
2275                         hp*)    osname=hp_osf1  ;;
2276                         mips)   osname=mips_osf1 ;;
2277                         esac
2278                         ;;
2279                 uts) osname=uts 
2280                         osvers="$3"
2281                         ;;
2282                 qnx) osname=qnx
2283                         osvers="$4"
2284                         ;;
2285                 $2) case "$osname" in
2286                         *isc*) ;;
2287                         *freebsd*) ;;
2288                         svr*)
2289                                 : svr4.x or possibly later
2290                                 case "svr$3" in 
2291                                 ${osname}*)
2292                                         osname=svr$3
2293                                         osvers=$4
2294                                         ;;
2295                                 esac
2296                                 case "$osname" in
2297                                 svr4.0)
2298                                         : Check for ESIX
2299                                         if test -f /stand/boot ; then
2300                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2301                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2302                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2303                                                         if test -n "$isesix"; then
2304                                                                 osname=esix4
2305                                                         fi
2306                                                 fi
2307                                         fi
2308                                         ;;
2309                                 esac
2310                                 ;;
2311                         *)      if test -f /etc/systemid; then
2312                                         osname=sco
2313                                         set `echo $3 | $sed 's/\./ /g'` $4
2314                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2315                                                 osvers=$1.$2.$3
2316                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2317                                                 osvers=$1.$2
2318                                         elif $test -f $src/hints/sco_$1.sh; then
2319                                                 osvers=$1
2320                                         fi
2321                                 else
2322                                         case "$osname" in
2323                                         '') : Still unknown.  Probably a generic Sys V.
2324                                                 osname="sysv"
2325                                                 osvers="$3"
2326                                                 ;;
2327                                         esac
2328                                 fi
2329                                 ;;
2330                         esac
2331                         ;;
2332                 *)      case "$osname" in
2333                         '') : Still unknown.  Probably a generic BSD.
2334                                 osname="$1"
2335                                 osvers="$3"
2336                                 ;;
2337                         esac
2338                         ;;
2339                 esac
2340         else
2341                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2342                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2343                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2344                                 osname=news_os
2345                         fi
2346                         $rm -f UU/kernel.what
2347                 elif test -d c:/.; then
2348                         set X $myuname
2349                         osname=os2
2350                         osvers="$5"
2351                 fi
2352         fi
2353         
2354         : Now look for a hint file osname_osvers, unless one has been
2355         : specified already.
2356         case "$hintfile" in
2357         ''|' ')
2358                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2359                 : Also try without trailing minor version numbers.
2360                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2361                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2362                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2363                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2364                 case "$file" in
2365                 '') dflt=none ;;
2366                 *)  case "$osvers" in
2367                         '') dflt=$file
2368                                 ;;
2369                         *)  if $test -f $src/hints/$file.sh ; then
2370                                         dflt=$file
2371                                 elif $test -f $src/hints/$xfile.sh ; then
2372                                         dflt=$xfile
2373                                 elif $test -f $src/hints/$xxfile.sh ; then
2374                                         dflt=$xxfile
2375                                 elif $test -f $src/hints/$xxxfile.sh ; then
2376                                         dflt=$xxxfile
2377                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2378                                         dflt=$xxxxfile
2379                                 elif $test -f "$src/hints/${osname}.sh" ; then
2380                                         dflt="${osname}"
2381                                 else
2382                                         dflt=none
2383                                 fi
2384                                 ;;
2385                         esac
2386                         ;;
2387                 esac
2388                 if $test -f Policy.sh ; then
2389                         case "$dflt" in
2390                         *Policy*) ;;
2391                         none) dflt="Policy" ;;
2392                         *) dflt="Policy $dflt" ;;
2393                         esac
2394                 fi
2395                 ;;
2396         *)
2397                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2398                 ;;
2399         esac
2400
2401         if $test -f Policy.sh ; then
2402                 $cat <<EOM
2403
2404 There's also a Policy hint file available, which should make the
2405 site-specific (policy) questions easier to answer.
2406 EOM
2407
2408         fi
2409
2410         $cat <<EOM
2411
2412 You may give one or more space-separated answers, or "none" if appropriate.
2413 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2414 is a good thing.  DO NOT give a wrong version or a wrong OS.
2415
2416 EOM
2417
2418         rp="Which of these apply, if any?"
2419         . UU/myread
2420         tans=$ans
2421         for file in $tans; do
2422                 if $test X$file = XPolicy -a -f Policy.sh; then
2423                         . Policy.sh
2424                         $cat Policy.sh >> UU/config.sh
2425                 elif $test -f $src/hints/$file.sh; then
2426                         . $src/hints/$file.sh
2427                         $cat $src/hints/$file.sh >> UU/config.sh
2428                 elif $test X$tans = X -o X$tans = Xnone ; then
2429                         : nothing
2430                 else
2431                         : Give one chance to correct a possible typo.
2432                         echo "$file.sh does not exist"
2433                         dflt=$file
2434                         rp="hint to use instead?"
2435                         . UU/myread
2436                         for file in $ans; do
2437                                 if $test -f "$src/hints/$file.sh"; then
2438                                         . $src/hints/$file.sh
2439                                         $cat $src/hints/$file.sh >> UU/config.sh
2440                                 elif $test X$ans = X -o X$ans = Xnone ; then
2441                                         : nothing
2442                                 else
2443                                         echo "$file.sh does not exist -- ignored."
2444                                 fi
2445                         done
2446                 fi
2447         done
2448
2449         hint=recommended
2450         : Remember our hint file for later.
2451         if $test -f "$src/hints/$file.sh" ; then
2452                 hintfile="$file"
2453         else
2454                 hintfile=''
2455         fi
2456 fi
2457 cd UU
2458 ;;
2459 *)
2460         echo " "
2461         echo "Fetching default answers from $config_sh..." >&4
2462         tmp_n="$n"
2463         tmp_c="$c"
2464         cd ..
2465         cp $config_sh config.sh 2>/dev/null
2466         chmod +w config.sh
2467         . ./config.sh
2468         cd UU
2469         cp ../config.sh .
2470         n="$tmp_n"
2471         c="$tmp_c"
2472         hint=previous
2473         ;;
2474 esac
2475 test "$override" && . ./optdef.sh
2476 myuname="$newmyuname"
2477
2478 : Restore computed paths
2479 for file in $loclist $trylist; do
2480         eval $file="\$_$file"
2481 done
2482
2483 cat << EOM
2484
2485 Configure uses the operating system name and version to set some defaults.
2486 The default value is probably right if the name rings a bell. Otherwise,
2487 since spelling matters for me, either accept the default or answer "none"
2488 to leave it blank.
2489
2490 EOM
2491 case "$osname" in
2492         ''|' ')
2493                 case "$hintfile" in
2494                 ''|' '|none) dflt=none ;;
2495                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2496                 esac
2497                 ;;
2498         *) dflt="$osname" ;;
2499 esac
2500 rp="Operating system name?"
2501 . ./myread
2502 case "$ans" in
2503 none)  osname='' ;;
2504 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2505 esac
2506 echo " "
2507 case "$osvers" in
2508         ''|' ')
2509                 case "$hintfile" in
2510                 ''|' '|none) dflt=none ;;
2511                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2512                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2513                         case "$dflt" in
2514                         ''|' ') dflt=none ;;
2515                         esac
2516                         ;;
2517                 esac
2518                 ;;
2519         *) dflt="$osvers" ;;
2520 esac
2521 rp="Operating system version?"
2522 . ./myread
2523 case "$ans" in
2524 none)  osvers='' ;;
2525 *) osvers="$ans" ;;
2526 esac
2527
2528 : who configured the system
2529 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2530 cf_by=`(logname) 2>/dev/null`
2531 case "$cf_by" in
2532 "")
2533         cf_by=`(whoami) 2>/dev/null`
2534         case "$cf_by" in
2535         "") cf_by=unknown ;;
2536         esac ;;
2537 esac
2538
2539 : set up the script used to warn in case of inconsistency
2540 cat <<EOS >whoa
2541 $startsh
2542 EOS
2543 cat <<'EOSC' >>whoa
2544 dflt=y
2545 echo " "
2546 echo "*** WHOA THERE!!! ***" >&4
2547 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2548 rp="    Keep the $hint value?"
2549 . ./myread
2550 case "$ans" in
2551 y) td=$was; tu=$was;;
2552 esac
2553 EOSC
2554
2555 : function used to set $1 to $val
2556 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2557 case "$val$was" in
2558 $define$undef) . ./whoa; eval "$var=\$td";;
2559 $undef$define) . ./whoa; eval "$var=\$tu";;
2560 *) eval "$var=$val";;
2561 esac'
2562
2563 cat <<EOM
2564
2565 Perl can be built to take advantage of threads, on some systems.
2566 To do so, Configure must be run with -Dusethreads.
2567
2568 Note that threading is a highly experimental feature, and
2569 some known race conditions still remain.  If you choose to try
2570 it, be very sure to not actually deploy it for production
2571 purposes.  README.threads has more details, and is required
2572 reading if you enable threads.
2573 EOM
2574 case "$usethreads" in
2575 $define|true|[yY]*)     dflt='y';;
2576 *) dflt='n';;
2577 esac
2578 rp='Build a threading Perl?'
2579 . ./myread
2580 case "$ans" in
2581 y|Y)    val="$define" ;;     
2582 *)      val="$undef" ;;
2583 esac
2584 set usethreads
2585 eval $setvar 
2586
2587 case "$d_oldpthreads" in
2588 '')     : Configure tests would be welcome here.  For now, assume undef.
2589         val="$undef" ;;
2590 *)      val="$d_oldpthreads" ;;
2591 esac
2592 set d_oldpthreads
2593 eval $setvar
2594
2595
2596 case "$usethreads" in
2597 "$define"|true|[yY]*)
2598 : Look for a hint-file generated 'call-back-unit'.  If the
2599 : user has specified that a threading perl is to be built,
2600 : we may need to set or change some other defaults.
2601         if $test -f usethreads.cbu; then
2602                 echo "Your platform has some specific hints for threaded builds, using them..."
2603                 . ./usethreads.cbu
2604         else
2605                 $cat <<EOM
2606 (Your platform doesn't have any specific hints for threaded builds.
2607  Assuming POSIX threads, then.)
2608 EOM
2609         fi
2610     ;;
2611 esac
2612
2613 cat <<EOM
2614
2615 Perl can be built so that multiple Perl interpreters can coexist
2616 within the same Perl executable.  To do so, Configure must be run with
2617 -Dusemultiplicity.
2618
2619 Normally you do not need this and you should answer no.
2620
2621 EOM
2622 case "$usemultiplicity" in
2623 $define|true|[yY]*)     dflt='y';;
2624 *) dflt='n';;
2625 esac
2626 rp='Build Perl for multiplicity?'
2627 . ./myread
2628 case "$ans" in
2629 y|Y)    val="$define" ;;     
2630 *)      val="$undef" ;;
2631 esac
2632 set usemultiplicity
2633 eval $setvar 
2634
2635 : determine where manual pages are on this system
2636 echo " "
2637 case "$sysman" in
2638 '') 
2639         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2640         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2641         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2642         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2643         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2644         sysman=`./loc . /usr/man/man1 $syspath`
2645         ;;
2646 esac
2647 if $test -d "$sysman"; then
2648         echo "System manual is in $sysman." >&4
2649 else
2650         echo "Could not find manual pages in source form." >&4
2651 fi
2652
2653 : see what memory models we can support
2654 case "$models" in
2655 '')
2656         $cat >pdp11.c <<'EOP'
2657 int main() {
2658 #ifdef pdp11
2659         exit(0);
2660 #else
2661         exit(1);
2662 #endif
2663 }
2664 EOP
2665         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2666         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2667                 dflt='unsplit split'
2668         else
2669                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2670                 case "$tans" in
2671                 X) dflt='none';;
2672                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2673                                 dflt='small'
2674                         else
2675                                 dflt=''
2676                         fi
2677                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2678                                 dflt="$dflt medium"
2679                         fi
2680                         if $test -d /lib/large || $test -d /usr/lib/large; then
2681                                 dflt="$dflt large"
2682                         fi
2683                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2684                                 dflt="$dflt huge"
2685                         fi
2686                 esac
2687         fi;;
2688 *) dflt="$models";;
2689 esac
2690 $cat <<EOM
2691  
2692 Some systems have different model sizes.  On most systems they are called
2693 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2694 split.  If your system doesn't support different memory models, say "none".
2695 If you wish to force everything to one memory model, say "none" here and
2696 put the appropriate flags later when it asks you for other cc and ld flags.
2697 Venix systems may wish to put "none" and let the compiler figure things out.
2698 (In the following question multiple model names should be space separated.)
2699
2700 The default for most systems is "none".
2701
2702 EOM
2703 rp="Which memory models are supported?"
2704 . ./myread
2705 models="$ans"
2706
2707 case "$models" in
2708 none)
2709         small=''
2710         medium=''
2711         large=''
2712         huge=''
2713         unsplit=''
2714         split=''
2715         ;;
2716 *split)
2717         case "$split" in
2718         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2719                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2720                         dflt='-i'
2721                 else
2722                         dflt='none'
2723                 fi;;
2724         *) dflt="$split";;
2725         esac
2726         rp="What flag indicates separate I and D space?"
2727         . ./myread
2728         tans="$ans"
2729         case "$tans" in
2730         none) tans='';;
2731         esac
2732         split="$tans"
2733         unsplit='';;
2734 *large*|*small*|*medium*|*huge*)
2735         case "$models" in
2736         *large*)
2737                 case "$large" in
2738                 '') dflt='-Ml';;
2739                 *) dflt="$large";;
2740                 esac
2741         rp="What flag indicates large model?"
2742         . ./myread
2743         tans="$ans"
2744         case "$tans" in
2745         none) tans='';
2746         esac
2747         large="$tans";;
2748         *) large='';;
2749         esac
2750         case "$models" in
2751         *huge*) case "$huge" in
2752                 '') dflt='-Mh';;
2753                 *) dflt="$huge";;
2754                 esac
2755                 rp="What flag indicates huge model?"
2756                 . ./myread
2757                 tans="$ans"
2758                 case "$tans" in
2759                 none) tans='';
2760                 esac
2761                 huge="$tans";;
2762         *) huge="$large";;
2763         esac
2764         case "$models" in
2765         *medium*) case "$medium" in
2766                 '') dflt='-Mm';;
2767                 *) dflt="$medium";;
2768                 esac
2769                 rp="What flag indicates medium model?"
2770                 . ./myread
2771                 tans="$ans"
2772                 case "$tans" in
2773                 none) tans='';
2774                 esac
2775                 medium="$tans";;
2776         *) medium="$large";;
2777         esac
2778         case "$models" in
2779         *small*) case "$small" in
2780                 '') dflt='none';;
2781                 *) dflt="$small";;
2782                 esac
2783                 rp="What flag indicates small model?"
2784                 . ./myread
2785                 tans="$ans"
2786                 case "$tans" in
2787                 none) tans='';
2788                 esac
2789                 small="$tans";;
2790         *) small='';;
2791         esac
2792         ;;
2793 *)
2794         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2795         ;;
2796 esac
2797 $rm -f pdp11.* pdp11
2798
2799 : make some quick guesses about what we are up against
2800 echo " "
2801 $echo $n "Hmm...  $c"
2802 echo exit 1 >bsd
2803 echo exit 1 >usg
2804 echo exit 1 >v7
2805 echo exit 1 >osf1
2806 echo exit 1 >eunice
2807 echo exit 1 >xenix
2808 echo exit 1 >venix
2809 echo exit 1 >os2
2810 d_bsd="$undef"
2811 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2812 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2813 then
2814         echo "Looks kind of like an OSF/1 system, but we'll see..."
2815         echo exit 0 >osf1
2816 elif test `echo abc | tr a-z A-Z` = Abc ; then
2817         xxx=`./loc addbib blurfl $pth`
2818         if $test -f $xxx; then
2819         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2820                 echo exit 0 >bsd
2821                 echo exit 0 >usg
2822         else
2823                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2824                         echo "Looks kind of like an extended USG system, but we'll see..."
2825                 else
2826                         echo "Looks kind of like a USG system, but we'll see..."
2827                 fi
2828                 echo exit 0 >usg
2829         fi
2830 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2831         echo "Looks kind of like a BSD system, but we'll see..."
2832         d_bsd="$define"
2833         echo exit 0 >bsd
2834 else
2835         echo "Looks kind of like a Version 7 system, but we'll see..."
2836         echo exit 0 >v7
2837 fi
2838 case "$eunicefix" in
2839 *unixtovms*)
2840         $cat <<'EOI'
2841 There is, however, a strange, musty smell in the air that reminds me of
2842 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2843 EOI
2844         echo exit 0 >eunice
2845         d_eunice="$define"
2846 : it so happens the Eunice I know will not run shell scripts in Unix format
2847         ;;
2848 *)
2849         echo " "
2850         echo "Congratulations.  You aren't running Eunice."
2851         d_eunice="$undef"
2852         ;;
2853 esac
2854 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2855 case "$p_" in
2856 :) ;;
2857 *)
2858         $cat <<'EOI'
2859 I have the feeling something is not exactly right, however...don't tell me...
2860 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2861 EOI
2862         echo exit 0 >os2
2863         ;;
2864 esac
2865 if test -f /xenix; then
2866         echo "Actually, this looks more like a XENIX system..."
2867         echo exit 0 >xenix
2868         d_xenix="$define"
2869 else
2870         echo " "
2871         echo "It's not Xenix..."
2872         d_xenix="$undef"
2873 fi
2874 chmod +x xenix
2875 $eunicefix xenix
2876 if test -f /venix; then
2877         echo "Actually, this looks more like a VENIX system..."
2878         echo exit 0 >venix
2879 else
2880         echo " "
2881         if ./xenix; then
2882                 : null
2883         else
2884                 echo "Nor is it Venix..."
2885         fi
2886 fi
2887 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2888 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2889 $rm -f foo
2890
2891 : see if we need a special compiler
2892 echo " "
2893 if ./usg; then
2894         case "$cc" in
2895         '') case "$Mcc" in
2896                 /*) dflt='Mcc';;
2897                 *) case "$large" in
2898                         -M*) dflt='cc';;
2899                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2900                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2901                                                 dflt='cc'
2902                                         else
2903                                                 dflt='cc -M'
2904                                         fi
2905                                 else
2906                                         dflt='cc'
2907                                 fi;;
2908                         esac;;
2909                 esac;;
2910         *)  dflt="$cc";;
2911         esac
2912         case "$dflt" in
2913         *M*)    $cat <<'EOM'
2914 On some older systems the default C compiler will not resolve multiple global
2915 references that happen to have the same name.  On some such systems the "Mcc"
2916 command may be used to force these to be resolved.  On other systems a "cc -M"
2917 command is required.  (Note that the -M flag on other systems indicates a
2918 memory model to use!) If you have the Gnu C compiler, you might wish to use
2919 that instead.
2920
2921 EOM
2922         ;;
2923         esac
2924         rp="Use which C compiler?"
2925         . ./myread
2926         cc="$ans"
2927 else
2928         case "$cc" in
2929         '') dflt=cc;;
2930         *) dflt="$cc";;
2931         esac
2932         rp="Use which C compiler?"
2933         . ./myread
2934         cc="$ans"
2935 fi
2936 : Look for a hint-file generated 'call-back-unit'.  Now that the
2937 : user has specified the compiler, we may need to set or change some
2938 : other defaults.
2939 if $test -f cc.cbu; then
2940     . ./cc.cbu
2941 fi
2942 echo " "
2943 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2944 $cat >gccvers.c <<EOM
2945 #include <stdio.h>
2946 int main() {
2947 #ifdef __GNUC__
2948 #ifdef __VERSION__
2949         printf("%s\n", __VERSION__);
2950 #else
2951         printf("%s\n", "1");
2952 #endif
2953 #endif
2954         exit(0);
2955 }
2956 EOM
2957 if $cc -o gccvers gccvers.c; then
2958         gccversion=`./gccvers`
2959         case "$gccversion" in
2960         '') echo "You are not using GNU cc." ;;
2961         *)  echo "You are using GNU cc $gccversion." ;;
2962         esac
2963 else
2964         echo " "
2965         echo "*** WHOA THERE!!! ***" >&4
2966         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
2967         case "$knowitall" in
2968         '')
2969         echo "    You'd better start hunting for one and let me know about it." >&4
2970                 exit 1
2971                 ;;
2972         esac
2973 fi
2974 $rm -f gccvers*
2975 case "$gccversion" in
2976 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
2977 esac
2978
2979 cat <<EOM
2980
2981 Perl can be built to take advantage of explicit 64-bit interfaces,
2982 on some systems.  To do so, Configure must be run with -Duse64bits.
2983
2984 If this doesn't make any sense to you, just accept the default 'n'.
2985 EOM
2986 case "$use64bits" in
2987 $define|true|[yY]*)     dflt='y';;
2988 *) dflt='n';;
2989 esac
2990 rp='Try to use explicit 64-bit interfaces, if available?'
2991 . ./myread
2992 case "$ans" in
2993 y|Y) 
2994         val="$define"
2995         ;;     
2996 *)      
2997         val="$undef"
2998         ;;
2999 esac
3000 set use64bits
3001 eval $setvar
3002
3003 case "$archname64" in
3004 '') archname64='' ;;    # not a typo
3005 esac
3006
3007 case "$use64bits" in
3008 "$define"|true|[yY]*)
3009 : Look for a hint-file generated 'call-back-unit'.  If the
3010 : user has specified that a 64 bit perl is to be built,
3011 : we may need to set or change some other defaults.
3012         if $test -f use64bits.cbu; then
3013                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3014                 . ./use64bits.cbu
3015         else
3016                 $cat <<EOM
3017 (Your platform doesn't have any specific hints for 64-bit builds.
3018  This is probably okay, especially if your system is a true 64-bit system.)
3019 EOM
3020                 case "$gccversion" in
3021                 '')     ;;
3022                 *)      $cat <<EOM
3023 But since you seem to be using gcc,
3024 I will now add -DUSE_LONG_LONG to the compilation flags.
3025 EOM
3026                         ccflags="$ccflags -DUSE_LONG_LONG"
3027                         ;;
3028                 esac
3029         fi
3030         ;;
3031 esac
3032
3033 : determine the architecture name
3034 echo " "
3035 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3036         tarch=`arch`"-$osname"
3037 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3038         if uname -m > tmparch 2>&1 ; then
3039                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3040                         -e 's/$/'"-$osname/" tmparch`
3041         else
3042                 tarch="$osname"
3043         fi
3044         $rm -f tmparch
3045 else
3046         tarch="$osname"
3047 fi
3048 case "$myarchname" in
3049 ''|"$tarch") ;;
3050 *)
3051         echo "(Your architecture name used to be $myarchname.)"
3052         archname=''
3053         ;;
3054 esac
3055 myarchname="$tarch"
3056 case "$archname" in
3057 '') dflt="$tarch";;
3058 *) dflt="$archname";;
3059 esac
3060 rp='What is your architecture name'
3061 . ./myread
3062 archname="$ans"
3063 case "$usethreads" in
3064 $define)
3065         echo "Threads selected." >&4
3066         case "$archname" in
3067         *-thread*) echo "...and architecture name already has -thread." >&4
3068                 ;;
3069         *)      archname="$archname-thread"
3070                 echo "...setting architecture name to $archname." >&4
3071                 ;;
3072         esac
3073         ;;
3074 esac
3075 case "$usemultiplicity" in
3076 $define)
3077         echo "Multiplicity selected." >&4
3078         case "$archname" in
3079         *-multi*) echo "...and architecture name already has -multi." >&4
3080                 ;;
3081         *)      archname="$archname-multi"
3082                 echo "...setting architecture name to $archname." >&4
3083                 ;;
3084         esac
3085         ;;
3086 esac
3087 case "$use64bits" in
3088 $define)
3089         echo "Explicit 64-bitness selected." >&4
3090         case "$archname64" in
3091         '')
3092                 ;;
3093         *)
3094                 case "$archname" in
3095                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3096                         ;;
3097                 *)      archname="$archname-$archname64"
3098                         echo "...setting architecture name to $archname." >&4
3099                         ;;
3100                 esac
3101                 ;;
3102         esac
3103 esac
3104
3105 : decide how portable to be.  Allow command line overrides.
3106 case "$d_portable" in
3107 "$undef") ;;
3108 *)      d_portable="$define" ;;
3109 esac
3110
3111 : set up shell script to do ~ expansion
3112 cat >filexp <<EOSS
3113 $startsh
3114 : expand filename
3115 case "\$1" in
3116  ~/*|~)
3117         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3118         ;;
3119  ~*)
3120         if $test -f /bin/csh; then
3121                 /bin/csh -f -c "glob \$1"
3122                 failed=\$?
3123                 echo ""
3124                 exit \$failed
3125         else
3126                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3127                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3128                 if $test ! -d "\$dir"; then
3129                         me=\`basename \$0\`
3130                         echo "\$me: can't locate home directory for: \$name" >&2
3131                         exit 1
3132                 fi
3133                 case "\$1" in
3134                 */*)
3135                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3136                         ;;
3137                 *)
3138                         echo \$dir
3139                         ;;
3140                 esac
3141         fi
3142         ;;
3143 *)
3144         echo \$1
3145         ;;
3146 esac
3147 EOSS
3148 chmod +x filexp
3149 $eunicefix filexp
3150
3151 : now set up to get a file name
3152 cat <<EOS >getfile
3153 $startsh
3154 EOS
3155 cat <<'EOSC' >>getfile
3156 tilde=''
3157 fullpath=''
3158 already=''
3159 skip=''
3160 none_ok=''
3161 exp_file=''
3162 nopath_ok=''
3163 orig_rp="$rp"
3164 orig_dflt="$dflt"
3165 case "$gfpth" in
3166 '') gfpth='.' ;;
3167 esac
3168
3169 case "$fn" in
3170 *\(*)
3171         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3172         fn=`echo $fn | sed 's/(.*)//'`
3173         ;;
3174 esac
3175
3176 case "$fn" in
3177 *:*)
3178         loc_file=`expr $fn : '.*:\(.*\)'`
3179         fn=`expr $fn : '\(.*\):.*'`
3180         ;;
3181 esac
3182
3183 case "$fn" in
3184 *~*) tilde=true;;
3185 esac
3186 case "$fn" in
3187 */*) fullpath=true;;
3188 esac
3189 case "$fn" in
3190 *+*) skip=true;;
3191 esac
3192 case "$fn" in
3193 *n*) none_ok=true;;
3194 esac
3195 case "$fn" in
3196 *e*) exp_file=true;;
3197 esac
3198 case "$fn" in
3199 *p*) nopath_ok=true;;
3200 esac
3201
3202 case "$fn" in
3203 *f*) type='File';;
3204 *d*) type='Directory';;
3205 *l*) type='Locate';;
3206 esac
3207
3208 what="$type"
3209 case "$what" in
3210 Locate) what='File';;
3211 esac
3212
3213 case "$exp_file" in
3214 '')
3215         case "$d_portable" in
3216         "$define") ;;
3217         *) exp_file=true;;
3218         esac
3219         ;;
3220 esac
3221
3222 cd ..
3223 while test "$type"; do
3224         redo=''
3225         rp="$orig_rp"
3226         dflt="$orig_dflt"
3227         case "$tilde" in
3228         true) rp="$rp (~name ok)";;
3229         esac
3230         . UU/myread
3231         if test -f UU/getfile.ok && \
3232                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3233         then
3234                 value="$ans"
3235                 ansexp="$ans"
3236                 break
3237         fi
3238         case "$ans" in
3239         none)
3240                 value=''
3241                 ansexp=''
3242                 case "$none_ok" in
3243                 true) type='';;
3244                 esac
3245                 ;;
3246         *)
3247                 case "$tilde" in
3248                 '') value="$ans"
3249                         ansexp="$ans";;
3250                 *)
3251                         value=`UU/filexp $ans`
3252                         case $? in
3253                         0)
3254                                 if test "$ans" != "$value"; then
3255                                         echo "(That expands to $value on this system.)"
3256                                 fi
3257                                 ;;
3258                         *) value="$ans";;
3259                         esac
3260                         ansexp="$value"
3261                         case "$exp_file" in
3262                         '') value="$ans";;
3263                         esac
3264                         ;;
3265                 esac
3266                 case "$fullpath" in
3267                 true)
3268                         case "$ansexp" in
3269                         /*) value="$ansexp" ;;
3270                         *)
3271                                 redo=true
3272                                 case "$already" in
3273                                 true)
3274                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3275                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3276                                         ;;
3277                                 *)
3278                                 echo "Please give a full path name, starting with slash." >&4
3279                                         case "$tilde" in
3280                                         true)
3281                                 echo "Note that using ~name is ok provided it expands well." >&4
3282                                                 already=true
3283                                                 ;;
3284                                         esac
3285                                 esac
3286                                 ;;
3287                         esac
3288                         ;;
3289                 esac
3290                 case "$redo" in
3291                 '')
3292                         case "$type" in
3293                         File)
3294                                 for fp in $gfpth; do
3295                                         if test "X$fp" = X.; then
3296                                             pf="$ansexp"
3297                                         else    
3298                                             pf="$fp/$ansexp"
3299                                         fi
3300                                         if test -f "$pf"; then
3301                                                 type=''
3302                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3303                                         then
3304                                                 echo "($value is not a plain file, but that's ok.)"
3305                                                 type=''
3306                                         fi
3307                                         if test X"$type" = X; then
3308                                             value="$pf"
3309                                             break
3310                                         fi
3311                                 done
3312                                 ;;
3313                         Directory)
3314                                 for fp in $gfpth; do
3315                                         if test "X$fp" = X.; then
3316                                             pf="$ansexp"
3317                                         else    
3318                                             pf="$fp/$ansexp"
3319                                         fi
3320                                         if test -d "$pf"; then
3321                                                 type=''
3322                                                 value="$pf"
3323                                                 break
3324                                         fi
3325                                 done
3326                                 ;;
3327                         Locate)
3328                                 if test -d "$ansexp"; then
3329                                         echo "(Looking for $loc_file in directory $value.)"
3330                                         value="$value/$loc_file"
3331                                         ansexp="$ansexp/$loc_file"
3332                                 fi
3333                                 if test -f "$ansexp"; then
3334                                         type=''
3335                                 fi
3336                                 case "$nopath_ok" in
3337                                 true)   case "$value" in
3338                                         */*) ;;
3339                                         *)      echo "Assuming $value will be in people's path."
3340                                                 type=''
3341                                                 ;;
3342                                         esac
3343                                         ;;
3344                                 esac
3345                                 ;;
3346                         esac
3347
3348                         case "$skip" in
3349                         true) type='';
3350                         esac
3351
3352                         case "$type" in
3353                         '') ;;
3354                         *)
3355                                 if test "$fastread" = yes; then
3356                                         dflt=y
3357                                 else
3358                                         dflt=n
3359                                 fi
3360                                 rp="$what $value doesn't exist.  Use that name anyway?"
3361                                 . UU/myread
3362                                 dflt=''
3363                                 case "$ans" in
3364                                 y*) type='';;
3365                                 *) echo " ";;
3366                                 esac
3367                                 ;;
3368                         esac
3369                         ;;
3370                 esac
3371                 ;;
3372         esac
3373 done
3374 cd UU
3375 ans="$value"
3376 rp="$orig_rp"
3377 dflt="$orig_dflt"
3378 rm -f getfile.ok
3379 test "X$gfpthkeep" != Xy && gfpth=""
3380 EOSC
3381
3382 : determine root of directory hierarchy where package will be installed.
3383 case "$prefix" in
3384 '')
3385         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3386         ;;
3387 *)
3388         dflt="$prefix"
3389         ;;
3390 esac
3391 $cat <<EOM
3392
3393 By default, $package will be installed in $dflt/bin, manual pages
3394 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3395 installation directories. Typically this is something like /usr/local.
3396 If you wish to have binaries under /usr/bin but other parts of the
3397 installation under /usr/local, that's ok: you will be prompted
3398 separately for each of the installation directories, the prefix being
3399 only used to set the defaults.
3400
3401 EOM
3402 fn=d~
3403 rp='Installation prefix to use?'
3404 . ./getfile
3405 oldprefix=''
3406 case "$prefix" in
3407 '') ;;
3408 *)
3409         case "$ans" in
3410         "$prefix") ;;
3411         *) oldprefix="$prefix";;
3412         esac
3413         ;;
3414 esac
3415 prefix="$ans"
3416 prefixexp="$ansexp"
3417
3418 : is AFS running?
3419 echo " "
3420 case "$afs" in
3421 $define|true)   afs=true ;;
3422 $undef|false)   afs=false ;;
3423 *)      if test -d /afs; then
3424                 afs=true
3425         else
3426                 afs=false
3427         fi
3428         ;;
3429 esac
3430 if $afs; then
3431         echo "AFS may be running... I'll be extra cautious then..." >&4
3432 else
3433         echo "AFS does not seem to be running..." >&4
3434 fi
3435
3436 : determine installation prefix for where package is to be installed.
3437 if $afs; then 
3438 $cat <<EOM
3439
3440 Since you are running AFS, I need to distinguish the directory in which
3441 files will reside from the directory in which they are installed (and from
3442 which they are presumably copied to the former directory by occult means).
3443
3444 EOM
3445         case "$installprefix" in
3446         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3447         *) dflt="$installprefix";;
3448         esac
3449 else
3450 $cat <<EOM
3451
3452 In some special cases, particularly when building $package for distribution,
3453 it is convenient to distinguish between the directory in which files should 
3454 be installed from the directory ($prefix) in which they 
3455 will eventually reside.  For most users, these two directories are the same.
3456
3457 EOM
3458         case "$installprefix" in
3459         '') dflt=$prefix ;;
3460         *) dflt=$installprefix;;
3461         esac
3462 fi
3463 fn=d~
3464 rp='What installation prefix should I use for installing files?'
3465 . ./getfile
3466 installprefix="$ans"
3467 installprefixexp="$ansexp"
3468
3469 : set the prefixit variable, to compute a suitable default value
3470 prefixit='case "$3" in
3471 ""|none)
3472         case "$oldprefix" in
3473         "") eval "$1=\"\$$2\"";;
3474         *)
3475                 case "$3" in
3476                 "") eval "$1=";;
3477                 none)
3478                         eval "tp=\"\$$2\"";
3479                         case "$tp" in
3480                         ""|" ") eval "$1=\"\$$2\"";;
3481                         *) eval "$1=";;
3482                         esac;;
3483                 esac;;
3484         esac;;
3485 *)
3486         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3487         case "$tp" in
3488         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3489         /*-$oldprefix/*|\~*-$oldprefix/*)
3490                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3491         *) eval "$1=\"\$$2\"";;
3492         esac;;
3493 esac'
3494
3495 : set the base revision
3496 baserev=5.0
3497
3498 : get the patchlevel
3499 echo " "
3500 echo "Getting the current patchlevel..." >&4
3501 if $test -r $rsrc/patchlevel.h;then
3502         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3503         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3504 else
3505         patchlevel=0
3506         subversion=0
3507 fi
3508 $echo $n "(You have $package" $c
3509 case "$package" in
3510 "*$baserev")    ;;
3511 *)              $echo $n " $baserev" $c ;;
3512 esac
3513 $echo $n " patchlevel $patchlevel" $c
3514 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3515 echo ".)"
3516
3517 if test 0 -eq "$subversion"; then
3518         version=`LC_ALL=C; export LC_ALL; \
3519                  echo $baserev $patchlevel | \
3520                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3521 else
3522         version=`LC_ALL=C; export LC_ALL; \
3523                  echo $baserev $patchlevel $subversion | \
3524                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3525 fi
3526 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3527 if test "$subversion" -lt 50; then
3528         apiversion=`LC_ALL=C; export LC_ALL; \
3529                  LANGUAGE=C; export LANGUAGE; \
3530                  echo $baserev $patchlevel | \
3531                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3532 else
3533         apiversion="$version"
3534 fi
3535
3536 : determine installation style
3537 : For now, try to deduce it from prefix unless it is already set.
3538 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3539 case "$installstyle" in
3540 '')     case "$prefix" in
3541                 *perl*) dflt='lib';;
3542                 *) dflt='lib/perl5' ;;
3543         esac
3544         ;;
3545 *)      dflt='lib/perl5' ;;
3546 esac
3547 : Probably not worth prompting for this since we prompt for all
3548 : the directories individually, and the prompt would be too long and
3549 : confusing anyway.
3550 installstyle=$dflt
3551
3552 : determine where private library files go
3553 : Usual default is /usr/local/lib/perl5/$version.
3554 : Also allow things like /opt/perl/lib/$version, since 
3555 : /opt/perl/lib/perl5... would be redundant.
3556 : The default "style" setting is made in installstyle.U
3557 case "$installstyle" in
3558 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3559 *)       set dflt privlib lib/$version ;;
3560 esac
3561 eval $prefixit
3562 $cat <<EOM
3563
3564 There are some auxiliary files for $package that need to be put into a
3565 private library directory that is accessible by everyone.
3566
3567 EOM
3568 fn=d~+
3569 rp='Pathname where the private library files will reside?'
3570 . ./getfile
3571 privlib="$ans"
3572 privlibexp="$ansexp"
3573 : Change installation prefix, if necessary.
3574 if $test X"$prefix" != X"$installprefix"; then
3575         installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'`
3576 else
3577         installprivlib="$privlibexp"
3578 fi
3579
3580 : set the prefixup variable, to restore leading tilda escape
3581 prefixup='case "$prefixexp" in
3582 "$prefix") ;;
3583 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3584 esac'
3585
3586 : determine where public architecture dependent libraries go
3587 set archlib archlib
3588 eval $prefixit
3589 : privlib default is /usr/local/lib/$package/$version
3590 : archlib default is /usr/local/lib/$package/$version/$archname
3591 : privlib may have an optional trailing /share.
3592 tdflt=`echo $privlib | $sed 's,/share$,,'`
3593 tdflt=$tdflt/$archname
3594 case "$archlib" in
3595 '')     dflt=$tdflt
3596         ;;
3597 *)      dflt="$archlib"
3598     ;;
3599 esac
3600 $cat <<EOM
3601
3602 $spackage contains architecture-dependent library files.  If you are
3603 sharing libraries in a heterogeneous environment, you might store
3604 these files in a separate location.  Otherwise, you can just include
3605 them with the rest of the public library files.
3606
3607 EOM
3608 fn=d+~
3609 rp='Where do you want to put the public architecture-dependent libraries?'
3610 . ./getfile
3611 archlib="$ans"
3612 archlibexp="$ansexp"
3613 if $test X"$archlib" = X"$privlib"; then
3614         d_archlib="$undef"
3615 else
3616         d_archlib="$define"
3617 fi
3618 : Change installation prefix, if necessary.
3619 if $test X"$prefix" != X"$installprefix"; then
3620         installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'`
3621 else
3622         installarchlib="$archlibexp"
3623 fi
3624
3625
3626 : Binary compatibility with 5.005 is not possible for builds
3627 : with advanced features
3628 case "$usethreads$usemultiplicity" in
3629 *define*)
3630         bincompat5005="$undef"
3631         d_bincompat5005="$undef"
3632         ;;
3633 *)      $cat <<EOM
3634
3635 Perl 5.006 can be compiled for binary compatibility with 5.005.
3636 If you decide to do so, you will be able to continue using most
3637 of the extensions that were compiled for Perl 5.005.
3638
3639 EOM
3640         case "$bincompat5005$d_bincompat5005" in
3641         *"$undef"*) dflt=n ;;
3642         *) dflt=y ;;
3643         esac
3644         rp='Binary compatibility with Perl 5.005?'
3645         . ./myread
3646         case "$ans" in
3647         y*) val="$define" ;;
3648         *)  val="$undef" ;;
3649         esac
3650         set d_bincompat5005
3651         eval $setvar
3652         case "$d_bincompat5005" in
3653         "$define")
3654                 bincompat5005="$define"
3655                 ;;
3656         *)      bincompat5005="$undef"
3657                 d_bincompat5005="$undef"
3658                 ;;
3659         esac
3660         ;;
3661 esac
3662
3663
3664 : see if setuid scripts can be secure
3665 $cat <<EOM
3666
3667 Some kernels have a bug that prevents setuid #! scripts from being
3668 secure.  Some sites have disabled setuid #! scripts because of this.
3669
3670 First let's decide if your kernel supports secure setuid #! scripts.
3671 (If setuid #! scripts would be secure but have been disabled anyway,
3672 don't say that they are secure if asked.)
3673
3674 EOM
3675
3676 val="$undef"
3677 if $test -d /dev/fd; then
3678         echo "#!$ls" >reflect
3679         chmod +x,u+s reflect
3680         ./reflect >flect 2>&1
3681         if $contains "/dev/fd" flect >/dev/null; then
3682                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3683                 val="$define"
3684         else
3685                 $cat <<EOM
3686 If you are not sure if they are secure, I can check but I'll need a
3687 username and password different from the one you are using right now.
3688 If you don't have such a username or don't want me to test, simply
3689 enter 'none'.
3690
3691 EOM
3692                 rp='Other username to test security of setuid scripts with?'
3693                 dflt='none'
3694                 . ./myread
3695                 case "$ans" in
3696                 n|none)
3697                         case "$d_suidsafe" in
3698                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3699                                 dflt=n;;
3700                         "$undef")
3701                                 echo "Well, the $hint value is *not* secure." >&4
3702                                 dflt=n;;
3703                         *)      echo "Well, the $hint value *is* secure." >&4
3704                                 dflt=y;;
3705                         esac
3706                         ;;
3707                 *)
3708                         $rm -f reflect flect
3709                         echo "#!$ls" >reflect
3710                         chmod +x,u+s reflect
3711                         echo >flect
3712                         chmod a+w flect
3713                         echo '"su" will (probably) prompt you for '"$ans's password."
3714                         su $ans -c './reflect >flect'
3715                         if $contains "/dev/fd" flect >/dev/null; then
3716                                 echo "Okay, it looks like setuid scripts are secure." >&4
3717                                 dflt=y
3718                         else
3719                                 echo "I don't think setuid scripts are secure." >&4
3720                                 dflt=n
3721                         fi
3722                         ;;
3723                 esac
3724                 rp='Does your kernel have *secure* setuid scripts?'
3725                 . ./myread
3726                 case "$ans" in
3727                 [yY]*)  val="$define";;
3728                 *)      val="$undef";;
3729                 esac
3730         fi
3731 else
3732         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3733         echo "(That's for file descriptors, not floppy disks.)"
3734         val="$undef"
3735 fi
3736 set d_suidsafe
3737 eval $setvar
3738
3739 $rm -f reflect flect
3740
3741 : now see if they want to do setuid emulation
3742 echo " "
3743 val="$undef"
3744 case "$d_suidsafe" in
3745 "$define")
3746         val="$undef"
3747         echo "No need to emulate SUID scripts since they are secure here." >& 4
3748         ;;
3749 *)
3750         $cat <<EOM
3751 Some systems have disabled setuid scripts, especially systems where
3752 setuid scripts cannot be secure.  On systems where setuid scripts have
3753 been disabled, the setuid/setgid bits on scripts are currently
3754 useless.  It is possible for $package to detect those bits and emulate
3755 setuid/setgid in a secure fashion.  This emulation will only work if
3756 setuid scripts have been disabled in your kernel.
3757
3758 EOM
3759         case "$d_dosuid" in
3760         "$define") dflt=y ;;
3761         *) dflt=n ;;
3762         esac
3763         rp="Do you want to do setuid/setgid emulation?"
3764         . ./myread
3765         case "$ans" in
3766         [yY]*)  val="$define";;
3767         *)      val="$undef";;
3768         esac
3769         ;;
3770 esac
3771 set d_dosuid
3772 eval $setvar
3773
3774 : What should the include directory be ?
3775 echo " "
3776 $echo $n "Hmm...  $c"
3777 dflt='/usr/include'
3778 incpath=''
3779 mips_type=''
3780 if $test -f /bin/mips && /bin/mips; then
3781         echo "Looks like a MIPS system..."
3782         $cat >usr.c <<'EOCP'
3783 #ifdef SYSTYPE_BSD43
3784 /bsd43
3785 #endif
3786 EOCP
3787         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3788                 dflt='/bsd43/usr/include'
3789                 incpath='/bsd43'
3790                 mips_type='BSD 4.3'
3791         else
3792                 mips_type='System V'
3793         fi
3794         $rm -f usr.c usr.out
3795         echo "and you're compiling with the $mips_type compiler and libraries."
3796         xxx_prompt=y
3797         echo "exit 0" >mips
3798 else
3799         echo "Doesn't look like a MIPS system."
3800         xxx_prompt=n
3801         echo "exit 1" >mips
3802 fi
3803 chmod +x mips
3804 $eunicefix mips
3805 case "$usrinc" in
3806 '') ;;
3807 *) dflt="$usrinc";;
3808 esac
3809 case "$xxx_prompt" in
3810 y)      fn=d/
3811         echo " "
3812         rp='Where are the include files you want to use?'
3813         . ./getfile
3814         usrinc="$ans"
3815         ;;
3816 *)      usrinc="$dflt"
3817         ;;
3818 esac
3819
3820 : see how we invoke the C preprocessor
3821 echo " "
3822 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3823 cat <<'EOT' >testcpp.c
3824 #define ABC abc
3825 #define XYZ xyz
3826 ABC.XYZ
3827 EOT
3828 cd ..
3829 if test ! -f cppstdin; then
3830         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3831 else
3832         echo "Keeping your $hint cppstdin wrapper."
3833 fi
3834 chmod 755 cppstdin
3835 wrapper=`pwd`/cppstdin
3836 ok='false'
3837 cd UU
3838
3839 if $test "X$cppstdin" != "X" && \
3840         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3841         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3842 then
3843         echo "You used to use $cppstdin $cppminus so we'll use that again."
3844         case "$cpprun" in
3845         '') echo "But let's see if we can live without a wrapper..." ;;
3846         *)
3847                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3848                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3849                 then
3850                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3851                         ok='true'
3852                 else
3853                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3854                 fi
3855                 ;;
3856         esac
3857 else
3858         case "$cppstdin" in
3859         '') ;;
3860         *)
3861                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3862                 ;;
3863         esac
3864 fi
3865
3866 if $ok; then
3867         : nothing
3868 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3869         $cc -E <testcpp.c >testcpp.out 2>&1; \
3870         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3871         echo "Yup, it does."
3872         x_cpp="$cc -E"
3873         x_minus='';
3874 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3875         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3876         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3877         echo "Yup, it does."
3878         x_cpp="$cc -E"
3879         x_minus='-';
3880 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3881         $cc -P <testcpp.c >testcpp.out 2>&1; \
3882         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3883         echo "Yipee, that works!"
3884         x_cpp="$cc -P"
3885         x_minus='';
3886 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3887         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3888         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3889         echo "At long last!"
3890         x_cpp="$cc -P"
3891         x_minus='-';
3892 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3893         $cpp <testcpp.c >testcpp.out 2>&1; \
3894         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3895         echo "It works!"
3896         x_cpp="$cpp"
3897         x_minus='';
3898 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3899         $cpp - <testcpp.c >testcpp.out 2>&1; \
3900         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3901         echo "Hooray, it works!  I was beginning to wonder."
3902         x_cpp="$cpp"
3903         x_minus='-';
3904 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3905         $wrapper <testcpp.c >testcpp.out 2>&1; \
3906         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3907         x_cpp="$wrapper"
3908         x_minus=''
3909         echo "Eureka!"
3910 else
3911         dflt=''
3912         rp="No dice.  I can't find a C preprocessor.  Name one:"
3913         . ./myread
3914         x_cpp="$ans"
3915         x_minus=''
3916         $x_cpp <testcpp.c >testcpp.out 2>&1
3917         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3918                 echo "OK, that will do." >&4
3919         else
3920 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3921                 exit 1
3922         fi
3923 fi
3924
3925 case "$ok" in
3926 false)
3927         cppstdin="$x_cpp"
3928         cppminus="$x_minus"
3929         cpprun="$x_cpp"
3930         cpplast="$x_minus"
3931         set X $x_cpp
3932         shift
3933         case "$1" in
3934         "$cpp")
3935                 echo "Perhaps can we force $cc -E using a wrapper..."
3936                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3937                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3938                 then
3939                         echo "Yup, we can."
3940                         cppstdin="$wrapper"
3941                         cppminus='';
3942                 else
3943                         echo "Nope, we'll have to live without it..."
3944                 fi
3945                 ;;
3946         esac
3947         case "$cpprun" in
3948         "$wrapper")
3949                 cpprun=''
3950                 cpplast=''
3951                 ;;
3952         esac
3953         ;;
3954 esac
3955
3956 case "$cppstdin" in
3957 "$wrapper"|'cppstdin') ;;
3958 *) $rm -f $wrapper;;
3959 esac
3960 $rm -f testcpp.c testcpp.out
3961
3962 : Set private lib path
3963 case "$plibpth" in
3964 '') if ./mips; then
3965                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3966         fi;;
3967 esac
3968 case "$libpth" in
3969 ' ') dlist='';;
3970 '') dlist="$loclibpth $plibpth $glibpth";;
3971 *) dlist="$libpth";;
3972 esac
3973
3974 : Now check and see which directories actually exist, avoiding duplicates
3975 libpth=''
3976 for xxx in $dlist
3977 do
3978     if $test -d $xxx; then
3979                 case " $libpth " in
3980                 *" $xxx "*) ;;
3981                 *) libpth="$libpth $xxx";;
3982                 esac
3983     fi
3984 done
3985 $cat <<'EOM'
3986
3987 Some systems have incompatible or broken versions of libraries.  Among
3988 the directories listed in the question below, please remove any you
3989 know not to be holding relevant libraries, and add any that are needed.
3990 Say "none" for none.
3991
3992 EOM
3993 case "$libpth" in
3994 '') dflt='none';;
3995 *)
3996         set X $libpth
3997         shift
3998         dflt=${1+"$@"}
3999         ;;
4000 esac
4001 rp="Directories to use for library searches?"
4002 . ./myread
4003 case "$ans" in
4004 none) libpth=' ';;
4005 *) libpth="$ans";;
4006 esac
4007
4008 : compute shared library extension
4009 case "$so" in
4010 '')
4011         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4012                 dflt='sl'
4013         else
4014                 dflt='so'
4015         fi
4016         ;;
4017 *) dflt="$so";;
4018 esac
4019 $cat <<EOM
4020
4021 On some systems, shared libraries may be available.  Answer 'none' if
4022 you want to suppress searching of shared libraries for the remaining
4023 of this configuration.
4024
4025 EOM
4026 rp='What is the file extension used for shared libraries?'
4027 . ./myread
4028 so="$ans"
4029
4030 : Define several unixisms.
4031 : Hints files or command line option can be used to override them.
4032 : The convoluted testing is in case hints files set either the old
4033 : or the new name.
4034 case "$_exe" in
4035 '')     case "$exe_ext" in
4036     '') ;;
4037         *)      _exe="$exe_ext" ;;
4038         esac
4039         ;;
4040 esac
4041 case "$_a" in
4042 '')     case "$lib_ext" in
4043     '') _a='.a';;
4044         *)      _a="$lib_ext" ;;
4045         esac
4046         ;;
4047 esac
4048 case "$_o" in
4049 '') case "$obj_ext" in
4050         '')     _o='.o';;
4051         *)      _o="$obj_ext";;
4052         esac
4053         ;;
4054 esac
4055 case "$p_" in
4056 '') case "$path_sep" in
4057         '')     p_=':';;
4058         *)      p_="$path_sep";;
4059         esac
4060         ;;
4061 esac
4062 exe_ext=$_exe
4063 lib_ext=$_a
4064 obj_ext=$_o
4065 path_sep=$p_
4066
4067 : Which makefile gets called first.  This is used by make depend.
4068 case "$firstmakefile" in
4069 '') firstmakefile='makefile';;
4070 esac
4071
4072 cat <<EOM
4073
4074 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4075 Configure must be run with -Dusesocks.
4076
4077 Normally you do not need this and you should answer no.
4078
4079 EOM
4080 case "$usesocks" in
4081 $define|true|[yY]*)     dflt='y';;
4082 *) dflt='n';;
4083 esac
4084 rp='Build Perl for SOCKS?'
4085 . ./myread
4086 case "$ans" in
4087 y|Y)    val="$define" ;;     
4088 *)      val="$undef" ;;
4089 esac
4090 set usesocks
4091 eval $setvar
4092
4093 : Looking for optional libraries
4094 echo " "
4095 echo "Checking for optional libraries..." >&4
4096 case "$libs" in
4097 ' '|'') dflt='';;
4098 *) dflt="$libs";;
4099 esac
4100 case "$libswanted" in
4101 '') libswanted='c_s';;
4102 esac
4103 case "$usesocks" in
4104 $define)
4105         libswanted="$libswanted socks5 socks5_sh"
4106         ;;
4107 esac
4108 for thislib in $libswanted; do
4109         
4110         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4111                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4112                 echo "Found -l$thislib (shared)."
4113                 case " $dflt " in
4114                 *"-l$thislib "*);;
4115                 *) dflt="$dflt -l$thislib";;
4116                 esac
4117         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4118                 echo "Found -l$thislib (shared)."
4119                 case " $dflt " in
4120                 *"-l$thislib "*);;
4121                 *) dflt="$dflt -l$thislib";;
4122                 esac
4123         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4124                 echo "Found -l$thislib."
4125                 case " $dflt " in
4126                 *"-l$thislib "*);;
4127                 *) dflt="$dflt -l$thislib";;
4128                 esac
4129         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4130                 echo "Found -l$thislib."
4131                 case " $dflt " in
4132                 *"-l$thislib "*);;
4133                 *) dflt="$dflt -l$thislib";;
4134                 esac
4135         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4136                 echo "Found -l${thislib}_s."
4137                 case " $dflt " in
4138                 *"-l$thislib "*);;
4139                 *) dflt="$dflt -l${thislib}_s";;
4140                 esac
4141         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4142                 echo "Found -l$thislib."
4143                 case " $dflt " in
4144                 *"-l$thislib "*);;
4145                 *) dflt="$dflt -l$thislib";;
4146                 esac
4147         else
4148                 echo "No -l$thislib."
4149         fi
4150 done
4151 set X $dflt
4152 shift
4153 dflt="$*"
4154 case "$libs" in
4155 '') dflt="$dflt";;
4156 *) dflt="$libs";;
4157 esac
4158 case "$dflt" in
4159 ' '|'') dflt='none';;
4160 esac
4161
4162 $cat <<EOM
4163
4164 In order to compile $package on your machine, a number of libraries
4165 are usually needed.  Include any other special libraries here as well.
4166 Say "none" for none.  The default list is almost always right.
4167 EOM
4168
4169 echo " "
4170 rp="What libraries to use?"
4171 . ./myread
4172 case "$ans" in
4173 none) libs=' ';;
4174 *) libs="$ans";;
4175 esac
4176
4177 : determine optimize, if desired, or use for debug flag also
4178 case "$optimize" in
4179 ' '|$undef) dflt='none';;
4180 '') dflt='-O';;
4181 *) dflt="$optimize";;
4182 esac
4183 $cat <<EOH
4184
4185 Some C compilers have problems with their optimizers.  By default, $package
4186 compiles with the -O flag to use the optimizer.  Alternately, you might want
4187 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4188 systems).  Either flag can be specified here.  To use neither flag, specify
4189 the word "none".
4190
4191 EOH
4192 rp="What optimizer/debugger flag should be used?"
4193 . ./myread
4194 optimize="$ans"
4195 case "$optimize" in
4196 'none') optimize=" ";;
4197 esac
4198
4199 dflt=''
4200 : We will not override a previous value, but we might want to
4201 : augment a hint file
4202 case "$hint" in
4203 none|recommended)
4204         case "$gccversion" in
4205         1*) dflt='-fpcc-struct-return' ;;
4206         esac
4207         case "$optimize" in
4208         *-g*) dflt="$dflt -DDEBUGGING";;
4209         esac
4210         case "$gccversion" in
4211         2*) if test -d /etc/conf/kconfig.d &&
4212                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4213                 then
4214                         dflt="$dflt -posix"
4215                 fi
4216                 ;;
4217         esac
4218         ;;
4219 esac
4220
4221 case "$mips_type" in
4222 *BSD*|'') inclwanted="$locincpth $usrinc";;
4223 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4224 esac
4225 for thisincl in $inclwanted; do
4226         if $test -d $thisincl; then
4227                 if $test x$thisincl != x$usrinc; then
4228                         case "$dflt" in
4229                         *$thisincl*);;
4230                         *) dflt="$dflt -I$thisincl";;
4231                         esac
4232                 fi
4233         fi
4234 done
4235
4236 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4237         xxx=true;
4238 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4239         xxx=true;
4240 else
4241         xxx=false;
4242 fi;
4243 if $xxx; then
4244         case "$dflt" in
4245         *$2*);;
4246         *) dflt="$dflt -D$2";;
4247         esac;
4248 fi'
4249
4250 set signal.h LANGUAGE_C; eval $inctest
4251
4252 case "$usesocks" in
4253 $define)
4254         ccflags="$ccflags -DSOCKS"
4255         ;;
4256 esac
4257
4258 case "$hint" in
4259 none|recommended) dflt="$ccflags $dflt" ;;
4260 *) dflt="$ccflags";;
4261 esac
4262
4263 case "$dflt" in
4264 ''|' ') dflt=none;;
4265 esac
4266 $cat <<EOH
4267
4268 Your C compiler may want other flags.  For this question you should include
4269 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4270 but you should NOT include libraries or ld flags like -lwhatever.  If you
4271 want $package to honor its debug switch, you should include -DDEBUGGING here.
4272 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4273
4274 To use no flags, specify the word "none".
4275
4276 EOH
4277 set X $dflt
4278 shift
4279 dflt=${1+"$@"}
4280 rp="Any additional cc flags?"
4281 . ./myread
4282 case "$ans" in
4283 none) ccflags='';;
4284 *) ccflags="$ans";;
4285 esac
4286
4287 : the following weeds options from ccflags that are of no interest to cpp
4288 cppflags="$ccflags"
4289 case "$gccversion" in
4290 1*) cppflags="$cppflags -D__GNUC__"
4291 esac
4292 case "$mips_type" in
4293 '');;
4294 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4295 esac
4296 case "$cppflags" in
4297 '');;
4298 *)
4299         echo " "
4300         echo "Let me guess what the preprocessor flags are..." >&4
4301         set X $cppflags
4302         shift
4303         cppflags=''
4304         $cat >cpp.c <<'EOM'
4305 #define BLURFL foo
4306
4307 BLURFL xx LFRULB
4308 EOM
4309         previous=''
4310         for flag in $*
4311         do
4312                 case "$flag" in
4313                 -*) ftry="$flag";;
4314                 *) ftry="$previous $flag";;
4315                 esac
4316                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4317                         >cpp1.out 2>/dev/null && \
4318                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4319                         >cpp2.out 2>/dev/null && \
4320                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4321                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4322                 then
4323                         cppflags="$cppflags $ftry"
4324                         previous=''
4325                 else
4326                         previous="$flag"
4327                 fi
4328         done
4329         set X $cppflags
4330         shift
4331         cppflags=${1+"$@"}
4332         case "$cppflags" in
4333         *-*)  echo "They appear to be: $cppflags";;
4334         esac
4335         $rm -f cpp.c cpp?.out
4336         ;;
4337 esac
4338
4339 : flags used in final linking phase
4340 case "$ldflags" in
4341 '') if ./venix; then
4342                 dflt='-i -z'
4343         else
4344                 dflt=''
4345         fi
4346         case "$ccflags" in
4347         *-posix*) dflt="$dflt -posix" ;;
4348         esac
4349         ;;
4350 *) dflt="$ldflags";;
4351 esac
4352
4353 : Try to guess additional flags to pick up local libraries.
4354 for thislibdir in $libpth; do
4355         case " $loclibpth " in
4356         *" $thislibdir "*)
4357                 case "$dflt " in 
4358                 *"-L$thislibdir "*) ;;
4359                 *)  dflt="$dflt -L$thislibdir" ;;
4360                 esac
4361                 ;;
4362         esac
4363 done
4364
4365 case "$dflt" in
4366 '') dflt='none' ;;
4367 esac
4368
4369 $cat <<EOH
4370
4371 Your C linker may need flags.  For this question you should
4372 include -L/whatever and any other flags used by the C linker, but you
4373 should NOT include libraries like -lwhatever.
4374
4375 Make sure you include the appropriate -L/path flags if your C linker
4376 does not normally search all of the directories you specified above,
4377 namely
4378         $libpth
4379 To use no flags, specify the word "none".
4380
4381 EOH
4382
4383 rp="Any additional ld flags (NOT including libraries)?"
4384 . ./myread
4385 case "$ans" in
4386 none) ldflags='';;
4387 *) ldflags="$ans";;
4388 esac
4389 rmlist="$rmlist pdp11"
4390
4391 : coherency check
4392 echo " "
4393 echo "Checking your choice of C compiler and flags for coherency..." >&4
4394 $cat > try.c <<'EOF'
4395 #include <stdio.h>
4396 int main() { printf("Ok\n"); exit(0); }
4397 EOF
4398 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4399 shift
4400 $cat >try.msg <<'EOM'
4401 I've tried to compile and run the following simple program:
4402
4403 EOM
4404 $cat try.c >> try.msg
4405
4406 $cat >> try.msg <<EOM
4407
4408 I used the command:
4409
4410         $*
4411         ./try
4412
4413 and I got the following output:
4414
4415 EOM
4416 dflt=y
4417 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4418         if sh -c './try' >>try.msg 2>&1; then
4419                 xxx=`./try`
4420                 case "$xxx" in
4421                 "Ok") dflt=n ;;
4422                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4423                         case " $libs " in
4424                         *" -lsfio "*)
4425                                 cat >> try.msg <<'EOQS'
4426 If $libs contains -lsfio, and sfio is mis-configured, then it
4427 sometimes (apparently) runs and exits with a 0 status, but with no
4428 output!  It may have to do with sfio's use of _exit vs. exit.
4429
4430 EOQS
4431                                 rp="You have a big problem.  Shall I abort Configure"
4432                                 dflt=y
4433                                 ;;
4434                         esac
4435                         ;;
4436                 esac
4437         else
4438                 echo "The program compiled OK, but exited with status $?." >>try.msg
4439                 rp="You have a problem.  Shall I abort Configure"
4440                 dflt=y
4441         fi
4442 else
4443         echo "I can't compile the test program." >>try.msg
4444         rp="You have a BIG problem.  Shall I abort Configure"
4445         dflt=y
4446 fi
4447 case "$dflt" in
4448 y)
4449         $cat try.msg >&4
4450         case "$knowitall" in
4451         '')
4452                 echo "(The supplied flags or libraries might be incorrect.)"
4453                 ;;
4454         *) dflt=n;;
4455         esac
4456         echo " "
4457         . ./myread
4458         case "$ans" in
4459         n*|N*) ;;
4460         *)      echo "Ok.  Stopping Configure." >&4
4461                 exit 1
4462                 ;;
4463         esac
4464         ;;
4465 n) echo "OK, that should do.";;
4466 esac
4467 $rm -f try try.* core
4468
4469 : determine filename position in cpp output
4470 echo " "
4471 echo "Computing filename position in cpp output for #include directives..." >&4
4472 echo '#include <stdio.h>' > foo.c
4473 $cat >fieldn <<EOF
4474 $startsh
4475 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4476 $grep '^[       ]*#.*stdio\.h' | \
4477 while read cline; do
4478         pos=1
4479         set \$cline
4480         while $test \$# -gt 0; do
4481                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4482                         echo "\$pos"
4483                         exit 0
4484                 fi
4485                 shift
4486                 pos=\`expr \$pos + 1\`
4487         done
4488 done
4489 EOF
4490 chmod +x fieldn
4491 fieldn=`./fieldn`
4492 $rm -f foo.c fieldn
4493 case $fieldn in
4494 '') pos='???';;
4495 1) pos=first;;
4496 2) pos=second;;
4497 3) pos=third;;
4498 *) pos="${fieldn}th";;
4499 esac
4500 echo "Your cpp writes the filename in the $pos field of the line."
4501
4502 : locate header file
4503 $cat >findhdr <<EOF
4504 $startsh
4505 wanted=\$1
4506 name=''
4507 for usrincdir in $usrinc
4508 do
4509         if test -f \$usrincdir/\$wanted; then
4510                 echo "\$usrincdir/\$wanted"
4511                 exit 0
4512         fi
4513 done
4514 awkprg='{ print \$$fieldn }'
4515 echo "#include <\$wanted>" > foo\$\$.c
4516 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4517 $grep "^[       ]*#.*\$wanted" | \
4518 while read cline; do
4519         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4520         case "\$name" in
4521         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4522         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4523         *) exit 2;;
4524         esac;
4525 done;
4526 #
4527 # status = 0: grep returned 0 lines, case statement not executed
4528 # status = 1: headerfile found
4529 # status = 2: while loop executed, no headerfile found
4530 #
4531 status=\$?
4532 $rm -f foo\$\$.c;
4533 if test \$status -eq 1; then
4534         exit 0;
4535 fi
4536 exit 1
4537 EOF
4538 chmod +x findhdr
4539
4540 : define an alternate in-header-list? function
4541 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4542 cont=true; xxf="echo \"<\$1> found.\" >&4";
4543 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4544 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4545 esac;
4546 case $# in 4) instead=instead;; *) instead="at last";; esac;
4547 while $test "$cont"; do
4548         xxx=`./findhdr $1`
4549         var=$2; eval "was=\$$2";
4550         if $test "$xxx" && $test -r "$xxx";
4551         then eval $xxf;
4552         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4553                 cont="";
4554         else eval $xxnf;
4555         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4556         set $yyy; shift; shift; yyy=$@;
4557         case $# in 0) cont="";;
4558         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4559                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4560         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4561                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4562         esac;
4563 done;
4564 while $test "$yyy";
4565 do set $yyy; var=$2; eval "was=\$$2";
4566         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4567         set $yyy; shift; shift; yyy=$@;
4568 done'
4569
4570 : see if this is a malloc.h system
4571 set malloc.h i_malloc
4572 eval $inhdr
4573
4574 : see if stdlib is available
4575 set stdlib.h i_stdlib
4576 eval $inhdr
4577
4578 : determine which malloc to compile in
4579 echo " "
4580 case "$usemymalloc" in
4581 ''|[yY]*|true|$define)  dflt='y' ;;
4582 *)      dflt='n' ;;
4583 esac
4584 rp="Do you wish to attempt to use the malloc that comes with $package?"
4585 . ./myread
4586 usemymalloc="$ans"
4587 case "$ans" in
4588 y*|true)
4589         usemymalloc='y'
4590         mallocsrc='malloc.c'
4591         mallocobj="malloc$_o"
4592         d_mymalloc="$define"
4593         case "$libs" in
4594         *-lmalloc*)
4595                 : Remove malloc from list of libraries to use
4596                 echo "Removing unneeded -lmalloc from library list" >&4
4597                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4598                 shift
4599                 libs="$*"
4600                 echo "libs = $libs" >&4
4601                 ;;
4602         esac
4603         ;;
4604 *)
4605         usemymalloc='n'
4606         mallocsrc=''
4607         mallocobj=''
4608         d_mymalloc="$undef"
4609         ;;
4610 esac
4611
4612 : compute the return types of malloc and free
4613 echo " "
4614 $cat >malloc.c <<END
4615 #$i_malloc I_MALLOC
4616 #$i_stdlib I_STDLIB
4617 #include <stdio.h>
4618 #include <sys/types.h>
4619 #ifdef I_MALLOC
4620 #include <malloc.h>
4621 #endif
4622 #ifdef I_STDLIB
4623 #include <stdlib.h>
4624 #endif
4625 #ifdef TRY_MALLOC
4626 void *malloc();
4627 #endif
4628 #ifdef TRY_FREE
4629 void free();
4630 #endif
4631 END
4632 case "$malloctype" in
4633 '')
4634         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4635                 malloctype='void *'
4636         else
4637                 malloctype='char *'
4638         fi
4639         ;;
4640 esac
4641 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4642
4643 case "$freetype" in
4644 '')
4645         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4646                 freetype='void'
4647         else
4648                 freetype='int'
4649         fi
4650         ;;
4651 esac
4652 echo "Your system uses $freetype free(), it would seem." >&4
4653 $rm -f malloc.[co]
4654 $cat <<EOM
4655
4656 The installation process will also create a directory for
4657 vendor-supplied add-ons.  Vendors who supply perl with their system
4658 may find it convenient to place all vendor-supplied files in this
4659 directory rather than in the main distribution directory.  This will
4660 ease upgrades between binary-compatible maintenance versions of perl.
4661
4662 Of course you may also use these directories in whatever way you see
4663 fit.  For example, you might use them to access modules shared over a
4664 company-wide network.
4665
4666 The default answer should be fine for most people.
4667 This causes further questions about vendor add-ons to be skipped
4668 and no vendor-specific directories will be configured for perl.
4669
4670 EOM
4671 rp='Do you want to configure vendor-specific add-on directories?'
4672 case "$usevendorprefix" in
4673 define|true|[yY]*) dflt=y ;;
4674 *) dflt=n ;;
4675 esac
4676 . ./myread
4677 case "$ans" in
4678 [yY]*)  fn=d~+
4679         rp='Installation prefix to use for vendor-supplied add-ons?'
4680         case "$vendorprefix" in
4681         '') dflt='' ;;
4682         *)  dflt=$vendorprefix ;;
4683         esac
4684         . ./getfile
4685         oldvendorprefix=''
4686         case "$vendorprefix" in
4687         '') ;;
4688         *)      case "$ans" in
4689                 "$prefix") ;;
4690                 *) oldvendorprefix="$prefix";;
4691                 esac
4692                 ;;
4693         esac
4694         usevendorprefix="$define"
4695         vendorprefix="$ans"
4696         vendorprefixexp="$ansexp"
4697         ;;
4698 *)      usevendorprefix="$undef"
4699         vendorprefix=''
4700         vendorprefixexp=''
4701         ;;
4702 esac
4703
4704 case "$vendorprefix" in
4705 '')     d_vendorlib="$undef"
4706         vendorlib=''
4707         vendorlibexp=''
4708         ;;
4709 *)      d_vendorlib="$define"
4710         : determine where vendor-supplied modules go.
4711         : Usual default is /usr/local/lib/perl5/vendor_perl
4712         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4713         case "$installstyle" in
4714         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4715         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4716         esac
4717         fn=d~+
4718         rp='Pathname for the vendor-supplied library files?'
4719         . ./getfile
4720         vendorlib="$ans"
4721         vendorlibexp="$ansexp"
4722         : Change installation prefix, if necessary.
4723         if $test X"$prefix" != X"$installprefix"; then
4724                 installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'`
4725         else
4726                 installvendorlib="$vendorlibexp"
4727         fi
4728         ;;
4729 esac
4730
4731 : Cruising for prototypes
4732 echo " "
4733 echo "Checking out function prototypes..." >&4
4734 $cat >prototype.c <<'EOCP'
4735 int main(int argc, char *argv[]) {
4736         exit(0);}
4737 EOCP
4738 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4739         echo "Your C compiler appears to support function prototypes."
4740         val="$define"
4741 else
4742         echo "Your C compiler doesn't seem to understand function prototypes."
4743         val="$undef"
4744 fi
4745 set prototype
4746 eval $setvar
4747 $rm -f prototype*
4748
4749 case "$prototype" in
4750 "$define") ;;
4751 *)      ansi2knr='ansi2knr'
4752         echo " "
4753         cat <<EOM >&4
4754
4755 $me:  FATAL ERROR:
4756 This version of $package can only be compiled by a compiler that 
4757 understands function prototypes.  Unfortunately, your C compiler 
4758         $cc $ccflags
4759 doesn't seem to understand them.  Sorry about that.
4760
4761 If GNU cc is available for your system, perhaps you could try that instead.  
4762
4763 Eventually, we hope to support building Perl with pre-ANSI compilers.
4764 If you would like to help in that effort, please contact <perlbug@perl.org>.
4765
4766 Aborting Configure now.
4767 EOM
4768         exit 2
4769         ;;
4770 esac
4771
4772 : determine where public executables go
4773 echo " "
4774 set dflt bin bin
4775 eval $prefixit
4776 fn=d~
4777 rp='Pathname where the public executables will reside?'
4778 . ./getfile
4779 if $test "X$ansexp" != "X$binexp"; then
4780         installbin=''
4781 fi
4782 bin="$ans"
4783 binexp="$ansexp"
4784 : Change installation prefix, if necessary.
4785 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4786 if $test X"$prefix" != X"$installprefix"; then
4787         installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'`
4788 else
4789         installbin="$binexp"
4790 fi
4791
4792 : determine whether to install perl also as /usr/bin/perl
4793
4794 echo " "
4795 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4796         $cat <<EOM
4797 Many scripts expect to perl to be installed as /usr/bin/perl.
4798 I can install the perl you are about to compile also as /usr/bin/perl
4799 (in addition to $installbin/perl).
4800 EOM
4801         case "$installusrbinperl" in
4802         "$undef"|[nN]*) dflt='n';;
4803         *)              dflt='y';;
4804         esac
4805         rp="Do you want to install perl as /usr/bin/perl?"
4806         . ./myread
4807         case "$ans" in
4808         [yY]*)  val="$define";;
4809         *)      val="$undef" ;;
4810         esac
4811 else
4812         val="$undef"
4813 fi
4814 set installusrbinperl
4815 eval $setvar
4816
4817 : define a shorthand compile call
4818 compile='
4819 mc_file=$1;
4820 shift;
4821 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4822 : define a shorthand compile call for compilations that should be ok.
4823 compile_ok='
4824 mc_file=$1;
4825 shift;
4826 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4827
4828 echo " "
4829 echo "Checking for GNU C Library..." >&4
4830 cat >gnulibc.c <<EOM
4831 #include <stdio.h>
4832 int main()
4833 {
4834 #ifdef __GLIBC__
4835     exit(0);
4836 #else
4837     exit(1);
4838 #endif
4839 }
4840 EOM
4841 set gnulibc
4842 if eval $compile_ok && ./gnulibc; then
4843         val="$define"
4844         echo "You are using the GNU C Library"
4845 else
4846         val="$undef"
4847         echo "You are not using the GNU C Library"
4848 fi
4849 $rm -f gnulibc*
4850 set d_gnulibc
4851 eval $setvar
4852
4853 : see if nm is to be used to determine whether a symbol is defined or not
4854 case "$usenm" in
4855 '')
4856         dflt=''
4857         case "$d_gnulibc" in
4858         "$define")
4859                 echo " "
4860                 echo "nm probably won't work on the GNU C Library." >&4
4861                 dflt=n
4862                 ;;
4863         esac
4864         case "$dflt" in
4865         '') 
4866                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4867                         echo " "
4868                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4869                         echo "'nm' won't be sufficient on this sytem." >&4
4870                         dflt=n
4871                 fi
4872                 ;;
4873         esac
4874         case "$dflt" in
4875         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4876                 if $test $dflt -gt 20; then
4877                         dflt=y
4878                 else
4879                         dflt=n
4880                 fi
4881                 ;;
4882         esac
4883         ;;
4884 *)
4885         case "$usenm" in
4886         true|$define) dflt=y;;
4887         *) dflt=n;;
4888         esac
4889         ;;
4890 esac
4891 $cat <<EOM
4892
4893 I can use $nm to extract the symbols from your C libraries. This
4894 is a time consuming task which may generate huge output on the disk (up
4895 to 3 megabytes) but that should make the symbols extraction faster. The
4896 alternative is to skip the 'nm' extraction part and to compile a small
4897 test program instead to determine whether each symbol is present. If
4898 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4899 this may be the best solution.
4900
4901 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4902
4903 EOM
4904 rp="Shall I use $nm to extract C symbols from the libraries?"
4905 . ./myread
4906 case "$ans" in
4907 [Nn]*) usenm=false;;
4908 *) usenm=true;;
4909 esac
4910
4911 runnm=$usenm
4912 case "$reuseval" in
4913 true) runnm=false;;
4914 esac
4915
4916 : nm options which may be necessary
4917 case "$nm_opt" in
4918 '') if $test -f /mach_boot; then
4919                 nm_opt=''       # Mach
4920         elif $test -d /usr/ccs/lib; then
4921                 nm_opt='-p'     # Solaris (and SunOS?)
4922         elif $test -f /dgux; then
4923                 nm_opt='-p'     # DG-UX
4924         elif $test -f /lib64/rld; then
4925                 nm_opt='-p'     # 64-bit Irix
4926         else
4927                 nm_opt=''
4928         fi;;
4929 esac
4930
4931 : nm options which may be necessary for shared libraries but illegal
4932 : for archive libraries.  Thank you, Linux.
4933 case "$nm_so_opt" in
4934 '')     case "$myuname" in
4935         *linux*)
4936                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4937                         nm_so_opt='--dynamic'
4938                 fi
4939                 ;;
4940         esac
4941         ;;
4942 esac
4943
4944 case "$runnm" in
4945 true)
4946 : get list of predefined functions in a handy place
4947 echo " "
4948 case "$libc" in
4949 '') libc=unknown
4950         case "$libs" in
4951         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4952         esac
4953         ;;
4954 esac
4955 libnames='';
4956 case "$libs" in
4957 '') ;;
4958 *)  for thislib in $libs; do
4959         case "$thislib" in
4960         -lc|-lc_s)
4961                 : Handle C library specially below.
4962                 ;;
4963         -l*)
4964                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4965                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4966                         :
4967                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4968                         :
4969                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4970                         :
4971                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4972                         :
4973                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4974                         :
4975                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4976                         :
4977                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4978                         :
4979                 else
4980                         try=''
4981                 fi
4982                 libnames="$libnames $try"
4983                 ;;
4984         *) libnames="$libnames $thislib" ;;
4985         esac
4986         done
4987         ;;
4988 esac
4989 xxx=normal
4990 case "$libc" in
4991 unknown)
4992         set /lib/libc.$so
4993         for xxx in $libpth; do
4994                 $test -r $1 || set $xxx/libc.$so
4995                 : The messy sed command sorts on library version numbers.
4996                 $test -r $1 || \
4997                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4998                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4999                                 h
5000                                 s/[0-9][0-9]*/0000&/g
5001                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5002                                 G
5003                                 s/\n/ /' | \
5004                          sort | $sed -e 's/^.* //'`
5005                 eval set \$$#
5006         done
5007         $test -r $1 || set /usr/ccs/lib/libc.$so
5008         $test -r $1 || set /lib/libsys_s$_a
5009         ;;
5010 *)
5011         set blurfl
5012         ;;
5013 esac
5014 if $test -r "$1"; then
5015         echo "Your (shared) C library seems to be in $1."
5016         libc="$1"
5017 elif $test -r /lib/libc && $test -r /lib/clib; then
5018         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5019         xxx=apollo
5020         libc='/lib/clib /lib/libc'
5021         if $test -r /lib/syslib; then
5022                 echo "(Your math library is in /lib/syslib.)"
5023                 libc="$libc /lib/syslib"
5024         fi
5025 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5026         echo "Your C library seems to be in $libc, as you said before."
5027 elif $test -r $incpath/usr/lib/libc$_a; then
5028         libc=$incpath/usr/lib/libc$_a;
5029         echo "Your C library seems to be in $libc.  That's fine."
5030 elif $test -r /lib/libc$_a; then
5031         libc=/lib/libc$_a;
5032         echo "Your C library seems to be in $libc.  You're normal."
5033 else
5034         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5035                 :
5036         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5037                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5038         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5039                 :
5040         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5041                 :
5042         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5043                 :
5044         else
5045                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5046         fi
5047         if $test -r "$tans"; then
5048                 echo "Your C library seems to be in $tans, of all places."
5049                 libc=$tans
5050         else
5051                 libc='blurfl'
5052         fi
5053 fi
5054 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5055         dflt="$libc"
5056         cat <<EOM
5057
5058 If the guess above is wrong (which it might be if you're using a strange
5059 compiler, or your machine supports multiple models), you can override it here.
5060
5061 EOM
5062 else
5063         dflt=''
5064         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5065         cat >&4 <<EOM
5066 I can't seem to find your C library.  I've looked in the following places:
5067
5068 EOM
5069         $sed 's/^/      /' libpath
5070         cat <<EOM
5071
5072 None of these seems to contain your C library. I need to get its name...
5073
5074 EOM
5075 fi
5076 fn=f
5077 rp='Where is your C library?'
5078 . ./getfile
5079 libc="$ans"
5080
5081 echo " "
5082 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5083 set X `cat libnames`
5084 shift
5085 xxx=files
5086 case $# in 1) xxx=file; esac
5087 echo "Extracting names from the following $xxx for later perusal:" >&4
5088 echo " "
5089 $sed 's/^/      /' libnames >&4
5090 echo " "
5091 $echo $n "This may take a while...$c" >&4
5092
5093 for file in $*; do
5094         case $file in
5095         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5096         *) $nm $nm_opt $file 2>/dev/null;;
5097         esac
5098 done >libc.tmp
5099
5100 $echo $n ".$c"
5101 $grep fprintf libc.tmp > libc.ptf
5102 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5103 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5104 xxx='[ADTSIW]'
5105 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5106         eval $xscan;\
5107         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5108                 eval $xrun
5109 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5110         eval $xscan;\
5111         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5112                 eval $xrun
5113 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5114         eval $xscan;\
5115         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5116                 eval $xrun
5117 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5118         eval $xscan;\
5119         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5120                 eval $xrun
5121 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5122         eval $xscan;\
5123         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5124                 eval $xrun
5125 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5126         eval $xscan;\
5127         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5128                 eval $xrun
5129 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5130                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5131         eval $xscan;\
5132         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5133                 eval $xrun
5134 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5135         eval $xscan;\
5136         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5137                 eval $xrun
5138 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5139         eval $xscan;\
5140         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5141                 eval $xrun
5142 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5143         eval $xscan;\
5144         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5145                 eval $xrun
5146 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5147         eval $xscan;\
5148         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5149                 eval $xrun
5150 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5151         eval $xscan;\
5152         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5153                 eval $xrun
5154 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5155         eval $xscan;\
5156         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5157                 eval $xrun
5158 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5159         eval $xscan;\
5160         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5161                 eval $xrun
5162 else
5163         $nm -p $* 2>/dev/null >libc.tmp
5164         $grep fprintf libc.tmp > libc.ptf
5165         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5166                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5167         then
5168                 nm_opt='-p'
5169                 eval $xrun
5170         else
5171                 echo " "
5172                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5173                 com=''
5174                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5175                         for thisname in $libnames $libc; do
5176                                 $ar t $thisname >>libc.tmp
5177                         done
5178                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5179                         echo "Ok." >&4
5180                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5181                         # Repeat libc to extract forwarders to DLL entries too
5182                         for thisname in $libnames $libc; do
5183                                 $ar tv $thisname >>libc.tmp
5184                                 # Revision 50 of EMX has bug in $ar.
5185                                 # it will not extract forwarders to DLL entries
5186                                 # Use emximp which will extract exactly them.
5187                                 emximp -o tmp.imp $thisname \
5188                                     2>/dev/null && \
5189                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5190                                     < tmp.imp >>libc.tmp
5191                                 $rm tmp.imp
5192                         done
5193                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5194                         echo "Ok." >&4
5195                 else
5196                         echo "$ar didn't seem to work right." >&4
5197                         echo "Maybe this is a Cray...trying bld instead..." >&4
5198                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5199                         then
5200                                 for thisname in $libnames; do
5201                                         bld t $libnames | \
5202                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5203                                         $ar t $thisname >>libc.tmp
5204                                 done
5205                                 echo "Ok." >&4
5206                         else
5207                                 echo "That didn't work either.  Giving up." >&4
5208                                 exit 1
5209                         fi
5210                 fi
5211         fi
5212 fi
5213 nm_extract="$com"
5214 if $test -f /lib/syscalls.exp; then
5215         echo " "
5216         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5217         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5218 fi
5219 ;;
5220 esac
5221 $rm -f libnames libpath
5222
5223 : see if dld is available
5224 set dld.h i_dld
5225 eval $inhdr
5226
5227 : is a C symbol defined?
5228 csym='tlook=$1;
5229 case "$3" in
5230 -v) tf=libc.tmp; tc=""; tdc="";;
5231 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5232 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5233 esac;
5234 tx=yes;
5235 case "$reuseval-$4" in
5236 true-) ;;
5237 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5238 esac;
5239 case "$tx" in
5240 yes)
5241         case "$runnm" in
5242         true)
5243                 if $contains $tlook $tf >/dev/null 2>&1;
5244                 then tval=true;
5245                 else tval=false;
5246                 fi;;
5247         *)
5248                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5249                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5250                 then tval=true;
5251                 else tval=false;
5252                 fi;
5253                 $rm -f t t.c;;
5254         esac;;
5255 *)
5256         case "$tval" in
5257         $define) tval=true;;
5258         *) tval=false;;
5259         esac;;
5260 esac;
5261 eval "$2=$tval"'
5262
5263 : define an is-in-libc? function
5264 inlibc='echo " "; td=$define; tu=$undef;
5265 sym=$1; var=$2; eval "was=\$$2";
5266 tx=yes;
5267 case "$reuseval$was" in
5268 true) ;;
5269 true*) tx=no;;
5270 esac;
5271 case "$tx" in
5272 yes)
5273         set $sym tres -f;
5274         eval $csym;
5275         case "$tres" in
5276         true)
5277                 echo "$sym() found." >&4;
5278                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5279         *)
5280                 echo "$sym() NOT found." >&4;
5281                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5282         esac;;
5283 *)
5284         case "$was" in
5285         $define) echo "$sym() found." >&4;;
5286         *) echo "$sym() NOT found." >&4;;
5287         esac;;
5288 esac'
5289
5290 : see if dlopen exists
5291 xxx_runnm="$runnm"
5292 runnm=false
5293 set dlopen d_dlopen
5294 eval $inlibc
5295 runnm="$xxx_runnm"
5296
5297 : determine which dynamic loading, if any, to compile in
5298 echo " "
5299 dldir="ext/DynaLoader"
5300 case "$usedl" in
5301 $define|y|true)
5302         dflt='y'
5303         usedl="$define"
5304         ;;
5305 $undef|n|false)
5306         dflt='n'
5307         usedl="$undef"
5308         ;;
5309 *) 
5310         dflt='n'
5311         case "$d_dlopen" in
5312             $define) dflt='y' ;;
5313         esac
5314         case "$i_dld" in
5315             $define) dflt='y' ;;
5316         esac
5317         : Does a dl_xxx.xs file exist for this operating system
5318         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5319         ;;
5320 esac
5321 rp="Do you wish to use dynamic loading?"
5322 . ./myread
5323 usedl="$ans"
5324 case "$ans" in
5325 y*) usedl="$define"
5326         case "$dlsrc" in
5327         '')
5328                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5329                         dflt="$dldir/dl_${osname}.xs"
5330                 elif $test "$d_dlopen" = "$define" ; then
5331                         dflt="$dldir/dl_dlopen.xs"
5332                 elif $test "$i_dld" = "$define" ; then
5333                         dflt="$dldir/dl_dld.xs"
5334                 else
5335                         dflt=''
5336                 fi
5337                 ;;
5338         *)      dflt="$dldir/$dlsrc"
5339                 ;;
5340         esac
5341     echo "The following dynamic loading files are available:"
5342         : Can not go over to $dldir because getfile has path hard-coded in.
5343         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5344         rp="Source file to use for dynamic loading"
5345         fn="fne"
5346         gfpth="$src"
5347         . ./getfile
5348         usedl="$define"
5349         : emulate basename
5350         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5351
5352         $cat << EOM
5353
5354 Some systems may require passing special flags to $cc -c to
5355 compile modules that will be used to create a shared library.
5356 To use no flags, say "none".
5357
5358 EOM
5359     case "$cccdlflags" in
5360     '') case "$gccversion" in
5361                 '') case "$osname" in
5362                         hpux)   dflt='+z' ;;
5363                         next)   dflt='none' ;;
5364                         irix*)  dflt='-KPIC' ;;
5365                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5366                         sunos)  dflt='-pic' ;;
5367                         *)      dflt='none' ;;
5368                     esac
5369                         ;;
5370                 *)  case "$osname" in
5371                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5372                         *)      dflt='-fpic' ;;
5373                     esac ;;
5374             esac ;;
5375         ' ') dflt='none' ;;
5376     *)  dflt="$cccdlflags" ;;
5377     esac
5378     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5379     . ./myread
5380     case "$ans" in
5381     none) cccdlflags=' ' ;;
5382     *) cccdlflags="$ans" ;;
5383     esac
5384
5385     cat << EOM
5386
5387 Some systems use ld to create libraries that can be dynamically loaded,
5388 while other systems (such as those using ELF) use $cc.
5389
5390 EOM
5391         case "$ld" in
5392         '')     $cat >try.c <<'EOM'
5393 /* Test for whether ELF binaries are produced */
5394 #include <fcntl.h>
5395 #include <stdlib.h>
5396 int main() {
5397         char b[4];
5398         int i = open("a.out",O_RDONLY);
5399         if(i == -1) 
5400                 exit(1); /* fail */
5401         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5402                 exit(0); /* succeed (yes, it's ELF) */
5403         else
5404                 exit(1); /* fail */
5405 }
5406 EOM
5407                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5408                         cat <<EOM
5409 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5410 EOM
5411                         dflt="$cc"
5412                 else
5413                         echo "I'll use ld to build dynamic libraries."
5414                         dflt='ld'
5415                 fi
5416                 rm -f try.c a.out
5417                 ;;
5418         *)      dflt="$ld"
5419                 ;;
5420         esac
5421
5422     rp="What command should be used to create dynamic libraries?"
5423     . ./myread
5424         ld="$ans"
5425
5426     cat << EOM
5427
5428 Some systems may require passing special flags to $ld to create a
5429 library that can be dynamically loaded.  If your ld flags include
5430 -L/other/path options to locate libraries outside your loader's normal
5431 search path, you may need to specify those -L options here as well.  To
5432 use no flags, say "none".
5433
5434 EOM
5435     case "$lddlflags" in
5436     '') case "$osname" in
5437                         beos) dflt='-nostart' ;;
5438                         hpux)  dflt='-b' ;;
5439                         linux|irix*)    dflt='-shared' ;;
5440                         next)  dflt='none' ;;
5441                         solaris) dflt='-G' ;;
5442                         sunos) dflt='-assert nodefinitions' ;;
5443                         svr4*|esix*) dflt="-G $ldflags" ;;
5444                 *)     dflt='none' ;;
5445                         esac
5446                         ;;
5447     *) dflt="$lddlflags" ;;
5448     esac
5449
5450         : Try to guess additional flags to pick up local libraries.
5451         : Be careful not to append to a plain 'none'
5452         case "$dflt" in
5453         none) dflt='' ;;
5454         esac
5455         for thisflag in $ldflags; do
5456                 case "$thisflag" in
5457                 -L*)
5458                         case " $dflt " in
5459                         *" $thisflag "*) ;;
5460                         *) dflt="$dflt $thisflag" ;;
5461                         esac
5462                         ;;
5463                 esac
5464         done
5465
5466         case "$dflt" in
5467         ''|' ') dflt='none' ;;
5468         esac
5469
5470     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5471     . ./myread
5472     case "$ans" in
5473     none) lddlflags=' ' ;;
5474     *) lddlflags="$ans" ;;
5475     esac
5476
5477         cat <<EOM
5478
5479 Some systems may require passing special flags to $cc to indicate that
5480 the resulting executable will use dynamic linking.  To use no flags,
5481 say "none".
5482
5483 EOM
5484     case "$ccdlflags" in
5485     '') case "$osname" in
5486                 hpux)   dflt='-Wl,-E' ;;
5487                 linux)  dflt='-rdynamic' ;;
5488                 next)   dflt='none' ;;
5489                 sunos)  dflt='none' ;;
5490                 *)      dflt='none' ;;
5491             esac ;;
5492     ' ')  dflt='none' ;;
5493     *)  dflt="$ccdlflags" ;;
5494     esac
5495     rp="Any special flags to pass to $cc to use dynamic loading?"
5496     . ./myread
5497     case "$ans" in
5498     none) ccdlflags=' ' ;;
5499     *) ccdlflags="$ans" ;;
5500     esac
5501     ;;
5502 *)  usedl="$undef"
5503         ld='ld'
5504     dlsrc='dl_none.xs'
5505     lddlflags=''
5506     ccdlflags=''
5507     ;;
5508 esac
5509
5510 also=''
5511 case "$usedl" in
5512 $undef)
5513         # No dynamic loading being used, so don't bother even to prompt.
5514         useshrplib='false'
5515         ;;
5516 *)      case "$useshrplib" in
5517         '')     case "$osname" in
5518                 svr4*|dgux|dynixptx|esix|powerux|beos)
5519                         dflt=y
5520                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5521                         ;;
5522                 next*)
5523                         case "$osvers" in
5524                         4*)     dflt=y
5525                                 also='Building a shared libperl is needed for MAB support.'
5526                                 ;;
5527                         *)      dflt=n
5528                                 ;;
5529                         esac
5530                         ;;
5531                 *)      dflt=n
5532                         ;;
5533                 esac
5534                 ;;
5535         $define|true|[Yy]*)
5536                 dflt=y
5537                 ;;
5538         *)      dflt=n
5539                 ;;
5540         esac
5541         $cat << EOM
5542
5543 The perl executable is normally obtained by linking perlmain.c with
5544 libperl${_a}, any static extensions (usually just DynaLoader), and
5545 any other libraries needed on this system (such as -lm, etc.).  Since
5546 your system supports dynamic loading, it is probably possible to build
5547 a shared libperl.$so.  If you will have more than one executable linked
5548 to libperl.$so, this will significantly reduce the size of each
5549 executable, but it may have a noticeable affect on performance.  The
5550 default is probably sensible for your system.
5551 $also
5552
5553 EOM
5554         rp="Build a shared libperl.$so (y/n)"
5555         . ./myread
5556         case "$ans" in
5557         true|$define|[Yy]*)
5558                 useshrplib='true'  ;;
5559         *)      useshrplib='false' ;;
5560         esac
5561         ;;
5562 esac
5563
5564 case "$useshrplib" in
5565 true)
5566         case "$libperl" in
5567         '')
5568                 # Figure out a good name for libperl.so.  Since it gets stored in
5569                 # a version-specific architecture-dependent library, the version
5570                 # number isn't really that important, except for making cc/ld happy.
5571                 #
5572                 # A name such as libperl.so.3.1
5573                 majmin="libperl.$so.$patchlevel.$subversion"
5574                 # A name such as libperl.so.301
5575                 majonly=`echo $patchlevel $subversion |
5576                         $awk '{printf "%d%02d", $1, $2}'`
5577                 majonly=libperl.$so.$majonly
5578                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5579                 # rely on figuring it out from the naming of libc.
5580                 case "${osname}${osvers}" in
5581                 next4*)
5582                         dflt=libperl.5.$so
5583                         # XXX How handle the --version stuff for MAB?
5584                         ;;
5585                 linux*)  # ld won't link with a bare -lperl otherwise.
5586                         dflt=libperl.$so
5587                         ;;
5588                 *)      # Try to guess based on whether libc has major.minor.
5589                         case "$libc" in
5590                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5591                         *libc.$so.[0-9]*) dflt=$majonly ;;
5592                         *)      dflt=libperl.$so ;;
5593                         esac
5594                         ;;
5595                 esac
5596                 ;;
5597         *)      dflt=$libperl
5598                 ;;
5599         esac
5600         cat << EOM
5601
5602 I need to select a good name for the shared libperl.  If your system uses
5603 library names with major and minor numbers, then you might want something
5604 like $majmin.  Alternatively, if your system uses a single version
5605 number for shared libraries, then you might want to use $majonly.
5606 Or, your system might be quite happy with a simple libperl.$so.
5607
5608 Since the shared libperl will get installed into a version-specific
5609 architecture-dependent directory, the version number of the shared perl
5610 library probably isn't important, so the default should be o.k.
5611
5612 EOM
5613         rp='What name do you want to give to the shared libperl?'
5614         . ./myread
5615         libperl=$ans
5616         echo "Ok, I'll use $libperl"
5617         ;;
5618 *)
5619         libperl="libperl${_a}"
5620         ;;
5621 esac
5622
5623 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5624 case "$shrpdir" in
5625 '') ;;
5626 *)      $cat >&4 <<EOM
5627 WARNING:  Use of the shrpdir variable for the installation location of
5628 the shared $libperl is not supported.  It was never documented and
5629 will not work in this version.  Let me (perlbug@perl.com)
5630 know of any problems this may cause.
5631
5632 EOM
5633         case "$shrpdir" in
5634         "$archlibexp/CORE")
5635                 $cat >&4 <<EOM
5636 But your current setting of $shrpdir is
5637 the default anyway, so it's harmless.
5638 EOM
5639                 ;;
5640         *)
5641                 $cat >&4 <<EOM
5642 Further, your current attempted setting of $shrpdir
5643 conflicts with the value of $archlibexp/CORE
5644 that installperl will use.
5645 EOM
5646                 ;;
5647         esac
5648         ;;
5649 esac
5650
5651 # How will the perl executable find the installed shared $libperl?
5652 # Add $xxx to ccdlflags.
5653 # If we can't figure out a command-line option, use $shrpenv to
5654 # set env LD_RUN_PATH.  The main perl makefile uses this.
5655 shrpdir=$archlibexp/CORE
5656 xxx=''
5657 tmp_shrpenv=''
5658 if "$useshrplib"; then
5659     case "$osname" in 
5660         aix)
5661                 # We'll set it in Makefile.SH...
5662                 ;;
5663         solaris|netbsd)
5664                 xxx="-R $shrpdir"
5665                 ;;
5666         freebsd)
5667                 xxx="-Wl,-R$shrpdir"
5668                 ;;
5669         linux|irix*|dec_osf)
5670                 xxx="-Wl,-rpath,$shrpdir"
5671                 ;;
5672         next)
5673                 # next doesn't like the default...
5674                 ;;
5675         beos)
5676                 # beos doesn't like the default, either.
5677                 ;;
5678         hpux*)
5679                 # hpux doesn't like the default, either.
5680                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5681                 ;;
5682         *)
5683                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5684                 ;;
5685         esac
5686         case "$xxx" in
5687         '') ;;
5688         *)      
5689                 # Only add $xxx if it isn't already in ccdlflags.
5690                 case " $ccdlflags " in
5691                 *" $xxx "*)     ;;
5692                 *)      ccdlflags="$ccdlflags $xxx"
5693                         cat <<EOM >&4
5694
5695 Adding $xxx to the flags
5696 passed to $ld so that the perl executable will find the 
5697 installed shared $libperl.
5698
5699 EOM
5700                         ;;
5701                 esac
5702                 ;;
5703         esac
5704 fi
5705 # Fix ccdlflags in AIX for building external extensions.
5706 # (For building Perl itself bare -bE:perl.exp is needed,
5707 #  Makefile.SH takes care of this.)
5708 case "$osname" in
5709 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5710 esac
5711 # Respect a hint or command-line value.
5712 case "$shrpenv" in
5713 '') shrpenv="$tmp_shrpenv" ;;
5714 esac
5715 case "$ldlibpthname" in
5716 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5717 none)   ldlibpthname='' ;;
5718 esac
5719
5720 : determine where manual pages go
5721 set man1dir man1dir none
5722 eval $prefixit
5723 $cat <<EOM
5724
5725 $spackage has manual pages available in source form.
5726 EOM
5727 case "$nroff" in
5728 nroff)
5729         echo "However, you don't have nroff, so they're probably useless to you."
5730         case "$man1dir" in
5731         '') man1dir="none";;
5732         esac;;
5733 esac
5734 echo "If you don't want the manual sources installed, answer 'none'."
5735 case "$man1dir" in
5736 ' ') dflt=none
5737         ;;
5738 '')
5739         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5740         lookpath="$lookpath $prefixexp/man/p_man/man1"
5741         lookpath="$lookpath $prefixexp/man/u_man/man1"
5742         lookpath="$lookpath $prefixexp/man/man.1"
5743         case "$sysman" in
5744         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5745         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5746         esac
5747         set dflt
5748         eval $prefixup
5749         ;;
5750 *)  dflt="$man1dir"
5751         ;;
5752 esac
5753 echo " "
5754 fn=dn+~
5755 rp="Where do the main $spackage manual pages (source) go?"
5756 . ./getfile
5757 if $test "X$man1direxp" != "X$ansexp"; then
5758         installman1dir=''
5759 fi
5760 man1dir="$ans"
5761 man1direxp="$ansexp"
5762 case "$man1dir" in
5763 '')     man1dir=' '
5764         installman1dir='';;
5765 esac
5766
5767 : Change installation prefix, if necessary.
5768 if $test X"$prefix" != X"$installprefix"; then
5769         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5770 else
5771         installman1dir="$man1direxp"
5772 fi
5773
5774 : What suffix to use on installed man pages
5775
5776 case "$man1dir" in
5777 ' ')
5778         man1ext='0'
5779         ;;
5780 *)
5781         rp="What suffix should be used for the main $spackage man pages?"
5782         case "$man1ext" in
5783         '')     case "$man1dir" in
5784                 *1)  dflt=1 ;;
5785                 *1p) dflt=1p ;;
5786                 *1pm) dflt=1pm ;;
5787                 *l) dflt=l;;
5788                 *n) dflt=n;;
5789                 *o) dflt=o;;
5790                 *p) dflt=p;;
5791                 *C) dflt=C;;
5792                 *L) dflt=L;;
5793                 *L1) dflt=L1;;
5794                 *) dflt=1;;
5795                 esac
5796                 ;;
5797         *)      dflt="$man1ext";;
5798         esac
5799         . ./myread
5800         man1ext="$ans"
5801         ;;
5802 esac
5803
5804 : see if we can have long filenames
5805 echo " "
5806 rmlist="$rmlist /tmp/cf$$"
5807 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5808 first=123456789abcdef
5809 second=/tmp/cf$$/$first
5810 $rm -f $first $second
5811 if (echo hi >$first) 2>/dev/null; then
5812         if $test -f 123456789abcde; then
5813                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5814                 val="$undef"
5815         else
5816                 if (echo hi >$second) 2>/dev/null; then
5817                         if $test -f /tmp/cf$$/123456789abcde; then
5818                                 $cat <<'EOM'
5819 That's peculiar... You can have filenames longer than 14 characters, but only
5820 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5821 I shall consider your system cannot support long filenames at all.
5822 EOM
5823                                 val="$undef"
5824                         else
5825                                 echo 'You can have filenames longer than 14 characters.' >&4
5826                                 val="$define"
5827                         fi
5828                 else
5829                         $cat <<'EOM'
5830 How confusing! Some of your filesystems are sane enough to allow filenames
5831 longer than 14 characters but some others like /tmp can't even think about them.
5832 So, for now on, I shall assume your kernel does not allow them at all.
5833 EOM
5834                         val="$undef"
5835                 fi
5836         fi
5837 else
5838         $cat <<'EOM'
5839 You can't have filenames longer than 14 chars.  You can't even think about them!
5840 EOM
5841         val="$undef"
5842 fi 
5843 set d_flexfnam
5844 eval $setvar
5845 $rm -rf /tmp/cf$$ 123456789abcde*
5846
5847 : determine where library module manual pages go
5848 set man3dir man3dir none
5849 eval $prefixit
5850 $cat <<EOM
5851
5852 $spackage has manual pages for many of the library modules.
5853 EOM
5854
5855 case "$nroff" in
5856 nroff)
5857         $cat <<'EOM'
5858 However, you don't have nroff, so they're probably useless to you.
5859 EOM
5860         case "$man3dir" in
5861         '') man3dir="none";;
5862         esac;;
5863 esac
5864
5865 case "$d_flexfnam" in
5866 undef)
5867         $cat <<'EOM'
5868 However, your system can't handle the long file names like File::Basename.3. 
5869 EOM
5870         case "$man3dir" in
5871         '') man3dir="none";;
5872         esac;;
5873 esac
5874
5875 echo "If you don't want the manual sources installed, answer 'none'."
5876 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5877 case "$man3dir" in
5878 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5879         if $test -d "$privlib/man/man3"; then
5880                 cat <<EOM >&4
5881
5882 WARNING:  Previous versions of perl installed man3 pages into
5883 $privlib/man/man3.  This version will suggest a 
5884 new default of $dflt.  
5885 EOM
5886                 tdflt=$dflt
5887                 dflt='n'
5888                 rp='Do you wish to preserve the old behavior?(y/n)'
5889                 . ./myread
5890                 case "$ans" in
5891                 y*) dflt="$privlib/man/man3" ;;
5892                 *)  dflt=$tdflt ;;
5893                 esac
5894     fi
5895         ;;
5896 ' ') dflt=none;;
5897 *)      dflt="$man3dir" ;;
5898 esac
5899 echo " "
5900 fn=dn+~
5901 rp="Where do the $package library man pages (source) go?"
5902 . ./getfile
5903 man3dir="$ans"
5904 man3direxp="$ansexp"
5905 case "$man1dir" in
5906 '')     man3dir=' '
5907         installman3dir='';;
5908 esac
5909
5910 : Change installation prefix, if necessary.
5911 if $test X"$prefix" != X"$installprefix"; then
5912         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5913 else
5914         installman3dir="$man3direxp"
5915 fi
5916
5917 : What suffix to use on installed man pages
5918 case "$man3dir" in
5919 ' ')
5920         man3ext='0'
5921         ;;
5922 *)
5923         rp="What suffix should be used for the $package library man pages?"
5924         case "$man3ext" in
5925         '')     case "$man3dir" in
5926                 *3)  dflt=3 ;;
5927                 *3p) dflt=3p ;;
5928                 *3pm) dflt=3pm ;;
5929                 *l) dflt=l;;
5930                 *n) dflt=n;;
5931                 *o) dflt=o;;
5932                 *p) dflt=p;;
5933                 *C) dflt=C;;
5934                 *L) dflt=L;;
5935                 *L3) dflt=L3;;
5936                 *) dflt=3;;
5937                 esac
5938                 ;;
5939         *)      dflt="$man3ext";;
5940         esac
5941         . ./myread
5942         man3ext="$ans"
5943         ;;
5944 esac
5945
5946 : see if we have to deal with yellow pages, now NIS.
5947 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5948         if $test -f /usr/etc/nibindd; then
5949                 echo " "
5950                 echo "I'm fairly confident you're on a NeXT."
5951                 echo " "
5952                 rp='Do you get the hosts file via NetInfo?'
5953                 dflt=y
5954                 case "$hostcat" in
5955                 nidump*) ;;
5956                 '') ;;
5957                 *) dflt=n;;
5958                 esac
5959                 . ./myread
5960                 case "$ans" in
5961                 y*) hostcat='nidump hosts .';;
5962                 *)      case "$hostcat" in
5963                         nidump*) hostcat='';;
5964                         esac
5965                         ;;
5966                 esac
5967         fi
5968         case "$hostcat" in
5969         nidump*) ;;
5970         *)
5971                 case "$hostcat" in
5972                 *ypcat*) dflt=y;;
5973                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5974                                 dflt=y
5975                         else
5976                                 dflt=n
5977                         fi;;
5978                 *) dflt=n;;
5979                 esac
5980                 echo " "
5981                 rp='Are you getting the hosts file via yellow pages?'
5982                 . ./myread
5983                 case "$ans" in
5984                 y*) hostcat='ypcat hosts';;
5985                 *) hostcat='cat /etc/hosts';;
5986                 esac
5987                 ;;
5988         esac
5989 fi
5990 case "$hostcat" in
5991 '') hostcat='cat /etc/hosts';;
5992 esac
5993 case "$groupcat" in
5994 '') groupcat='cat /etc/group';;
5995 esac
5996 case "$passcat" in
5997 '') passcat='cat /etc/passwd';;
5998 esac
5999
6000 : now get the host name
6001 echo " "
6002 echo "Figuring out host name..." >&4
6003 case "$myhostname" in
6004 '') cont=true
6005         echo 'Maybe "hostname" will work...'
6006         if tans=`sh -c hostname 2>&1` ; then
6007                 myhostname=$tans
6008                 phostname=hostname
6009                 cont=''
6010         fi
6011         ;;
6012 *) cont='';;
6013 esac
6014 if $test "$cont"; then
6015         if ./xenix; then
6016                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6017                 if tans=`cat /etc/systemid 2>&1` ; then
6018                         myhostname=$tans
6019                         phostname='cat /etc/systemid'
6020                         echo "Whadyaknow.  Xenix always was a bit strange..."
6021                         cont=''
6022                 fi
6023         elif $test -r /etc/systemid; then
6024                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6025         fi
6026 fi
6027 if $test "$cont"; then
6028         echo 'No, maybe "uuname -l" will work...'
6029         if tans=`sh -c 'uuname -l' 2>&1` ; then
6030                 myhostname=$tans
6031                 phostname='uuname -l'
6032         else
6033                 echo 'Strange.  Maybe "uname -n" will work...'
6034                 if tans=`sh -c 'uname -n' 2>&1` ; then
6035                         myhostname=$tans
6036                         phostname='uname -n'
6037                 else
6038                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6039                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6040                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6041                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6042                         else
6043                                 case "$myhostname" in
6044                                 '') echo "Does this machine have an identity crisis or something?"
6045                                         phostname='';;
6046                                 *)
6047                                         echo "Well, you said $myhostname before..."
6048                                         phostname='echo $myhostname';;
6049                                 esac
6050                         fi
6051                 fi
6052         fi
6053 fi
6054 : you do not want to know about this
6055 set $myhostname
6056 myhostname=$1
6057
6058 : verify guess
6059 if $test "$myhostname" ; then
6060         dflt=y
6061         rp='Your host name appears to be "'$myhostname'".'" Right?"
6062         . ./myread
6063         case "$ans" in
6064         y*) ;;
6065         *) myhostname='';;
6066         esac
6067 fi
6068
6069 : bad guess or no guess
6070 while $test "X$myhostname" = X ; do
6071         dflt=''
6072         rp="Please type the (one word) name of your host:"
6073         . ./myread
6074         myhostname="$ans"
6075 done
6076
6077 : translate upper to lower if necessary
6078 case "$myhostname" in
6079 *[A-Z]*)
6080         echo "(Normalizing case in your host name)"
6081         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6082         ;;
6083 esac
6084
6085 case "$myhostname" in
6086 *.*)
6087         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6088         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6089         echo "(Trimming domain name from host name--host name is now $myhostname)"
6090         ;;
6091 *) case "$mydomain" in
6092         '')
6093                 {
6094                         test "X$hostcat" = "Xypcat hosts" &&
6095                         ypmatch "$myhostname" hosts 2>/dev/null |\
6096                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6097                         $test -s hosts
6098                 } || {
6099                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6100                                         /[       ]$myhostname[  . ]/p" > hosts
6101                 }
6102                 tmp_re="[       . ]"
6103                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6104                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6105                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6106                         hosts | $sort | $uniq | \
6107                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6108                 case `$echo X$dflt` in
6109                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6110                         dflt=.
6111                         ;;
6112                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6113                         ;;
6114                 esac
6115                 case "$dflt" in
6116                 .)
6117                         tans=`./loc resolv.conf X /etc /usr/etc`
6118                         if $test -f "$tans"; then
6119                                 echo "(Attempting domain name extraction from $tans)"
6120                                 dflt=.`$sed -n -e 's/   / /g' \
6121                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6122                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6123                                 case "$dflt" in
6124                                 .) dflt=.`$sed -n -e 's/        / /g' \
6125                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6126                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6127                                         ;;
6128                                 esac
6129                         fi
6130                         ;;
6131                 esac
6132                 case "$dflt" in
6133                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6134                         dflt=.`sh -c domainname 2>/dev/null`
6135                         case "$dflt" in
6136                         '') dflt='.';;
6137                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6138                         esac
6139                         ;;
6140                 esac
6141                 case "$dflt" in
6142                 .) echo "(Lost all hope -- silly guess then)"
6143                         dflt='.uucp'
6144                         ;;
6145                 esac
6146                 $rm -f hosts
6147                 ;;
6148         *) dflt="$mydomain";;
6149         esac;;
6150 esac
6151 echo " "
6152 rp="What is your domain name?"
6153 . ./myread
6154 tans="$ans"
6155 case "$ans" in
6156 '') ;;
6157 .*) ;;
6158 *) tans=".$tans";;
6159 esac
6160 mydomain="$tans"
6161
6162 : translate upper to lower if necessary
6163 case "$mydomain" in
6164 *[A-Z]*)
6165         echo "(Normalizing case in your domain name)"
6166         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6167         ;;
6168 esac
6169
6170 : a little sanity check here
6171 case "$phostname" in
6172 '') ;;
6173 *)
6174         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6175         $myhostname$mydomain|$myhostname) ;;
6176         *)
6177                 case "$phostname" in
6178                 sed*)
6179                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6180                         ;;
6181                 *)
6182                         echo "(That doesn't agree with your $phostname command, by the way.)"
6183                         ;;
6184                 esac
6185         ;;
6186         esac
6187         ;;
6188 esac
6189
6190 $cat <<EOM
6191
6192 I need to get your e-mail address in Internet format if possible, i.e.
6193 something like user@host.domain. Please answer accurately since I have
6194 no easy means to double check it. The default value provided below
6195 is most probably close to the reality but may not be valid from outside
6196 your organization...
6197
6198 EOM
6199 cont=x
6200 while test "$cont"; do
6201         case "$cf_email" in
6202         '') dflt="$cf_by@$myhostname$mydomain";;
6203         *) dflt="$cf_email";;
6204         esac
6205         rp='What is your e-mail address?'
6206         . ./myread
6207         cf_email="$ans"
6208         case "$cf_email" in
6209         *@*.*) cont='' ;;
6210         *)
6211                 rp='Address does not look like an Internet one.  Use it anyway?'
6212                 case "$fastread" in
6213                 yes) dflt=y ;;
6214                 *) dflt=n ;;
6215                 esac
6216                 . ./myread
6217                 case "$ans" in
6218                 y*) cont='' ;;
6219                 *) echo " " ;;
6220                 esac
6221                 ;;
6222         esac
6223 done
6224
6225 $cat <<EOM
6226
6227 If you or somebody else will be maintaining perl at your site, please
6228 fill in the correct e-mail address here so that they may be contacted
6229 if necessary. Currently, the "perlbug" program included with perl
6230 will send mail to this address in addition to perlbug@perl.com. You may
6231 enter "none" for no administrator.
6232
6233 EOM
6234 case "$perladmin" in
6235 '') dflt="$cf_email";;
6236 *) dflt="$perladmin";;
6237 esac
6238 rp='Perl administrator e-mail address'
6239 . ./myread
6240 perladmin="$ans"
6241
6242 : figure out how to guarantee perl startup
6243 case "$startperl" in
6244 '')
6245         case "$sharpbang" in
6246         *!)
6247                 $cat <<EOH
6248
6249 I can use the #! construct to start perl on your system. This will
6250 make startup of perl scripts faster, but may cause problems if you
6251 want to share those scripts and perl is not in a standard place
6252 ($binexp/perl) on all your platforms. The alternative is to force
6253 a shell by starting the script with a single ':' character.
6254
6255 EOH
6256                 dflt="$binexp/perl"
6257                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6258                 . ./myread
6259                 case "$ans" in
6260                 none)   startperl=": # use perl";;
6261                 *)      startperl="#!$ans"
6262                         if $test 30 -lt `echo "$ans" | wc -c`; then
6263                                 $cat >&4 <<EOM
6264
6265 WARNING:  Some systems limit the #! command to 32 characters.
6266 If you experience difficulty running Perl scripts with #!, try
6267 installing Perl in a directory with a shorter pathname.
6268
6269 EOM
6270                         fi ;;
6271                 esac
6272                 ;;
6273         *) startperl=": # use perl"
6274                 ;;
6275         esac
6276         ;;
6277 esac
6278 echo "I'll use $startperl to start perl scripts."
6279
6280 : figure best path for perl in scripts
6281 case "$perlpath" in
6282 '')
6283         perlpath="$binexp/perl"
6284         case "$startperl" in
6285         *!*) ;;
6286         *)
6287                 $cat <<EOH
6288
6289 I will use the "eval 'exec'" idiom to start Perl on your system.
6290 I can use the full path of your Perl binary for this purpose, but
6291 doing so may cause problems if you want to share those scripts and
6292 Perl is not always in a standard place ($binexp/perl).
6293
6294 EOH
6295                 dflt="$binexp/perl"
6296                 rp="What path shall I use in \"eval 'exec'\"?"
6297                 . ./myread
6298                 perlpath="$ans"
6299                 ;;
6300         esac
6301         ;;
6302 esac
6303 case "$startperl" in
6304 *!*)    ;;
6305 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6306 esac
6307
6308 : determine where public executable scripts go
6309 set scriptdir scriptdir
6310 eval $prefixit
6311 case "$scriptdir" in
6312 '')
6313         dflt="$bin"
6314         : guess some guesses
6315         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6316         $test -d /usr/share/bin     && dflt=/usr/share/bin
6317         $test -d /usr/local/script  && dflt=/usr/local/script
6318         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6319         $test -d $prefixexp/script  && dflt=$prefixexp/script
6320         set dflt
6321         eval $prefixup
6322         ;;
6323 *)  dflt="$scriptdir"
6324         ;;
6325 esac
6326 $cat <<EOM
6327  
6328 Some installations have a separate directory just for executable scripts so
6329 that they can mount it across multiple architectures but keep the scripts in
6330 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6331 Or you might just lump your scripts in with all your other executables.
6332  
6333 EOM
6334 fn=d~
6335 rp='Where do you keep publicly executable scripts?'
6336 . ./getfile
6337 if $test "X$ansexp" != "X$scriptdirexp"; then
6338         installscript=''
6339 fi
6340 scriptdir="$ans"
6341 scriptdirexp="$ansexp"
6342 : Change installation prefix, if necessary.
6343 if $test X"$prefix" != X"$installprefix"; then
6344         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6345 else
6346         installscript="$scriptdirexp"
6347 fi
6348
6349 $cat <<EOM
6350
6351 After $package is installed, you may wish to install various
6352 add-on modules and utilities.  Typically, these add-ons will
6353 be installed under $prefix with the rest
6354 of this package.  However, you may wish to install such add-ons
6355 elsewhere under a different prefix.
6356
6357 If you do not wish to put everything under a single prefix, that's
6358 ok.  You will be prompted for the individual locations; this siteprefix
6359 is only used to suggest the defaults.
6360
6361 The default should be fine for most people.
6362
6363 EOM
6364 fn=d~+
6365 rp='Installation prefix to use for add-on modules and utilities?'
6366 : XXX Here might be another good place for an installstyle setting.
6367 case "$siteprefix" in
6368 '') dflt=$prefix ;;
6369 *)  dflt=$siteprefix ;;
6370 esac
6371 . ./getfile
6372 oldsiteprefix=''
6373 case "$siteprefix" in
6374 '') ;;
6375 *)
6376         case "$ans" in
6377         "$prefix") ;;
6378         *) oldsiteprefix="$prefix";;
6379         esac
6380         ;;
6381 esac
6382 siteprefix="$ans"
6383 siteprefixexp="$ansexp"
6384
6385 : determine where site specific libraries go.
6386 : Usual default is /usr/local/lib/perl5/site_perl
6387 : The default "style" setting is made in installstyle.U
6388 : XXX No longer works with Prefixit stuff.
6389 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6390 case "$installstyle" in
6391 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6392 *)       dflt=$siteprefix/lib/site_$prog ;;
6393 esac
6394 $cat <<EOM
6395
6396 The installation process will create a directory for
6397 site-specific extensions and modules.  Most users find it convenient
6398 to place all site-specific files in this directory rather than in the
6399 main distribution directory.
6400
6401 EOM
6402 fn=d~+
6403 rp='Pathname for the site-specific library files?'
6404 . ./getfile
6405 sitelib="$ans"
6406 sitelibexp="$ansexp"
6407 : Change installation prefix, if necessary.
6408 if $test X"$prefix" != X"$installprefix"; then
6409         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6410 else
6411         installsitelib="$sitelibexp"
6412 fi
6413
6414 : determine where site specific architecture-dependent libraries go.
6415 : sitelib  default is /usr/local/lib/perl5/site_perl/
6416 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6417 : sitelib may have an optional trailing /share.
6418 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6419 tdflt="$tdflt/$apiversion/$archname"
6420 set sitearch sitearch none
6421 eval $prefixit
6422 case "$sitearch" in
6423 '')     dflt="$tdflt" ;;
6424 *)      dflt="$sitearch" ;;
6425 esac
6426 $cat <<EOM
6427
6428 The installation process will also create a directory for
6429 architecture-dependent site-specific extensions and modules.
6430
6431 EOM
6432 fn=nd~+
6433 rp='Pathname for the site-specific architecture-dependent library files?'
6434 . ./getfile
6435 sitearch="$ans"
6436 sitearchexp="$ansexp"
6437 : Change installation prefix, if necessary.
6438 if $test X"$prefix" != X"$installprefix"; then
6439         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
6440 else
6441         installsitearch="$sitearchexp"
6442 fi
6443
6444 cat <<EOM
6445
6446 Previous version of $package used the standard IO mechanisms as defined
6447 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6448 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6449 the default.  This abstraction layer can use AT&T's sfio (if you already
6450 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6451 problems with some extension modules.  Using PerlIO with stdio is safe,
6452 but it is slower than plain stdio and therefore is not the default.
6453
6454 If this doesn't make any sense to you, just accept the default 'n'.
6455 EOM
6456 case "$useperlio" in
6457 $define|true|[yY]*)     dflt='y';;
6458 *) dflt='n';;
6459 esac
6460 rp='Use the experimental PerlIO abstraction layer?'
6461 . ./myread
6462 case "$ans" in
6463 y|Y) 
6464         val="$define"
6465         ;;     
6466 *)      
6467         echo "Ok, doing things the stdio way"
6468         val="$undef"
6469         ;;
6470 esac
6471 set useperlio
6472 eval $setvar 
6473
6474 : Check how to convert floats to strings.
6475 if test "X$d_Gconvert" = X; then
6476         echo " "
6477         echo "Checking for an efficient way to convert floats to strings."
6478         $cat >try.c <<'EOP'
6479 #ifdef TRY_gconvert
6480 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6481 char *myname = "gconvert";
6482 #endif
6483 #ifdef TRY_gcvt
6484 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6485 char *myname = "gcvt";
6486 #endif
6487 #ifdef TRY_sprintf
6488 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6489 char *myname = "sprintf";
6490 #endif
6491
6492 #include <stdio.h>
6493
6494 int
6495 checkit(expect, got)
6496 char *expect;
6497 char *got;
6498 {
6499     if (strcmp(expect, got)) {
6500                 printf("%s oddity:  Expected %s, got %s\n",
6501                         myname, expect, got);
6502                 exit(1);
6503         }
6504 }
6505
6506 int main()
6507
6508         char buf[64]; 
6509         buf[63] = '\0';
6510
6511         /* This must be 1st test on (which?) platform */
6512         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6513         Gconvert(0.1, 8, 0, buf);
6514         checkit("0.1", buf);
6515
6516         Gconvert(1.0, 8, 0, buf); 
6517         checkit("1", buf);
6518
6519         Gconvert(0.0, 8, 0, buf); 
6520         checkit("0", buf);
6521
6522         Gconvert(-1.0, 8, 0, buf); 
6523         checkit("-1", buf);
6524
6525         /* Some Linux gcvt's give 1.e+5 here. */
6526         Gconvert(100000.0, 8, 0, buf); 
6527         checkit("100000", buf);
6528         
6529         /* Some Linux gcvt's give -1.e+5 here. */
6530         Gconvert(-100000.0, 8, 0, buf); 
6531         checkit("-100000", buf);
6532
6533         exit(0);
6534 }
6535 EOP
6536         case "$d_Gconvert" in
6537         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6538         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6539         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6540         *) xxx_list='gconvert gcvt sprintf' ;;
6541         esac
6542
6543         for xxx_convert in $xxx_list; do
6544                 echo "Trying $xxx_convert"
6545                 $rm -f try try$_o
6546                 set try -DTRY_$xxx_convert
6547                 if eval $compile; then
6548                         echo "$xxx_convert" found. >&4
6549                         if ./try; then
6550                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6551                                 break;
6552                         else
6553                                 echo "...But $xxx_convert didn't work as I expected."
6554                         fi
6555                 else
6556                         echo "$xxx_convert NOT found." >&4
6557                 fi
6558         done
6559                 
6560         case "$xxx_convert" in
6561         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6562         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6563         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6564         esac
6565 fi
6566
6567 : see if inttypes.h is available
6568 : we want a real compile instead of Inhdr because some systems
6569 : have an inttypes.h which includes non-existent headers
6570 echo " "
6571 $cat >try.c <<EOCP
6572 #include <inttypes.h>
6573 int main() {
6574         static int32_t foo32 = 0x12345678;
6575 }
6576 EOCP
6577 set try
6578 if eval $compile; then
6579         echo "<inttypes.h> found." >&4
6580         val="$define"
6581 else
6582         echo "<inttypes.h> NOT found." >&4
6583         val="$undef"
6584 fi
6585 $rm -f try.c try
6586 set i_inttypes
6587 eval $setvar
6588
6589 : check for int64_t
6590 case "$use64bits" in
6591 "$define" )
6592         echo " "
6593         echo $n "Checking to see if your system supports int64_t...$c" >&4
6594         $cat >try.c <<EOCP
6595 #include <sys/types.h>
6596 #$i_inttypes I_INTTYPES
6597 #ifdef I_INTTYPES
6598 #include <inttypes.h>
6599 #endif
6600 int64_t foo() { int64_t x; x = 7; return x; }
6601 EOCP
6602         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6603                 val="$define"
6604                 echo " Yup, it does." >&4
6605         else
6606                 val="$undef"
6607                 echo " Nope, it doesn't." >&4
6608         fi
6609         $rm -f try.*
6610         ;;
6611 *)      val="$undef"
6612         ;;
6613 esac
6614 set d_int64t
6615 eval $setvar
6616
6617
6618 : check for lengths of integral types
6619 echo " "
6620 case "$intsize" in
6621 '')
6622         echo "Checking to see how big your integers are..." >&4
6623         $cat >intsize.c <<'EOCP'
6624 #include <stdio.h>
6625 int main()
6626 {
6627         printf("intsize=%d;\n", sizeof(int));
6628         printf("longsize=%d;\n", sizeof(long));
6629         printf("shortsize=%d;\n", sizeof(short));
6630         exit(0);
6631 }
6632 EOCP
6633         set intsize
6634         if eval $compile_ok && ./intsize > /dev/null; then
6635                 eval `./intsize`
6636                 echo "Your integers are $intsize bytes long."
6637                 echo "Your long integers are $longsize bytes long."
6638                 echo "Your short integers are $shortsize bytes long."
6639         else
6640                 $cat >&4 <<EOM
6641 !
6642 Help! I can't compile and run the intsize test program: please enlighten me!
6643 (This is probably a misconfiguration in your system or libraries, and
6644 you really ought to fix it.  Still, I'll try anyway.)
6645 !
6646 EOM
6647                 dflt=4
6648                 rp="What is the size of an integer (in bytes)?"
6649                 . ./myread
6650                 intsize="$ans"
6651                 dflt=$intsize
6652                 rp="What is the size of a long integer (in bytes)?"
6653                 . ./myread
6654                 longsize="$ans"
6655                 dflt=2
6656                 rp="What is the size of a short integer (in bytes)?"
6657                 . ./myread
6658                 shortsize="$ans"
6659         fi
6660         ;;
6661 esac
6662 $rm -f intsize intsize.*
6663
6664 : check for long long
6665 echo " "
6666 echo $n "Checking to see if your system supports long long...$c" >&4
6667 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
6668 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6669         val="$define"
6670         echo " Yup, it does." >&4
6671 else
6672         val="$undef"
6673         echo " Nope, it doesn't." >&4
6674 fi
6675 $rm try.*
6676 set d_longlong
6677 eval $setvar
6678
6679 : check for length of long long
6680 case "${d_longlong}${longlongsize}" in
6681 $define)
6682         echo " "
6683         $echo $n "Checking to see how big your long longs are...$c" >&4
6684         $cat >try.c <<'EOCP'
6685 #include <stdio.h>
6686 int main()
6687 {
6688         printf("%d\n", sizeof(long long));
6689 }
6690 EOCP
6691         set try
6692         if eval $compile_ok; then
6693                 longlongsize=`./try`
6694                 $echo " $longlongsize bytes." >&4
6695         else
6696                 dflt='8'
6697                 echo " "
6698                 echo "(I can't seem to compile the test program.  Guessing...)"
6699                 rp="What is the size of a long long (in bytes)?"
6700                 . ./myread
6701                 longlongsize="$ans"
6702         fi
6703         if $test "X$longsize" = "X$longlongsize"; then
6704                 echo "(That isn't any different from an ordinary long.)"
6705         fi      
6706         ;;
6707 esac
6708 $rm -f try.c try
6709
6710 echo " "
6711
6712 case "$d_longlong" in
6713 $define)
6714
6715 echo "Checking how to print 64-bit integers..." >&4
6716
6717 if $test X"$sPRId64" = X -a X"$intsize" = X8; then
6718         quad=int
6719         $cat >try.c <<'EOCP'
6720 #include <sys/types.h>
6721 #include <stdio.h>
6722 int main() {
6723   int q = 12345678901;
6724   printf("%ld\n", q);
6725 }
6726 EOCP
6727         set try
6728         if eval $compile; then
6729                 yyy=`./try$exe_ext`
6730                 case "$yyy" in
6731                 12345678901)
6732                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
6733                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
6734                         echo "We will use %d."
6735                         ;;
6736                 esac
6737         fi
6738 fi
6739
6740 if $test X"$sPRId64" = X -a X"$longsize" = X8; then
6741         quad=long
6742         $cat >try.c <<'EOCP'
6743 #include <sys/types.h>
6744 #include <stdio.h>
6745 int main() {
6746   long q = 12345678901;
6747   printf("%ld\n", q);
6748 }
6749 EOCP
6750         set try
6751         if eval $compile; then
6752                 yyy=`./try$exe_ext`
6753                 case "$yyy" in
6754                 12345678901)
6755                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
6756                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
6757                         echo "We will use %ld."
6758                         ;;
6759                 esac
6760         fi
6761 fi
6762
6763 if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$d_int64t" = X"$define"; then
6764         quad=int64_t
6765         $cat >try.c <<'EOCP'
6766 #include <sys/types.h>
6767 #include <inttypes.h>
6768 #include <stdio.h>
6769 int main() {
6770   int64_t q = 12345678901;
6771   printf("%" PRId64 "\n", q);
6772 }
6773 EOCP
6774         set try
6775         if eval $compile; then
6776                 yyy=`./try$exe_ext`
6777                 case "$yyy" in
6778                 12345678901)
6779                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
6780                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
6781                         echo "We will use the C9X style."
6782                         ;;
6783                 esac
6784         fi
6785 fi
6786
6787 if $test X"$sPRId64" = X -a X"$d_longlong" = X"$define" -a X"$longlongsize" = X8; then
6788         quad="long long"
6789         $cat >try.c <<'EOCP'
6790 #include <sys/types.h>
6791 #include <stdio.h>
6792 int main() {
6793   long long q = 12345678901;
6794   printf("%lld\n", q);
6795 }
6796 EOCP
6797         set try
6798         if eval $compile; then
6799                 yyy=`./try$exe_ext`
6800                 case "$yyy" in
6801                 12345678901)
6802                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
6803                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
6804                         echo "We will use the %lld style."
6805                         ;;
6806                 esac
6807         fi
6808 fi
6809
6810 if $test X"$sPRId64" = X -a X"$quad" != X; then
6811         $cat >try.c <<EOCP
6812 #include <sys/types.h>
6813 #include <stdio.h>
6814 int main() {
6815   $quad q = 12345678901;
6816   printf("%Ld\n", q);
6817 }
6818 EOCP
6819         set try
6820         if eval $compile; then
6821                 yyy=`./try$exe_ext`
6822                 case "$yyy" in
6823                 12345678901)
6824                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
6825                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
6826                         echo "We will use %lld."
6827                         ;;
6828                 esac
6829         fi
6830 fi
6831
6832 if $test X"$sPRId64" = X -a X"$quad" != X; then
6833         $cat >try.c <<EOCP
6834 #include <sys/types.h>
6835 #include <stdio.h>
6836 int main() {
6837   $quad q = 12345678901;
6838   printf("%qd\n", q);
6839 }
6840 EOCP
6841         set try
6842         if eval $compile; then
6843                 yyy=`./try$exe_ext`
6844                 case "$yyy" in
6845                 12345678901)
6846                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
6847                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
6848                         echo "We will use %qd."
6849                         ;;
6850                 esac
6851         fi
6852 fi
6853
6854 if $test X"$sPRId64" = X; then
6855         echo "Cannot figure out how to print 64-bit integers." >&4
6856 fi
6857
6858 ;;
6859 esac # case "$d_longlong"
6860
6861 case "$sPRId64" in
6862 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
6863         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
6864         ;;
6865 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
6866         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
6867         ;;
6868 esac
6869
6870 $rm -f try try.*
6871
6872 : check for length of double
6873 echo " "
6874 case "$doublesize" in
6875 '')
6876         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
6877         $cat >try.c <<'EOCP'
6878 #include <stdio.h>
6879 int main()
6880 {
6881         printf("%d\n", sizeof(double));
6882 }
6883 EOCP
6884         set try
6885         if eval $compile_ok; then
6886                 doublesize=`./try`
6887                 $echo " $doublesize bytes." >&4
6888         else
6889                 dflt='8'
6890                 echo "(I can't seem to compile the test program.  Guessing...)"
6891                 rp="What is the size of a double precision number (in bytes)?"
6892                 . ./myread
6893                 doublesize="$ans"
6894         fi
6895         ;;
6896 esac
6897 $rm -f try.c try
6898
6899 : check for long doubles
6900 echo " "
6901 echo $n "Checking to see if your system supports long doubles...$c" >&4
6902 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
6903 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6904         val="$define"
6905         echo " Yup, it does." >&4
6906 else
6907         val="$undef"
6908         echo " Nope, it doesn't." >&4
6909 fi
6910 $rm try.*
6911 set d_longdbl
6912 eval $setvar
6913
6914 : check for length of long double
6915 case "${d_longdbl}${longdblsize}" in
6916 $define)
6917         echo " "
6918         $echo $n "Checking to see how big your long doubles are...$c" >&4
6919         $cat >try.c <<'EOCP'
6920 #include <stdio.h>
6921 int main()
6922 {
6923         printf("%d\n", sizeof(long double));
6924 }
6925 EOCP
6926         set try
6927         if eval $compile; then
6928                 longdblsize=`./try`
6929                 $echo " $longdblsize bytes." >&4
6930         else
6931                 dflt='8'
6932                 echo " "
6933                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6934                 rp="What is the size of a long double (in bytes)?"
6935                 . ./myread
6936                 longdblsize="$ans"
6937         fi
6938         if $test "X$doublesize" = "X$longdblsize"; then
6939                 echo "(That isn't any different from an ordinary double.)"
6940         fi      
6941         ;;
6942 esac
6943 $rm -f try.c try
6944
6945 echo " "
6946
6947 case "$d_longdbl" in
6948 $define)
6949
6950 echo "Checking how to print long doubles..." >&4
6951
6952 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
6953         $cat >try.c <<'EOCP'
6954 #include <sys/types.h>
6955 #include <stdio.h>
6956 int main() {
6957   double d = 123.456;
6958   printf("%.3f\n", d);
6959 }
6960 EOCP
6961         set try
6962         if eval $compile; then
6963                 yyy=`./try$exe_ext`
6964                 case "$yyy" in
6965                 123.456)
6966                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
6967                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
6968                         echo "We will use %f."
6969                         ;;
6970                 esac
6971         fi
6972 fi
6973
6974 if $test X"$sPRIfldbl" = X; then
6975         $cat >try.c <<'EOCP'
6976 #include <sys/types.h>
6977 #include <stdio.h>
6978 int main() {
6979   long double d = 123.456;
6980   printf("%.3Lf\n", d);
6981 }
6982 EOCP
6983         set try
6984         if eval $compile; then
6985                 yyy=`./try$exe_ext`
6986                 case "$yyy" in
6987                 123.456)
6988                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
6989                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
6990                         echo "We will use %Lf."
6991                         ;;
6992                 esac
6993         fi
6994 fi
6995
6996 if $test X"$sPRIfldbl" = X; then
6997         $cat >try.c <<'EOCP'
6998 #include <sys/types.h>
6999 #include <stdio.h>
7000 int main() {
7001   long double d = 123.456;
7002   printf("%.3lf\n", d);
7003 }
7004 EOCP
7005         set try
7006         if eval $compile; then
7007                 yyy=`./try$exe_ext`
7008                 case "$yyy" in
7009                 123.456)
7010                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7011                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7012                         echo "We will use %lf."
7013                         ;;
7014                 esac
7015         fi
7016 fi
7017
7018 if $test X"$sPRIfldbl" = X; then
7019         $cat >try.c <<'EOCP'
7020 #include <sys/types.h>
7021 #include <stdio.h>
7022 int main() {
7023   long double d = 123.456;
7024   printf("%.3llf\n", d);
7025 }
7026 EOCP
7027         set try
7028         if eval $compile; then
7029                 yyy=`./try$exe_ext`
7030                 case "$yyy" in
7031                 123.456)
7032                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7033                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7034                         echo "We will use %llf."
7035                         ;;
7036                 esac
7037         fi
7038 fi
7039
7040 if $test X"$sPRIfldbl" = X; then
7041         echo "Cannot figure out how to print long doubles." >&4
7042 fi
7043
7044 ;;
7045 esac # case "$d_longdbl"
7046
7047 case "$sPRIfldbl" in
7048 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7049         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7050         ;;
7051 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7052         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7053         ;;
7054 esac
7055
7056 $rm -f try try.*
7057
7058 : Initialize h_fcntl
7059 h_fcntl=false
7060
7061 : Initialize h_sysfile
7062 h_sysfile=false
7063
7064 : access call always available on UNIX
7065 set access d_access
7066 eval $inlibc
7067
7068 : locate the flags for 'access()'
7069 case "$d_access" in
7070 "$define")
7071         echo " "
7072         $cat >access.c <<'EOCP'
7073 #include <sys/types.h>
7074 #ifdef I_FCNTL
7075 #include <fcntl.h>
7076 #endif
7077 #ifdef I_SYS_FILE
7078 #include <sys/file.h>
7079 #endif
7080 #ifdef I_UNISTD
7081 #include <unistd.h>
7082 #endif
7083 int main() {
7084         exit(R_OK);
7085 }
7086 EOCP
7087         : check sys/file.h first, no particular reason here
7088         if $test `./findhdr sys/file.h` && \
7089                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7090                 h_sysfile=true;
7091                 echo "<sys/file.h> defines the *_OK access constants." >&4
7092         elif $test `./findhdr fcntl.h` && \
7093                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7094                 h_fcntl=true;
7095                 echo "<fcntl.h> defines the *_OK access constants." >&4
7096         elif $test `./findhdr unistd.h` && \
7097                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7098                 echo "<unistd.h> defines the *_OK access constants." >&4
7099         else
7100                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7101         fi
7102         ;;
7103 esac
7104 $rm -f access*
7105
7106 : see if accessx exists
7107 set accessx d_accessx
7108 eval $inlibc
7109
7110 : see if alarm exists
7111 set alarm d_alarm
7112 eval $inlibc
7113
7114 : see if atolf exists
7115 set atolf d_atolf
7116 eval $inlibc
7117
7118 : see if atoll exists
7119 set atoll d_atoll
7120 eval $inlibc
7121
7122 : Look for GNU-cc style attribute checking
7123 echo " "
7124 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7125 $cat >attrib.c <<'EOCP'
7126 #include <stdio.h>
7127 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7128 EOCP
7129 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7130         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7131                 echo "Your C compiler doesn't fully support __attribute__."
7132                 val="$undef"
7133         else
7134                 echo "Your C compiler supports __attribute__."
7135                 val="$define"
7136         fi
7137 else
7138         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7139         val="$undef"
7140 fi
7141 set d_attribut
7142 eval $setvar
7143 $rm -f attrib*
7144
7145 : see if bcmp exists
7146 set bcmp d_bcmp
7147 eval $inlibc
7148
7149 : see if bcopy exists
7150 set bcopy d_bcopy
7151 eval $inlibc
7152
7153 : see if this is a unistd.h system
7154 set unistd.h i_unistd
7155 eval $inhdr
7156
7157 : see if getpgrp exists
7158 set getpgrp d_getpgrp
7159 eval $inlibc
7160
7161 case "$d_getpgrp" in
7162 "$define")
7163         echo " "
7164         echo "Checking to see which flavor of getpgrp is in use..."
7165         $cat >set.c <<EOP
7166 #$i_unistd I_UNISTD
7167 #include <sys/types.h>
7168 #ifdef I_UNISTD
7169 #  include <unistd.h>
7170 #endif
7171 int main()
7172 {
7173         if (getuid() == 0) {
7174                 printf("(I see you are running Configure as super-user...)\n");
7175                 setuid(1);
7176         }
7177 #ifdef TRY_BSD_PGRP
7178         if (getpgrp(1) == 0)
7179                 exit(0);
7180 #else
7181         if (getpgrp() > 0)
7182                 exit(0);
7183 #endif
7184         exit(1);
7185 }
7186 EOP
7187         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7188                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7189                 val="$define"
7190         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7191                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7192                 val="$undef"
7193         else
7194                 echo "I can't seem to compile and run the test program."
7195                 if ./usg; then
7196                         xxx="a USG one, i.e. you use getpgrp()."
7197                 else
7198                         # SVR4 systems can appear rather BSD-ish.
7199                         case "$i_unistd" in
7200                         $undef)
7201                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7202                                 val="$define"
7203                                 ;;
7204                         $define)
7205                                 xxx="probably a USG one, i.e. you use getpgrp()."
7206                                 val="$undef"
7207                                 ;;
7208                         esac
7209                 fi
7210                 echo "Assuming your getpgrp is $xxx" >&4
7211         fi
7212         ;;
7213 *) val="$undef";;
7214 esac
7215 set d_bsdgetpgrp
7216 eval $setvar
7217 $rm -f set set.c
7218
7219 : see if setpgrp exists
7220 set setpgrp d_setpgrp
7221 eval $inlibc
7222
7223 case "$d_setpgrp" in
7224 "$define")
7225         echo " "
7226         echo "Checking to see which flavor of setpgrp is in use..."
7227         $cat >set.c <<EOP
7228 #$i_unistd I_UNISTD
7229 #include <sys/types.h>
7230 #ifdef I_UNISTD
7231 #  include <unistd.h>
7232 #endif
7233 int main()
7234 {
7235         if (getuid() == 0) {
7236                 printf("(I see you are running Configure as super-user...)\n");
7237                 setuid(1);
7238         }
7239 #ifdef TRY_BSD_PGRP
7240         if (-1 == setpgrp(1, 1))
7241                 exit(0);
7242 #else
7243         if (setpgrp() != -1)
7244                 exit(0);
7245 #endif
7246         exit(1);
7247 }
7248 EOP
7249         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7250                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7251                 val="$define"
7252         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7253                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7254                 val="$undef"
7255         else
7256                 echo "(I can't seem to compile and run the test program.)"
7257                 if ./usg; then
7258                         xxx="a USG one, i.e. you use setpgrp()."
7259                 else
7260                         # SVR4 systems can appear rather BSD-ish.
7261                         case "$i_unistd" in
7262                         $undef)
7263                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7264                                 val="$define"
7265                                 ;;
7266                         $define)
7267                                 xxx="probably a USG one, i.e. you use setpgrp()."
7268                                 val="$undef"
7269                                 ;;
7270                         esac
7271                 fi
7272                 echo "Assuming your setpgrp is $xxx" >&4
7273         fi
7274         ;;
7275 *) val="$undef";;
7276 esac
7277 set d_bsdsetpgrp
7278 eval $setvar
7279 $rm -f set set.c
7280 : see if bzero exists
7281 set bzero d_bzero
7282 eval $inlibc
7283
7284 : see if signal is declared as pointer to function returning int or void
7285 echo " "
7286 xxx=`./findhdr signal.h`
7287 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7288 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7289         echo "You have int (*signal())() instead of void." >&4
7290         val="$undef"
7291 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7292         echo "You have void (*signal())()." >&4
7293         val="$define"
7294 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7295         echo "You have int (*signal())() instead of void." >&4
7296         val="$undef"
7297 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7298         echo "You have void (*signal())()." >&4
7299         val="$define"
7300 else
7301         case "$d_voidsig" in
7302         '')
7303         echo "I can't determine whether signal handler returns void or int..." >&4
7304                 dflt=void
7305                 rp="What type does your signal handler return?"
7306                 . ./myread
7307                 case "$ans" in
7308                 v*) val="$define";;
7309                 *) val="$undef";;
7310                 esac;;
7311         "$define")
7312                 echo "As you already told me, signal handler returns void." >&4
7313                 val="$define"
7314                 ;;
7315         *)      echo "As you already told me, signal handler returns int." >&4
7316                 val="$undef"
7317                 ;;
7318         esac
7319 fi
7320 set d_voidsig
7321 eval $setvar
7322 case "$d_voidsig" in
7323 "$define") signal_t="void";;
7324 *) signal_t="int";;
7325 esac
7326 $rm -f $$.tmp
7327
7328 : check for ability to cast large floats to 32-bit ints.
7329 echo " "
7330 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7331 if $test "$intsize" -ge 4; then
7332         xxx=int
7333 else
7334         xxx=long
7335 fi
7336 $cat >try.c <<EOCP
7337 #include <stdio.h>
7338 #include <sys/types.h>
7339 #include <signal.h>
7340 $signal_t blech(s) int s; { exit(3); }
7341 int main()
7342 {
7343         $xxx i32;
7344         double f, g;
7345         int result = 0;
7346         char str[16];
7347         signal(SIGFPE, blech);
7348
7349         /* Don't let compiler optimize the test away.  Store the number 
7350            in a writable string for gcc to pass to sscanf under HP/UX.
7351         */
7352         sprintf(str, "2147483647");
7353         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7354         g = 10 * f;
7355         i32  = ($xxx) g;
7356
7357         /* x86 processors will probably give 0x8000 0000, which is a
7358        sign change.  We don't want that.  We want to mimic SPARC
7359            behavior here, which is to preserve the sign and give
7360            back 0x7fff ffff.
7361         */
7362         if (i32 != ($xxx) f)
7363                 result |= 1;
7364         exit(result);
7365 }
7366 EOCP
7367 set try
7368 if eval $compile_ok; then
7369         ./try
7370         yyy=$?
7371 else
7372         echo "(I can't seem to compile the test program--assuming it can't)"
7373         yyy=1
7374 fi
7375 case "$yyy" in
7376 0)      val="$define"
7377         echo "Yup, it can."
7378         ;;
7379 *)      val="$undef"
7380         echo "Nope, it can't."
7381         ;;
7382 esac
7383 set d_casti32
7384 eval $setvar
7385 $rm -f try try.*
7386
7387 : check for ability to cast negative floats to unsigned
7388 echo " "
7389 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7390 $cat >try.c <<EOCP
7391 #include <stdio.h>
7392 #include <sys/types.h>
7393 #include <signal.h>
7394 $signal_t blech(s) int s; { exit(7); }
7395 $signal_t blech_in_list(s) int s; { exit(4); }
7396 unsigned long dummy_long(p) unsigned long p; { return p; }
7397 unsigned int dummy_int(p) unsigned int p; { return p; }
7398 unsigned short dummy_short(p) unsigned short p; { return p; }
7399 int main()
7400 {
7401         double f;
7402         unsigned long along;
7403         unsigned int aint;
7404         unsigned short ashort;
7405         int result = 0;
7406         char str[16];
7407         
7408         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7409            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7410            optimized the whole file away
7411         */
7412         /* Store the number in a writable string for gcc to pass to 
7413            sscanf under HP/UX.
7414         */
7415         sprintf(str, "-123");
7416         sscanf(str, "%lf", &f);  /* f = -123.; */
7417
7418         signal(SIGFPE, blech);
7419         along = (unsigned long)f;
7420         aint = (unsigned int)f;
7421         ashort = (unsigned short)f;
7422         if (along != (unsigned long)-123)
7423                 result |= 1;
7424         if (aint != (unsigned int)-123)
7425                 result |= 1;
7426         if (ashort != (unsigned short)-123)
7427                 result |= 1;
7428         sprintf(str, "1073741824.");
7429         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7430         f = f + f;
7431         along = 0;
7432         along = (unsigned long)f;
7433         if (along != 0x80000000)
7434                 result |= 2;
7435         f -= 1.;
7436         along = 0;
7437         along = (unsigned long)f;
7438         if (along != 0x7fffffff)
7439                 result |= 1;
7440         f += 2.;
7441         along = 0;
7442         along = (unsigned long)f;
7443         if (along != 0x80000001)
7444                 result |= 2;
7445         if (result)
7446                 exit(result);
7447         signal(SIGFPE, blech_in_list);
7448         sprintf(str, "123.");
7449         sscanf(str, "%lf", &f);  /* f = 123.; */
7450         along = dummy_long((unsigned long)f);
7451         aint = dummy_int((unsigned int)f);
7452         ashort = dummy_short((unsigned short)f);
7453         if (along != (unsigned long)123)
7454                 result |= 4;
7455         if (aint != (unsigned int)123)
7456                 result |= 4;
7457         if (ashort != (unsigned short)123)
7458                 result |= 4;
7459         exit(result);
7460
7461 }
7462 EOCP
7463 set try
7464 if eval $compile_ok; then
7465         ./try
7466         castflags=$?
7467 else
7468         echo "(I can't seem to compile the test program--assuming it can't)"
7469         castflags=7
7470 fi
7471 case "$castflags" in
7472 0)      val="$define"
7473         echo "Yup, it can."
7474         ;;
7475 *)      val="$undef"
7476         echo "Nope, it can't."
7477         ;;
7478 esac
7479 set d_castneg
7480 eval $setvar
7481 $rm -f try.*
7482
7483 : see if vprintf exists
7484 echo " "
7485 if set vprintf val -f d_vprintf; eval $csym; $val; then
7486         echo 'vprintf() found.' >&4
7487         val="$define"
7488         $cat >vprintf.c <<'EOF'
7489 #include <varargs.h>
7490
7491 int main() { xxx("foo"); }
7492
7493 xxx(va_alist)
7494 va_dcl
7495 {
7496         va_list args;
7497         char buf[10];
7498
7499         va_start(args);
7500         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7501 }
7502 EOF
7503         set vprintf
7504         if eval $compile && ./vprintf; then
7505                 echo "Your vsprintf() returns (int)." >&4
7506                 val2="$undef"
7507         else
7508                 echo "Your vsprintf() returns (char*)." >&4
7509                 val2="$define"
7510         fi
7511 else
7512         echo 'vprintf() NOT found.' >&4
7513                 val="$undef"
7514                 val2="$undef"
7515 fi
7516 set d_vprintf
7517 eval $setvar
7518 val=$val2
7519 set d_charvspr
7520 eval $setvar
7521
7522 : see if chown exists
7523 set chown d_chown
7524 eval $inlibc
7525
7526 : see if chroot exists
7527 set chroot d_chroot
7528 eval $inlibc
7529
7530 : see if chsize exists
7531 set chsize d_chsize
7532 eval $inlibc
7533
7534 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7535 while $test $# -ge 2; do
7536         case "$1" in
7537         $define) echo "#include <$2>";;
7538         esac ;
7539     shift 2;
7540 done > try.c;
7541 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7542 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7543         val="$define";
7544 else
7545         val="$undef";
7546 fi;
7547 set $varname;
7548 eval $setvar;
7549 $rm -f try.c try.o'
7550
7551 : see if this is a sys/uio.h system
7552 set sys/uio.h i_sysuio
7553 eval $inhdr
7554
7555 echo "Checking to see if your system supports struct iovec..." >&4
7556 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7557 eval $hasfield
7558 case "$d_iovec_s" in
7559 "$define")      echo "Yup, it does." >&4
7560                 ;;
7561 *)              echo "Nope, it doesn't." >&4
7562                 ;;
7563 esac
7564
7565 socketlib=''
7566 sockethdr=''
7567 : see whether socket exists
7568 echo " "
7569 $echo $n "Hmm... $c" >&4
7570 if set socket val -f d_socket; eval $csym; $val; then
7571         echo "Looks like you have Berkeley networking support." >&4
7572         d_socket="$define"
7573         if set setsockopt val -f; eval $csym; $val; then
7574                 d_oldsock="$undef"
7575         else
7576                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7577                 d_oldsock="$define"
7578         fi
7579 else
7580         if $contains socklib libc.list >/dev/null 2>&1; then
7581                 echo "Looks like you have Berkeley networking support." >&4
7582                 d_socket="$define"
7583                 : we will have to assume that it supports the 4.2 BSD interface
7584                 d_oldsock="$undef"
7585         else
7586                 echo "You don't have Berkeley networking in libc$_a..." >&4
7587                 if test "X$d_socket" = "X$define"; then
7588                    echo "...but you seem to believe that you have sockets." >&4
7589                 else
7590                         for net in net socket
7591                         do
7592                                 if test -f /usr/lib/lib$net$_a; then
7593                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7594                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7595                                         if $contains socket libc.list >/dev/null 2>&1; then
7596                                                 d_socket="$define"
7597                                                 socketlib="-l$net"
7598                                                 case "$net" in
7599                                                 net)
7600                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7601                                                         sockethdr="-I/usr/netinclude"
7602                                                         ;;
7603                                                 esac
7604                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7605                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7606                                                         d_oldsock="$undef"
7607                                                 else
7608                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7609                                                         d_oldsock="$define"
7610                                                 fi
7611                                                 break
7612                                         fi
7613                                 fi
7614                         done
7615                         if test "X$d_socket" != "X$define"; then
7616                            echo "or anywhere else I see." >&4
7617                            d_socket="$undef"
7618                            d_oldsock="$undef"
7619                         fi
7620                 fi
7621         fi
7622 fi
7623
7624 : see if socketpair exists
7625 set socketpair d_sockpair
7626 eval $inlibc
7627
7628
7629 echo " "
7630 echo "Checking the availability of certain socket constants..." >& 4
7631 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7632         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7633         $cat >try.c <<EOF
7634 #include <sys/types.h>
7635 #include <sys/socket.h>
7636 int main() {
7637     int i = $ENUM;
7638 }
7639 EOF
7640         val="$undef"
7641         set try; if eval $compile; then
7642                 val="$define"
7643         fi
7644         set d_${enum}; eval $setvar
7645         $rm -f try.c try
7646 done
7647
7648 set sendmsg d_sendmsg
7649 eval $inlibc
7650
7651 set recvmsg d_recvmsg
7652 eval $inlibc
7653
7654 echo " "
7655 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7656 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7657 eval $hasfield
7658 case "$d_msghdr_s" in
7659 "$define")      echo "Yup, it does." >&4
7660                 ;;
7661 *)              echo "Nope, it doesn't." >&4
7662                 ;;
7663 esac
7664
7665 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7666 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7667 eval $hasfield
7668 case "$d_cmsghdr_s" in
7669 "$define")      echo "Yup, it does." >&4
7670                 ;;
7671 *)              echo "Nope, it doesn't." >&4
7672                 ;;
7673 esac
7674
7675 : check for const keyword
7676 echo " "
7677 echo 'Checking to see if your C compiler knows about "const"...' >&4
7678 $cat >const.c <<'EOCP'
7679 typedef struct spug { int drokk; } spug;
7680 int main()
7681 {
7682         const char *foo;
7683         const spug y;
7684 }
7685 EOCP
7686 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7687         val="$define"
7688         echo "Yup, it does."
7689 else
7690         val="$undef"
7691         echo "Nope, it doesn't."
7692 fi
7693 set d_const
7694 eval $setvar
7695
7696 : see if crypt exists
7697 echo " "
7698 if set crypt val -f d_crypt; eval $csym; $val; then
7699         echo 'crypt() found.' >&4
7700         val="$define"
7701         cryptlib=''
7702 else
7703         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7704         if $test -z "$cryptlib"; then
7705                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7706         else
7707                 cryptlib=-lcrypt
7708         fi
7709         if $test -z "$cryptlib"; then
7710                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7711         else
7712                 cryptlib=-lcrypt
7713         fi
7714         if $test -z "$cryptlib"; then
7715                 cryptlib=`./loc libcrypt$_a "" $libpth`
7716         else
7717                 cryptlib=-lcrypt
7718         fi
7719         if $test -z "$cryptlib"; then
7720                 echo 'crypt() NOT found.' >&4
7721                 val="$undef"
7722         else
7723                 val="$define"
7724         fi
7725 fi
7726 set d_crypt
7727 eval $setvar
7728
7729 : get csh whereabouts
7730 case "$csh" in
7731 'csh') val="$undef" ;;
7732 *) val="$define" ;;
7733 esac
7734 set d_csh
7735 eval $setvar
7736 : Respect a hint or command line value for full_csh.
7737 case "$full_csh" in
7738 '') full_csh=$csh ;;
7739 esac
7740
7741 : see if cuserid exists
7742 set cuserid d_cuserid
7743 eval $inlibc
7744
7745 : see if this is a limits.h system
7746 set limits.h i_limits
7747 eval $inhdr
7748
7749 : see if this is a float.h system
7750 set float.h i_float
7751 eval $inhdr
7752
7753 : See if number of significant digits in a double precision number is known
7754 echo " "
7755 $cat >dbl_dig.c <<EOM
7756 #$i_limits I_LIMITS
7757 #$i_float I_FLOAT
7758 #ifdef I_LIMITS
7759 #include <limits.h>
7760 #endif
7761 #ifdef I_FLOAT
7762 #include <float.h>
7763 #endif
7764 #ifdef DBL_DIG
7765 printf("Contains DBL_DIG");
7766 #endif
7767 EOM
7768 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7769 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7770         echo "DBL_DIG found." >&4
7771         val="$define"
7772 else
7773         echo "DBL_DIG NOT found." >&4
7774         val="$undef"
7775 fi
7776 $rm -f dbl_dig.?
7777 set d_dbl_dig
7778 eval $setvar
7779
7780
7781 if $test X"$use64bits" = X"$define"; then
7782         : see if dbminit64 exists
7783         set dbminit64 d_dbminit64
7784         eval $inlibc
7785
7786         : see if dbmclose64 exists
7787         set dbmclose64 d_dbmclose64
7788         eval $inlibc
7789
7790         : see if fetch64 exists
7791         set fetch64 d_fetch64
7792         eval $inlibc
7793
7794         : see if store64 exists
7795         set store64 d_store64
7796         eval $inlibc
7797
7798         : see if delete64 exists
7799         set delete64 d_delete64
7800         eval $inlibc
7801
7802         : see if firstkey64 exists
7803         set firstkey64 d_firstkey64
7804         eval $inlibc
7805
7806         : see if nextkey64 exists
7807         set nextkey64 d_nextkey64
7808         eval $inlibc
7809 else
7810         val="$undef"
7811         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7812         do
7813                 set $xxx
7814                 eval $setvar
7815         done
7816 fi
7817
7818 : see if difftime exists
7819 set difftime d_difftime
7820 eval $inlibc
7821
7822 : see if sys/stat.h is available
7823 set sys/stat.h i_sysstat
7824 eval $inhdr
7825
7826 : see if this is a dirent system
7827 echo " "
7828 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7829         val="$define"
7830         echo "<dirent.h> found." >&4
7831 else
7832         val="$undef"
7833         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7834                 echo "<sys/dir.h> found." >&4
7835                 echo " "
7836         else
7837                 xinc=`./findhdr sys/ndir.h`
7838         fi
7839         echo "<dirent.h> NOT found." >&4
7840 fi
7841 set i_dirent
7842 eval $setvar
7843
7844 : Look for type of directory structure.
7845 echo " "
7846 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7847
7848 case "$direntrytype" in
7849 ''|' ')
7850         case "$i_dirent" in
7851         $define) guess1='struct dirent' ;;
7852         *) guess1='struct direct'  ;;
7853         esac
7854         ;;
7855 *)      guess1="$direntrytype"
7856         ;;
7857 esac
7858
7859 case "$guess1" in
7860 'struct dirent') guess2='struct direct' ;;
7861 *) guess2='struct dirent' ;;
7862 esac
7863                 
7864 if $contains "$guess1" try.c >/dev/null 2>&1; then
7865         direntrytype="$guess1"
7866         echo "Your directory entries are $direntrytype." >&4
7867 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7868         direntrytype="$guess2"
7869         echo "Your directory entries seem to be $direntrytype." >&4
7870 else
7871         echo "I don't recognize your system's directory entries." >&4
7872         rp="What type is used for directory entries on this system?"
7873         dflt="$guess1"
7874         . ./myread
7875         direntrytype="$ans"
7876 fi
7877 $rm -f try.c
7878
7879
7880 : see if the directory entry stores field length
7881 echo " "
7882 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7883 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7884         echo "Good, your directory entry keeps length information in d_namlen." >&4
7885         val="$define"
7886 else
7887         echo "Your directory entry does not know about the d_namlen field." >&4
7888         val="$undef"
7889 fi
7890 set d_dirnamlen
7891 eval $setvar
7892 $rm -f try.c
7893
7894
7895 if $test X"$use64bits" = X"$define"; then
7896         : see if fstat64 exists
7897         set fstat64 d_fstat64
7898         eval $inlibc
7899
7900         : see if ftruncate64 exists
7901         set ftruncate64 d_ftruncate64
7902         eval $inlibc
7903
7904         : see if lockf64 exists
7905         set lockf64 d_lockf64
7906         eval $inlibc
7907
7908         : see if llseek exists
7909         set llseek d_llseek
7910         eval $inlibc
7911
7912         : see if lseek64 exists
7913         set lseek64 d_lseek64
7914         eval $inlibc
7915
7916         : see if lstat64 exists
7917         set lstat64 d_lstat64
7918         eval $inlibc
7919
7920         : see if open64 exists
7921         set open64 d_open64
7922         eval $inlibc
7923
7924         : see if opendir64 exists
7925         set opendir64 d_opendir64
7926         eval $inlibc
7927
7928         : see if readdir64 exists
7929         set readdir64 d_readdir64
7930         eval $inlibc
7931
7932         : see if seekdir64 exists
7933         set seekdir64 d_seekdir64
7934         eval $inlibc
7935
7936         : see if stat64 exists
7937         set stat64 d_stat64
7938         eval $inlibc
7939
7940         : see if telldir64 exists
7941         set telldir64 d_telldir64
7942         eval $inlibc
7943
7944         : see if truncate64 exists
7945         set truncate64 d_truncate64
7946         eval $inlibc
7947
7948         : check for off64_t
7949         echo " "
7950         echo $n "Checking to see if your system supports off64_t...$c" >&4
7951         $cat >try.c <<EOCP
7952 #include <sys/types.h>
7953 #include <unistd.h>
7954 off64_t foo() { off64_t x; x = 7; return x; }'
7955 EOCP
7956         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7957                 val="$define"
7958                 echo " Yup, it does." >&4
7959         else
7960                 val="$undef"
7961                 echo " Nope, it doesn't." >&4
7962         fi
7963         $rm -f try.*
7964         set d_off64_t
7965         eval $setvar
7966
7967         : check for offset_t
7968         echo " "
7969         echo $n "Checking to see if your system supports offset_t...$c" >&4
7970         $cat >try.c <<EOCP
7971 #include <sys/types.h>
7972 #include <unistd.h>
7973 offset_t foo() { offset_t x; x = 7; return x; }'
7974 EOCP
7975         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7976                 val="$define"
7977                 echo " Yup, it does." >&4
7978         else
7979                 val="$undef"
7980                 echo " Nope, it doesn't." >&4
7981         fi
7982         $rm -f try.*
7983         set d_offset_t
7984         eval $setvar
7985
7986         : check for ino64_t
7987         echo " "
7988         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7989         val="$undef"
7990         case "$i_sysstat" in
7991         "$define" )
7992                 $cat >try.c <<EOCP
7993 #include <sys/types.h>
7994 #include <sys/stat.h>
7995 ino64_t foo() { ino64_t x; x = 7; return x; }'
7996 EOCP
7997                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7998                         val="$define"
7999                 fi
8000                 $rm -f try.*
8001                 ;;
8002         esac
8003         if $test "X$val" = X"$define"; then
8004                 echo " Yup, it does." >&4
8005         else
8006                 echo " Nope, it doesn't." >&4
8007         fi
8008         set d_ino64_t
8009         eval $setvar
8010
8011         : check for struct flock64
8012         echo " "
8013         echo "Checking to see if your system supports struct flock64..." >&4
8014         if $h_fcntl; then
8015                 set d_flock64_s flock64 l_len define fcntl.h
8016                 eval $hasfield
8017         else
8018                 val="$undef"
8019                 set d_flock64_s
8020                 eval $setvar
8021         fi
8022         case "$d_flock64_s" in
8023         "$define")      echo "Yup, it does." >&4
8024                         ;;
8025         *)              echo "Nope, it doesn't." >&4
8026                         ;;
8027         esac
8028
8029         : check for struct dirent64
8030         echo " "
8031         echo "Checking to see if your system supports struct dirent64..." >&4
8032         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
8033         eval $hasfield
8034         case "$d_dirent64_s" in
8035         "$define")      echo "Yup, it does." >&4
8036                         ;;
8037         *)              echo "Nope, it doesn't." >&4
8038                         ;;
8039         esac
8040
8041 else
8042         val="$undef"
8043         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
8044         do
8045                 set $xxx
8046                 eval $setvar
8047         done
8048 fi
8049
8050 : see if dlerror exists
8051 xxx_runnm="$runnm"
8052 runnm=false
8053 set dlerror d_dlerror
8054 eval $inlibc
8055 runnm="$xxx_runnm"
8056
8057 : see if dlfcn is available
8058 set dlfcn.h i_dlfcn
8059 eval $inhdr
8060
8061 case "$usedl" in
8062 $define|y|true)
8063         $cat << EOM
8064
8065 On a few systems, the dynamically loaded modules that perl generates and uses
8066 will need a different extension than shared libs. The default will probably
8067 be appropriate.
8068
8069 EOM
8070         case "$dlext" in
8071         '')     dflt="$so" ;;
8072         *)      dflt="$dlext" ;;
8073         esac
8074         rp='What is the extension of dynamically loaded modules'
8075         . ./myread
8076         dlext="$ans"
8077         ;;
8078 *)
8079         dlext="none"
8080         ;;
8081 esac
8082
8083 : Check if dlsym need a leading underscore
8084 echo " "
8085 val="$undef"
8086
8087 case "$dlsrc" in
8088 dl_dlopen.xs)
8089         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8090         $cat >dyna.c <<'EOM'
8091 fred () { }
8092 EOM
8093
8094 $cat >fred.c<<EOM
8095
8096 #include <stdio.h>
8097 #$i_dlfcn I_DLFCN
8098 #ifdef I_DLFCN
8099 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8100 #else
8101 #include <sys/types.h>
8102 #include <nlist.h>
8103 #include <link.h>
8104 #endif
8105
8106 extern int fred() ;
8107
8108 int main()
8109 {
8110     void * handle ;
8111     void * symbol ;
8112 #ifndef RTLD_LAZY
8113     int mode = 1 ;
8114 #else
8115     int mode = RTLD_LAZY ;
8116 #endif
8117     handle = dlopen("./dyna.$dlext", mode) ;
8118     if (handle == NULL) {
8119         printf ("1\n") ;
8120         fflush (stdout) ;
8121         exit(0);
8122     }
8123     symbol = dlsym(handle, "fred") ;
8124     if (symbol == NULL) {
8125         /* try putting a leading underscore */
8126         symbol = dlsym(handle, "_fred") ;
8127         if (symbol == NULL) {
8128             printf ("2\n") ;
8129             fflush (stdout) ;
8130             exit(0);
8131         }
8132         printf ("3\n") ;
8133     }
8134     else
8135         printf ("4\n") ;
8136     fflush (stdout) ;
8137     exit(0);
8138 }
8139 EOM
8140         : Call the object file tmp-dyna.o in case dlext=o.
8141         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8142                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8143                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8144                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8145                 xxx=`./fred`
8146                 case $xxx in
8147                 1)      echo "Test program failed using dlopen." >&4
8148                         echo "Perhaps you should not use dynamic loading." >&4;;
8149                 2)      echo "Test program failed using dlsym." >&4
8150                         echo "Perhaps you should not use dynamic loading." >&4;;
8151                 3)      echo "dlsym needs a leading underscore" >&4
8152                         val="$define" ;;
8153                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8154                 esac
8155         else
8156                 echo "I can't compile and run the test program." >&4
8157         fi
8158         ;;
8159 esac
8160                 
8161 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8162
8163 set d_dlsymun
8164 eval $setvar
8165
8166 hasproto='varname=$1; func=$2; shift; shift;
8167 while $test $# -ge 2; do
8168         case "$1" in
8169         $define) echo "#include <$2>";;
8170         esac ;
8171     shift 2;
8172 done > try.c;
8173 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8174 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8175         echo "$func() prototype found.";
8176         val="$define";
8177 else
8178         echo "$func() prototype NOT found.";
8179         val="$undef";
8180 fi;
8181 set $varname;
8182 eval $setvar;
8183 $rm -f try.c tryout.c'
8184
8185 : see if prototype for drand48 is available
8186 echo " "
8187 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8188 eval $hasproto
8189
8190 : see if dup2 exists
8191 set dup2 d_dup2
8192 eval $inlibc
8193
8194 : see if eaccess exists
8195 set eaccess d_eaccess
8196 eval $inlibc
8197
8198 : see if endgrent exists
8199 set endgrent d_endgrent
8200 eval $inlibc
8201
8202 : see if endhostent exists
8203 set endhostent d_endhent
8204 eval $inlibc
8205
8206 : see if endnetent exists
8207 set endnetent d_endnent
8208 eval $inlibc
8209
8210 : see if endprotoent exists
8211 set endprotoent d_endpent
8212 eval $inlibc
8213
8214 : see if endpwent exists
8215 set endpwent d_endpwent
8216 eval $inlibc
8217
8218 : see if endservent exists
8219 set endservent d_endsent
8220 eval $inlibc
8221
8222 : see if endspent exists
8223 set endspent d_endspent
8224 eval $inlibc
8225
8226 : Locate the flags for 'open()'
8227 echo " "
8228 $cat >open3.c <<'EOCP'
8229 #include <sys/types.h>
8230 #ifdef I_FCNTL
8231 #include <fcntl.h>
8232 #endif
8233 #ifdef I_SYS_FILE
8234 #include <sys/file.h>
8235 #endif
8236 int main() {
8237         if(O_RDONLY);
8238 #ifdef O_TRUNC
8239         exit(0);
8240 #else
8241         exit(1);
8242 #endif
8243 }
8244 EOCP
8245 : check sys/file.h first to get FREAD on Sun
8246 if $test `./findhdr sys/file.h` && \
8247                 set open3 -DI_SYS_FILE && eval $compile; then
8248         h_sysfile=true;
8249         echo "<sys/file.h> defines the O_* constants..." >&4
8250         if ./open3; then
8251                 echo "and you have the 3 argument form of open()." >&4
8252                 val="$define"
8253         else
8254                 echo "but not the 3 argument form of open().  Oh, well." >&4
8255                 val="$undef"
8256         fi
8257 elif $test `./findhdr fcntl.h` && \
8258                 set open3 -DI_FCNTL && eval $compile; then
8259         h_fcntl=true;
8260         echo "<fcntl.h> defines the O_* constants..." >&4
8261         if ./open3; then
8262                 echo "and you have the 3 argument form of open()." >&4
8263                 val="$define"
8264         else
8265                 echo "but not the 3 argument form of open().  Oh, well." >&4
8266                 val="$undef"
8267         fi
8268 else
8269         val="$undef"
8270         echo "I can't find the O_* constant definitions!  You got problems." >&4
8271 fi
8272 set d_open3
8273 eval $setvar
8274 $rm -f open3*
8275
8276 : check for non-blocking I/O stuff
8277 case "$h_sysfile" in
8278 true) echo "#include <sys/file.h>" > head.c;;
8279 *)
8280         case "$h_fcntl" in
8281         true) echo "#include <fcntl.h>" > head.c;;
8282         *) echo "#include <sys/fcntl.h>" > head.c;;
8283         esac
8284         ;;
8285 esac
8286 echo " "
8287 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8288 case "$o_nonblock" in
8289 '')
8290         $cat head.c > try.c
8291         $cat >>try.c <<'EOCP'
8292 int main() {
8293 #ifdef O_NONBLOCK
8294         printf("O_NONBLOCK\n");
8295         exit(0);
8296 #endif
8297 #ifdef O_NDELAY
8298         printf("O_NDELAY\n");
8299         exit(0);
8300 #endif
8301 #ifdef FNDELAY
8302         printf("FNDELAY\n");
8303         exit(0);
8304 #endif
8305         exit(0);
8306 }
8307 EOCP
8308         set try
8309         if eval $compile_ok; then
8310                 o_nonblock=`./try`
8311                 case "$o_nonblock" in
8312                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8313                 *) echo "Seems like we can use $o_nonblock.";;
8314                 esac
8315         else
8316                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8317         fi
8318         ;;
8319 *) echo "Using $hint value $o_nonblock.";;
8320 esac
8321 $rm -f try try.* .out core
8322
8323 echo " "
8324 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8325 case "$eagain" in
8326 '')
8327         $cat head.c > try.c
8328         $cat >>try.c <<EOCP
8329 #include <errno.h>
8330 #include <sys/types.h>
8331 #include <signal.h>
8332 #define MY_O_NONBLOCK $o_nonblock
8333 #ifndef errno  /* XXX need better Configure test */
8334 extern int errno;
8335 #endif
8336 $signal_t blech(x) int x; { exit(3); }
8337 EOCP
8338         $cat >> try.c <<'EOCP'
8339 int main()
8340 {
8341         int pd[2];
8342         int pu[2];
8343         char buf[1];
8344         char string[100];
8345
8346         pipe(pd);       /* Down: child -> parent */
8347         pipe(pu);       /* Up: parent -> child */
8348         if (0 != fork()) {
8349                 int ret;
8350                 close(pd[1]);   /* Parent reads from pd[0] */
8351                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8352                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8353                         exit(1);
8354                 signal(SIGALRM, blech);
8355                 alarm(5);
8356                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8357                         exit(2);
8358                 sprintf(string, "%d\n", ret);
8359                 write(2, string, strlen(string));
8360                 alarm(0);
8361 #ifdef EAGAIN
8362                 if (errno == EAGAIN) {
8363                         printf("EAGAIN\n");
8364                         goto ok;
8365                 }
8366 #endif
8367 #ifdef EWOULDBLOCK
8368                 if (errno == EWOULDBLOCK)
8369                         printf("EWOULDBLOCK\n");
8370 #endif
8371         ok:
8372                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8373                 sleep(2);                               /* Give it time to close our pipe */
8374                 alarm(5);
8375                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8376                 alarm(0);
8377                 sprintf(string, "%d\n", ret);
8378                 write(3, string, strlen(string));
8379                 exit(0);
8380         }
8381
8382         close(pd[0]);                   /* We write to pd[1] */
8383         close(pu[1]);                   /* We read from pu[0] */
8384         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8385         close(pd[1]);                   /* Pipe pd is now fully closed! */
8386         exit(0);                                /* Bye bye, thank you for playing! */
8387 }
8388 EOCP
8389         set try
8390         if eval $compile_ok; then
8391                 echo "$startsh" >mtry
8392                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8393                 chmod +x mtry
8394                 ./mtry >/dev/null 2>&1
8395                 case $? in
8396                 0) eagain=`$cat try.out`;;
8397                 1) echo "Could not perform non-blocking setting!";;
8398                 2) echo "I did a successful read() for something that was not there!";;
8399                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8400                 *) echo "Something terribly wrong happened during testing.";;
8401                 esac
8402                 rd_nodata=`$cat try.ret`
8403                 echo "A read() system call with no data present returns $rd_nodata."
8404                 case "$rd_nodata" in
8405                 0|-1) ;;
8406                 *)
8407                         echo "(That's peculiar, fixing that to be -1.)"
8408                         rd_nodata=-1
8409                         ;;
8410                 esac
8411                 case "$eagain" in
8412                 '')
8413                         echo "Forcing errno EAGAIN on read() with no data available."
8414                         eagain=EAGAIN
8415                         ;;
8416                 *)
8417                         echo "Your read() sets errno to $eagain when no data is available."
8418                         ;;
8419                 esac
8420                 status=`$cat try.err`
8421                 case "$status" in
8422                 0) echo "And it correctly returns 0 to signal EOF.";;
8423                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8424                 *) echo "However, your read() returns '$status' on EOF??";;
8425                 esac
8426                 val="$define"
8427                 if test "$status" = "$rd_nodata"; then
8428                         echo "WARNING: you can't distinguish between EOF and no data!"
8429                         val="$undef"
8430                 fi
8431         else
8432                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8433                 eagain=EAGAIN
8434         fi
8435         set d_eofnblk
8436         eval $setvar
8437         ;;
8438 *)
8439         echo "Using $hint value $eagain."
8440         echo "Your read() returns $rd_nodata when no data is present."
8441         case "$d_eofnblk" in
8442         "$define") echo "And you can see EOF because read() returns 0.";;
8443         "$undef") echo "But you can't see EOF status from read() returned value.";;
8444         *)
8445                 echo "(Assuming you can't see EOF status from read anyway.)"
8446                 d_eofnblk=$undef
8447                 ;;
8448         esac
8449         ;;
8450 esac
8451 $rm -f try try.* .out core head.c mtry
8452
8453 : see if fchmod exists
8454 set fchmod d_fchmod
8455 eval $inlibc
8456
8457 : see if fchown exists
8458 set fchown d_fchown
8459 eval $inlibc
8460
8461 : see if this is an fcntl system
8462 set fcntl d_fcntl
8463 eval $inlibc
8464
8465 : see if sys/select.h has to be included
8466 set sys/select.h i_sysselct
8467 eval $inhdr
8468
8469 : see if we should include time.h, sys/time.h, or both
8470 echo " "
8471 if test "X$timeincl" = X; then
8472         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8473         $echo $n "I'm now running the test program...$c"
8474         $cat >try.c <<'EOCP'
8475 #include <sys/types.h>
8476 #ifdef I_TIME
8477 #include <time.h>
8478 #endif
8479 #ifdef I_SYSTIME
8480 #ifdef SYSTIMEKERNEL
8481 #define KERNEL
8482 #endif
8483 #include <sys/time.h>
8484 #endif
8485 #ifdef I_SYSSELECT
8486 #include <sys/select.h>
8487 #endif
8488 int main()
8489 {
8490         struct tm foo;
8491 #ifdef S_TIMEVAL
8492         struct timeval bar;
8493 #endif
8494 #ifdef S_TIMEZONE
8495         struct timezone tzp;
8496 #endif
8497         if (foo.tm_sec == foo.tm_sec)
8498                 exit(0);
8499 #ifdef S_TIMEVAL
8500         if (bar.tv_sec == bar.tv_sec)
8501                 exit(0);
8502 #endif
8503         exit(1);
8504 }
8505 EOCP
8506         flags=''
8507         for s_timezone in '-DS_TIMEZONE' ''; do
8508         sysselect=''
8509         for s_timeval in '-DS_TIMEVAL' ''; do
8510         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8511         for i_time in '' '-DI_TIME'; do
8512         for i_systime in '-DI_SYSTIME' ''; do
8513                 case "$flags" in
8514                 '') $echo $n ".$c"
8515                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8516                         if eval $compile; then
8517                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8518                                 shift
8519                                 flags="$*"
8520                                 echo " "
8521                                 $echo $n "Succeeded with $flags$c"
8522                         fi
8523                         ;;
8524                 esac
8525         done
8526         done
8527         done
8528         done
8529         done
8530         timeincl=''
8531         echo " "
8532         case "$flags" in
8533         *SYSTIMEKERNEL*) i_systimek="$define"
8534                 timeincl=`./findhdr sys/time.h`
8535                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8536         *) i_systimek="$undef";;
8537         esac
8538         case "$flags" in
8539         *I_TIME*) i_time="$define"
8540                 timeincl=`./findhdr time.h`" $timeincl"
8541                 echo "We'll include <time.h>." >&4;;
8542         *) i_time="$undef";;
8543         esac
8544         case "$flags" in
8545         *I_SYSTIME*) i_systime="$define"
8546                 timeincl=`./findhdr sys/time.h`" $timeincl"
8547                 echo "We'll include <sys/time.h>." >&4;;
8548         *) i_systime="$undef";;
8549         esac
8550         $rm -f try.c try
8551 fi
8552
8553 : check for fd_set items
8554 $cat <<EOM
8555
8556 Checking to see how well your C compiler handles fd_set and friends ...
8557 EOM
8558 $cat >fd_set.c <<EOCP
8559 #$i_systime I_SYS_TIME
8560 #$i_sysselct I_SYS_SELECT
8561 #$d_socket HAS_SOCKET
8562 #include <sys/types.h>
8563 #ifdef HAS_SOCKET
8564 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8565 #endif
8566 #ifdef I_SYS_TIME
8567 #include <sys/time.h>
8568 #endif
8569 #ifdef I_SYS_SELECT
8570 #include <sys/select.h>
8571 #endif
8572 int main() {
8573         fd_set fds;
8574
8575 #ifdef TRYBITS
8576         if(fds.fds_bits);
8577 #endif
8578
8579 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8580         exit(0);
8581 #else
8582         exit(1);
8583 #endif
8584 }
8585 EOCP
8586 set fd_set -DTRYBITS
8587 if eval $compile; then
8588         d_fds_bits="$define"
8589         d_fd_set="$define"
8590         echo "Well, your system knows about the normal fd_set typedef..." >&4
8591         if ./fd_set; then
8592                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8593                 d_fd_macros="$define"
8594         else
8595                 $cat >&4 <<'EOM'
8596 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8597 EOM
8598                 d_fd_macros="$undef"
8599         fi
8600 else
8601         $cat <<'EOM'
8602 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8603 EOM
8604         set fd_set
8605         if eval $compile; then
8606                 d_fds_bits="$undef"
8607                 d_fd_set="$define"
8608                 echo "Well, your system has some sort of fd_set available..." >&4
8609                 if ./fd_set; then
8610                         echo "and you have the normal fd_set macros." >&4
8611                         d_fd_macros="$define"
8612                 else
8613                         $cat <<'EOM'
8614 but not the normal fd_set macros!  Gross!  More work for me...
8615 EOM
8616                         d_fd_macros="$undef"
8617                 fi
8618         else
8619         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8620                 d_fd_set="$undef"
8621                 d_fds_bits="$undef"
8622                 d_fd_macros="$undef"
8623         fi
8624 fi
8625 $rm -f fd_set*
8626
8627 : see if fgetpos exists
8628 set fgetpos d_fgetpos
8629 eval $inlibc
8630
8631
8632 if $test X"$use64bits" = X"$define"; then
8633         : see if fgetpos64 exists
8634         set fgetpos64 d_fgetpos64
8635         eval $inlibc
8636
8637         : see if fopen64 exists
8638         set freopen64 d_fopen64
8639         eval $inlibc
8640
8641         : see if freopen64 exists
8642         set freopen64 d_freopen64
8643         eval $inlibc
8644
8645         : see if fseek64 exists
8646         set fseek64 d_fseek64
8647         eval $inlibc
8648
8649         : see if fseeko64 exists
8650         set fseeko64 d_fseeko64
8651         eval $inlibc
8652
8653         : see if fsetpos64 exists
8654         set fsetpos64 d_fsetpos64
8655         eval $inlibc
8656
8657         : see if ftell64 exists
8658         set ftell64 d_ftell64
8659         eval $inlibc
8660
8661         : see if ftello64 exists
8662         set ftello64 d_ftello64
8663         eval $inlibc
8664
8665         : see if tmpfile64 exists
8666         set tmpfile64 d_tmpfile64
8667         eval $inlibc
8668 else
8669         val="$undef"
8670         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8671         do
8672                 set $xxx
8673                 eval $setvar
8674         done
8675 fi
8676
8677 : see if flock exists
8678 set flock d_flock
8679 eval $inlibc
8680
8681 : see if fork exists
8682 set fork d_fork
8683 eval $inlibc
8684
8685 : see if pathconf exists
8686 set pathconf d_pathconf
8687 eval $inlibc
8688
8689 : see if fpathconf exists
8690 set fpathconf d_fpathconf
8691 eval $inlibc
8692
8693 : see if fseeko exists
8694 set fseeko d_fseeko
8695 eval $inlibc
8696
8697 : see if fsetpos exists
8698 set fsetpos d_fsetpos
8699 eval $inlibc
8700
8701 : see if this is a sys/param system
8702 set sys/param.h i_sysparam
8703 eval $inhdr
8704
8705 : see if this is a sys/mount.h system
8706 set sys/mount.h i_sysmount
8707 eval $inhdr
8708
8709
8710 : see if statfs exists
8711 set statfs d_statfs
8712 eval $inlibc
8713
8714 : see if fstatfs exists
8715 set fstatfs d_fstatfs
8716 eval $inlibc
8717
8718 : see if statfs knows about mount flags
8719 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8720 eval $hasfield
8721
8722
8723 : see if statvfs exists
8724 set statvfs d_statvfs
8725 eval $inlibc
8726
8727 : see if fstatvfs exists
8728 set fstatvfs d_fstatvfs
8729 eval $inlibc
8730
8731
8732 : see if ftello exists
8733 set ftello d_ftello
8734 eval $inlibc
8735
8736 : see if getgrent exists
8737 set getgrent d_getgrent
8738 eval $inlibc
8739
8740 : see if gethostbyaddr exists
8741 set gethostbyaddr d_gethbyaddr
8742 eval $inlibc
8743
8744 : see if gethostbyname exists
8745 set gethostbyname d_gethbyname
8746 eval $inlibc
8747
8748 : see if gethostent exists
8749 set gethostent d_gethent
8750 eval $inlibc
8751
8752 : see how we will look up host name
8753 echo " "
8754 call=''
8755 if set gethostname val -f d_gethname; eval $csym; $val; then
8756         echo 'gethostname() found.' >&4
8757         d_gethname="$define"
8758         call=gethostname
8759 fi
8760 if set uname val -f d_uname; eval $csym; $val; then
8761         if ./xenix; then
8762                 $cat <<'EOM'
8763 uname() was found, but you're running xenix, and older versions of xenix
8764 have a broken uname(). If you don't really know whether your xenix is old
8765 enough to have a broken system call, use the default answer.
8766
8767 EOM
8768                 dflt=y
8769                 case "$d_uname" in
8770                 "$define") dflt=n;;
8771                 esac
8772                 rp='Is your uname() broken?'
8773                 . ./myread
8774                 case "$ans" in
8775                 n*) d_uname="$define"; call=uname;;
8776                 esac
8777         else
8778                 echo 'uname() found.' >&4
8779                 d_uname="$define"
8780                 case "$call" in
8781                 '') call=uname ;;
8782                 esac
8783         fi
8784 fi
8785 case "$d_gethname" in
8786 '') d_gethname="$undef";;
8787 esac
8788 case "$d_uname" in
8789 '') d_uname="$undef";;
8790 esac
8791 case "$d_uname$d_gethname" in
8792 *define*)
8793         dflt=n
8794         cat <<EOM
8795  
8796 Every now and then someone has a $call() that lies about the hostname
8797 but can't be fixed for political or economic reasons.  If you wish, I can
8798 pretend $call() isn't there and maybe compute hostname at run-time
8799 thanks to the '$phostname' command.
8800
8801 EOM
8802         rp="Shall I ignore $call() from now on?"
8803         . ./myread
8804         case "$ans" in
8805         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8806         esac;;
8807 esac
8808 case "$phostname" in
8809 '') aphostname='';;
8810 *) case "$aphostname" in
8811         /*) ;;
8812         *) set X $phostname
8813                 shift
8814                 file=$1
8815                 shift
8816                 file=`./loc $file $file $pth`
8817                 aphostname=`echo $file $*`
8818                 ;;
8819         esac
8820         ;;
8821 esac
8822 case "$d_uname$d_gethname" in
8823 *define*) ;;
8824 *)
8825         case "$phostname" in
8826         '')
8827                 echo "There will be no way for $package to get your hostname." >&4;;
8828         *)
8829         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8830                 ;;
8831         esac;;
8832 esac
8833 case "$d_phostname" in
8834 '') d_phostname="$undef";;
8835 esac
8836
8837 : see if this is a netdb.h system
8838 set netdb.h i_netdb
8839 eval $inhdr
8840
8841 : see if prototypes for various gethostxxx netdb.h functions are available
8842 echo " "
8843 set d_gethostprotos gethostent $i_netdb netdb.h
8844 eval $hasproto
8845
8846 : see if getlogin exists
8847 set getlogin d_getlogin
8848 eval $inlibc
8849
8850 : see if getmntent exists
8851 set getmntent d_getmntent
8852 eval $inlibc
8853
8854 : see if getnetbyaddr exists
8855 set getnetbyaddr d_getnbyaddr
8856 eval $inlibc
8857
8858 : see if getnetbyname exists
8859 set getnetbyname d_getnbyname
8860 eval $inlibc
8861
8862 : see if getnetent exists
8863 set getnetent d_getnent
8864 eval $inlibc
8865
8866 : see if prototypes for various getnetxxx netdb.h functions are available
8867 echo " "
8868 set d_getnetprotos getnetent $i_netdb netdb.h
8869 eval $hasproto
8870
8871
8872 : see if getprotobyname exists
8873 set getprotobyname d_getpbyname
8874 eval $inlibc
8875
8876 : see if getprotobynumber exists
8877 set getprotobynumber d_getpbynumber
8878 eval $inlibc
8879
8880 : see if getprotoent exists
8881 set getprotoent d_getpent
8882 eval $inlibc
8883
8884 : see if getpgid exists
8885 set getpgid d_getpgid
8886 eval $inlibc
8887
8888 : see if getpgrp2 exists
8889 set getpgrp2 d_getpgrp2
8890 eval $inlibc
8891
8892 : see if getppid exists
8893 set getppid d_getppid
8894 eval $inlibc
8895
8896 : see if getpriority exists
8897 set getpriority d_getprior
8898 eval $inlibc
8899
8900 : see if prototypes for various getprotoxxx netdb.h functions are available
8901 echo " "
8902 set d_getprotoprotos getprotoent $i_netdb netdb.h
8903 eval $hasproto
8904
8905 : see if getpwent exists
8906 set getpwent d_getpwent
8907 eval $inlibc
8908
8909
8910 : see if getservbyname exists
8911 set getservbyname d_getsbyname
8912 eval $inlibc
8913
8914 : see if getservbyport exists
8915 set getservbyport d_getsbyport
8916 eval $inlibc
8917
8918 : see if getservent exists
8919 set getservent d_getsent
8920 eval $inlibc
8921
8922 : see if prototypes for various getservxxx netdb.h functions are available
8923 echo " "
8924 set d_getservprotos getservent $i_netdb netdb.h
8925 eval $hasproto
8926
8927 : see if getspent exists
8928 set getspent d_getspent
8929 eval $inlibc
8930
8931 : see if getspnam exists
8932 set getspnam d_getspnam
8933 eval $inlibc
8934
8935 : see if gettimeofday or ftime exists
8936 set gettimeofday d_gettimeod
8937 eval $inlibc
8938 case "$d_gettimeod" in
8939 "$undef")
8940         set ftime d_ftime 
8941         eval $inlibc
8942         ;;
8943 *)
8944         val="$undef"; set d_ftime; eval $setvar
8945         ;;
8946 esac
8947 case "$d_gettimeod$d_ftime" in
8948 "$undef$undef")
8949         echo " "
8950         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8951         ;;
8952 esac
8953
8954 : see if this is an grp system
8955 set grp.h i_grp
8956 eval $inhdr
8957
8958 case "$i_grp" in
8959 $define)
8960         xxx=`./findhdr grp.h`
8961         $cppstdin $cppflags $cppminus < $xxx >$$.h
8962
8963         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8964                 val="$define"
8965         else
8966                 val="$undef"
8967         fi
8968         set d_grpasswd
8969         eval $setvar
8970
8971         $rm -f $$.h
8972         ;;
8973 *)
8974         val="$undef";
8975         set d_grpasswd; eval $setvar
8976         ;;
8977 esac
8978
8979 : see if hasmntopt exists
8980 set hasmntopt d_hasmntopt
8981 eval $inlibc
8982
8983 : see if this is a netinet/in.h or sys/in.h system
8984 set netinet/in.h i_niin sys/in.h i_sysin
8985 eval $inhdr
8986
8987 : see if arpa/inet.h has to be included
8988 set arpa/inet.h i_arpainet
8989 eval $inhdr
8990
8991 : see if htonl --and friends-- exists
8992 val=''
8993 set htonl val
8994 eval $inlibc
8995
8996 : Maybe they are macros.
8997 case "$val" in
8998 $undef)
8999         $cat >htonl.c <<EOM
9000 #include <stdio.h>
9001 #include <sys/types.h>
9002 #$i_niin I_NETINET_IN
9003 #$i_sysin I_SYS_IN
9004 #$i_arpainet I_ARPA_INET
9005 #ifdef I_NETINET_IN
9006 #include <netinet/in.h>
9007 #endif
9008 #ifdef I_SYS_IN
9009 #include <sys/in.h>
9010 #endif
9011 #ifdef I_ARPA_INET
9012 #include <arpa/inet.h>
9013 #endif
9014 #ifdef htonl
9015 printf("Defined as a macro.");
9016 #endif
9017 EOM
9018         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9019         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9020                 val="$define"
9021                 echo "But it seems to be defined as a macro." >&4
9022         fi
9023         $rm -f htonl.?
9024         ;;
9025 esac
9026 set d_htonl
9027 eval $setvar
9028
9029 : see which of string.h or strings.h is needed
9030 echo " "
9031 strings=`./findhdr string.h`
9032 if $test "$strings" && $test -r "$strings"; then
9033         echo "Using <string.h> instead of <strings.h>." >&4
9034         val="$define"
9035 else
9036         val="$undef"
9037         strings=`./findhdr strings.h`
9038         if $test "$strings" && $test -r "$strings"; then
9039                 echo "Using <strings.h> instead of <string.h>." >&4
9040         else
9041                 echo "No string header found -- You'll surely have problems." >&4
9042         fi
9043 fi
9044 set i_string
9045 eval $setvar
9046 case "$i_string" in
9047 "$undef") strings=`./findhdr strings.h`;;
9048 *)        strings=`./findhdr string.h`;;
9049 esac
9050
9051 : index or strchr
9052 echo " "
9053 if set index val -f; eval $csym; $val; then
9054         if set strchr val -f d_strchr; eval $csym; $val; then
9055                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9056                         val="$define"
9057                         vali="$undef"
9058                         echo "strchr() found." >&4
9059                 else
9060                         val="$undef"
9061                         vali="$define"
9062                         echo "index() found." >&4
9063                 fi
9064         else
9065                 val="$undef"
9066                 vali="$define"
9067                 echo "index() found." >&4
9068         fi
9069 else
9070         if set strchr val -f d_strchr; eval $csym; $val; then
9071                 val="$define"
9072                 vali="$undef"
9073                 echo "strchr() found." >&4
9074         else
9075                 echo "No index() or strchr() found!" >&4
9076                 val="$undef"
9077                 vali="$undef"
9078         fi
9079 fi
9080 set d_strchr; eval $setvar
9081 val="$vali"
9082 set d_index; eval $setvar
9083
9084 : check whether inet_aton exists
9085 set inet_aton d_inetaton
9086 eval $inlibc
9087
9088 : Look for isascii
9089 echo " "
9090 $cat >isascii.c <<'EOCP'
9091 #include <stdio.h>
9092 #include <ctype.h>
9093 int main() {
9094         int c = 'A';
9095         if (isascii(c))
9096                 exit(0);
9097         else
9098                 exit(1);
9099 }
9100 EOCP
9101 set isascii
9102 if eval $compile; then
9103         echo "isascii() found." >&4
9104         val="$define"
9105 else
9106         echo "isascii() NOT found." >&4
9107         val="$undef"
9108 fi
9109 set d_isascii
9110 eval $setvar
9111 $rm -f isascii*
9112
9113 : see if killpg exists
9114 set killpg d_killpg
9115 eval $inlibc
9116
9117 : see if lchown exists
9118 echo " "
9119 $cat > try.c <<'EOCP'
9120 /* System header to define __stub macros and hopefully few prototypes,
9121     which can conflict with char lchown(); below.  */
9122 #include <assert.h>
9123 /* Override any gcc2 internal prototype to avoid an error.  */
9124 /* We use char because int might match the return type of a gcc2
9125    builtin and then its argument prototype would still apply.  */
9126 char lchown();
9127 int main() {
9128     /*  The GNU C library defines this for functions which it implements
9129         to always fail with ENOSYS.  Some functions are actually named
9130         something starting with __ and the normal name is an alias.  */
9131 #if defined (__stub_lchown) || defined (__stub___lchown)
9132 choke me
9133 #else
9134 lchown();
9135 #endif
9136 ; return 0; }
9137 EOCP
9138 set try
9139 if eval $compile; then
9140     $echo "lchown() found." >&4
9141     val="$define"
9142 else
9143     $echo "lchown() NOT found." >&4
9144     val="$undef"
9145 fi
9146 set d_lchown
9147 eval $setvar
9148
9149 : see if link exists
9150 set link d_link
9151 eval $inlibc
9152
9153 : see if localeconv exists
9154 set localeconv d_locconv
9155 eval $inlibc
9156
9157 : see if lockf exists
9158 set lockf d_lockf
9159 eval $inlibc
9160
9161 : see if lstat exists
9162 set lstat d_lstat
9163 eval $inlibc
9164
9165 : see if madvise exists
9166 set madvise d_madvise
9167 eval $inlibc
9168
9169 : see if mblen exists
9170 set mblen d_mblen
9171 eval $inlibc
9172
9173 : see if mbstowcs exists
9174 set mbstowcs d_mbstowcs
9175 eval $inlibc
9176
9177 : see if mbtowc exists
9178 set mbtowc d_mbtowc
9179 eval $inlibc
9180
9181 : see if memchr exists
9182 set memchr d_memchr
9183 eval $inlibc
9184
9185 : see if memcmp exists
9186 set memcmp d_memcmp
9187 eval $inlibc
9188
9189 : see if memcpy exists
9190 set memcpy d_memcpy
9191 eval $inlibc
9192
9193 : see if memmove exists
9194 set memmove d_memmove
9195 eval $inlibc
9196
9197 : see if memset exists
9198 set memset d_memset
9199 eval $inlibc
9200
9201 : see if mkdir exists
9202 set mkdir d_mkdir
9203 eval $inlibc
9204
9205 : see if mkfifo exists
9206 set mkfifo d_mkfifo
9207 eval $inlibc
9208
9209 : see if mktime exists
9210 set mktime d_mktime
9211 eval $inlibc
9212
9213 : see if this is a sys/mman.h system
9214 set sys/mman.h i_sysmman
9215 eval $inhdr
9216
9217 : see if mmap exists
9218 set mmap d_mmap
9219 eval $inlibc
9220 : see what shmat returns
9221 : default to something harmless
9222 mmaptype='void *'
9223 case "$i_sysmman$d_mmap" in
9224 "$define$define")
9225         $cat >mmap.c <<'END'
9226 #include <sys/mman.h>
9227 void *mmap();
9228 END
9229         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9230                 mmaptype='void *'
9231         else
9232                 mmaptype='caddr_t'
9233         fi
9234         echo "and it returns ($mmaptype)." >&4
9235         ;;
9236 esac
9237
9238
9239
9240 : see if mprotect exists
9241 set mprotect d_mprotect
9242 eval $inlibc
9243
9244 : see if msgctl exists
9245 set msgctl d_msgctl
9246 eval $inlibc
9247
9248 : see if msgget exists
9249 set msgget d_msgget
9250 eval $inlibc
9251
9252 : see if msgsnd exists
9253 set msgsnd d_msgsnd
9254 eval $inlibc
9255
9256 : see if msgrcv exists
9257 set msgrcv d_msgrcv
9258 eval $inlibc
9259
9260 : see how much of the 'msg*(2)' library is present.
9261 h_msg=true
9262 echo " "
9263 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9264 *"$undef"*) h_msg=false;;
9265 esac
9266 case "$osname" in
9267 freebsd)
9268     case "`ipcs 2>&1`" in
9269     "SVID messages"*"not configured"*)
9270         echo "Your $osname does not have the msg*(2) configured." >&4
9271         h_msg=false
9272         val="$undef"
9273         set msgctl d_msgctl
9274         eval $setvar
9275         set msgget d_msgget
9276         eval $setvar
9277         set msgsnd d_msgsnd
9278         eval $setvar
9279         set msgrcv d_msgrcv
9280         eval $setvar
9281         ;;
9282     esac
9283     ;;
9284 esac
9285 : we could also check for sys/ipc.h ...
9286 if $h_msg && $test `./findhdr sys/msg.h`; then
9287         echo "You have the full msg*(2) library." >&4
9288         val="$define"
9289 else
9290         echo "You don't have the full msg*(2) library." >&4
9291         val="$undef"
9292 fi
9293 set d_msg
9294 eval $setvar
9295
9296 : see if msync exists
9297 set msync d_msync
9298 eval $inlibc
9299
9300 : see if munmap exists
9301 set munmap d_munmap
9302 eval $inlibc
9303
9304 : see if nice exists
9305 set nice d_nice
9306 eval $inlibc
9307
9308 : see if POSIX threads are available
9309 if test "X$usethreads" = "X$define"; then
9310         set pthread.h i_pthread
9311         eval $inhdr
9312 else
9313         i_pthread="$undef"
9314 fi
9315
9316
9317
9318 : how to create joinable pthreads
9319 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9320         echo " "
9321         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9322         $cat >try.c <<'EOCP'
9323 #include <pthread.h>
9324 int main() {
9325     int detachstate = JOINABLE;
9326 }
9327 EOCP
9328         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9329         if eval $compile; then
9330                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9331                 val="$undef" # Yes, undef.
9332                 set d_old_pthread_create_joinable
9333                 eval $setvar
9334                 val=""
9335                 set old_pthread_create_joinable
9336                 eval $setvar
9337         else
9338                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9339                 if eval $compile; then
9340                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9341                         val="$define"
9342                         set d_old_pthread_create_joinable
9343                         eval $setvar
9344                         val=PTHREAD_CREATE_UNDETACHED
9345                         set old_pthread_create_joinable
9346                         eval $setvar
9347                 else            
9348                         set try -DJOINABLE=__UNDETACHED
9349                         if eval $compile; then
9350                                 echo "You seem to use __UNDETACHED." >&4
9351                                 val="$define"
9352                                 set d_old_pthread_create_joinable
9353                                 eval $setvar
9354                                 val=__UNDETACHED
9355                                 set old_pthread_create_joinable
9356                                 eval $setvar
9357                         else
9358                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9359                                 val="$define"
9360                                 set d_old_pthread_create_joinable
9361                                 eval $setvar
9362                                 val=0
9363                                 set old_pthread_create_joinable
9364                                 eval $setvar
9365                         fi
9366                 fi
9367         fi
9368         $rm -f try try.*
9369 else
9370     d_old_pthread_create_joinable="$undef"
9371     old_pthread_create_joinable=""
9372 fi
9373
9374 : see if pause exists
9375 set pause d_pause
9376 eval $inlibc
9377
9378 : see if pipe exists
9379 set pipe d_pipe
9380 eval $inlibc
9381
9382 : see if poll exists
9383 set poll d_poll
9384 eval $inlibc
9385
9386
9387 : see whether the various POSIXish _yields exist
9388 $cat >try.c <<EOP
9389 #include <pthread.h>
9390 #include <stdio.h>
9391 int main() {
9392 #ifdef SCHED_YIELD
9393         sched_yield();
9394 #else
9395 #ifdef PTHREAD_YIELD
9396         pthread_yield();
9397 #else
9398 #ifdef PTHREAD_YIELD_NULL
9399         pthread_yield(NULL);
9400 #endif
9401 #endif
9402 #endif
9403 }
9404 EOP
9405 : see if sched_yield exists
9406 set try -DSCHED_YIELD
9407 if eval $compile; then
9408     val="$define"
9409     sched_yield='sched_yield()'
9410 else
9411     val="$undef"
9412 fi
9413 case "$usethreads" in
9414 $define)
9415         case "$val" in
9416         $define) echo 'sched_yield() found.' >&4        ;;
9417         *)       echo 'sched_yield() NOT found.' >&4    ;;
9418         esac
9419 esac
9420 set d_sched_yield
9421 eval $setvar
9422
9423 : see if pthread_yield exists
9424 set try -DPTHREAD_YIELD
9425 if eval $compile; then
9426     val="$define"
9427     case "$sched_yield" in
9428     '') sched_yield='pthread_yield()' ;;
9429     esac
9430 else
9431     set try -DPTHREAD_YIELD_NULL
9432     if eval $compile; then
9433         val="$define"
9434         case "$sched_yield" in
9435         '') sched_yield='pthread_yield(NULL)' ;;
9436         esac
9437     else
9438         val="$undef"
9439     fi
9440 fi
9441 case "$usethreads" in
9442 $define)
9443         case "$val" in
9444         $define) echo 'pthread_yield() found.' >&4      ;;
9445         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9446         esac
9447         ;;
9448 esac
9449 set d_pthread_yield
9450 eval $setvar
9451
9452 case "$sched_yield" in
9453 '') sched_yield=undef ;;
9454 esac
9455
9456 $rm -f try try.*
9457
9458 : see if this is a pwd.h system
9459 set pwd.h i_pwd
9460 eval $inhdr
9461
9462 case "$i_pwd" in
9463 $define)
9464         xxx=`./findhdr pwd.h`
9465         $cppstdin $cppflags $cppminus < $xxx >$$.h
9466
9467         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9468                 val="$define"
9469         else
9470                 val="$undef"
9471         fi
9472         set d_pwquota
9473         eval $setvar
9474
9475         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9476                 val="$define"
9477         else
9478                 val="$undef"
9479         fi
9480         set d_pwage
9481         eval $setvar
9482
9483         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9484                 val="$define"
9485         else
9486                 val="$undef"
9487         fi
9488         set d_pwchange
9489         eval $setvar
9490
9491         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9492                 val="$define"
9493         else
9494                 val="$undef"
9495         fi
9496         set d_pwclass
9497         eval $setvar
9498
9499         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9500                 val="$define"
9501         else
9502                 val="$undef"
9503         fi
9504         set d_pwexpire
9505         eval $setvar
9506
9507         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9508                 val="$define"
9509         else
9510                 val="$undef"
9511         fi
9512         set d_pwcomment
9513         eval $setvar
9514
9515         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9516                 val="$define"
9517         else
9518                 val="$undef"
9519         fi
9520         set d_pwgecos
9521         eval $setvar
9522
9523         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9524                 val="$define"
9525         else
9526                 val="$undef"
9527         fi
9528         set d_pwpasswd
9529         eval $setvar
9530
9531         $rm -f $$.h
9532         ;;
9533 *)
9534         val="$undef"; 
9535         set d_pwquota; eval $setvar
9536         set d_pwage; eval $setvar
9537         set d_pwchange; eval $setvar
9538         set d_pwclass; eval $setvar
9539         set d_pwexpire; eval $setvar
9540         set d_pwcomment; eval $setvar
9541         set d_pwgecos; eval $setvar
9542         set d_pwpasswd; eval $setvar
9543         ;;
9544 esac
9545
9546 : see if readdir and friends exist
9547 set readdir d_readdir
9548 eval $inlibc
9549 set seekdir d_seekdir
9550 eval $inlibc
9551 set telldir d_telldir
9552 eval $inlibc
9553 set rewinddir d_rewinddir
9554 eval $inlibc
9555
9556 : see if readlink exists
9557 set readlink d_readlink
9558 eval $inlibc
9559
9560 : see if readv exists
9561 set readv d_readv
9562 eval $inlibc
9563
9564 : see if rename exists
9565 set rename d_rename
9566 eval $inlibc
9567
9568 : see if rmdir exists
9569 set rmdir d_rmdir
9570 eval $inlibc
9571
9572 : see if memory.h is available.
9573 val=''
9574 set memory.h val
9575 eval $inhdr
9576
9577 : See if it conflicts with string.h
9578 case "$val" in
9579 $define)
9580         case "$strings" in
9581         '') ;;
9582         *)
9583                 $cppstdin $cppflags $cppminus < $strings > mem.h
9584                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9585                         echo " "
9586                         echo "We won't be including <memory.h>."
9587                         val="$undef"
9588                 fi
9589                 $rm -f mem.h
9590                 ;;
9591         esac
9592 esac
9593 set i_memory
9594 eval $setvar
9595
9596 : can bcopy handle overlapping blocks?
9597 val="$undef"
9598 case "$d_bcopy" in
9599 "$define")
9600         echo " "
9601         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9602         $cat >try.c <<EOCP
9603 #$i_memory I_MEMORY
9604 #$i_stdlib I_STDLIB
9605 #$i_string I_STRING
9606 #$i_unistd I_UNISTD
9607 EOCP
9608         $cat >>try.c <<'EOCP'
9609 #include <stdio.h>
9610 #ifdef I_MEMORY
9611 #  include <memory.h>
9612 #endif
9613 #ifdef I_STDLIB
9614 #  include <stdlib.h>
9615 #endif
9616 #ifdef I_STRING
9617 #  include <string.h>
9618 #else
9619 #  include <strings.h>
9620 #endif
9621 #ifdef I_UNISTD
9622 #  include <unistd.h>  /* Needed for NetBSD */
9623 #endif
9624 int main()
9625 {
9626 char buf[128], abc[128];
9627 char *b;
9628 int len;
9629 int off;
9630 int align;
9631
9632 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9633
9634 for (align = 7; align >= 0; align--) {
9635         for (len = 36; len; len--) {
9636                 b = buf+align;
9637                 bcopy(abc, b, len);
9638                 for (off = 1; off <= len; off++) {
9639                         bcopy(b, b+off, len);
9640                         bcopy(b+off, b, len);
9641                         if (bcmp(b, abc, len))
9642                                 exit(1);
9643                 }
9644         }
9645 }
9646 exit(0);
9647 }
9648 EOCP
9649         set try
9650         if eval $compile_ok; then
9651                 if ./try 2>/dev/null; then
9652                         echo "Yes, it can."
9653                         val="$define"
9654                 else
9655                         echo "It can't, sorry."
9656                         case "$d_memmove" in
9657                         "$define") echo "But that's Ok since you have memmove()." ;;
9658                         esac
9659                 fi
9660         else
9661                 echo "(I can't compile the test program, so we'll assume not...)"
9662                 case "$d_memmove" in
9663                 "$define") echo "But that's Ok since you have memmove()." ;;
9664                 esac
9665         fi
9666         ;;
9667 esac
9668 $rm -f try.* try core
9669 set d_safebcpy
9670 eval $setvar
9671
9672 : can memcpy handle overlapping blocks?
9673 val="$undef"
9674 case "$d_memcpy" in
9675 "$define")
9676         echo " "
9677         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9678         $cat >try.c <<EOCP
9679 #$i_memory I_MEMORY
9680 #$i_stdlib I_STDLIB
9681 #$i_string I_STRING
9682 #$i_unistd I_UNISTD
9683 EOCP
9684         $cat >>try.c <<'EOCP'
9685 #include <stdio.h>
9686 #ifdef I_MEMORY
9687 #  include <memory.h>
9688 #endif
9689 #ifdef I_STDLIB
9690 #  include <stdlib.h>
9691 #endif
9692 #ifdef I_STRING
9693 #  include <string.h>
9694 #else
9695 #  include <strings.h>
9696 #endif
9697 #ifdef I_UNISTD
9698 #  include <unistd.h>  /* Needed for NetBSD */
9699 #endif
9700 int main()
9701 {
9702 char buf[128], abc[128];
9703 char *b;
9704 int len;
9705 int off;
9706 int align;
9707
9708 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9709    try to store the string in read-only memory. */
9710 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9711
9712 for (align = 7; align >= 0; align--) {
9713         for (len = 36; len; len--) {
9714                 b = buf+align;
9715                 memcpy(b, abc, len);
9716                 for (off = 1; off <= len; off++) {
9717                         memcpy(b+off, b, len);
9718                         memcpy(b, b+off, len);
9719                         if (memcmp(b, abc, len))
9720                                 exit(1);
9721                 }
9722         }
9723 }
9724 exit(0);
9725 }
9726 EOCP
9727         set try
9728         if eval $compile_ok; then
9729                 if ./try 2>/dev/null; then
9730                         echo "Yes, it can."
9731                         val="$define"
9732                 else
9733                         echo "It can't, sorry."
9734                         case "$d_memmove" in
9735                         "$define") echo "But that's Ok since you have memmove()." ;;
9736                         esac
9737                 fi
9738         else
9739                 echo "(I can't compile the test program, so we'll assume not...)"
9740                 case "$d_memmove" in
9741                 "$define") echo "But that's Ok since you have memmove()." ;;
9742                 esac
9743         fi
9744         ;;
9745 esac
9746 $rm -f try.* try core
9747 set d_safemcpy
9748 eval $setvar
9749
9750 : can memcmp be trusted to compare relative magnitude?
9751 val="$undef"
9752 case "$d_memcmp" in
9753 "$define")
9754         echo " "
9755         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9756         $cat >try.c <<EOCP
9757 #$i_memory I_MEMORY
9758 #$i_stdlib I_STDLIB
9759 #$i_string I_STRING
9760 #$i_unistd I_UNISTD
9761 EOCP
9762         $cat >>try.c <<'EOCP'
9763 #include <stdio.h>
9764 #ifdef I_MEMORY
9765 #  include <memory.h>
9766 #endif
9767 #ifdef I_STDLIB
9768 #  include <stdlib.h>
9769 #endif
9770 #ifdef I_STRING
9771 #  include <string.h>
9772 #else
9773 #  include <strings.h>
9774 #endif
9775 #ifdef I_UNISTD
9776 #  include <unistd.h>  /* Needed for NetBSD */
9777 #endif
9778 int main()
9779 {
9780 char a = -1;
9781 char b = 0;
9782 if ((a < b) && memcmp(&a, &b, 1) < 0)
9783         exit(1);
9784 exit(0);
9785 }
9786 EOCP
9787         set try
9788         if eval $compile_ok; then
9789                 if ./try 2>/dev/null; then
9790                         echo "Yes, it can."
9791                         val="$define"
9792                 else
9793                         echo "No, it can't (it uses signed chars)."
9794                 fi
9795         else
9796                 echo "(I can't compile the test program, so we'll assume not...)"
9797         fi
9798         ;;
9799 esac
9800 $rm -f try.* try core
9801 set d_sanemcmp
9802 eval $setvar
9803
9804 : see if select exists
9805 set select d_select
9806 eval $inlibc
9807
9808 : see if semctl exists
9809 set semctl d_semctl
9810 eval $inlibc
9811
9812 : see if semget exists
9813 set semget d_semget
9814 eval $inlibc
9815
9816 : see if semop exists
9817 set semop d_semop
9818 eval $inlibc
9819
9820 : see how much of the 'sem*(2)' library is present.
9821 h_sem=true
9822 echo " "
9823 case "$d_semctl$d_semget$d_semop" in
9824 *"$undef"*) h_sem=false;;
9825 esac
9826 case "$osname" in
9827 freebsd)
9828     case "`ipcs 2>&1`" in
9829     "SVID messages"*"not configured"*)
9830         echo "Your $osname does not have the sem*(2) configured." >&4
9831         h_sem=false
9832         val="$undef"
9833         set semctl d_semctl
9834         eval $setvar
9835         set semget d_semget
9836         eval $setvar
9837         set semop d_semop
9838         eval $setvar
9839         ;;
9840     esac
9841     ;;
9842 esac
9843 : we could also check for sys/ipc.h ...
9844 if $h_sem && $test `./findhdr sys/sem.h`; then
9845         echo "You have the full sem*(2) library." >&4
9846         val="$define"
9847 else
9848         echo "You don't have the full sem*(2) library." >&4
9849         val="$undef"
9850 fi
9851 set d_sem
9852 eval $setvar
9853
9854 : see whether sys/sem.h defines union semun
9855 echo " "
9856 $cat > try.c <<'END'
9857 #include <sys/types.h>
9858 #include <sys/ipc.h>
9859 #include <sys/sem.h>
9860 int main () { union semun semun; semun.buf = 0; }
9861 END
9862 set try
9863 if eval $compile; then
9864     echo "You have union semun in <sys/sem.h>." >&4
9865     val="$define"
9866 else
9867     echo "You do not have union semun in <sys/sem.h>." >&4
9868     val="$undef"
9869 fi
9870 $rm -f try try.c try.h
9871 set d_union_semun
9872 eval $setvar
9873
9874 : see how to do semctl IPC_STAT
9875 case "$d_sem" in
9876 $define)
9877     : see whether semctl IPC_STAT can use union semun
9878     echo " "
9879     $cat > try.h <<END
9880 #ifndef S_IRUSR
9881 #   ifdef S_IREAD
9882 #       define S_IRUSR S_IREAD
9883 #       define S_IWUSR S_IWRITE
9884 #       define S_IXUSR S_IEXEC
9885 #   else
9886 #       define S_IRUSR 0400
9887 #       define S_IWUSR 0200
9888 #       define S_IXUSR 0100
9889 #   endif
9890 #   define S_IRGRP (S_IRUSR>>3)
9891 #   define S_IWGRP (S_IWUSR>>3)
9892 #   define S_IXGRP (S_IXUSR>>3)
9893 #   define S_IROTH (S_IRUSR>>6)
9894 #   define S_IWOTH (S_IWUSR>>6)
9895 #   define S_IXOTH (S_IXUSR>>6)
9896 #endif
9897 #ifndef S_IRWXU
9898 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9899 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9900 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9901 #endif
9902 END
9903
9904     $cat > try.c <<END
9905 #include <sys/types.h>
9906 #include <sys/ipc.h>
9907 #include <sys/sem.h>
9908 #include <sys/stat.h>
9909 #include <stdio.h>
9910 #include <errno.h>
9911 #include "try.h"
9912 #ifndef errno
9913 extern int errno;
9914 #endif
9915 #$d_union_semun HAS_UNION_SEMUN
9916 int main() {
9917     union semun
9918 #ifndef HAS_UNION_SEMUN
9919     {
9920         int val;
9921         struct semid_ds *buf;
9922         unsigned short *array;
9923     }
9924 #endif
9925     arg;
9926     int sem, st;
9927
9928 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9929     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9930     if (sem > -1) {
9931         struct semid_ds argbuf;
9932         arg.buf = &argbuf;
9933 #       ifdef IPC_STAT
9934         st = semctl(sem, 0, IPC_STAT, arg);
9935         if (st == 0)
9936             printf("semun\n");
9937         else
9938 #       endif /* IPC_STAT */
9939             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9940 #       ifdef IPC_RMID
9941         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9942 #       endif /* IPC_RMID */
9943             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9944     } else
9945 #endif /* IPC_PRIVATE && ... */
9946         printf("semget failed: errno = %d\n", errno);
9947   return 0;
9948 }
9949 END
9950     val="$undef"
9951     set try
9952     if eval $compile; then
9953         xxx=`./try`
9954         case "$xxx" in
9955         semun) val="$define" ;;
9956         esac
9957     fi
9958     $rm -f try try.c
9959     set d_semctl_semun
9960     eval $setvar
9961     case "$d_semctl_semun" in
9962     $define)
9963         echo "You can use union semun for semctl IPC_STAT." >&4
9964         also='also'
9965         ;;
9966     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9967         also=''
9968         ;;
9969     esac
9970
9971     : see whether semctl IPC_STAT can use struct semid_ds pointer
9972     $cat > try.c <<'END'
9973 #include <sys/types.h>
9974 #include <sys/ipc.h>
9975 #include <sys/sem.h>
9976 #include <sys/stat.h>
9977 #include "try.h"
9978 #include <stdio.h>
9979 #include <errno.h>
9980 #ifndef errno
9981 extern int errno;
9982 #endif
9983 int main() {
9984     struct semid_ds arg;
9985     int sem, st;
9986
9987 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9988     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9989     if (sem > -1) {
9990 #       ifdef IPC_STAT
9991         st = semctl(sem, 0, IPC_STAT, &arg);
9992         if (st == 0)
9993             printf("semid_ds\n");
9994         else
9995 #       endif /* IPC_STAT */
9996             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9997 #       ifdef IPC_RMID
9998         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9999 #       endif /* IPC_RMID */
10000             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10001     } else
10002 #endif /* IPC_PRIVATE && ... */
10003         printf("semget failed: errno = %d\n", errno);
10004
10005     return 0;
10006 }
10007 END
10008     val="$undef"
10009     set try
10010     if eval $compile; then
10011         xxx=`./try`
10012         case "$xxx" in
10013         semid_ds) val="$define" ;;
10014         esac
10015     fi
10016     $rm -f try try.c
10017     set d_semctl_semid_ds
10018     eval $setvar
10019     case "$d_semctl_semid_ds" in
10020     $define)
10021         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10022         ;;
10023     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10024         ;;
10025     esac
10026     $rm -f try.h
10027     ;;
10028 *)  val="$undef"
10029
10030     # We do not have the full sem*(2) library, so assume we can not
10031     # use either.
10032
10033     set d_semctl_semun
10034     eval $setvar
10035
10036     set d_semctl_semid_ds
10037     eval $setvar
10038     ;;
10039 esac
10040
10041 : see if setegid exists
10042 set setegid d_setegid
10043 eval $inlibc
10044
10045 : see if seteuid exists
10046 set seteuid d_seteuid
10047 eval $inlibc
10048
10049 : see if setgrent exists
10050 set setgrent d_setgrent
10051 eval $inlibc
10052
10053 : see if sethostent exists
10054 set sethostent d_sethent
10055 eval $inlibc
10056
10057 : see if setlinebuf exists
10058 set setlinebuf d_setlinebuf
10059 eval $inlibc
10060
10061 : see if setlocale exists
10062 set setlocale d_setlocale
10063 eval $inlibc
10064
10065 : see if setnetent exists
10066 set setnetent d_setnent
10067 eval $inlibc
10068
10069 : see if setprotoent exists
10070 set setprotoent d_setpent
10071 eval $inlibc
10072
10073 : see if setpgid exists
10074 set setpgid d_setpgid
10075 eval $inlibc
10076
10077 : see if setpgrp2 exists
10078 set setpgrp2 d_setpgrp2
10079 eval $inlibc
10080
10081 : see if setpriority exists
10082 set setpriority d_setprior
10083 eval $inlibc
10084
10085 : see if setpwent exists
10086 set setpwent d_setpwent
10087 eval $inlibc
10088
10089 : see if setregid exists
10090 set setregid d_setregid
10091 eval $inlibc
10092 set setresgid d_setresgid
10093 eval $inlibc
10094
10095 : see if setreuid exists
10096 set setreuid d_setreuid
10097 eval $inlibc
10098 set setresuid d_setresuid
10099 eval $inlibc
10100
10101 : see if setrgid exists
10102 set setrgid d_setrgid
10103 eval $inlibc
10104
10105 : see if setruid exists
10106 set setruid d_setruid
10107 eval $inlibc
10108
10109 : see if setservent exists
10110 set setservent d_setsent
10111 eval $inlibc
10112
10113 : see if setsid exists
10114 set setsid d_setsid
10115 eval $inlibc
10116
10117 : see if setspent exists
10118 set setspent d_setspent
10119 eval $inlibc
10120
10121 : see if setvbuf exists
10122 set setvbuf d_setvbuf
10123 eval $inlibc
10124
10125 : see if sfio.h is available
10126 set sfio.h i_sfio
10127 eval $inhdr
10128
10129
10130 : see if sfio library is available
10131 case "$i_sfio" in
10132 $define)
10133         val=''
10134         set sfreserve val
10135         eval $inlibc
10136         ;;
10137 *)
10138         val="$undef"
10139         ;;
10140 esac
10141 : Ok, but do we want to use it.
10142 case "$val" in
10143 $define)
10144         case "$usesfio" in
10145         true|$define|[yY]*) dflt='y';;
10146         *) dflt='n';;
10147         esac
10148         echo "$package can use the sfio library, but it is experimental."
10149         rp="You seem to have sfio available, do you want to try using it?"
10150         . ./myread
10151         case "$ans" in
10152         y|Y) ;;
10153         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10154                 val="$undef"
10155                 : Remove sfio from list of libraries to use
10156                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10157                 shift
10158                 libs="$*"
10159                 echo "libs = $libs" >&4
10160                 ;;
10161         esac
10162         ;;
10163 *)      case "$usesfio" in
10164         true|$define|[yY]*)
10165                 echo "Sorry, cannot find sfio on this machine" >&4
10166                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10167                 ;;
10168         esac
10169         ;;
10170 esac
10171 set d_sfio
10172 eval $setvar
10173 case "$d_sfio" in
10174 $define) usesfio='true';;
10175 *) usesfio='false';;
10176 esac
10177
10178 : see if shmctl exists
10179 set shmctl d_shmctl
10180 eval $inlibc
10181
10182 : see if shmget exists
10183 set shmget d_shmget
10184 eval $inlibc
10185
10186 : see if shmat exists
10187 set shmat d_shmat
10188 eval $inlibc
10189 : see what shmat returns
10190 case "$d_shmat" in
10191 "$define")
10192         $cat >shmat.c <<'END'
10193 #include <sys/shm.h>
10194 void *shmat();
10195 END
10196         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10197                 shmattype='void *'
10198         else
10199                 shmattype='char *'
10200         fi
10201         echo "and it returns ($shmattype)." >&4
10202         : see if a prototype for shmat is available
10203         xxx=`./findhdr sys/shm.h`
10204         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10205         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10206                 val="$define"
10207         else
10208                 val="$undef"
10209         fi
10210         $rm -f shmat.[co]
10211         ;;
10212 *)
10213         val="$undef"
10214         ;;
10215 esac
10216 set d_shmatprototype
10217 eval $setvar
10218
10219 : see if shmdt exists
10220 set shmdt d_shmdt
10221 eval $inlibc
10222
10223 : see how much of the 'shm*(2)' library is present.
10224 h_shm=true
10225 echo " "
10226 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10227 *"$undef"*) h_shm=false;;
10228 esac
10229 case "$osname" in
10230 freebsd)
10231     case "`ipcs 2>&1`" in
10232     "SVID shared memory"*"not configured"*)
10233         echo "Your $osname does not have the shm*(2) configured." >&4
10234         h_shm=false
10235         val="$undef"
10236         set shmctl d_shmctl
10237         evat $setvar
10238         set shmget d_shmget
10239         evat $setvar
10240         set shmat d_shmat
10241         evat $setvar
10242         set shmdt d_shmdt
10243         evat $setvar
10244         ;;
10245     esac
10246     ;;
10247 esac
10248 : we could also check for sys/ipc.h ...
10249 if $h_shm && $test `./findhdr sys/shm.h`; then
10250         echo "You have the full shm*(2) library." >&4
10251         val="$define"
10252 else
10253         echo "You don't have the full shm*(2) library." >&4
10254         val="$undef"
10255 fi
10256 set d_shm
10257 eval $setvar
10258
10259 echo " "
10260 : see if we have sigaction
10261 if set sigaction val -f d_sigaction; eval $csym; $val; then
10262         echo 'sigaction() found.' >&4
10263         $cat > try.c <<'EOP'
10264 #include <stdio.h>
10265 #include <sys/types.h>
10266 #include <signal.h>
10267 int main()
10268 {
10269     struct sigaction act, oact;
10270 }
10271 EOP
10272         set try
10273         if eval $compile_ok; then
10274                 val="$define"
10275         else
10276                 echo "But you don't seem to have a useable struct sigaction." >&4
10277                 val="$undef"
10278         fi
10279 else
10280         echo 'sigaction NOT found.' >&4
10281         val="$undef"
10282 fi
10283 set d_sigaction; eval $setvar
10284 $rm -f try try$_o try.c
10285
10286 : see if sigsetjmp exists
10287 echo " "
10288 case "$d_sigsetjmp" in
10289 '')
10290         $cat >try.c <<'EOP'
10291 #include <setjmp.h>
10292 sigjmp_buf env;
10293 int set = 1;
10294 int main()
10295 {
10296         if (sigsetjmp(env,1))
10297                 exit(set);
10298         set = 0;
10299         siglongjmp(env, 1);
10300         exit(1);
10301 }
10302 EOP
10303         set try
10304         if eval $compile; then
10305                 if ./try >/dev/null 2>&1; then
10306                         echo "POSIX sigsetjmp found." >&4
10307                         val="$define"
10308                 else
10309                         $cat >&4 <<EOM
10310 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10311 I'll ignore them.
10312 EOM
10313                         val="$undef"
10314                 fi
10315         else
10316                 echo "sigsetjmp not found." >&4
10317                 val="$undef"
10318         fi
10319         ;;
10320 *) val="$d_sigsetjmp"
10321         case "$d_sigsetjmp" in
10322         $define) echo "POSIX sigsetjmp found." >&4;;
10323         $undef) echo "sigsetjmp not found." >&4;;
10324         esac
10325         ;;
10326 esac
10327 set d_sigsetjmp
10328 eval $setvar
10329 $rm -f try.c try
10330
10331 : see if stat knows about block sizes
10332 echo " "
10333 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10334 eval $hasfield
10335
10336 : see if _ptr and _cnt from stdio act std
10337 echo " "
10338 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10339         echo "(Looks like you have stdio.h from Linux.)"
10340         case "$stdio_ptr" in
10341         '') stdio_ptr='((fp)->_IO_read_ptr)'
10342                 ptr_lval=$define
10343                 ;;
10344         *)      ptr_lval=$d_stdio_ptr_lval;;
10345         esac
10346         case "$stdio_cnt" in
10347         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10348                 cnt_lval=$undef
10349                 ;;
10350         *)      cnt_lval=$d_stdio_cnt_lval;;
10351         esac
10352         case "$stdio_base" in
10353         '') stdio_base='((fp)->_IO_read_base)';;
10354         esac
10355         case "$stdio_bufsiz" in
10356         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10357         esac
10358 else
10359         case "$stdio_ptr" in
10360         '') stdio_ptr='((fp)->_ptr)'
10361                 ptr_lval=$define
10362                 ;;
10363         *)      ptr_lval=$d_stdio_ptr_lval;;
10364         esac
10365         case "$stdio_cnt" in
10366         '') stdio_cnt='((fp)->_cnt)'
10367                 cnt_lval=$define
10368                 ;;
10369         *)      cnt_lval=$d_stdio_cnt_lval;;
10370         esac
10371         case "$stdio_base" in
10372         '') stdio_base='((fp)->_base)';;
10373         esac
10374         case "$stdio_bufsiz" in
10375         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10376         esac
10377 fi
10378 : test whether _ptr and _cnt really work
10379 echo "Checking how std your stdio is..." >&4
10380 $cat >try.c <<EOP
10381 #include <stdio.h>
10382 #define FILE_ptr(fp)    $stdio_ptr
10383 #define FILE_cnt(fp)    $stdio_cnt
10384 int main() {
10385         FILE *fp = fopen("try.c", "r");
10386         char c = getc(fp);
10387         if (
10388                 18 <= FILE_cnt(fp) &&
10389                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10390         )
10391                 exit(0);
10392         exit(1);
10393 }
10394 EOP
10395 val="$undef"
10396 set try
10397 if eval $compile; then
10398         if ./try; then
10399                 echo "Your stdio acts pretty std."
10400                 val="$define"
10401         else
10402                 echo "Your stdio isn't very std."
10403         fi
10404 else
10405         echo "Your stdio doesn't appear very std."
10406 fi
10407 $rm -f try.c try
10408 set d_stdstdio
10409 eval $setvar
10410
10411 : Can _ptr be used as an lvalue?
10412 case "$d_stdstdio$ptr_lval" in
10413 $define$define) val=$define ;;
10414 *) val=$undef ;;
10415 esac
10416 set d_stdio_ptr_lval
10417 eval $setvar
10418
10419 : Can _cnt be used as an lvalue?
10420 case "$d_stdstdio$cnt_lval" in
10421 $define$define) val=$define ;;
10422 *) val=$undef ;;
10423 esac
10424 set d_stdio_cnt_lval
10425 eval $setvar
10426
10427 : see if _base is also standard
10428 val="$undef"
10429 case "$d_stdstdio" in
10430 $define)
10431         $cat >try.c <<EOP
10432 #include <stdio.h>
10433 #define FILE_base(fp)   $stdio_base
10434 #define FILE_bufsiz(fp) $stdio_bufsiz
10435 int main() {
10436         FILE *fp = fopen("try.c", "r");
10437         char c = getc(fp);
10438         if (
10439                 19 <= FILE_bufsiz(fp) &&
10440                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10441         )
10442                 exit(0);
10443         exit(1);
10444 }
10445 EOP
10446         set try
10447         if eval $compile; then
10448                 if ./try; then
10449                         echo "And its _base field acts std."
10450                         val="$define"
10451                 else
10452                         echo "But its _base field isn't std."
10453                 fi
10454         else
10455                 echo "However, it seems to be lacking the _base field."
10456         fi
10457         $rm -f try.c try
10458         ;;
10459 esac
10460 set d_stdiobase
10461 eval $setvar
10462
10463 $cat >&4 <<EOM
10464 Checking how to access stdio streams by file descriptor number...
10465 EOM
10466 case "$stdio_stream_array" in
10467 '')     $cat >try.c <<EOCP
10468 #include <stdio.h>
10469 int main() {
10470   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10471     printf("yes\n");
10472 }
10473 EOCP
10474         for s in _iob __iob __sF
10475         do
10476                 set try -DSTDIO_STREAM_ARRAY=$s
10477                 if eval $compile; then
10478                         case "`./try$exe_ext`" in
10479                         yes)    stdio_stream_array=$s; break ;;
10480                         esac
10481                 fi
10482         done
10483         $rm -f try.* try$exe_ext
10484 esac
10485 case "$stdio_stream_array" in
10486 '')     $cat >&4 <<EOM
10487 I can't figure out how to access stdio streams by file descriptor number.
10488 EOM
10489         d_stdio_stream_array="$undef"
10490         ;;
10491 *)      $cat >&4 <<EOM
10492 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10493 EOM
10494         d_stdio_stream_array="$define"
10495         ;;
10496 esac
10497
10498 : see if strcoll exists
10499 set strcoll d_strcoll
10500 eval $inlibc
10501
10502 : check for structure copying
10503 echo " "
10504 echo "Checking to see if your C compiler can copy structs..." >&4
10505 $cat >try.c <<'EOCP'
10506 int main()
10507 {
10508         struct blurfl {
10509                 int dyick;
10510         } foo, bar;
10511
10512         foo = bar;
10513 }
10514 EOCP
10515 if $cc -c try.c >/dev/null 2>&1 ; then
10516         val="$define"
10517         echo "Yup, it can."
10518 else
10519         val="$undef"
10520         echo "Nope, it can't."
10521 fi
10522 set d_strctcpy
10523 eval $setvar
10524 $rm -f try.*
10525
10526 : see if strerror and/or sys_errlist[] exist
10527 echo " "
10528 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10529     if set strerror val -f d_strerror; eval $csym; $val; then
10530                 echo 'strerror() found.' >&4
10531                 d_strerror="$define"
10532                 d_strerrm='strerror(e)'
10533                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10534                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10535                         d_syserrlst="$define"
10536                 else
10537                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10538                         d_syserrlst="$undef"
10539                 fi
10540     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10541                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10542                 echo 'strerror() found in string header.' >&4
10543                 d_strerror="$define"
10544                 d_strerrm='strerror(e)'
10545                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10546                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10547                                 d_syserrlst="$define"
10548                 else
10549                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10550                         d_syserrlst="$undef"
10551                 fi
10552     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10553                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10554                 d_strerror="$undef"
10555                 d_syserrlst="$define"
10556                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10557     else
10558                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10559                 d_strerror="$undef"
10560                 d_syserrlst="$undef"
10561                 d_strerrm='"unknown"'
10562     fi
10563 fi
10564
10565 : see if strtod exists
10566 set strtod d_strtod
10567 eval $inlibc
10568
10569 : see if strtol exists
10570 set strtol d_strtol
10571 eval $inlibc
10572
10573 : see if strtoul exists
10574 set strtoul d_strtoul
10575 eval $inlibc
10576
10577 : see if strtoull exists
10578 set strtoull d_strtoull
10579 eval $inlibc
10580
10581 : see if strxfrm exists
10582 set strxfrm d_strxfrm
10583 eval $inlibc
10584
10585 : see if symlink exists
10586 set symlink d_symlink
10587 eval $inlibc
10588
10589 : see if syscall exists
10590 set syscall d_syscall
10591 eval $inlibc
10592
10593 : see if sysconf exists
10594 set sysconf d_sysconf
10595 eval $inlibc
10596
10597 : see if system exists
10598 set system d_system
10599 eval $inlibc
10600
10601 : see if tcgetpgrp exists
10602 set tcgetpgrp d_tcgetpgrp
10603 eval $inlibc
10604
10605 : see if tcsetpgrp exists
10606 set tcsetpgrp d_tcsetpgrp
10607 eval $inlibc
10608
10609 : see if sys/types.h has to be included
10610 set sys/types.h i_systypes
10611 eval $inhdr
10612
10613 : see if prototype for telldir is available
10614 echo " "
10615 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10616 eval $hasproto
10617
10618 : define an is-a-typedef? function
10619 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10620 case "$inclist" in
10621 "") inclist="sys/types.h";;
10622 esac;
10623 eval "varval=\$$var";
10624 case "$varval" in
10625 "")
10626         $rm -f temp.c;
10627         for inc in $inclist; do
10628                 echo "#include <$inc>" >>temp.c;
10629         done;
10630         echo "#ifdef $type" >> temp.c;
10631         echo "printf(\"We have $type\");" >> temp.c;
10632         echo "#endif" >> temp.c;
10633         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10634         if $contains $type temp.E >/dev/null 2>&1; then
10635                 eval "$var=\$type";
10636         else
10637                 eval "$var=\$def";
10638         fi;
10639         $rm -f temp.?;;
10640 *) eval "$var=\$varval";;
10641 esac'
10642
10643 : define an is-a-typedef? function that prompts if the type is not available.
10644 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10645 case "$inclist" in
10646 "") inclist="sys/types.h";;
10647 esac;
10648 eval "varval=\$$var";
10649 case "$varval" in
10650 "")
10651         $rm -f temp.c;
10652         for inc in $inclist; do
10653                 echo "#include <$inc>" >>temp.c;
10654         done;
10655         echo "#ifdef $type" >> temp.c;
10656         echo "printf(\"We have $type\");" >> temp.c;
10657         echo "#endif" >> temp.c;
10658         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10659         echo " " ;
10660         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10661         if $contains $type temp.E >/dev/null 2>&1; then
10662                 echo "$type found." >&4;
10663                 eval "$var=\$type";
10664         else
10665                 echo "$type NOT found." >&4;
10666                 dflt="$def";
10667                 . ./myread ;
10668                 eval "$var=\$ans";
10669         fi;
10670         $rm -f temp.?;;
10671 *) eval "$var=\$varval";;
10672 esac'
10673
10674 : see if this is a sys/times.h system
10675 set sys/times.h i_systimes
10676 eval $inhdr
10677
10678 : see if times exists
10679 echo " "
10680 if set times val -f d_times; eval $csym; $val; then
10681         echo 'times() found.' >&4
10682         d_times="$define"
10683         inc=''
10684         case "$i_systimes" in
10685         "$define") inc='sys/times.h';;
10686         esac
10687         rp="What is the type returned by times() on this system?"
10688         set clock_t clocktype long stdio.h sys/types.h $inc
10689         eval $typedef_ask
10690 else
10691         echo 'times() NOT found, hope that will do.' >&4
10692         d_times="$undef"
10693         clocktype='int'
10694 fi
10695
10696 : see if truncate exists
10697 set truncate d_truncate
10698 eval $inlibc
10699
10700 : see if tzname[] exists
10701 echo " "
10702 if set tzname val -a d_tzname; eval $csym; $val; then
10703         val="$define"
10704         echo 'tzname[] found.' >&4
10705 else
10706         val="$undef"
10707         echo 'tzname[] NOT found.' >&4
10708 fi
10709 set d_tzname
10710 eval $setvar
10711
10712 : see if umask exists
10713 set umask d_umask
10714 eval $inlibc
10715
10716 : backward compatibility for d_hvfork
10717 if test X$d_hvfork != X; then
10718         d_vfork="$d_hvfork"
10719         d_hvfork=''
10720 fi
10721 : see if there is a vfork
10722 val=''
10723 set vfork val
10724 eval $inlibc
10725
10726 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10727 : perl on Solaris 2.x, and probably elsewhere.
10728 case "$val" in
10729 $define)
10730         echo " "
10731         case "$usevfork" in
10732         false) dflt='n';;
10733         *) dflt='y';;
10734         esac
10735         cat <<'EOM'
10736  
10737 Perl can only use a vfork() that doesn't suffer from strict
10738 restrictions on calling functions or modifying global data in
10739 the child.  For example, glibc-2.1 contains such a vfork()
10740 that is unsuitable.  If your system provides a proper fork()
10741 call, chances are that you do NOT want perl to use vfork().
10742
10743 EOM
10744         rp="Do you still want to use vfork()?"
10745         . ./myread
10746         case "$ans" in
10747         y|Y) ;;
10748         *)
10749                 echo "Ok, we won't use vfork()."
10750                 val="$undef"
10751                 ;;
10752         esac
10753         ;;
10754 esac
10755 set d_vfork
10756 eval $setvar
10757 case "$d_vfork" in
10758 $define) usevfork='true';;
10759 *) usevfork='false';;
10760 esac
10761
10762 : see if this is an sysdir system
10763 set sys/dir.h i_sysdir
10764 eval $inhdr
10765
10766 : see if this is an sysndir system
10767 set sys/ndir.h i_sysndir
10768 eval $inhdr
10769
10770 : see if closedir exists
10771 set closedir d_closedir
10772 eval $inlibc
10773
10774 case "$d_closedir" in
10775 "$define")
10776         echo " "
10777         echo "Checking whether closedir() returns a status..." >&4
10778         cat > closedir.c <<EOM
10779 #$i_dirent I_DIRENT             /**/
10780 #$i_sysdir I_SYS_DIR            /**/
10781 #$i_sysndir I_SYS_NDIR          /**/
10782 #$i_systypes I_SYS_TYPES        /**/
10783
10784 #if defined(I_SYS_TYPES)
10785 #include <sys/types.h>
10786 #endif
10787 #if defined(I_DIRENT)
10788 #include <dirent.h>
10789 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10790 #include <sys/dir.h>
10791 #endif
10792 #else
10793 #ifdef I_SYS_NDIR
10794 #include <sys/ndir.h>
10795 #else
10796 #ifdef I_SYS_DIR
10797 #ifdef hp9000s500
10798 #include <ndir.h>       /* may be wrong in the future */
10799 #else
10800 #include <sys/dir.h>
10801 #endif
10802 #endif
10803 #endif
10804 #endif 
10805 int main() { return closedir(opendir(".")); }
10806 EOM
10807         set closedir
10808         if eval $compile_ok; then
10809                 if ./closedir > /dev/null 2>&1 ; then
10810                         echo "Yes, it does."
10811                         val="$undef"
10812                 else
10813                         echo "No, it doesn't."
10814                         val="$define"
10815                 fi
10816         else
10817                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10818                 val="$define"
10819         fi
10820         ;;
10821 *)
10822         val="$undef";
10823         ;;
10824 esac
10825 set d_void_closedir
10826 eval $setvar
10827 $rm -f closedir*
10828 : check for volatile keyword
10829 echo " "
10830 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10831 $cat >try.c <<'EOCP'
10832 int main()
10833 {
10834         typedef struct _goo_struct goo_struct;
10835         goo_struct * volatile goo = ((goo_struct *)0);
10836         struct _goo_struct {
10837                 long long_int;
10838                 int reg_int;
10839                 char char_var;
10840         };
10841         typedef unsigned short foo_t;
10842         char *volatile foo;
10843         volatile int bar;
10844         volatile foo_t blech;
10845         foo = foo;
10846 }
10847 EOCP
10848 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10849         val="$define"
10850         echo "Yup, it does."
10851 else
10852         val="$undef"
10853         echo "Nope, it doesn't."
10854 fi
10855 set d_volatile
10856 eval $setvar
10857 $rm -f try.*
10858
10859 : see if there is a wait4
10860 set wait4 d_wait4
10861 eval $inlibc
10862
10863 : see if waitpid exists
10864 set waitpid d_waitpid
10865 eval $inlibc
10866
10867 : see if wcstombs exists
10868 set wcstombs d_wcstombs
10869 eval $inlibc
10870
10871 : see if wctomb exists
10872 set wctomb d_wctomb
10873 eval $inlibc
10874
10875 : see if writev exists
10876 set writev d_writev
10877 eval $inlibc
10878
10879 : preserve RCS keywords in files with variable substitution, grrr
10880 Date='$Date'
10881 Id='$Id'
10882 Log='$Log'
10883 RCSfile='$RCSfile'
10884 Revision='$Revision'
10885
10886 case "$crosscompile" in
10887 ''|[nN]*) crosscompile="$undef" ;;
10888 esac
10889
10890 case "$osname" in
10891 next|rhapsody) multiarch="$define" ;;
10892 esac
10893 case "$multiarch" in
10894 ''|[nN]*) multiarch="$undef" ;;
10895 esac
10896
10897 : check for alignment requirements
10898 echo " "
10899 case "$crosscompile$multiarch" in
10900 *$define*)
10901         $cat <<EOM
10902 You seem to be either cross-compiling or doing a multiarchitecture build,
10903 skipping the memory alignment check.
10904
10905 EOM
10906         case "$alignbytes" in
10907         '') alignbytes=8 ;;
10908         esac
10909         ;;
10910 *)
10911         case "$alignbytes" in
10912         '') echo "Checking alignment constraints..." >&4
10913                 $cat >try.c <<'EOCP'
10914 struct foobar {
10915         char foo;
10916         double bar;
10917 } try_algn;
10918 int main()
10919 {
10920         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10921 }
10922 EOCP
10923                 set try
10924                 if eval $compile_ok; then
10925                         dflt=`./try`
10926                 else
10927                         dflt='8'
10928                         echo "(I can't seem to compile the test program...)"
10929                 fi
10930                 ;;
10931         *) dflt="$alignbytes"
10932                 ;;
10933         esac
10934         rp="Doubles must be aligned on a how-many-byte boundary?"
10935         . ./myread
10936         alignbytes="$ans"
10937         $rm -f try.c try
10938         ;;
10939 esac
10940
10941
10942 : check for ordering of bytes in a long
10943 echo " "
10944 case "$crosscompile$multiarch" in
10945 *$define*)
10946         $cat <<EOM
10947 You seem to be either cross-compiling or doing a multiarchitecture build,
10948 skipping the byteorder check.
10949
10950 EOM
10951         byteorder=''
10952         ;;
10953 *)
10954         case "$byteorder" in
10955         '')
10956                 $cat <<'EOM'
10957 In the following, larger digits indicate more significance.  A big-endian
10958 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10959 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10960 machines may have weird orders like 3412.  A Cray will report 87654321. If
10961 the test program works the default is probably right.
10962 I'm now running the test program...
10963 EOM
10964                 $cat >try.c <<'EOCP'
10965 #include <stdio.h>
10966 int main()
10967 {
10968         int i;
10969         union {
10970                 unsigned long l;
10971                 char c[sizeof(long)];
10972         } u;
10973
10974         if (sizeof(long) > 4)
10975                 u.l = (0x08070605L << 32) | 0x04030201L;
10976         else
10977                 u.l = 0x04030201L;
10978         for (i = 0; i < sizeof(long); i++)
10979                 printf("%c", u.c[i]+'0');
10980         printf("\n");
10981         exit(0);
10982 }
10983 EOCP
10984                 xxx_prompt=y
10985                 set try
10986                 if eval $compile && ./try > /dev/null; then
10987                         dflt=`./try`
10988                         case "$dflt" in
10989                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10990                                 echo "(The test program ran ok.)"
10991                                 echo "byteorder=$dflt"
10992                                 xxx_prompt=n
10993                         ;;
10994                         ????|????????) echo "(The test program ran ok.)" ;;
10995                         *) echo "(The test program didn't run right for some reason.)" ;;
10996                         esac
10997                 else
10998                         dflt='4321'
10999                         cat <<'EOM'
11000 (I can't seem to compile the test program.  Guessing big-endian...)
11001 EOM
11002                 fi
11003                 case "$xxx_prompt" in
11004                 y)
11005                         rp="What is the order of bytes in a long?"
11006                         . ./myread
11007                         byteorder="$ans"
11008                         ;;
11009                 *)      byteorder=$dflt
11010                         ;;
11011                 esac
11012                 ;;
11013         esac
11014         $rm -f try.c try
11015         ;;
11016 esac
11017
11018
11019 : how do we catenate cpp tokens here?
11020 echo " "
11021 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11022 $cat >cpp_stuff.c <<'EOCP'
11023 #define RCAT(a,b)a/**/b
11024 #define ACAT(a,b)a ## b
11025 RCAT(Rei,ser)
11026 ACAT(Cir,cus)
11027 EOCP
11028 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11029 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11030         echo "Oh!  Smells like ANSI's been here." >&4
11031         echo "We can catify or stringify, separately or together!"
11032         cpp_stuff=42
11033 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11034         echo "Ah, yes!  The good old days!" >&4
11035         echo "However, in the good old days we don't know how to stringify and"
11036         echo "catify at the same time."
11037         cpp_stuff=1
11038 else
11039         $cat >&4 <<EOM
11040 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11041 to have to edit the values of CAT[2-5] in config.h...
11042 EOM
11043         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11044 fi
11045 $rm -f cpp_stuff.*
11046
11047 : see if this is a db.h system
11048 set db.h i_db
11049 eval $inhdr
11050
11051 case "$i_db" in
11052 $define)
11053         : Check db version.
11054         echo " "
11055         echo "Checking Berkeley DB version ..." >&4
11056         $cat >try.c <<EOCP
11057 #$d_const HASCONST
11058 #ifndef HASCONST
11059 #define const
11060 #endif
11061 #include <sys/types.h>
11062 #include <stdio.h>
11063 #include <db.h>
11064 int main()
11065 {
11066 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11067     int Major, Minor, Patch ;
11068     unsigned long Version ;
11069     (void)db_version(&Major, &Minor, &Patch) ;
11070     printf("You have Berkeley DB Version 2 or greater\n");
11071
11072     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11073                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11074     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11075                 Major, Minor, Patch) ;
11076
11077     /* check that db.h & libdb are compatible */
11078     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11079         printf("db.h and libdb are incompatible\n") ;
11080         exit(3);        
11081     }
11082
11083     printf("db.h and libdb are compatible\n") ;
11084
11085     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11086                 + DB_VERSION_PATCH ;
11087
11088     /* needs to be >= 2.3.4 */
11089     if (Version < 2003004) {
11090     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11091         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11092         exit(2);        
11093     }
11094
11095     exit(0);
11096 #else
11097 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11098     printf("You have Berkeley DB Version 1\n");
11099     exit(0);    /* DB version < 2: the coast is clear. */
11100 #else
11101     exit(1);    /* <db.h> not Berkeley DB? */
11102 #endif
11103 #endif
11104 }
11105 EOCP
11106         set try
11107         if eval $compile && ./try; then
11108                 echo 'Looks OK.' >&4
11109         else
11110                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11111                 i_db=$undef
11112                 case " $libs " in
11113                 *"-ldb "*)
11114                         : Remove db from list of libraries to use
11115                         echo "Removing unusable -ldb from library list" >&4
11116                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11117                         shift
11118                         libs="$*"
11119                         echo "libs = $libs" >&4
11120                         ;;
11121                 esac
11122         fi
11123         $rm -f try.*
11124         ;;
11125 esac
11126
11127 case "$i_db" in
11128 define)
11129         : Check the return type needed for hash 
11130         echo " "
11131         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11132         $cat >try.c <<EOCP
11133 #$d_const HASCONST
11134 #ifndef HASCONST
11135 #define const
11136 #endif
11137 #include <sys/types.h>
11138 #include <db.h>
11139
11140 #ifndef DB_VERSION_MAJOR
11141 u_int32_t hash_cb (ptr, size)
11142 const void *ptr;
11143 size_t size;
11144 {
11145 }
11146 HASHINFO info;
11147 int main()
11148 {
11149         info.hash = hash_cb;
11150 }
11151 #endif
11152 EOCP
11153         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11154                 if $contains warning try.out >>/dev/null 2>&1 ; then
11155                         db_hashtype='int'
11156                 else
11157                         db_hashtype='u_int32_t'
11158                 fi
11159         else
11160                 : XXX Maybe we should just give up here.
11161                 db_hashtype=u_int32_t
11162                 $cat try.out >&4
11163                 echo "Help:  I can't seem to compile the db test program." >&4
11164                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11165         fi
11166         $rm -f try.*
11167         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11168         ;;
11169 *)      db_hashtype=u_int32_t
11170         ;;
11171 esac
11172 case "$i_db" in
11173 define)
11174         : Check the return type needed for prefix 
11175         echo " "
11176         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11177         cat >try.c <<EOCP
11178 #$d_const HASCONST
11179 #ifndef HASCONST
11180 #define const
11181 #endif
11182 #include <sys/types.h>
11183 #include <db.h>
11184
11185 #ifndef DB_VERSION_MAJOR
11186 size_t prefix_cb (key1, key2)
11187 const DBT *key1;
11188 const DBT *key2;
11189 {
11190 }
11191 BTREEINFO info;
11192 int main()
11193 {
11194         info.prefix = prefix_cb;
11195 }
11196 #endif
11197 EOCP
11198         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11199                 if $contains warning try.out >>/dev/null 2>&1 ; then
11200                         db_prefixtype='int'
11201                 else
11202                         db_prefixtype='size_t'
11203                 fi
11204         else
11205                 db_prefixtype='size_t'
11206                 : XXX Maybe we should just give up here.
11207                 $cat try.out >&4
11208                 echo "Help:  I can't seem to compile the db test program." >&4
11209                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11210         fi
11211         $rm -f try.*
11212         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11213         ;;
11214 *)      db_prefixtype='size_t'
11215         ;;
11216 esac
11217
11218 : check for void type
11219 echo " "
11220 echo "Checking to see how well your C compiler groks the void type..." >&4
11221 case "$voidflags" in
11222 '')
11223         $cat >try.c <<'EOCP'
11224 #if TRY & 1
11225 void sub() {
11226 #else
11227 sub() {
11228 #endif
11229         extern void moo();      /* function returning void */
11230         void (*goo)();          /* ptr to func returning void */
11231 #if TRY & 8
11232         void *hue;              /* generic ptr */
11233 #endif
11234 #if TRY & 2
11235         void (*foo[10])();
11236 #endif
11237
11238 #if TRY & 4
11239         if(goo == moo) {
11240                 exit(0);
11241         }
11242 #endif
11243         exit(0);
11244 }
11245 int main() { sub(); }
11246 EOCP
11247         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11248                 voidflags=$defvoidused
11249         echo "Good.  It appears to support void to the level $package wants.">&4
11250                 if $contains warning .out >/dev/null 2>&1; then
11251                         echo "However, you might get some warnings that look like this:"
11252                         $cat .out
11253                 fi
11254         else
11255 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11256                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11257                         echo "It supports 1..."
11258                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11259                                 echo "It also supports 2..."
11260                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11261                                         voidflags=7
11262                                         echo "And it supports 4 but not 8 definitely."
11263                                 else
11264                                         echo "It doesn't support 4..."
11265                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11266                                                 voidflags=11
11267                                                 echo "But it supports 8."
11268                                         else
11269                                                 voidflags=3
11270                                                 echo "Neither does it support 8."
11271                                         fi
11272                                 fi
11273                         else
11274                                 echo "It does not support 2..."
11275                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11276                                         voidflags=13
11277                                         echo "But it supports 4 and 8."
11278                                 else
11279                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11280                                                 voidflags=5
11281                                                 echo "And it supports 4 but has not heard about 8."
11282                                         else
11283                                                 echo "However it supports 8 but not 4."
11284                                         fi
11285                                 fi
11286                         fi
11287                 else
11288                         echo "There is no support at all for void."
11289                         voidflags=0
11290                 fi
11291         fi
11292 esac
11293 case "$voidflags" in
11294 "$defvoidused") ;;
11295 *)      $cat >&4 <<'EOM'
11296   Support flag bits are:
11297     1: basic void declarations.
11298     2: arrays of pointers to functions returning void.
11299     4: operations between pointers to and addresses of void functions.
11300     8: generic void pointers.
11301 EOM
11302         dflt="$voidflags";
11303         rp="Your void support flags add up to what?"
11304         . ./myread
11305         voidflags="$ans"
11306         ;;
11307 esac
11308 $rm -f try.* .out
11309
11310
11311 : How can we generate normalized random numbers ?
11312 echo " "
11313 echo "Looking for a random number function..." >&4
11314 case "$randfunc" in
11315 '')
11316         if set drand48 val -f; eval $csym; $val; then
11317                 dflt="drand48"
11318                 echo "Good, found drand48()." >&4
11319         elif set random val -f; eval $csym; $val; then
11320                 dflt="random"
11321                 echo "OK, found random()." >&4
11322         else
11323                 dflt="rand"
11324                 echo "Yick, looks like I have to use rand()." >&4
11325         fi
11326         echo " "
11327         ;;
11328 *)
11329         dflt="$randfunc"
11330         ;;
11331 esac
11332 cont=true
11333
11334 case "$ccflags" in
11335 *-Dmy_rand=*|*-Dmy_srand=*)
11336         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11337         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11338         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11339         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11340         ;;
11341 esac
11342
11343 while $test "$cont"; do
11344         rp="Use which function to generate random numbers?"
11345         . ./myread
11346         if $test "$ans" = "$dflt"; then
11347                 : null
11348         else
11349                 randbits=''
11350         fi
11351         randfunc="$ans"
11352         if set $ans val -f; eval $csym; $val; then
11353                 cont=''
11354         else
11355                 dflt=y
11356                 rp="I cannot find function $ans. Use that name anyway?"
11357                 . ./myread
11358                 dflt=rand
11359                 case "$ans" in
11360                         [yY]*) cont='';;
11361                 esac
11362         fi
11363         case "$cont" in
11364         '')
11365                 case "$randfunc" in
11366                 drand48)
11367                         drand01="drand48()"
11368                         seedfunc="srand48"
11369                         randbits=48
11370                         randseedtype=long
11371                         ;;
11372                 rand|random)
11373                         case "$randbits" in
11374                         '')
11375 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11376                                 $cat >try.c <<EOCP
11377 #$i_unistd I_UNISTD
11378 #$i_stdlib I_STDLIB
11379 #include <stdio.h>
11380 #ifdef I_UNISTD
11381 #  include <unistd.h>
11382 #endif
11383 #ifdef I_STDLIB
11384 #  include <stdlib.h>
11385 #endif
11386 int main()
11387 {
11388         register int i;
11389         register unsigned long tmp;
11390         register unsigned long max = 0L;
11391
11392         for (i = 1000; i; i--) {
11393                 tmp = (unsigned long) $randfunc();
11394                 if (tmp > max) max = tmp;
11395         }
11396         for (i = 0; max; i++)
11397                 max /= 2;
11398         printf("%d\n",i);
11399 }
11400 EOCP
11401                                 set try
11402                                 if eval $compile_ok; then
11403                                         dflt=`try`
11404                                 else
11405                                         dflt='?'
11406                                         echo "(I can't seem to compile the test program...)"
11407                                 fi
11408                                 ;;
11409                         *)
11410                                 dflt="$randbits"
11411                                 ;;
11412                         esac
11413                         rp="How many bits does your $randfunc() function produce?"
11414                         . ./myread
11415                         randbits="$ans"
11416                         $rm -f try.c try
11417                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11418                         seedfunc="s$randfunc"
11419                         randseedtype=unsigned
11420                         ;;
11421                 *)
11422                         dflt="31"
11423                         rp="How many bits does your $randfunc() function produce?"
11424                         . ./myread
11425                         randbits="$ans"
11426                         seedfunc="s$randfunc"
11427                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11428                         if set $seedfunc val -f; eval $csym; $val; then
11429                                 echo "(Using $seedfunc() to seed random generator)"
11430                         else
11431                                 echo "(Warning: no $seedfunc() to seed random generator)"
11432                                 seedfunc=rand
11433                         fi
11434                         randseedtype=unsigned
11435                         ;;
11436                 esac
11437                 ;;
11438         esac
11439 done
11440
11441 echo " "
11442 echo "Determining whether or not we are on an EBCDIC system..." >&4
11443 $cat >tebcdic.c <<'EOM'
11444 int main()
11445 {
11446   if ('M'==0xd4) return 0;
11447   return 1;
11448 }
11449 EOM
11450
11451 val=$undef
11452 set tebcdic
11453 if eval $compile_ok; then
11454         if ./tebcdic; then
11455                 echo "You have EBCDIC." >&4
11456                 val="$define"
11457         else
11458                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin, or UTF." >&4
11459         fi
11460 else
11461         echo "I'm unable to compile the test program." >&4
11462         echo "I'll assume ASCII or some ISO Latin." >&4
11463 fi
11464 $rm -f tebcdic.c tebcdic
11465 set ebcdic
11466 eval $setvar
11467
11468 echo " "
11469 $cat >&4 <<EOM
11470 Checking how to flush all pending stdio output...
11471 EOM
11472 # I only know how to find the first 32 possibly open files on SunOS.
11473 # See also hints/sunos_4_1.sh and util.c  --AD
11474 case "$osname" in
11475 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11476 esac
11477 $cat >>try.c <<EOCP
11478 #include <stdio.h>
11479 #$i_unistd I_UNISTD
11480 #ifdef I_UNISTD
11481 # include <unistd.h>
11482 #endif
11483 #$d_sysconf HAS_SYSCONF
11484 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11485 #ifdef HAS_STDIO_STREAM_ARRAY
11486 # define STDIO_STREAM_ARRAY $stdio_stream_array
11487 #endif
11488 int main() {
11489   FILE* p = fopen("try.out", "w");
11490 #ifdef TRY_FPUTC
11491   fputc('x', p);
11492 #else
11493 # ifdef TRY_FPRINTF
11494   fprintf(p, "x");
11495 # endif
11496 #endif
11497 #ifdef TRY_FFLUSH_NULL
11498   fflush(NULL);
11499 #endif
11500 #ifdef TRY_FFLUSH_ALL
11501   {
11502     long open_max = -1;
11503 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11504     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11505 # else
11506 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11507     open_max = sysconf(_SC_OPEN_MAX);
11508 #  else
11509 #   ifdef FOPEN_MAX
11510     open_max = FOPEN_MAX;
11511 #   else
11512 #    ifdef OPEN_MAX
11513     open_max = OPEN_MAX;
11514 #    else
11515 #     ifdef _NFILE
11516     open_max = _NFILE;
11517 #     endif
11518 #    endif
11519 #   endif
11520 #  endif
11521 # endif 
11522 # ifdef HAS_STDIO_STREAM_ARRAY
11523     if (open_max > 0) {
11524       long i;
11525       for (i = 0; i < open_max; i++)
11526             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11527                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11528                 STDIO_STREAM_ARRAY[i]._flag)
11529                 fflush(&STDIO_STREAM_ARRAY[i]);
11530     }   
11531   }
11532 # endif
11533 #endif
11534   _exit(42);
11535 }
11536 EOCP
11537 : first we have to find out how _not_ to flush
11538 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11539     output=''
11540     set try -DTRY_FPUTC
11541     if eval $compile; then
11542             $rm -f try.out
11543             ./try$exe_ext 2>/dev/null
11544             if $test ! -s try.out -a "X$?" = X42; then
11545                 output=-DTRY_FPUTC
11546             fi
11547     fi
11548     case "$output" in
11549     '')
11550             set try -DTRY_FPRINTF
11551             $rm -f try.out
11552             if eval $compile; then
11553                     $rm -f try.out
11554                     ./try$exe_ext 2>/dev/null
11555                     if $test ! -s try.out -a "X$?" = X42; then
11556                         output=-DTRY_FPRINTF
11557                     fi
11558             fi
11559         ;;
11560     esac
11561 fi
11562 : check for fflush NULL behaviour
11563 case "$fflushNULL" in
11564 '')     set try -DTRY_FFLUSH_NULL $output
11565         if eval $compile; then
11566                 $rm -f try.out
11567                 ./try$exe_ext 2>/dev/null
11568                 code="$?"
11569                 if $test -s try.out -a "X$code" = X42; then
11570                         fflushNULL="`$cat try.out`"
11571                 else
11572                         if $test "X$code" != X42; then
11573                                 $cat >&4 <<EOM
11574 (If this test failed, don't worry, we'll try another method shortly.)
11575 EOM
11576                         fi
11577                 fi
11578         fi
11579         $rm -f core try.core core.try.*
11580         case "$fflushNULL" in
11581         x)      $cat >&4 <<EOM
11582 Your fflush(NULL) works okay.
11583 EOM
11584                 fflushNULL="$define"
11585                 ;;
11586         '')     $cat >&4 <<EOM
11587 Your fflush(NULL) isn't working (contrary to ANSI C).
11588 EOM
11589                 fflushNULL="$undef"
11590                 ;;
11591         *)      $cat >&4 <<EOM
11592 Cannot figure out whether your fflush(NULL) works or not.
11593 I'm assuming it doesn't (contrary to ANSI C).
11594 EOM
11595                 fflushNULL="$undef"
11596                 ;;
11597         esac
11598         ;;
11599 $define|true|[yY]*)
11600         fflushNULL="$define"
11601         ;;
11602 *)
11603         fflushNULL="$undef"
11604         ;;
11605 esac
11606 : check explicit looping only if NULL did not work
11607 case "$fflushNULL" in
11608 "$undef")
11609         : check for fflush all behaviour
11610         case "$fflushall" in
11611         '')     set try -DTRY_FFLUSH_ALL $output
11612                 if eval $compile; then
11613                         $cat >&4 <<EOM
11614 (Now testing the other method--but note that also this may fail.)
11615 EOM
11616                         $rm -f try.out
11617                         ./try$exe_ext 2>/dev/null
11618                         if $test -s try.out -a "X$?" = X42; then
11619                                 fflushall="`$cat try.out`"
11620                         fi
11621                 fi
11622                 $rm -f core try.core core.try.*
11623                 case "$fflushall" in
11624                 x)      $cat >&4 <<EOM
11625 Whew. Flushing explicitly all the stdio streams works.
11626 EOM
11627                         fflushall="$define"
11628                         ;;
11629                 '')     $cat >&4 <<EOM
11630 Sigh. Flushing explicitly all the stdio streams doesn't work.
11631 EOM
11632                         fflushall="$undef"
11633                         ;;
11634                 *)      $cat >&4 <<EOM
11635 Cannot figure out whether flushing stdio streams explicitly works or not.
11636 I'm assuming it doesn't.
11637 EOM
11638                         fflushall="$undef"
11639                         ;;
11640                 esac
11641                 ;;
11642         "$define"|true|[yY]*)
11643                 fflushall="$define"
11644                 ;;
11645         *)
11646                 fflushall="$undef"
11647                 ;;
11648         esac
11649         ;;
11650 *)      fflushall="$undef"      
11651         ;;
11652 esac
11653 case "$fflushNULL$fflushall" in
11654 undefundef)
11655         $cat <<EOM
11656 I cannot figure out how to flush pending stdio output.
11657 EOM
11658         ;;
11659 esac
11660 $rm -f try.* try$exe_ext
11661
11662 : see what type file positions are declared as in the library
11663 rp="What is the type for file position used by fsetpos()?"
11664 set fpos_t fpostype long stdio.h sys/types.h
11665 eval $typedef_ask
11666
11667 : Store the full pathname to the ar program for use in the C program
11668 : Respect a hint or command line value for full_ar.
11669 case "$full_ar" in
11670 '') full_ar=$ar ;;
11671 esac
11672
11673 : Store the full pathname to the sed program for use in the C program
11674 full_sed=$sed
11675
11676 : see what type gids are declared as in the kernel
11677 echo " "
11678 echo "Looking for the type for group ids returned by getgid()."
11679 set gid_t gidtype xxx stdio.h sys/types.h
11680 eval $typedef
11681 case "$gidtype" in
11682 xxx)
11683         xxx=`./findhdr sys/user.h`
11684         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11685         case $1 in
11686         unsigned) dflt="$1 $2" ;;
11687         *) dflt="$1" ;;
11688         esac
11689         ;;
11690 *) dflt="$gidtype";;
11691 esac
11692 case "$gidtype" in
11693 gid_t) echo "gid_t found." ;;
11694 *)      rp="What is the type for group ids returned by getgid()?"
11695         . ./myread
11696         gidtype="$ans"
11697         ;;
11698 esac
11699
11700 : see if getgroups exists
11701 set getgroups d_getgrps
11702 eval $inlibc
11703
11704 : see if setgroups exists
11705 set setgroups d_setgrps
11706 eval $inlibc
11707
11708
11709 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11710 echo " "
11711 case "$d_getgrps$d_setgrps" in
11712 *define*)
11713         case "$groupstype" in
11714         '') dflt="$gidtype" ;;
11715         *)  dflt="$groupstype" ;;
11716         esac
11717         $cat <<EOM
11718 What type of pointer is the second argument to getgroups() and setgroups()?
11719 Usually this is the same as group ids, $gidtype, but not always.
11720
11721 EOM
11722         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11723         . ./myread
11724         groupstype="$ans"
11725         ;;
11726 *)  groupstype="$gidtype";;
11727 esac
11728
11729 : see what type lseek is declared as in the kernel
11730 rp="What is the type used for lseek's offset on this system?"
11731 set off_t lseektype long stdio.h sys/types.h
11732 eval $typedef_ask
11733
11734 echo " "
11735 $echo $n "Checking to see how big your file offsets are...$c" >&4
11736 $cat >try.c <<EOCP
11737 #include <sys/types.h>
11738 #include <stdio.h>
11739 int main()
11740 {
11741         printf("%d\n", sizeof($lseektype));
11742 }
11743 EOCP
11744 set try
11745 if eval $compile_ok; then
11746         lseeksize=`./try`
11747         $echo " $lseeksize bytes." >&4
11748 else
11749         dflt='4'
11750         echo " "
11751         echo "(I can't seem to compile the test program.  Guessing...)"
11752         rp="What is the size of your file offsets (in bytes)?"
11753         . ./myread
11754         lseeksize="$ans"
11755 fi
11756 $rm -f try.c try
11757
11758 echo " "
11759 echo "Checking if your $make program sets \$(MAKE)..." >&4
11760 case "$make_set_make" in
11761 '')
11762         $sed 's/^X //' > testmake.mak << 'EOF'
11763 Xall:
11764 X       @echo 'maketemp="$(MAKE)"'
11765 EOF
11766         case "`$make -f testmake.mak 2>/dev/null`" in
11767         *maketemp=*) make_set_make='#' ;;
11768         *)      make_set_make="MAKE=$make" ;;
11769         esac
11770         $rm -f testmake.mak
11771         ;;
11772 esac
11773 case "$make_set_make" in
11774 '#') echo "Yup, it does.";;
11775 *) echo "Nope, it doesn't.";;
11776 esac
11777
11778 : see what type is used for mode_t
11779 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11780 set mode_t modetype int stdio.h sys/types.h
11781 eval $typedef_ask
11782
11783 : define a fucntion to check prototypes
11784 $cat > protochk <<EOSH
11785 $startsh
11786 cc="$cc"
11787 optimize="$optimize"
11788 ccflags="$ccflags"
11789 prototype="$prototype"
11790 define="$define"
11791 rm=$rm
11792 EOSH
11793
11794 $cat >> protochk <<'EOSH'
11795
11796 $rm -f try.c
11797 foo="$1"
11798 shift
11799 while test $# -ge 2; do
11800         case "$1" in
11801                 $define) echo "#include <$2>" >> try.c ;;
11802                 literal) echo "$2" >> try.c ;;
11803         esac
11804     shift 2
11805 done
11806 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11807 cat >> try.c <<'EOCP'
11808 #ifdef CAN_PROTOTYPE
11809 #define _(args) args
11810 #else
11811 #define _(args) ()
11812 #endif
11813 EOCP
11814 echo "$foo" >> try.c
11815 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11816 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11817 status=$?
11818 $rm -f try.[co]
11819 exit $status
11820 EOSH
11821 chmod +x protochk
11822 $eunicefix protochk
11823
11824 : see what type is used for size_t
11825 rp="What is the type used for the length parameter for string functions?"
11826 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11827 eval $typedef_ask
11828
11829 : check for type of arguments to gethostbyaddr. 
11830 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11831         case "$d_gethbyaddr" in
11832         $define)
11833                 $cat <<EOM
11834
11835 Checking to see what type of arguments are accepted by gethostbyaddr().
11836 EOM
11837                 hdrs="$define sys/types.h
11838                         $d_socket sys/socket.h 
11839                         $i_niin netinet/in.h 
11840                         $i_netdb netdb.h
11841                         $i_unistd unistd.h"
11842                 : The first arg can 'char *' or 'void *'
11843                 : The second arg is some of integral type
11844                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11845                         for yyy in size_t long int; do
11846                                 case "$netdb_host_type" in
11847                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11848                                         if ./protochk "$try" $hdrs; then
11849                                                 echo "Your system accepts $xxx for the first arg."
11850                                                 echo "...and $yyy for the second arg."
11851                                                 netdb_host_type="$xxx"
11852                                                 netdb_hlen_type="$yyy"
11853                                         fi
11854                                         ;;
11855                                 esac
11856                         done
11857                 done
11858                 : In case none of those worked, prompt the user.
11859                 case "$netdb_host_type" in
11860                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11861                         dflt='char *'
11862                         . ./myread
11863                         netdb_host_type=$ans
11864                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11865                         dflt="$sizetype"
11866                         . ./myread
11867                         netdb_hlen_type=$ans
11868                         ;;
11869                 esac
11870                 ;;
11871         *)      : no gethostbyaddr, so pick harmless defaults
11872                 netdb_host_type='char *'
11873                 netdb_hlen_type="$sizetype"
11874                 ;;
11875         esac
11876         # Remove the "const" if needed. -- but then we'll have a 
11877         # prototype clash!
11878         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11879 fi
11880
11881 : check for type of argument to gethostbyname. 
11882 if test "X$netdb_name_type" = X ; then
11883         case "$d_gethbyname" in
11884         $define)
11885                 $cat <<EOM
11886
11887 Checking to see what type of argument is accepted by gethostbyname().
11888 EOM
11889                 hdrs="$define sys/types.h
11890                         $d_socket sys/socket.h 
11891                         $i_niin netinet/in.h 
11892                         $i_netdb netdb.h
11893                         $i_unistd unistd.h"
11894                 for xxx in "const char *" "char *"; do
11895                         case "$netdb_name_type" in
11896                         '')     try="extern struct hostent *gethostbyname($xxx);"
11897                                 if ./protochk "$try" $hdrs; then
11898                                         echo "Your system accepts $xxx."
11899                                         netdb_name_type="$xxx"
11900                                 fi
11901                                 ;;
11902                         esac
11903                 done
11904                 : In case none of those worked, prompt the user.
11905                 case "$netdb_name_type" in
11906                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11907                         dflt='char *'
11908                         . ./myread
11909                         netdb_name_type=$ans
11910                         ;;
11911                 esac
11912                 ;;
11913         *)      : no gethostbyname, so pick harmless default
11914                 netdb_name_type='char *'
11915                 ;;
11916         esac
11917 fi
11918
11919 : check for type of 1st argument to getnetbyaddr. 
11920 if test "X$netdb_net_type" = X ; then
11921         case "$d_getnbyaddr" in
11922         $define)
11923                 $cat <<EOM
11924
11925 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11926 EOM
11927                 hdrs="$define sys/types.h
11928                         $d_socket sys/socket.h 
11929                         $i_niin netinet/in.h 
11930                         $i_netdb netdb.h
11931                         $i_unistd unistd.h"
11932                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11933                         case "$netdb_net_type" in
11934                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11935                                 if ./protochk "$try" $hdrs; then
11936                                         echo "Your system accepts $xxx."
11937                                         netdb_net_type="$xxx"
11938                                 fi
11939                                 ;;
11940                         esac
11941                 done
11942                 : In case none of those worked, prompt the user.
11943                 case "$netdb_net_type" in
11944                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11945                         dflt='long'
11946                         . ./myread
11947                         netdb_net_type=$ans
11948                         ;;
11949                 esac
11950                 ;;
11951         *)      : no getnetbyaddr, so pick harmless default
11952                 netdb_net_type='long'
11953                 ;;
11954         esac
11955 fi
11956 : locate the preferred pager for this system
11957 case "$pager" in
11958 '')
11959         dflt=''
11960         case "$pg" in
11961         /*) dflt=$pg;;
11962         esac
11963         case "$more" in
11964         /*) dflt=$more;;
11965         esac
11966         case "$less" in
11967         /*) dflt=$less;;
11968         esac
11969         case "$dflt" in
11970         '') dflt=/usr/ucb/more;;
11971         esac
11972         ;;
11973 *) dflt="$pager";;
11974 esac
11975 echo " "
11976 fn=f/
11977 rp='What pager is used on your system?'
11978 . ./getfile
11979 pager="$ans"
11980
11981 : see what type pids are declared as in the kernel
11982 rp="What is the type of process ids on this system?"
11983 set pid_t pidtype int stdio.h sys/types.h
11984 eval $typedef_ask
11985
11986 : check for length of pointer
11987 echo " "
11988 case "$ptrsize" in
11989 '')
11990         $echo $n "Checking to see how big your pointers are...$c" >&4
11991         if test "$voidflags" -gt 7; then
11992                 echo '#define VOID_PTR char *' > try.c
11993         else
11994                 echo '#define VOID_PTR void *' > try.c
11995         fi
11996         $cat >>try.c <<'EOCP'
11997 #include <stdio.h>
11998 int main()
11999 {
12000         printf("%d\n", sizeof(VOID_PTR));
12001         exit(0);
12002 }
12003 EOCP
12004         set try
12005         if eval $compile_ok; then
12006                 ptrsize=`./try`
12007                 $echo " $ptrsize bytes." >&4
12008         else
12009                 dflt='4'
12010                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12011                 rp="What is the size of a pointer (in bytes)?"
12012                 . ./myread
12013                 ptrsize="$ans"
12014         fi
12015         ;;
12016 esac
12017 $rm -f try.c try
12018
12019 : see if ar generates random libraries by itself
12020 echo " "
12021 echo "Checking how to generate random libraries on your machine..." >&4
12022 echo 'int bar1() { return bar2(); }' > bar1.c
12023 echo 'int bar2() { return 2; }' > bar2.c
12024 $cat > foo.c <<'EOP'
12025 int main() { printf("%d\n", bar1()); exit(0); }
12026 EOP
12027 $cc $ccflags -c bar1.c >/dev/null 2>&1
12028 $cc $ccflags -c bar2.c >/dev/null 2>&1
12029 $cc $ccflags -c foo.c >/dev/null 2>&1
12030 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12031 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12032         ./foobar >/dev/null 2>&1; then
12033         echo "$ar appears to generate random libraries itself."
12034         orderlib=false
12035         ranlib=":"
12036 elif $ar ts bar$_a >/dev/null 2>&1 &&
12037         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12038         ./foobar >/dev/null 2>&1; then
12039                 echo "a table of contents needs to be added with '$ar ts'."
12040                 orderlib=false
12041                 ranlib="$ar ts"
12042 else
12043         case "$ranlib" in
12044         :) ranlib='';;
12045         '')
12046                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12047                 $test -f $ranlib || ranlib=''
12048                 ;;
12049         esac
12050         if $test -n "$ranlib"; then
12051                 echo "your system has '$ranlib'; we'll use that."
12052                 orderlib=false
12053         else
12054                 echo "your system doesn't seem to support random libraries"
12055                 echo "so we'll use lorder and tsort to order the libraries."
12056                 orderlib=true
12057                 ranlib=":"
12058         fi
12059 fi
12060 $rm -f foo* bar* 
12061
12062 : check for type of arguments to select. 
12063 case "$selecttype" in
12064 '') case "$d_select" in
12065         $define)
12066                 $cat <<EOM
12067 Checking to see what type of arguments are accepted by select().
12068 EOM
12069                 hdrs="$define sys/types.h
12070                         $i_systime sys/time.h 
12071                         $i_sysselct sys/select.h
12072                         $d_socket sys/socket.h"
12073                 : The first arg can be int, unsigned, or size_t
12074                 : The last arg may or may not be 'const'
12075                 val=''
12076                 : void pointer has been seen but using that
12077                 : breaks the selectminbits test
12078                 for xxx in 'fd_set *' 'int *'; do
12079                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12080                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12081                                         case "$val" in
12082                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12083                                                 if ./protochk "$try" $hdrs; then
12084                                                         echo "Your system accepts $xxx."
12085                                                         val="$xxx"
12086                                                 fi
12087                                                 ;;
12088                                         esac
12089                                 done
12090                         done
12091                 done
12092                 case "$val" in
12093                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12094                         case "$d_fd_set" in
12095                                 $define) dflt="fd_set *" ;;
12096                                 *)              dflt="int *" ;;
12097                         esac
12098                         . ./myread
12099                         val=$ans
12100                         ;;
12101                 esac
12102                 selecttype="$val"
12103                 ;;
12104         *)      : no select, so pick a harmless default
12105                 selecttype='int *'
12106                 ;;
12107         esac
12108         ;;
12109 esac
12110
12111 : check for the select 'width'
12112 case "$selectminbits" in
12113 '') case "$d_select" in
12114         $define)
12115                 $cat <<EOM
12116
12117 Checking to see on how many bits at a time your select() operates...
12118 EOM
12119                 $cat >try.c <<EOCP
12120 #include <sys/types.h>
12121 #$i_time I_TIME
12122 #$i_systime I_SYS_TIME
12123 #$i_systimek I_SYS_TIME_KERNEL
12124 #ifdef I_TIME
12125 #   include <time.h>
12126 #endif
12127 #ifdef I_SYS_TIME
12128 #   ifdef I_SYS_TIME_KERNEL
12129 #       define KERNEL
12130 #   endif
12131 #   include <sys/time.h>
12132 #   ifdef I_SYS_TIME_KERNEL
12133 #       undef KERNEL
12134 #   endif
12135 #endif
12136 #$i_sysselct I_SYS_SELECT
12137 #ifdef I_SYS_SELECT
12138 #include <sys/select.h>
12139 #endif
12140 #$d_socket HAS_SOCKET
12141 #ifdef HAS_SOCKET
12142 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12143 #endif
12144 #include <stdio.h>
12145 $selecttype b;
12146 #define S sizeof(*(b))
12147 #define MINBITS 64
12148 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12149 #define NBITS  (NBYTES * 8)
12150 int main() {
12151     char s[NBYTES];
12152     struct timeval t;
12153     int i;
12154     FILE* fp;
12155     int fd;
12156
12157     fclose(stdin);
12158     fp = fopen("try.c", "r");
12159     if (fp == 0)
12160       exit(1);
12161     fd = fileno(fp);
12162     if (fd < 0)
12163       exit(2);
12164     b = ($selecttype)s;
12165     for (i = 0; i < NBITS; i++)
12166         FD_SET(i, b);
12167     t.tv_sec  = 0;
12168     t.tv_usec = 0;
12169     select(fd + 1, b, 0, 0, &t);
12170     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
12171     printf("%d\n", i + 1);
12172     return 0;
12173 }
12174 EOCP
12175                 set try
12176                 if eval $compile_ok; then
12177                         selectminbits=`./try`
12178                         case "$selectminbits" in
12179                         '')     cat >&4 <<EOM
12180 Cannot figure out on how many bits at a time your select() operates.
12181 I'll play safe and guess it is 32 bits.
12182 EOM
12183                                 selectminbits=32
12184                                 bits="32 bits"
12185                                 ;;
12186                         1)      bits="1 bit" ;;
12187                         *)      bits="$selectminbits bits" ;;
12188                         esac
12189                         echo "Your select() operates on $bits at a time." >&4
12190                 else
12191                         rp='What is the minimum number of bits your select() operates on?'
12192                         case "$byteorder" in
12193                         1234|12345678)  dflt=32 ;;
12194                         *)              dflt=1  ;;
12195                         esac
12196                         . ./myread
12197                         val=$ans
12198                         selectminbits="$val"
12199                 fi
12200                 $rm -f try.* try
12201                 ;;
12202         *)      : no select, so pick a harmless default
12203                 selectminbits='32'
12204                 ;;
12205         esac
12206         ;;
12207 esac
12208
12209 : Trace out the files included by signal.h, then look for SIGxxx names.
12210 : Remove SIGARRAYSIZE used by HPUX.
12211 : Remove SIGSTKSIZE used by Linux.
12212 : Remove SIGSTKSZ used by Posix.
12213 : Remove SIGTYP void lines used by OS2.
12214 xxx=`echo '#include <signal.h>' |
12215         $cppstdin $cppminus $cppflags 2>/dev/null |
12216         $grep '^[       ]*#.*include' | 
12217         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
12218 : Check this list of files to be sure we have parsed the cpp output ok.
12219 : This will also avoid potentially non-existent files, such 
12220 : as ../foo/bar.h
12221 xxxfiles=''
12222 for xx in $xxx /dev/null ; do
12223         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
12224 done
12225 : If we have found no files, at least try signal.h
12226 case "$xxxfiles" in
12227 '')     xxxfiles=`./findhdr signal.h` ;;
12228 esac
12229 xxx=`awk '
12230 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
12231         print substr($2, 4, 20)
12232 }
12233 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
12234         print substr($3, 4, 20)
12235 }' $xxxfiles`
12236 : Append some common names just in case the awk scan failed.
12237 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
12238 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
12239 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
12240 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
12241 : generate a few handy files for later
12242 $cat > signal.c <<'EOCP'
12243 #include <sys/types.h>
12244 #include <signal.h>
12245 #include <stdio.h>
12246 int main() {
12247
12248 /* Strange style to avoid deeply-nested #if/#else/#endif */
12249 #ifndef NSIG
12250 #  ifdef _NSIG
12251 #    define NSIG (_NSIG)
12252 #  endif
12253 #endif
12254
12255 #ifndef NSIG
12256 #  ifdef SIGMAX
12257 #    define NSIG (SIGMAX+1)
12258 #  endif
12259 #endif
12260
12261 #ifndef NSIG
12262 #  ifdef SIG_MAX
12263 #    define NSIG (SIG_MAX+1)
12264 #  endif
12265 #endif
12266
12267 #ifndef NSIG
12268 #  ifdef MAXSIG
12269 #    define NSIG (MAXSIG+1)
12270 #  endif
12271 #endif
12272
12273 #ifndef NSIG
12274 #  ifdef MAX_SIG
12275 #    define NSIG (MAX_SIG+1)
12276 #  endif
12277 #endif
12278
12279 #ifndef NSIG
12280 #  ifdef SIGARRAYSIZE
12281 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
12282 #  endif
12283 #endif
12284
12285 #ifndef NSIG
12286 #  ifdef _sys_nsig
12287 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
12288 #  endif
12289 #endif
12290
12291 /* Default to some arbitrary number that's big enough to get most
12292    of the common signals.
12293 */
12294 #ifndef NSIG
12295 #    define NSIG 50
12296 #endif
12297
12298 printf("NSIG %d\n", NSIG);
12299
12300 #ifndef JUST_NSIG
12301
12302 EOCP
12303
12304 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
12305 {
12306         printf "#ifdef SIG"; printf $1; printf "\n"
12307         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
12308         printf $1; printf ");\n"
12309         printf "#endif\n"
12310 }
12311 END {
12312         printf "#endif /* JUST_NSIG */\n";
12313         printf "}\n";
12314 }
12315 ' >>signal.c
12316 $cat >signal.awk <<'EOP'
12317 BEGIN { ndups = 0 }
12318 $1 ~ /^NSIG$/ { nsig = $2 }
12319 ($1 !~ /^NSIG$/) && (NF == 2) {
12320     if ($2 > maxsig) { maxsig = $2 }
12321     if (sig_name[$2]) {
12322         dup_name[ndups] = $1
12323         dup_num[ndups] = $2
12324         ndups++ 
12325     }
12326     else {
12327         sig_name[$2] = $1
12328         sig_num[$2] = $2
12329     }
12330 }
12331 END { 
12332     if (nsig == 0) {
12333         nsig = maxsig + 1
12334     }
12335     printf("NSIG %d\n", nsig);
12336     for (n = 1; n < nsig; n++) {
12337         if (sig_name[n]) {
12338             printf("%s %d\n", sig_name[n], sig_num[n])
12339         }
12340         else {
12341             printf("NUM%d %d\n", n, n) 
12342         }
12343     }
12344     for (n = 0; n < ndups; n++) {
12345         printf("%s %d\n", dup_name[n], dup_num[n])
12346     }
12347 }
12348 EOP
12349 $cat >signal_cmd <<EOS
12350 $startsh
12351 if $test -s signal.lst; then
12352     echo "Using your existing signal.lst file"
12353         exit 0
12354 fi
12355 xxx="$xxx"
12356 EOS
12357 $cat >>signal_cmd <<'EOS'
12358
12359 set signal
12360 if eval $compile_ok; then
12361         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12362 else
12363         echo "(I can't seem be able to compile the whole test program)" >&4
12364         echo "(I'll try it in little pieces.)" >&4
12365         set signal -DJUST_NSIG
12366         if eval $compile_ok; then
12367                 ./signal$_exe > signal.nsg
12368                 $cat signal.nsg
12369         else
12370                 echo "I can't seem to figure out how many signals you have." >&4
12371                 echo "Guessing 50." >&4
12372                 echo 'NSIG 50' > signal.nsg
12373         fi
12374         : Now look at all the signal names, one at a time.
12375         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12376                 $cat > signal.c <<EOCP
12377 #include <sys/types.h>
12378 #include <signal.h>
12379 #include <stdio.h>
12380 int main() {
12381 printf("$xx %d\n", SIG${xx});
12382 return 0;
12383 }
12384 EOCP
12385                 set signal
12386                 if eval $compile; then
12387                         echo "SIG${xx} found."
12388                         ./signal$_exe  >> signal.ls1
12389                 else
12390                         echo "SIG${xx} NOT found."
12391                 fi
12392         done
12393         if $test -s signal.ls1; then
12394                 $cat signal.nsg signal.ls1 |
12395                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12396         fi
12397
12398 fi
12399 if $test -s signal.lst; then
12400         :
12401 else
12402         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12403         echo 'kill -l' >signal
12404         set X `csh -f <signal`
12405         $rm -f signal
12406         shift
12407         case $# in
12408         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12409         esac
12410         echo $@ | $tr ' ' $trnl | \
12411             $awk '{ printf "%s %d\n", $1, ++s; }
12412                   END { printf "NSIG %d\n", ++s }' >signal.lst
12413 fi
12414 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12415 EOS
12416 chmod a+x signal_cmd
12417 $eunicefix signal_cmd
12418
12419 : generate list of signal names
12420 echo " "
12421 case "$sig_name_init" in
12422 '') doinit=yes ;;
12423 *)  case "$sig_num_init" in
12424     ''|*,*) doinit=yes ;;
12425     esac ;;
12426 esac
12427 case "$doinit" in
12428 yes)
12429         echo "Generating a list of signal names and numbers..." >&4
12430         . ./signal_cmd
12431         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12432         sig_name=`$awk 'BEGIN { printf "ZERO " }
12433                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12434         sig_num=`$awk  'BEGIN { printf "0 " }
12435                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12436         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12437                              !/^NSIG/   { printf "\"%s\", ", $1 }
12438                              END        { printf "0\n" }' signal.lst`
12439         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12440                              !/^NSIG/   { printf "%d, ", $2}
12441                              END        { printf "0\n"}' signal.lst`
12442         ;;
12443 esac
12444 echo "The following $sig_count signals are available:"
12445 echo " "
12446 echo $sig_name | $awk \
12447 'BEGIN { linelen = 0 }
12448 {
12449         for (i = 1; i <= NF; i++) {
12450                 name = "SIG" $i " "
12451                 linelen = linelen + length(name)
12452                 if (linelen > 70) {
12453                         printf "\n"
12454                         linelen = length(name)
12455                 }
12456                 printf "%s", name
12457         }
12458         printf "\n"
12459 }'
12460 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12461
12462 : see what type is used for signed size_t
12463 set ssize_t ssizetype int stdio.h sys/types.h
12464 eval $typedef
12465 dflt="$ssizetype"
12466 $cat > ssize.c <<EOM
12467 #include <stdio.h>
12468 #include <sys/types.h>
12469 #define Size_t $sizetype
12470 #define SSize_t $dflt
12471 int main()
12472 {
12473         if (sizeof(Size_t) == sizeof(SSize_t))
12474                 printf("$dflt\n");
12475         else if (sizeof(Size_t) == sizeof(int))
12476                 printf("int\n");
12477         else 
12478                 printf("long\n");
12479         exit(0);
12480 }
12481 EOM
12482 echo " "
12483 set ssize
12484 if eval $compile_ok && ./ssize > /dev/null; then
12485         ssizetype=`./ssize`
12486         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12487 else
12488         $cat >&4 <<EOM
12489 Help! I can't compile and run the ssize_t test program: please enlighten me!
12490 (This is probably a misconfiguration in your system or libraries, and
12491 you really ought to fix it.  Still, I'll try anyway.)
12492
12493 I need a type that is the same size as $sizetype, but is guaranteed to
12494 be signed.  Common values are ssize_t, int and long.
12495
12496 EOM
12497         rp="What signed type is the same size as $sizetype?"
12498         . ./myread
12499         ssizetype="$ans"
12500 fi
12501 $rm -f ssize ssize.*
12502
12503 : see what type of char stdio uses.
12504 echo " "
12505 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12506         echo "Your stdio uses unsigned chars." >&4
12507         stdchar="unsigned char"
12508 else
12509         echo "Your stdio uses signed chars." >&4
12510         stdchar="char"
12511 fi
12512
12513 : see if time exists
12514 echo " "
12515 if test "X$d_time" = X -o X"$timetype" = X; then
12516     if set time val -f d_time; eval $csym; $val; then
12517                 echo 'time() found.' >&4
12518                 val="$define"
12519                 rp="What is the type returned by time() on this system?"
12520                 set time_t timetype long stdio.h sys/types.h
12521                 eval $typedef_ask
12522     else
12523                 echo 'time() not found, hope that will do.' >&4
12524                 val="$undef"
12525                 timetype='int';
12526     fi
12527     set d_time
12528     eval $setvar
12529 fi
12530
12531 : see what type uids are declared as in the kernel
12532 echo " "
12533 echo "Looking for the type for user ids returned by getuid()."
12534 set uid_t uidtype xxx stdio.h sys/types.h
12535 eval $typedef
12536 case "$uidtype" in
12537 xxx)
12538         xxx=`./findhdr sys/user.h`
12539         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12540         case $1 in
12541         unsigned) dflt="$1 $2" ;;
12542         *) dflt="$1" ;;
12543         esac
12544         ;;
12545 *) dflt="$uidtype";;
12546 esac
12547 case "$uidtype" in
12548 uid_t)  echo "uid_t found." ;;
12549 *)      rp="What is the type for user ids returned by getuid()?"
12550         . ./myread
12551         uidtype="$ans"
12552         ;;
12553 esac
12554
12555 : see if dbm.h is available
12556 : see if dbmclose exists
12557 set dbmclose d_dbmclose
12558 eval $inlibc
12559
12560 case "$d_dbmclose" in
12561 $define)
12562         set dbm.h i_dbm
12563         eval $inhdr
12564         case "$i_dbm" in
12565         $define)
12566                 val="$undef"
12567                 set i_rpcsvcdbm
12568                 eval $setvar
12569                 ;;
12570         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12571                 eval $inhdr
12572                 ;;
12573         esac
12574         ;;
12575 *)      echo "We won't be including <dbm.h>"
12576         val="$undef"
12577         set i_dbm
12578         eval $setvar
12579         val="$undef"
12580         set i_rpcsvcdbm
12581         eval $setvar
12582         ;;
12583 esac
12584
12585 : see if this is a sys/file.h system
12586 val=''
12587 set sys/file.h val
12588 eval $inhdr
12589
12590 : do we need to include sys/file.h ?
12591 case "$val" in
12592 "$define")
12593         echo " "
12594         if $h_sysfile; then
12595                 val="$define"
12596                 echo "We'll be including <sys/file.h>." >&4
12597         else
12598                 val="$undef"
12599                 echo "We won't be including <sys/file.h>." >&4
12600         fi
12601         ;;
12602 *)
12603         h_sysfile=false
12604         ;;
12605 esac
12606 set i_sysfile
12607 eval $setvar
12608
12609 : see if fcntl.h is there
12610 val=''
12611 set fcntl.h val
12612 eval $inhdr
12613
12614 : see if we can include fcntl.h
12615 case "$val" in
12616 "$define")
12617         echo " "
12618         if $h_fcntl; then
12619                 val="$define"
12620                 echo "We'll be including <fcntl.h>." >&4
12621         else
12622                 val="$undef"
12623                 if $h_sysfile; then
12624         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12625                 else
12626                         echo "We won't be including <fcntl.h>." >&4
12627                 fi
12628         fi
12629         ;;
12630 *)
12631         h_fcntl=false
12632         val="$undef"
12633         ;;
12634 esac
12635 set i_fcntl
12636 eval $setvar
12637
12638 : see if locale.h is available
12639 set locale.h i_locale
12640 eval $inhdr
12641
12642 : see if mach cthreads are available
12643 if test "X$usethreads" = "X$define"; then
12644         set mach/cthreads.h i_machcthr
12645         eval $inhdr
12646 else
12647         i_machcthr="$undef"
12648 fi
12649
12650
12651
12652 : see if this is a math.h system
12653 set math.h i_math
12654 eval $inhdr
12655
12656 : see if this is a mntent.h system
12657 set mntent.h i_mntent
12658 eval $inhdr
12659
12660 : see if ndbm.h is available
12661 set ndbm.h t_ndbm
12662 eval $inhdr
12663 case "$t_ndbm" in
12664 $define)
12665         : see if dbm_open exists
12666         set dbm_open d_dbm_open
12667         eval $inlibc
12668         case "$d_dbm_open" in
12669         $undef)
12670                 t_ndbm="$undef"
12671                 echo "We won't be including <ndbm.h>"
12672                 ;;
12673         esac
12674         ;;
12675 esac
12676 val="$t_ndbm"
12677 set i_ndbm
12678 eval $setvar
12679
12680 : see if net/errno.h is available
12681 val=''
12682 set net/errno.h val
12683 eval $inhdr
12684
12685 : Unfortunately, it causes problems on some systems.  Arrgh.
12686 case "$val" in
12687 $define)
12688         cat > try.c <<'EOM'
12689 #include <stdio.h>
12690 #include <errno.h>
12691 #include <net/errno.h>
12692 int func()
12693 {
12694         return ENOTSOCK;
12695 }
12696 EOM
12697         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12698                 echo "We'll be including <net/errno.h>." >&4
12699         else
12700                 echo "We won't be including <net/errno.h>." >&4
12701                 val="$undef"
12702         fi
12703         $rm -f try.* try
12704         ;;
12705 esac
12706 set i_neterrno
12707 eval $setvar
12708
12709 : see if netinet/tcp.h is available
12710 set netinet/tcp.h i_netinettcp
12711 eval $inhdr
12712
12713 : see if this is a poll.h system
12714 set poll.h i_poll
12715 eval $inhdr
12716
12717 : get C preprocessor symbols handy
12718 echo " "
12719 $echo $n "Hmm... $c"
12720 echo $al | $tr ' ' $trnl >Cppsym.know
12721 $cat <<EOSS >Cppsym
12722 $startsh
12723 case "\$1" in
12724 -l) list=true
12725         shift
12726         ;;
12727 esac
12728 unknown=''
12729 case "\$list\$#" in
12730 1|2)
12731         for sym do
12732                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12733                         exit 0
12734                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12735                         :
12736                 else
12737                         unknown="\$unknown \$sym"
12738                 fi
12739         done
12740         set X \$unknown
12741         shift
12742         ;;
12743 esac
12744 case \$# in
12745 0) exit 1;;
12746 esac
12747 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12748 #ifdef \1\\
12749 exit 0; _ _ _ _\1\\      \1\\
12750 #endif\\
12751 /' >Cppsym\$\$
12752 echo "exit 1; _ _ _" >>Cppsym\$\$
12753 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12754 case "\$list" in
12755 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12756 *)
12757         sh Cppsym2\$\$
12758         status=\$?
12759         ;;
12760 esac
12761 $rm -f Cppsym\$\$ Cppsym2\$\$
12762 exit \$status
12763 EOSS
12764 chmod +x Cppsym
12765 $eunicefix Cppsym
12766 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12767
12768 : now check the C compiler for additional symbols
12769 postprocess_cc_v=''
12770 case "$osname" in
12771 aix) postprocess_cc_v="|$tr , ' '" ;;
12772 esac
12773 $cat >ccsym <<EOS
12774 $startsh
12775 $cat >tmp.c <<EOF
12776 extern int foo;
12777 EOF
12778 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12779 do
12780         case "\$i" in
12781         -D*) echo "\$i" | $sed 's/^-D//';;
12782         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12783         esac
12784 done
12785 $rm -f try.c
12786 EOS
12787 postprocess_cc_v=''
12788 chmod +x ccsym
12789 $eunicefix ccsym
12790 ./ccsym > ccsym1.raw
12791 if $test -s ccsym1.raw; then
12792        $sort ccsym1.raw | $uniq >ccsym.raw
12793 else
12794        mv ccsym1.raw ccsym.raw
12795 fi
12796
12797 $awk '/\=/ { print $0; next }
12798         { print $0"=1" }' ccsym.raw >ccsym.list
12799 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12800 $comm -13 ccsym.true ccsym.list >ccsym.own
12801 $comm -12 ccsym.true ccsym.list >ccsym.com
12802 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12803 also=''
12804 if $test -z ccsym.raw; then
12805         echo "Your C compiler doesn't seem to define any symbols!" >&4
12806         echo " "
12807         echo "However, your C preprocessor defines the following symbols:"
12808         $cat Cppsym.true
12809         ccsymbols=''
12810         cppsymbols=`$cat Cppsym.true`
12811         cppsymbols=`echo $cppsymbols`
12812         cppccsymbols="$cppsymbols"
12813 else
12814         if $test -s ccsym.com; then
12815                 echo "Your C compiler and pre-processor define these symbols:"
12816                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12817                 also='also '
12818                 symbols='ones'
12819                 cppccsymbols=`$cat ccsym.com`
12820                 cppccsymbols=`echo $cppccsymbols`
12821                 $test "$silent" || sleep 1
12822         fi
12823         if $test -s ccsym.cpp; then
12824                 $test "$also" && echo " "
12825                 echo "Your C pre-processor ${also}defines the following symbols:"
12826                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12827                 also='further '
12828                 cppsymbols=`$cat ccsym.cpp`
12829                 cppsymbols=`echo $cppsymbols`
12830                 $test "$silent" || sleep 1
12831         fi
12832         if $test -s ccsym.own; then
12833                 $test "$also" && echo " "
12834                 echo "Your C compiler ${also}defines the following cpp symbols:"
12835                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12836                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12837                 ccsymbols=`$cat ccsym.own`
12838                 ccsymbols=`echo $ccsymbols`
12839                 $test "$silent" || sleep 1
12840         fi
12841 fi
12842 $rm -f ccsym*
12843
12844 : see if this is a termio system
12845 val="$undef"
12846 val2="$undef"
12847 val3="$undef"
12848 if $test `./findhdr termios.h`; then
12849         set tcsetattr i_termios
12850         eval $inlibc
12851         val3="$i_termios"
12852 fi
12853 echo " "
12854 case "$val3" in
12855 "$define") echo "You have POSIX termios.h... good!" >&4;;
12856 *) if ./Cppsym pyr; then
12857                 case "`/bin/universe`" in
12858                 ucb) if $test `./findhdr sgtty.h`; then
12859                                 val2="$define"
12860                                 echo "<sgtty.h> found." >&4
12861                         else
12862                                 echo "System is pyramid with BSD universe."
12863                                 echo "<sgtty.h> not found--you could have problems." >&4
12864                         fi;;
12865                 *) if $test `./findhdr termio.h`; then
12866                                 val="$define"
12867                                 echo "<termio.h> found." >&4
12868                         else
12869                                 echo "System is pyramid with USG universe."
12870                                 echo "<termio.h> not found--you could have problems." >&4
12871                         fi;;
12872                 esac
12873         elif ./usg; then
12874                 if $test `./findhdr termio.h`; then
12875                         echo "<termio.h> found." >&4
12876                         val="$define"
12877                 elif $test `./findhdr sgtty.h`; then
12878                         echo "<sgtty.h> found." >&4
12879                         val2="$define"
12880                 else
12881 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12882                 fi
12883         else
12884                 if $test `./findhdr sgtty.h`; then
12885                         echo "<sgtty.h> found." >&4
12886                         val2="$define"
12887                 elif $test `./findhdr termio.h`; then
12888                         echo "<termio.h> found." >&4
12889                         val="$define"
12890                 else
12891 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12892                 fi
12893         fi;;
12894 esac
12895 set i_termio; eval $setvar
12896 val=$val2; set i_sgtty; eval $setvar
12897 val=$val3; set i_termios; eval $setvar
12898
12899 : see if this is a shadow.h system
12900 set shadow.h i_shadow
12901 eval $inhdr
12902
12903 : see if this is a socks.h system
12904 set socks.h i_socks
12905 eval $inhdr
12906
12907 : see if stdarg is available
12908 echo " "
12909 if $test `./findhdr stdarg.h`; then
12910         echo "<stdarg.h> found." >&4
12911         valstd="$define"
12912 else
12913         echo "<stdarg.h> NOT found." >&4
12914         valstd="$undef"
12915 fi
12916
12917 : see if varags is available
12918 echo " "
12919 if $test `./findhdr varargs.h`; then
12920         echo "<varargs.h> found." >&4
12921 else
12922         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12923 fi
12924
12925 : set up the varargs testing programs
12926 $cat > varargs.c <<EOP
12927 #ifdef I_STDARG
12928 #include <stdarg.h>
12929 #endif
12930 #ifdef I_VARARGS
12931 #include <varargs.h>
12932 #endif
12933
12934 #ifdef I_STDARG
12935 int f(char *p, ...)
12936 #else
12937 int f(va_alist)
12938 va_dcl
12939 #endif
12940 {
12941         va_list ap;
12942 #ifndef I_STDARG
12943         char *p;
12944 #endif
12945 #ifdef I_STDARG
12946         va_start(ap,p);
12947 #else
12948         va_start(ap);
12949         p = va_arg(ap, char *);
12950 #endif
12951         va_end(ap);
12952 }
12953 EOP
12954 $cat > varargs <<EOP
12955 $startsh
12956 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12957         echo "true"
12958 else
12959         echo "false"
12960 fi
12961 $rm -f varargs$_o
12962 EOP
12963 chmod +x varargs
12964
12965 : now check which varargs header should be included
12966 echo " "
12967 i_varhdr=''
12968 case "$valstd" in
12969 "$define")
12970         if `./varargs I_STDARG`; then
12971                 val='stdarg.h'
12972         elif `./varargs I_VARARGS`; then
12973                 val='varargs.h'
12974         fi
12975         ;;
12976 *)
12977         if `./varargs I_VARARGS`; then
12978                 val='varargs.h'
12979         fi
12980         ;;
12981 esac
12982 case "$val" in
12983 '')
12984 echo "I could not find the definition for va_dcl... You have problems..." >&4
12985         val="$undef"; set i_stdarg; eval $setvar
12986         val="$undef"; set i_varargs; eval $setvar
12987         ;;
12988 *) 
12989         set i_varhdr
12990         eval $setvar
12991         case "$i_varhdr" in
12992         stdarg.h)
12993                 val="$define"; set i_stdarg; eval $setvar
12994                 val="$undef"; set i_varargs; eval $setvar
12995                 ;;
12996         varargs.h)
12997                 val="$undef"; set i_stdarg; eval $setvar
12998                 val="$define"; set i_varargs; eval $setvar
12999                 ;;
13000         esac
13001         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13002 esac
13003 $rm -f varargs*
13004
13005 : see if stddef is available
13006 set stddef.h i_stddef
13007 eval $inhdr
13008
13009 : see if sys/access.h is available
13010 set sys/access.h i_sysaccess
13011 eval $inhdr
13012
13013 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
13014 set sys/filio.h i_sysfilio
13015 eval $inhdr
13016 echo " "
13017 if $test `./findhdr sys/ioctl.h`; then
13018         val="$define"
13019         echo '<sys/ioctl.h> found.' >&4
13020 else
13021         val="$undef"
13022         if $test $i_sysfilio = "$define"; then
13023             echo '<sys/ioctl.h> NOT found.' >&4
13024         else
13025                 $test $i_sgtty = "$define" && xxx="sgtty.h"
13026                 $test $i_termio = "$define" && xxx="termio.h"
13027                 $test $i_termios = "$define" && xxx="termios.h"
13028 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
13029         fi
13030 fi
13031 set i_sysioctl
13032 eval $setvar
13033
13034 : see if sys/resource.h has to be included
13035 set sys/resource.h i_sysresrc
13036 eval $inhdr
13037
13038 : see if sys/security.h is available
13039 set sys/security.h i_syssecrt
13040 eval $inhdr
13041
13042 : see if this is a sys/statvfs.h system
13043 set sys/statvfs.h i_sysstatvfs
13044 eval $inhdr
13045
13046 : see if this is a sys/un.h system
13047 set sys/un.h i_sysun
13048 eval $inhdr
13049
13050 : see if this is a syswait system
13051 set sys/wait.h i_syswait
13052 eval $inhdr
13053
13054 : see if this is an utime system
13055 set utime.h i_utime
13056 eval $inhdr
13057
13058 : see if this is a values.h system
13059 set values.h i_values
13060 eval $inhdr
13061
13062 : see if this is a vfork system
13063 case "$d_vfork" in
13064 "$define")
13065         set vfork.h i_vfork
13066         eval $inhdr
13067         ;;
13068 *)
13069         i_vfork="$undef"
13070         ;;
13071 esac
13072
13073 : see if gdbm.h is available
13074 set gdbm.h t_gdbm
13075 eval $inhdr
13076 case "$t_gdbm" in
13077 $define)
13078         : see if gdbm_open exists
13079         set gdbm_open d_gdbm_open
13080         eval $inlibc
13081         case "$d_gdbm_open" in
13082         $undef)
13083                 t_gdbm="$undef"
13084                 echo "We won't be including <gdbm.h>"
13085                 ;;
13086         esac
13087         ;;
13088 esac
13089 val="$t_gdbm"
13090 set i_gdbm
13091 eval $setvar
13092
13093 echo " "
13094 echo "Looking for extensions..." >&4
13095 : If we are using the old config.sh, known_extensions may contain
13096 : old or inaccurate or duplicate values.
13097 known_extensions=''
13098 nonxs_extensions=''
13099 : We do not use find because it might not be available.
13100 : We do not just use MANIFEST because the user may have dropped
13101 : some additional extensions into the source tree and expect them
13102 : to be built.
13103
13104 : Function to recursively find available extensions, ignoring DynaLoader
13105 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
13106 find_extensions='
13107     for xxx in *; do
13108        case "$xxx" in
13109            DynaLoader|dynaload) ;;
13110            *)
13111            if $test -f $xxx/$xxx.xs; then
13112                known_extensions="$known_extensions $1$xxx";
13113            elif $test -f $xxx/Makefile.PL; then
13114                nonxs_extensions="$nonxs_extensions $1$xxx";
13115            else
13116                if $test -d $xxx -a $# -lt 10; then
13117                    set $1$xxx/ $*;
13118                    cd $xxx;
13119                    eval $find_extensions;
13120                    cd ..;
13121                    shift;
13122                fi;
13123            fi
13124            ;;
13125        esac;
13126     done'
13127 tdir=`pwd`
13128 cd $rsrc/ext
13129 set X
13130 shift
13131 eval $find_extensions
13132 set X $nonxs_extensions
13133 shift
13134 nonxs_extensions="$*"
13135 set X $known_extensions
13136 shift
13137 known_extensions="$*"
13138 cd $tdir
13139
13140 : Now see which are supported on this system.
13141 avail_ext=''
13142 for xxx in $known_extensions ; do
13143         case "$xxx" in
13144         DB_File|db_file)
13145                 case "$i_db" in
13146                 $define) avail_ext="$avail_ext $xxx" ;;
13147                 esac
13148                 ;;
13149         GDBM_File|gdbm_fil)
13150                 case "$i_gdbm" in 
13151                 $define) avail_ext="$avail_ext $xxx" ;;
13152                 esac
13153                 ;;
13154         NDBM_File|ndbm_fil)
13155                 case "$i_ndbm" in
13156                 $define) avail_ext="$avail_ext $xxx" ;;
13157                 esac
13158                 ;;
13159         ODBM_File|odbm_fil) 
13160                 case "${i_dbm}${i_rpcsvcdbm}" in
13161                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13162                 esac
13163                 ;;
13164         POSIX|posix)
13165                 case "$useposix" in
13166                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13167                 esac
13168                 ;;
13169         Opcode|opcode)
13170                 case "$useopcode" in
13171                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13172                 esac
13173                 ;;
13174         Socket|socket)
13175                 case "$d_socket" in 
13176                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13177                 esac
13178                 ;;
13179         Thread|thread)
13180                 case "$usethreads" in 
13181                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13182                 esac
13183                 ;;
13184         IPC/SysV|ipc/sysv)
13185                 : XXX Do we need a useipcsysv variable here
13186                 case "${d_msg}${d_sem}${d_shm}" in 
13187                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13188                 esac
13189                 ;;
13190         *)      avail_ext="$avail_ext $xxx"
13191                 ;;
13192         esac
13193 done
13194
13195 set X $avail_ext
13196 shift
13197 avail_ext="$*"
13198
13199 : Now see which nonxs extensions are supported on this system.
13200 : For now assume all are.
13201 nonxs_ext=''
13202 for xxx in $nonxs_extensions ; do
13203         case "$xxx" in
13204         *)      nonxs_ext="$nonxs_ext $xxx"
13205                 ;;
13206         esac
13207 done
13208
13209 set X $nonxs_ext
13210 shift
13211 nonxs_ext="$*"
13212
13213 case $usedl in
13214 $define)
13215         $cat <<EOM
13216 A number of extensions are supplied with $package.  You may choose to
13217 compile these extensions for dynamic loading (the default), compile
13218 them into the $package executable (static loading), or not include
13219 them at all.  Answer "none" to include no extensions.
13220 Note that DynaLoader is always built and need not be mentioned here.
13221
13222 EOM
13223         case "$dynamic_ext" in
13224         '') dflt="$avail_ext" ;;
13225         *)      dflt="$dynamic_ext"
13226                 # Perhaps we are reusing an old out-of-date config.sh.
13227                 case "$hint" in
13228                 previous)
13229                         if test X"$dynamic_ext" != X"$avail_ext"; then
13230                                 $cat <<EOM
13231 NOTICE:  Your previous config.sh list may be incorrect. 
13232 The extensions now available to you are 
13233         ${avail_ext}
13234 but the default list from your previous config.sh is
13235         ${dynamic_ext} 
13236
13237 EOM
13238                         fi
13239                         ;;
13240                 esac
13241                 ;;
13242         esac
13243         case "$dflt" in
13244         '')     dflt=none;;
13245         esac
13246         rp="What extensions do you wish to load dynamically?"
13247         . ./myread
13248         case "$ans" in
13249         none) dynamic_ext=' ' ;;
13250         *) dynamic_ext="$ans" ;;
13251         esac
13252
13253         case "$static_ext" in
13254         '')
13255                 : Exclude those already listed in dynamic linking
13256                 dflt=''
13257                 for xxx in $avail_ext; do
13258                         case " $dynamic_ext " in
13259                         *" $xxx "*) ;;
13260                         *) dflt="$dflt $xxx" ;;
13261                         esac
13262                 done
13263                 set X $dflt
13264                 shift
13265                 dflt="$*"
13266                 ;;
13267         *)  dflt="$static_ext" 
13268                 ;;
13269         esac
13270
13271         case "$dflt" in
13272         '')     dflt=none;;
13273         esac
13274         rp="What extensions do you wish to load statically?"
13275         . ./myread
13276         case "$ans" in
13277         none) static_ext=' ' ;;
13278         *) static_ext="$ans" ;;
13279         esac
13280         ;;
13281 *)
13282         $cat <<EOM
13283 A number of extensions are supplied with $package.  Answer "none" 
13284 to include no extensions. 
13285 Note that DynaLoader is always built and need not be mentioned here.
13286
13287 EOM
13288         case "$static_ext" in
13289         '') dflt="$avail_ext" ;;
13290         *)      dflt="$static_ext"
13291                 # Perhaps we are reusing an old out-of-date config.sh.
13292                 case "$hint" in
13293                 previous)
13294                         if test X"$static_ext" != X"$avail_ext"; then
13295                                 $cat <<EOM
13296 NOTICE:  Your previous config.sh list may be incorrect. 
13297 The extensions now available to you are 
13298         ${avail_ext}
13299 but the default list from your previous config.sh is
13300         ${static_ext} 
13301
13302 EOM
13303                         fi
13304                         ;;
13305                 esac
13306                 ;;
13307         esac
13308         : Exclude those that are not xs extensions
13309         case "$dflt" in
13310         '')     dflt=none;;
13311         esac
13312         rp="What extensions do you wish to include?"
13313         . ./myread
13314         case "$ans" in
13315         none) static_ext=' ' ;;
13316         *) static_ext="$ans" ;;
13317         esac
13318         ;;
13319 esac
13320
13321 set X $dynamic_ext $static_ext $nonxs_ext
13322 shift
13323 extensions="$*"
13324
13325 : Remove build directory name from cppstdin so it can be used from
13326 : either the present location or the final installed location.
13327 echo " "
13328 : Get out of the UU directory to get correct path name.
13329 cd ..
13330 case "$cppstdin" in
13331 `pwd`/cppstdin)
13332         echo "Stripping down cppstdin path name"
13333         cppstdin=cppstdin
13334         ;;
13335 esac
13336 cd UU
13337
13338 : end of configuration questions
13339 echo " "
13340 echo "End of configuration questions."
13341 echo " "
13342
13343 : back to where it started
13344 if test -d ../UU; then
13345         cd ..
13346 fi
13347
13348 : configuration may be patched via a 'config.over' file
13349 if $test -f config.over; then
13350         echo " "
13351         dflt=y
13352         rp='I see a config.over file.  Do you wish to load it?'
13353         . UU/myread
13354         case "$ans" in
13355         n*) echo "OK, I'll ignore it.";;
13356         *)      . ./config.over
13357                 echo "Configuration override changes have been loaded."
13358                 ;;
13359         esac
13360 fi
13361
13362 : in case they want portability, strip down executable paths
13363 case "$d_portable" in
13364 "$define")
13365         echo " "
13366         echo "Stripping down executable paths..." >&4
13367         for file in $loclist $trylist; do
13368                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
13369                         eval $file="\$file"
13370                 fi
13371         done
13372         ;;
13373 esac
13374
13375 : create config.sh file
13376 echo " "
13377 echo "Creating config.sh..." >&4
13378 $spitshell <<EOT >config.sh
13379 $startsh
13380 #
13381 # This file was produced by running the Configure script. It holds all the
13382 # definitions figured out by Configure. Should you modify one of these values,
13383 # do not forget to propagate your changes by running "Configure -der". You may
13384 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13385 #
13386
13387 # Package name      : $package
13388 # Source directory  : $src
13389 # Configuration time: $cf_time
13390 # Configured by     : $cf_by
13391 # Target system     : $myuname
13392
13393 Author='$Author'
13394 Date='$Date'
13395 Header='$Header'
13396 Id='$Id'
13397 Locker='$Locker'
13398 Log='$Log'
13399 Mcc='$Mcc'
13400 RCSfile='$RCSfile'
13401 Revision='$Revision'
13402 Source='$Source'
13403 State='$State'
13404 _a='$_a'
13405 _exe='$_exe'
13406 _o='$_o'
13407 afs='$afs'
13408 alignbytes='$alignbytes'
13409 ansi2knr='$ansi2knr'
13410 aphostname='$aphostname'
13411 apiversion='$apiversion'
13412 ar='$ar'
13413 archlib='$archlib'
13414 archlibexp='$archlibexp'
13415 archname64='$archname64'
13416 archname='$archname'
13417 archobjs='$archobjs'
13418 awk='$awk'
13419 baserev='$baserev'
13420 bash='$bash'
13421 bin='$bin'
13422 bincompat5005='$bincompat5005'
13423 binexp='$binexp'
13424 bison='$bison'
13425 byacc='$byacc'
13426 byteorder='$byteorder'
13427 c='$c'
13428 castflags='$castflags'
13429 cat='$cat'
13430 cc='$cc'
13431 cccdlflags='$cccdlflags'
13432 ccdlflags='$ccdlflags'
13433 ccflags='$ccflags'
13434 ccsymbols='$ccsymbols'
13435 cf_by='$cf_by'
13436 cf_email='$cf_email'
13437 cf_time='$cf_time'
13438 chgrp='$chgrp'
13439 chmod='$chmod'
13440 chown='$chown'
13441 clocktype='$clocktype'
13442 comm='$comm'
13443 compress='$compress'
13444 contains='$contains'
13445 cp='$cp'
13446 cpio='$cpio'
13447 cpp='$cpp'
13448 cpp_stuff='$cpp_stuff'
13449 cppccsymbols='$cppccsymbols'
13450 cppflags='$cppflags'
13451 cpplast='$cpplast'
13452 cppminus='$cppminus'
13453 cpprun='$cpprun'
13454 cppstdin='$cppstdin'
13455 cppsymbols='$cppsymbols'
13456 crosscompile='$crosscompile'
13457 cryptlib='$cryptlib'
13458 csh='$csh'
13459 d_Gconvert='$d_Gconvert'
13460 d_PRIEldbl='$d_PRIEldbl'
13461 d_PRIFldbl='$d_PRIFldbl'
13462 d_PRIGldbl='$d_PRIGldbl'
13463 d_PRIX64='$d_PRIX64'
13464 d_PRId64='$d_PRId64'
13465 d_PRIeldbl='$d_PRIeldbl'
13466 d_PRIfldbl='$d_PRIfldbl'
13467 d_PRIgldbl='$d_PRIgldbl'
13468 d_PRIi64='$d_PRIi64'
13469 d_PRIo64='$d_PRIo64'
13470 d_PRIu64='$d_PRIu64'
13471 d_PRIx64='$d_PRIx64'
13472 d_access='$d_access'
13473 d_accessx='$d_accessx'
13474 d_alarm='$d_alarm'
13475 d_archlib='$d_archlib'
13476 d_atolf='$d_atolf'
13477 d_atoll='$d_atoll'
13478 d_attribut='$d_attribut'
13479 d_bcmp='$d_bcmp'
13480 d_bcopy='$d_bcopy'
13481 d_bincompat5005='$d_bincompat5005'
13482 d_bsd='$d_bsd'
13483 d_bsdgetpgrp='$d_bsdgetpgrp'
13484 d_bsdsetpgrp='$d_bsdsetpgrp'
13485 d_bzero='$d_bzero'
13486 d_casti32='$d_casti32'
13487 d_castneg='$d_castneg'
13488 d_charvspr='$d_charvspr'
13489 d_chown='$d_chown'
13490 d_chroot='$d_chroot'
13491 d_chsize='$d_chsize'
13492 d_closedir='$d_closedir'
13493 d_cmsghdr_s='$d_cmsghdr_s'
13494 d_const='$d_const'
13495 d_crypt='$d_crypt'
13496 d_csh='$d_csh'
13497 d_cuserid='$d_cuserid'
13498 d_dbl_dig='$d_dbl_dig'
13499 d_dbmclose64='$d_dbmclose64'
13500 d_dbminit64='$d_dbminit64'
13501 d_delete64='$d_delete64'
13502 d_difftime='$d_difftime'
13503 d_dirent64_s='$d_dirent64_s'
13504 d_dirnamlen='$d_dirnamlen'
13505 d_dlerror='$d_dlerror'
13506 d_dlopen='$d_dlopen'
13507 d_dlsymun='$d_dlsymun'
13508 d_dosuid='$d_dosuid'
13509 d_drand48proto='$d_drand48proto'
13510 d_dup2='$d_dup2'
13511 d_eaccess='$d_eaccess'
13512 d_endgrent='$d_endgrent'
13513 d_endhent='$d_endhent'
13514 d_endnent='$d_endnent'
13515 d_endpent='$d_endpent'
13516 d_endpwent='$d_endpwent'
13517 d_endsent='$d_endsent'
13518 d_endspent='$d_endspent'
13519 d_eofnblk='$d_eofnblk'
13520 d_eunice='$d_eunice'
13521 d_fchmod='$d_fchmod'
13522 d_fchown='$d_fchown'
13523 d_fcntl='$d_fcntl'
13524 d_fd_macros='$d_fd_macros'
13525 d_fd_set='$d_fd_set'
13526 d_fds_bits='$d_fds_bits'
13527 d_fetch64='$d_fetch64'
13528 d_fgetpos64='$d_fgetpos64'
13529 d_fgetpos='$d_fgetpos'
13530 d_firstkey64='$d_firstkey64'
13531 d_flexfnam='$d_flexfnam'
13532 d_flock64_s='$d_flock64_s'
13533 d_flock='$d_flock'
13534 d_fopen64='$d_fopen64'
13535 d_fork='$d_fork'
13536 d_fpathconf='$d_fpathconf'
13537 d_freopen64='$d_freopen64'
13538 d_fseek64='$d_fseek64'
13539 d_fseeko64='$d_fseeko64'
13540 d_fseeko='$d_fseeko'
13541 d_fsetpos64='$d_fsetpos64'
13542 d_fsetpos='$d_fsetpos'
13543 d_fstat64='$d_fstat64'
13544 d_fstatfs='$d_fstatfs'
13545 d_fstatvfs='$d_fstatvfs'
13546 d_ftell64='$d_ftell64'
13547 d_ftello64='$d_ftello64'
13548 d_ftello='$d_ftello'
13549 d_ftime='$d_ftime'
13550 d_ftruncate64='$d_ftruncate64'
13551 d_getgrent='$d_getgrent'
13552 d_getgrps='$d_getgrps'
13553 d_gethbyaddr='$d_gethbyaddr'
13554 d_gethbyname='$d_gethbyname'
13555 d_gethent='$d_gethent'
13556 d_gethname='$d_gethname'
13557 d_gethostprotos='$d_gethostprotos'
13558 d_getlogin='$d_getlogin'
13559 d_getmntent='$d_getmntent'
13560 d_getnbyaddr='$d_getnbyaddr'
13561 d_getnbyname='$d_getnbyname'
13562 d_getnent='$d_getnent'
13563 d_getnetprotos='$d_getnetprotos'
13564 d_getpbyname='$d_getpbyname'
13565 d_getpbynumber='$d_getpbynumber'
13566 d_getpent='$d_getpent'
13567 d_getpgid='$d_getpgid'
13568 d_getpgrp2='$d_getpgrp2'
13569 d_getpgrp='$d_getpgrp'
13570 d_getppid='$d_getppid'
13571 d_getprior='$d_getprior'
13572 d_getprotoprotos='$d_getprotoprotos'
13573 d_getpwent='$d_getpwent'
13574 d_getsbyname='$d_getsbyname'
13575 d_getsbyport='$d_getsbyport'
13576 d_getsent='$d_getsent'
13577 d_getservprotos='$d_getservprotos'
13578 d_getspent='$d_getspent'
13579 d_getspnam='$d_getspnam'
13580 d_gettimeod='$d_gettimeod'
13581 d_gnulibc='$d_gnulibc'
13582 d_grpasswd='$d_grpasswd'
13583 d_hasmntopt='$d_hasmntopt'
13584 d_htonl='$d_htonl'
13585 d_index='$d_index'
13586 d_inetaton='$d_inetaton'
13587 d_ino64_t='$d_ino64_t'
13588 d_int64t='$d_int64t'
13589 d_iovec_s='$d_iovec_s'
13590 d_isascii='$d_isascii'
13591 d_killpg='$d_killpg'
13592 d_lchown='$d_lchown'
13593 d_link='$d_link'
13594 d_llseek='$d_llseek'
13595 d_locconv='$d_locconv'
13596 d_lockf64='$d_lockf64'
13597 d_lockf='$d_lockf'
13598 d_longdbl='$d_longdbl'
13599 d_longlong='$d_longlong'
13600 d_lseek64='$d_lseek64'
13601 d_lstat64='$d_lstat64'
13602 d_lstat='$d_lstat'
13603 d_madvise='$d_madvise'
13604 d_mblen='$d_mblen'
13605 d_mbstowcs='$d_mbstowcs'
13606 d_mbtowc='$d_mbtowc'
13607 d_memchr='$d_memchr'
13608 d_memcmp='$d_memcmp'
13609 d_memcpy='$d_memcpy'
13610 d_memmove='$d_memmove'
13611 d_memset='$d_memset'
13612 d_mkdir='$d_mkdir'
13613 d_mkfifo='$d_mkfifo'
13614 d_mktime='$d_mktime'
13615 d_mmap='$d_mmap'
13616 d_mprotect='$d_mprotect'
13617 d_msg='$d_msg'
13618 d_msg_ctrunc='$d_msg_ctrunc'
13619 d_msg_dontroute='$d_msg_dontroute'
13620 d_msg_oob='$d_msg_oob'
13621 d_msg_peek='$d_msg_peek'
13622 d_msg_proxy='$d_msg_proxy'
13623 d_msgctl='$d_msgctl'
13624 d_msgget='$d_msgget'
13625 d_msghdr_s='$d_msghdr_s'
13626 d_msgrcv='$d_msgrcv'
13627 d_msgsnd='$d_msgsnd'
13628 d_msync='$d_msync'
13629 d_munmap='$d_munmap'
13630 d_mymalloc='$d_mymalloc'
13631 d_nextkey64='$d_nextkey64'
13632 d_nice='$d_nice'
13633 d_off64_t='$d_off64_t'
13634 d_offset_t='$d_offset_t'
13635 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13636 d_oldpthreads='$d_oldpthreads'
13637 d_oldsock='$d_oldsock'
13638 d_open3='$d_open3'
13639 d_open64='$d_open64'
13640 d_opendir64='$d_opendir64'
13641 d_pathconf='$d_pathconf'
13642 d_pause='$d_pause'
13643 d_phostname='$d_phostname'
13644 d_pipe='$d_pipe'
13645 d_poll='$d_poll'
13646 d_portable='$d_portable'
13647 d_pthread_yield='$d_pthread_yield'
13648 d_pwage='$d_pwage'
13649 d_pwchange='$d_pwchange'
13650 d_pwclass='$d_pwclass'
13651 d_pwcomment='$d_pwcomment'
13652 d_pwexpire='$d_pwexpire'
13653 d_pwgecos='$d_pwgecos'
13654 d_pwpasswd='$d_pwpasswd'
13655 d_pwquota='$d_pwquota'
13656 d_readdir64='$d_readdir64'
13657 d_readdir='$d_readdir'
13658 d_readlink='$d_readlink'
13659 d_readv='$d_readv'
13660 d_recvmsg='$d_recvmsg'
13661 d_rename='$d_rename'
13662 d_rewinddir='$d_rewinddir'
13663 d_rmdir='$d_rmdir'
13664 d_safebcpy='$d_safebcpy'
13665 d_safemcpy='$d_safemcpy'
13666 d_sanemcmp='$d_sanemcmp'
13667 d_sched_yield='$d_sched_yield'
13668 d_scm_rights='$d_scm_rights'
13669 d_seekdir64='$d_seekdir64'
13670 d_seekdir='$d_seekdir'
13671 d_select='$d_select'
13672 d_sem='$d_sem'
13673 d_semctl='$d_semctl'
13674 d_semctl_semid_ds='$d_semctl_semid_ds'
13675 d_semctl_semun='$d_semctl_semun'
13676 d_semget='$d_semget'
13677 d_semop='$d_semop'
13678 d_sendmsg='$d_sendmsg'
13679 d_setegid='$d_setegid'
13680 d_seteuid='$d_seteuid'
13681 d_setgrent='$d_setgrent'
13682 d_setgrps='$d_setgrps'
13683 d_sethent='$d_sethent'
13684 d_setlinebuf='$d_setlinebuf'
13685 d_setlocale='$d_setlocale'
13686 d_setnent='$d_setnent'
13687 d_setpent='$d_setpent'
13688 d_setpgid='$d_setpgid'
13689 d_setpgrp2='$d_setpgrp2'
13690 d_setpgrp='$d_setpgrp'
13691 d_setprior='$d_setprior'
13692 d_setpwent='$d_setpwent'
13693 d_setregid='$d_setregid'
13694 d_setresgid='$d_setresgid'
13695 d_setresuid='$d_setresuid'
13696 d_setreuid='$d_setreuid'
13697 d_setrgid='$d_setrgid'
13698 d_setruid='$d_setruid'
13699 d_setsent='$d_setsent'
13700 d_setsid='$d_setsid'
13701 d_setspent='$d_setspent'
13702 d_setvbuf='$d_setvbuf'
13703 d_sfio='$d_sfio'
13704 d_shm='$d_shm'
13705 d_shmat='$d_shmat'
13706 d_shmatprototype='$d_shmatprototype'
13707 d_shmctl='$d_shmctl'
13708 d_shmdt='$d_shmdt'
13709 d_shmget='$d_shmget'
13710 d_sigaction='$d_sigaction'
13711 d_sigsetjmp='$d_sigsetjmp'
13712 d_socket='$d_socket'
13713 d_sockpair='$d_sockpair'
13714 d_stat64='$d_stat64'
13715 d_statblks='$d_statblks'
13716 d_statfs='$d_statfs'
13717 d_statfsflags='$d_statfsflags'
13718 d_statvfs='$d_statvfs'
13719 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13720 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13721 d_stdio_stream_array='$d_stdio_stream_array'
13722 d_stdiobase='$d_stdiobase'
13723 d_stdstdio='$d_stdstdio'
13724 d_store64='$d_store64'
13725 d_strchr='$d_strchr'
13726 d_strcoll='$d_strcoll'
13727 d_strctcpy='$d_strctcpy'
13728 d_strerrm='$d_strerrm'
13729 d_strerror='$d_strerror'
13730 d_strtod='$d_strtod'
13731 d_strtol='$d_strtol'
13732 d_strtoul='$d_strtoul'
13733 d_strtoull='$d_strtoull'
13734 d_strxfrm='$d_strxfrm'
13735 d_suidsafe='$d_suidsafe'
13736 d_symlink='$d_symlink'
13737 d_syscall='$d_syscall'
13738 d_sysconf='$d_sysconf'
13739 d_sysernlst='$d_sysernlst'
13740 d_syserrlst='$d_syserrlst'
13741 d_system='$d_system'
13742 d_tcgetpgrp='$d_tcgetpgrp'
13743 d_tcsetpgrp='$d_tcsetpgrp'
13744 d_telldir64='$d_telldir64'
13745 d_telldir='$d_telldir'
13746 d_telldirproto='$d_telldirproto'
13747 d_time='$d_time'
13748 d_times='$d_times'
13749 d_tmpfile64='$d_tmpfile64'
13750 d_truncate64='$d_truncate64'
13751 d_truncate='$d_truncate'
13752 d_tzname='$d_tzname'
13753 d_umask='$d_umask'
13754 d_uname='$d_uname'
13755 d_union_semun='$d_union_semun'
13756 d_vendorlib='$d_vendorlib'
13757 d_vfork='$d_vfork'
13758 d_void_closedir='$d_void_closedir'
13759 d_voidsig='$d_voidsig'
13760 d_voidtty='$d_voidtty'
13761 d_volatile='$d_volatile'
13762 d_vprintf='$d_vprintf'
13763 d_wait4='$d_wait4'
13764 d_waitpid='$d_waitpid'
13765 d_wcstombs='$d_wcstombs'
13766 d_wctomb='$d_wctomb'
13767 d_writev='$d_writev'
13768 d_xenix='$d_xenix'
13769 date='$date'
13770 db_hashtype='$db_hashtype'
13771 db_prefixtype='$db_prefixtype'
13772 defvoidused='$defvoidused'
13773 direntrytype='$direntrytype'
13774 dlext='$dlext'
13775 dlsrc='$dlsrc'
13776 doublesize='$doublesize'
13777 drand01='$drand01'
13778 dynamic_ext='$dynamic_ext'
13779 eagain='$eagain'
13780 ebcdic='$ebcdic'
13781 echo='$echo'
13782 egrep='$egrep'
13783 emacs='$emacs'
13784 eunicefix='$eunicefix'
13785 exe_ext='$exe_ext'
13786 expr='$expr'
13787 extensions='$extensions'
13788 fflushNULL='$fflushNULL'
13789 fflushall='$fflushall'
13790 find='$find'
13791 firstmakefile='$firstmakefile'
13792 flex='$flex'
13793 fpostype='$fpostype'
13794 freetype='$freetype'
13795 full_ar='$full_ar'
13796 full_csh='$full_csh'
13797 full_sed='$full_sed'
13798 gccversion='$gccversion'
13799 gidtype='$gidtype'
13800 glibpth='$glibpth'
13801 grep='$grep'
13802 groupcat='$groupcat'
13803 groupstype='$groupstype'
13804 gzip='$gzip'
13805 h_fcntl='$h_fcntl'
13806 h_sysfile='$h_sysfile'
13807 hint='$hint'
13808 hostcat='$hostcat'
13809 huge='$huge'
13810 i_arpainet='$i_arpainet'
13811 i_bsdioctl='$i_bsdioctl'
13812 i_db='$i_db'
13813 i_dbm='$i_dbm'
13814 i_dirent='$i_dirent'
13815 i_dld='$i_dld'
13816 i_dlfcn='$i_dlfcn'
13817 i_fcntl='$i_fcntl'
13818 i_float='$i_float'
13819 i_gdbm='$i_gdbm'
13820 i_grp='$i_grp'
13821 i_inttypes='$i_inttypes'
13822 i_limits='$i_limits'
13823 i_locale='$i_locale'
13824 i_machcthr='$i_machcthr'
13825 i_malloc='$i_malloc'
13826 i_math='$i_math'
13827 i_memory='$i_memory'
13828 i_mntent='$i_mntent'
13829 i_ndbm='$i_ndbm'
13830 i_netdb='$i_netdb'
13831 i_neterrno='$i_neterrno'
13832 i_netinettcp='$i_netinettcp'
13833 i_niin='$i_niin'
13834 i_poll='$i_poll'
13835 i_pthread='$i_pthread'
13836 i_pwd='$i_pwd'
13837 i_rpcsvcdbm='$i_rpcsvcdbm'
13838 i_sfio='$i_sfio'
13839 i_sgtty='$i_sgtty'
13840 i_shadow='$i_shadow'
13841 i_socks='$i_socks'
13842 i_stdarg='$i_stdarg'
13843 i_stddef='$i_stddef'
13844 i_stdlib='$i_stdlib'
13845 i_string='$i_string'
13846 i_sysaccess='$i_sysaccess'
13847 i_sysdir='$i_sysdir'
13848 i_sysfile='$i_sysfile'
13849 i_sysfilio='$i_sysfilio'
13850 i_sysin='$i_sysin'
13851 i_sysioctl='$i_sysioctl'
13852 i_sysmman='$i_sysmman'
13853 i_sysmount='$i_sysmount'
13854 i_sysndir='$i_sysndir'
13855 i_sysparam='$i_sysparam'
13856 i_sysresrc='$i_sysresrc'
13857 i_syssecrt='$i_syssecrt'
13858 i_sysselct='$i_sysselct'
13859 i_syssockio='$i_syssockio'
13860 i_sysstat='$i_sysstat'
13861 i_sysstatvfs='$i_sysstatvfs'
13862 i_systime='$i_systime'
13863 i_systimek='$i_systimek'
13864 i_systimes='$i_systimes'
13865 i_systypes='$i_systypes'
13866 i_sysuio='$i_sysuio'
13867 i_sysun='$i_sysun'
13868 i_syswait='$i_syswait'
13869 i_termio='$i_termio'
13870 i_termios='$i_termios'
13871 i_time='$i_time'
13872 i_unistd='$i_unistd'
13873 i_utime='$i_utime'
13874 i_values='$i_values'
13875 i_varargs='$i_varargs'
13876 i_varhdr='$i_varhdr'
13877 i_vfork='$i_vfork'
13878 ignore_versioned_solibs='$ignore_versioned_solibs'
13879 incpath='$incpath'
13880 inews='$inews'
13881 installarchlib='$installarchlib'
13882 installbin='$installbin'
13883 installman1dir='$installman1dir'
13884 installman3dir='$installman3dir'
13885 installprefix='$installprefix'
13886 installprefixexp='$installprefixexp'
13887 installprivlib='$installprivlib'
13888 installscript='$installscript'
13889 installsitearch='$installsitearch'
13890 installsitelib='$installsitelib'
13891 installstyle='$installstyle'
13892 installusrbinperl='$installusrbinperl'
13893 installvendorlib='$installvendorlib'
13894 intsize='$intsize'
13895 known_extensions='$known_extensions'
13896 ksh='$ksh'
13897 large='$large'
13898 ld='$ld'
13899 lddlflags='$lddlflags'
13900 ldflags='$ldflags'
13901 ldlibpthname='$ldlibpthname'
13902 less='$less'
13903 lib_ext='$lib_ext'
13904 libc='$libc'
13905 libperl='$libperl'
13906 libpth='$libpth'
13907 libs='$libs'
13908 libswanted='$libswanted'
13909 line='$line'
13910 lint='$lint'
13911 lkflags='$lkflags'
13912 ln='$ln'
13913 lns='$lns'
13914 locincpth='$locincpth'
13915 loclibpth='$loclibpth'
13916 longdblsize='$longdblsize'
13917 longlongsize='$longlongsize'
13918 longsize='$longsize'
13919 lp='$lp'
13920 lpr='$lpr'
13921 ls='$ls'
13922 lseeksize='$lseeksize'
13923 lseektype='$lseektype'
13924 mail='$mail'
13925 mailx='$mailx'
13926 make='$make'
13927 make_set_make='$make_set_make'
13928 mallocobj='$mallocobj'
13929 mallocsrc='$mallocsrc'
13930 malloctype='$malloctype'
13931 man1dir='$man1dir'
13932 man1direxp='$man1direxp'
13933 man1ext='$man1ext'
13934 man3dir='$man3dir'
13935 man3direxp='$man3direxp'
13936 man3ext='$man3ext'
13937 medium='$medium'
13938 mips='$mips'
13939 mips_type='$mips_type'
13940 mkdir='$mkdir'
13941 mmaptype='$mmaptype'
13942 models='$models'
13943 modetype='$modetype'
13944 more='$more'
13945 multiarch='$multiarch'
13946 mv='$mv'
13947 myarchname='$myarchname'
13948 mydomain='$mydomain'
13949 myhostname='$myhostname'
13950 myuname='$myuname'
13951 n='$n'
13952 netdb_hlen_type='$netdb_hlen_type'
13953 netdb_host_type='$netdb_host_type'
13954 netdb_name_type='$netdb_name_type'
13955 netdb_net_type='$netdb_net_type'
13956 nm='$nm'
13957 nm_opt='$nm_opt'
13958 nm_so_opt='$nm_so_opt'
13959 nonxs_ext='$nonxs_ext'
13960 nroff='$nroff'
13961 o_nonblock='$o_nonblock'
13962 obj_ext='$obj_ext'
13963 old_pthread_create_joinable='$old_pthread_create_joinable'
13964 optimize='$optimize'
13965 orderlib='$orderlib'
13966 osname='$osname'
13967 osvers='$osvers'
13968 package='$package'
13969 pager='$pager'
13970 passcat='$passcat'
13971 patchlevel='$patchlevel'
13972 path_sep='$path_sep'
13973 perl='$perl'
13974 perladmin='$perladmin'
13975 perlpath='$perlpath'
13976 pg='$pg'
13977 phostname='$phostname'
13978 pidtype='$pidtype'
13979 plibpth='$plibpth'
13980 pmake='$pmake'
13981 pr='$pr'
13982 prefix='$prefix'
13983 prefixexp='$prefixexp'
13984 privlib='$privlib'
13985 privlibexp='$privlibexp'
13986 prototype='$prototype'
13987 ptrsize='$ptrsize'
13988 randbits='$randbits'
13989 randfunc='$randfunc'
13990 randseedtype='$randseedtype'
13991 ranlib='$ranlib'
13992 rd_nodata='$rd_nodata'
13993 rm='$rm'
13994 rmail='$rmail'
13995 runnm='$runnm'
13996 sPRIEldbl='$sPRIEldbl'
13997 sPRIFldbl='$sPRIFldbl'
13998 sPRIGldbl='$sPRIGldbl'
13999 sPRIX64='$sPRIX64'
14000 sPRId64='$sPRId64'
14001 sPRIeldbl='$sPRIeldbl'
14002 sPRIfldbl='$sPRIfldbl'
14003 sPRIgldbl='$sPRIgldbl'
14004 sPRIi64='$sPRIi64'
14005 sPRIo64='$sPRIo64'
14006 sPRIu64='$sPRIu64'
14007 sPRIx64='$sPRIx64'
14008 sched_yield='$sched_yield'
14009 scriptdir='$scriptdir'
14010 scriptdirexp='$scriptdirexp'
14011 sed='$sed'
14012 seedfunc='$seedfunc'
14013 selectminbits='$selectminbits'
14014 selecttype='$selecttype'
14015 sendmail='$sendmail'
14016 sh='$sh'
14017 shar='$shar'
14018 sharpbang='$sharpbang'
14019 shmattype='$shmattype'
14020 shortsize='$shortsize'
14021 shrpenv='$shrpenv'
14022 shsharp='$shsharp'
14023 sig_count='$sig_count'
14024 sig_name='$sig_name'
14025 sig_name_init='$sig_name_init'
14026 sig_num='$sig_num'
14027 sig_num_init='$sig_num_init'
14028 signal_t='$signal_t'
14029 sitearch='$sitearch'
14030 sitearchexp='$sitearchexp'
14031 sitelib='$sitelib'
14032 sitelibexp='$sitelibexp'
14033 siteprefix='$siteprefix'
14034 siteprefixexp='$siteprefixexp'
14035 sizetype='$sizetype'
14036 sleep='$sleep'
14037 smail='$smail'
14038 small='$small'
14039 so='$so'
14040 sockethdr='$sockethdr'
14041 socketlib='$socketlib'
14042 sort='$sort'
14043 spackage='$spackage'
14044 spitshell='$spitshell'
14045 split='$split'
14046 src='$src'
14047 ssizetype='$ssizetype'
14048 startperl='$startperl'
14049 startsh='$startsh'
14050 static_ext='$static_ext'
14051 stdchar='$stdchar'
14052 stdio_base='$stdio_base'
14053 stdio_bufsiz='$stdio_bufsiz'
14054 stdio_cnt='$stdio_cnt'
14055 stdio_filbuf='$stdio_filbuf'
14056 stdio_ptr='$stdio_ptr'
14057 stdio_stream_array='$stdio_stream_array'
14058 strings='$strings'
14059 submit='$submit'
14060 subversion='$subversion'
14061 sysman='$sysman'
14062 tail='$tail'
14063 tar='$tar'
14064 tbl='$tbl'
14065 tee='$tee'
14066 test='$test'
14067 timeincl='$timeincl'
14068 timetype='$timetype'
14069 touch='$touch'
14070 tr='$tr'
14071 trnl='$trnl'
14072 troff='$troff'
14073 uidtype='$uidtype'
14074 uname='$uname'
14075 uniq='$uniq'
14076 use64bits='$use64bits'
14077 usedl='$usedl'
14078 usemultiplicity='$usemultiplicity'
14079 usemymalloc='$usemymalloc'
14080 usenm='$usenm'
14081 useopcode='$useopcode'
14082 useperlio='$useperlio'
14083 useposix='$useposix'
14084 usesfio='$usesfio'
14085 useshrplib='$useshrplib'
14086 usesocks='$usesocks'
14087 usethreads='$usethreads'
14088 usevendorprefix='$usevendorprefix'
14089 usevfork='$usevfork'
14090 usrinc='$usrinc'
14091 uuname='$uuname'
14092 vendorlib='$vendorlib'
14093 vendorlibexp='$vendorlibexp'
14094 vendorprefix='$vendorprefix'
14095 vendorprefixexp='$vendorprefixexp'
14096 version='$version'
14097 vi='$vi'
14098 voidflags='$voidflags'
14099 xlibpth='$xlibpth'
14100 zcat='$zcat'
14101 zip='$zip'
14102 EOT
14103
14104 : Add in command line options if available
14105 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
14106
14107 : add special variables
14108 $test -f $src/patchlevel.h && \
14109 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
14110 echo "CONFIGDOTSH=true" >>config.sh
14111
14112 : propagate old symbols
14113 if $test -f UU/config.sh; then
14114         <UU/config.sh sort | uniq >UU/oldconfig.sh
14115         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
14116         sort | uniq -u >UU/oldsyms
14117         set X `cat UU/oldsyms`
14118         shift
14119         case $# in
14120         0) ;;
14121         *)
14122                 cat <<EOM
14123 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
14124 EOM
14125                 echo "# Variables propagated from previous config.sh file." >>config.sh
14126                 for sym in `cat UU/oldsyms`; do
14127                         echo "    Propagating $hint variable "'$'"$sym..."
14128                         eval 'tmp="$'"${sym}"'"'
14129                         echo "$tmp" | \
14130                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
14131                 done
14132                 ;;
14133         esac
14134 fi
14135
14136 : Finish up by extracting the .SH files
14137 case "$alldone" in
14138 exit)
14139         $rm -rf UU
14140         echo "Done."
14141         exit 0
14142         ;;
14143 cont)
14144         ;;
14145 '')
14146         dflt=''
14147         nostick=true
14148         $cat <<EOM
14149
14150 If you'd like to make any changes to the config.sh file before I begin
14151 to configure things, do it as a shell escape now (e.g. !vi config.sh).
14152
14153 EOM
14154         rp="Press return or use a shell escape to edit config.sh:"
14155         . UU/myread
14156         nostick=''
14157         case "$ans" in
14158         '') ;;
14159         *) : in case they cannot read
14160                 sh 1>&4 -c "$ans";;
14161         esac
14162         ;;
14163 esac
14164
14165 : if this fails, just run all the .SH files by hand
14166 . ./config.sh
14167
14168 echo " "
14169 exec 1>&4
14170 . ./UU/extract
14171
14172 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
14173         dflt=y
14174         case "$silent" in
14175         true) ;;
14176         *)
14177                 $cat <<EOM
14178
14179 Now you need to generate make dependencies by running "$make depend".
14180 You might prefer to run it in background: "$make depend > makedepend.out &"
14181 It can take a while, so you might not want to run it right now.
14182
14183 EOM
14184                 ;;
14185         esac
14186         rp="Run $make depend now?"
14187         . UU/myread
14188         case "$ans" in
14189         y*)
14190                 $make depend && echo "Now you must run a $make."
14191                 ;;
14192         *)
14193                 echo "You must run '$make depend' then '$make'."
14194                 ;;
14195         esac
14196 elif test -f [Mm]akefile; then
14197         echo " "
14198         echo "Now you must run a $make."
14199 else
14200         echo "Done."
14201 fi
14202
14203 if $test -f Policy.sh; then
14204     $cat <<EOM
14205
14206 If you compile $package on a different machine or from a different object
14207 directory, copy the Policy.sh file from this object directory to the
14208 new one before you run Configure -- this will help you with most of
14209 the policy defaults.
14210
14211 EOM
14212 fi
14213 if $test -f config.msg; then
14214     echo "Hmm.  I also noted the following information while running:"
14215     echo " "
14216     $cat config.msg >&4
14217     $rm -f config.msg
14218 fi
14219 $rm -f kit*isdone ark*isdone
14220 $rm -rf UU
14221
14222 : End of Configure
14223