Make Configure support PERL_BINCOMPAT_5005.
[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 Thu Jul 29 23:50:22 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 bincompat5005=''
286 d_bincompat5005=''
287 byteorder=''
288 cc=''
289 gccversion=''
290 ccflags=''
291 cppflags=''
292 ldflags=''
293 lkflags=''
294 locincpth=''
295 optimize=''
296 cf_email=''
297 cf_by=''
298 cf_time=''
299 contains=''
300 cpp_stuff=''
301 cpplast=''
302 cppminus=''
303 cpprun=''
304 cppstdin=''
305 crosscompile=''
306 d_access=''
307 d_accessx=''
308 d_alarm=''
309 d_attribut=''
310 d_bcmp=''
311 d_bcopy=''
312 d_bzero=''
313 d_casti32=''
314 castflags=''
315 d_castneg=''
316 d_chown=''
317 d_chroot=''
318 d_chsize=''
319 d_closedir=''
320 d_void_closedir=''
321 d_const=''
322 cryptlib=''
323 d_crypt=''
324 d_csh=''
325 full_csh=''
326 d_cuserid=''
327 d_dbl_dig=''
328 d_difftime=''
329 d_dlerror=''
330 d_dlopen=''
331 d_dlsymun=''
332 d_dosuid=''
333 d_suidsafe=''
334 d_drand48proto=''
335 d_dup2=''
336 d_eaccess=''
337 d_endgrent=''
338 d_endhent=''
339 d_endnent=''
340 d_endpent=''
341 d_endpwent=''
342 d_endsent=''
343 d_endspent=''
344 d_fchmod=''
345 d_fchown=''
346 d_fcntl=''
347 d_fd_macros=''
348 d_fd_set=''
349 d_fds_bits=''
350 d_fgetpos=''
351 d_flexfnam=''
352 d_flock=''
353 d_fork=''
354 d_fseeko=''
355 d_fsetpos=''
356 d_ftello=''
357 d_ftime=''
358 d_gettimeod=''
359 d_Gconvert=''
360 d_getgrent=''
361 d_getgrps=''
362 d_gethbyaddr=''
363 d_gethbyname=''
364 d_gethent=''
365 aphostname=''
366 d_gethname=''
367 d_phostname=''
368 d_uname=''
369 d_gethostprotos=''
370 d_getlogin=''
371 d_getmntent=''
372 d_getnbyaddr=''
373 d_getnbyname=''
374 d_getnent=''
375 d_getnetprotos=''
376 d_getpent=''
377 d_getpgid=''
378 d_getpgrp2=''
379 d_bsdgetpgrp=''
380 d_getpgrp=''
381 d_getppid=''
382 d_getprior=''
383 d_getpbyname=''
384 d_getpbynumber=''
385 d_getprotoprotos=''
386 d_getpwent=''
387 d_getsent=''
388 d_getservprotos=''
389 d_getspent=''
390 d_getspnam=''
391 d_getsbyname=''
392 d_getsbyport=''
393 d_gnulibc=''
394 d_hasmntopt=''
395 d_htonl=''
396 d_inetaton=''
397 d_isascii=''
398 d_killpg=''
399 d_lchown=''
400 d_link=''
401 d_locconv=''
402 d_lockf=''
403 d_longdbl=''
404 longdblsize=''
405 d_longlong=''
406 longlongsize=''
407 d_lstat=''
408 d_madvise=''
409 d_mblen=''
410 d_mbstowcs=''
411 d_mbtowc=''
412 d_memchr=''
413 d_memcmp=''
414 d_memcpy=''
415 d_memmove=''
416 d_memset=''
417 d_mkdir=''
418 d_mkfifo=''
419 d_mktime=''
420 d_mmap=''
421 mmaptype=''
422 d_mprotect=''
423 d_msg=''
424 d_msgctl=''
425 d_msgget=''
426 d_msgrcv=''
427 d_msgsnd=''
428 d_msync=''
429 d_munmap=''
430 d_nice=''
431 d_open3=''
432 d_fpathconf=''
433 d_pathconf=''
434 d_pause=''
435 d_pipe=''
436 d_poll=''
437 d_portable=''
438 d_old_pthread_create_joinable=''
439 old_pthread_create_joinable=''
440 d_pthread_yield=''
441 d_sched_yield=''
442 sched_yield=''
443 d_readdir=''
444 d_rewinddir=''
445 d_seekdir=''
446 d_telldir=''
447 d_readlink=''
448 d_readv=''
449 d_rename=''
450 d_rmdir=''
451 d_safebcpy=''
452 d_safemcpy=''
453 d_sanemcmp=''
454 d_select=''
455 d_sem=''
456 d_semctl=''
457 d_semget=''
458 d_semop=''
459 d_setegid=''
460 d_seteuid=''
461 d_setgrent=''
462 d_setgrps=''
463 d_sethent=''
464 d_setlinebuf=''
465 d_setlocale=''
466 d_setnent=''
467 d_setpent=''
468 d_setpgid=''
469 d_setpgrp2=''
470 d_bsdsetpgrp=''
471 d_setpgrp=''
472 d_setprior=''
473 d_setpwent=''
474 d_setregid=''
475 d_setresgid=''
476 d_setresuid=''
477 d_setreuid=''
478 d_setrgid=''
479 d_setruid=''
480 d_setsent=''
481 d_setsid=''
482 d_setspent=''
483 d_setvbuf=''
484 d_sfio=''
485 usesfio=''
486 d_shm=''
487 d_shmat=''
488 d_shmatprototype=''
489 shmattype=''
490 d_shmctl=''
491 d_shmdt=''
492 d_shmget=''
493 d_sigaction=''
494 d_sigsetjmp=''
495 d_cmsghdr_s=''
496 d_msg_ctrunc=''
497 d_msg_dontroute=''
498 d_msg_oob=''
499 d_msg_peek=''
500 d_msg_proxy=''
501 d_msghdr_s=''
502 d_oldsock=''
503 d_recvmsg=''
504 d_scm_rights=''
505 d_sendmsg=''
506 d_socket=''
507 d_sockpair=''
508 sockethdr=''
509 socketlib=''
510 d_statblks=''
511 d_fstatfs=''
512 d_statfs=''
513 d_statfsflags=''
514 d_fstatvfs=''
515 d_statvfs=''
516 d_stdio_cnt_lval=''
517 d_stdio_ptr_lval=''
518 d_stdiobase=''
519 d_stdstdio=''
520 stdio_base=''
521 stdio_bufsiz=''
522 stdio_cnt=''
523 stdio_filbuf=''
524 stdio_ptr=''
525 d_index=''
526 d_strchr=''
527 d_strcoll=''
528 d_strctcpy=''
529 d_strerrm=''
530 d_strerror=''
531 d_sysernlst=''
532 d_syserrlst=''
533 d_strtod=''
534 d_strtol=''
535 d_strtoul=''
536 d_strxfrm=''
537 d_symlink=''
538 d_syscall=''
539 d_sysconf=''
540 d_system=''
541 d_tcgetpgrp=''
542 d_tcsetpgrp=''
543 d_telldirproto=''
544 d_time=''
545 timetype=''
546 clocktype=''
547 d_times=''
548 d_truncate=''
549 d_tzname=''
550 d_umask=''
551 d_semctl_semid_ds=''
552 d_semctl_semun=''
553 d_union_semun=''
554 d_vfork=''
555 usevfork=''
556 d_voidsig=''
557 signal_t=''
558 d_volatile=''
559 d_charvspr=''
560 d_vprintf=''
561 d_wait4=''
562 d_waitpid=''
563 d_wcstombs=''
564 d_wctomb=''
565 d_writev=''
566 d_dbmclose64=''
567 d_dbminit64=''
568 d_delete64=''
569 d_fetch64=''
570 d_firstkey64=''
571 d_nextkey64=''
572 d_store64=''
573 dlext=''
574 cccdlflags=''
575 ccdlflags=''
576 dlsrc=''
577 ld=''
578 lddlflags=''
579 usedl=''
580 doublesize=''
581 ebcdic=''
582 fflushNULL=''
583 fflushall=''
584 fpostype=''
585 gidtype=''
586 groupstype=''
587 h_fcntl=''
588 h_sysfile=''
589 i_arpainet=''
590 db_hashtype=''
591 db_prefixtype=''
592 i_db=''
593 i_dbm=''
594 i_rpcsvcdbm=''
595 d_dirnamlen=''
596 direntrytype=''
597 i_dirent=''
598 i_dld=''
599 i_dlfcn=''
600 i_fcntl=''
601 i_float=''
602 i_gdbm=''
603 d_grpasswd=''
604 i_grp=''
605 d_int64t=''
606 i_inttypes=''
607 i_limits=''
608 i_locale=''
609 i_machcthr=''
610 i_malloc=''
611 i_math=''
612 i_memory=''
613 i_mntent=''
614 i_ndbm=''
615 i_netdb=''
616 i_neterrno=''
617 i_netinettcp=''
618 i_niin=''
619 i_sysin=''
620 i_poll=''
621 i_pthread=''
622 d_pwage=''
623 d_pwchange=''
624 d_pwclass=''
625 d_pwcomment=''
626 d_pwexpire=''
627 d_pwgecos=''
628 d_pwpasswd=''
629 d_pwquota=''
630 i_pwd=''
631 i_sfio=''
632 i_shadow=''
633 i_socks=''
634 i_stddef=''
635 i_stdlib=''
636 i_string=''
637 strings=''
638 i_sysaccess=''
639 i_sysdir=''
640 i_sysfile=''
641 d_voidtty=''
642 i_bsdioctl=''
643 i_sysfilio=''
644 i_sysioctl=''
645 i_syssockio=''
646 i_sysmman=''
647 i_sysmount=''
648 i_sysndir=''
649 i_sysparam=''
650 i_sysresrc=''
651 i_syssecrt=''
652 i_sysselct=''
653 i_sysstat=''
654 i_sysstatvfs=''
655 i_systimes=''
656 i_systypes=''
657 d_iovec_s=''
658 i_sysuio=''
659 i_sysun=''
660 i_syswait=''
661 i_sgtty=''
662 i_termio=''
663 i_termios=''
664 i_systime=''
665 i_systimek=''
666 i_time=''
667 timeincl=''
668 i_unistd=''
669 i_utime=''
670 i_values=''
671 i_stdarg=''
672 i_varargs=''
673 i_varhdr=''
674 i_vfork=''
675 installprefix=''
676 installprefixexp=''
677 installstyle=''
678 installusrbinperl=''
679 intsize=''
680 longsize=''
681 shortsize=''
682 d_dirent64_s=''
683 d_flock64_s=''
684 d_fstat64=''
685 d_ftruncate64=''
686 d_ino64_t=''
687 d_llseek=''
688 d_lockf64=''
689 d_lseek64=''
690 d_lstat64=''
691 d_off64_t=''
692 d_offset_t=''
693 d_open64=''
694 d_opendir64=''
695 d_readdir64=''
696 d_seekdir64=''
697 d_stat64=''
698 d_telldir64=''
699 d_truncate64=''
700 libc=''
701 ldlibpthname=''
702 libperl=''
703 shrpenv=''
704 useshrplib=''
705 glibpth=''
706 libpth=''
707 loclibpth=''
708 plibpth=''
709 xlibpth=''
710 ignore_versioned_solibs=''
711 libs=''
712 lns=''
713 lseeksize=''
714 lseektype=''
715 make_set_make=''
716 d_mymalloc=''
717 freetype=''
718 mallocobj=''
719 mallocsrc=''
720 malloctype=''
721 usemymalloc=''
722 installman1dir=''
723 man1dir=''
724 man1direxp=''
725 man1ext=''
726 installman3dir=''
727 man3dir=''
728 man3direxp=''
729 man3ext=''
730 huge=''
731 large=''
732 medium=''
733 models=''
734 small=''
735 split=''
736 modetype=''
737 multiarch=''
738 mydomain=''
739 myhostname=''
740 phostname=''
741 c=''
742 n=''
743 d_eofnblk=''
744 eagain=''
745 o_nonblock=''
746 rd_nodata=''
747 netdb_hlen_type=''
748 netdb_host_type=''
749 netdb_name_type=''
750 netdb_net_type=''
751 groupcat=''
752 hostcat=''
753 passcat=''
754 orderlib=''
755 ranlib=''
756 package=''
757 spackage=''
758 pager=''
759 apiversion=''
760 patchlevel=''
761 subversion=''
762 version=''
763 perladmin=''
764 perlpath=''
765 pidtype=''
766 prefix=''
767 prefixexp=''
768 installprivlib=''
769 privlib=''
770 privlibexp=''
771 prototype=''
772 ptrsize=''
773 drand01=''
774 randbits=''
775 randfunc=''
776 randseedtype=''
777 seedfunc=''
778 installscript=''
779 scriptdir=''
780 scriptdirexp=''
781 selectminbits=''
782 selecttype=''
783 sh=''
784 sig_count=''
785 sig_name=''
786 sig_name_init=''
787 sig_num=''
788 sig_num_init=''
789 installsitearch=''
790 sitearch=''
791 sitearchexp=''
792 installsitelib=''
793 sitelib=''
794 sitelibexp=''
795 siteprefix=''
796 siteprefixexp=''
797 sizetype=''
798 so=''
799 sharpbang=''
800 shsharp=''
801 spitshell=''
802 src=''
803 ssizetype=''
804 startperl=''
805 startsh=''
806 stdchar=''
807 d_fgetpos64=''
808 d_fopen64=''
809 d_freopen64=''
810 d_fseek64=''
811 d_fseeko64=''
812 d_fsetpos64=''
813 d_ftell64=''
814 d_ftello64=''
815 d_tmpfile64=''
816 d_stdio_stream_array=''
817 stdio_stream_array=''
818 sysman=''
819 trnl=''
820 uidtype=''
821 archname64=''
822 use64bits=''
823 usemultiplicity=''
824 nm_opt=''
825 nm_so_opt=''
826 runnm=''
827 usenm=''
828 useperlio=''
829 usesocks=''
830 d_oldpthreads=''
831 usethreads=''
832 incpath=''
833 mips=''
834 mips_type=''
835 usrinc=''
836 d_vendorlib=''
837 installvendorlib=''
838 vendorlib=''
839 vendorlibexp=''
840 usevendorprefix=''
841 vendorprefix=''
842 vendorprefixexp=''
843 defvoidused=''
844 voidflags=''
845 CONFIG=''
846
847 define='define'
848 undef='undef'
849 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
850 rmlist=''
851
852 : We must find out about Eunice early
853 eunicefix=':'
854 if test -f /etc/unixtovms; then
855         eunicefix=/etc/unixtovms
856 fi
857 if test -f /etc/unixtovms.exe; then
858         eunicefix=/etc/unixtovms.exe
859 fi
860
861 i_whoami=''
862 : Possible local include directories to search.
863 : Set locincpth to "" in a hint file to defeat local include searches.
864 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
865 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
866 :
867 : no include file wanted by default
868 inclwanted=''
869
870 : list of known cpp symbols, sorted alphabetically
871 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
872 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
873 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
874 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
875 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
876 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
877 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
878 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
879 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
880 al="$al VMS Xenix286"
881 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
882 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
883 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
884 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
885 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
886 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
887 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
888 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
889 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
890 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
891 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
892 al="$al __SVR4_2__ __UMAXV__"
893 al="$al ____386BSD____ __alpha __alpha__ __amiga"
894 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
895 al="$al __host_mips__"
896 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
897 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
898 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
899 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
900 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
901 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
902 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
903 al="$al __mc88100 __mc88100__ __mips __mips__"
904 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
905 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
906 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
907 al="$al _host_mips _mips _unix"
908 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
909 al="$al apollo ardent att386 att3b"
910 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
911 al="$al cadmus clipper concurrent convex cray ctix"
912 al="$al dmert encore gcos gcx gimpel gould"
913 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
914 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
915 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
916 al="$al i186 i286 i386 i486 i8086"
917 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
918 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
919 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
920 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
921 al="$al mc88000 mc88100 merlin mert mips mvs n16"
922 al="$al ncl_el ncl_mr"
923 al="$al news1500 news1700 news1800 news1900 news3700"
924 al="$al news700 news800 news900 ns16000 ns32000"
925 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
926 al="$al parisc pc532 pdp11 plexus posix pyr"
927 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
928 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
929 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
930 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
931 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
932 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
933 al="$al xenix z8000"
934
935 : Trailing extension.  Override this in a hint file, if needed.
936 _exe=''
937 : Extra object files, if any, needed on this platform.
938 archobjs=''
939 groupstype=''
940 : change the next line if compiling for Xenix/286 on Xenix/386
941 xlibpth='/usr/lib/386 /lib/386'
942
943 : Possible local library directories to search.
944 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
945 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
946
947 : general looking path for locating libraries
948 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
949 glibpth="$glibpth /lib /usr/lib $xlibpth"
950 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
951 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
952
953 : Private path used by Configure to find libraries.  Its value
954 : is prepended to libpth. This variable takes care of special
955 : machines, like the mips.  Usually, it should be empty.
956 plibpth=''
957
958 : default library list
959 libswanted=''
960 : some systems want to use only the non-versioned libso:s
961 ignore_versioned_solibs=''
962 : full support for void wanted by default
963 defvoidused=15
964
965 : set useposix=false in your hint file to disable the POSIX extension.
966 useposix=true
967 : set useopcode=false in your hint file to disable the Opcode extension.
968 useopcode=true
969 : set usemultiplicity on the Configure command line to enable multiplicity.
970 : set usesocks on the Configure command line to enable socks.
971 : set usethreads on the Configure command line to enable threads.
972 : List of libraries we want.
973 : If anyone needs -lnet, put it in a hint file.
974 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
975 libswanted="$libswanted dld ld sun m rt c cposix posix"
976 libswanted="$libswanted ndir dir crypt sec"
977 libswanted="$libswanted ucb bsd BSD PW x"
978 : We probably want to search /usr/shlib before most other libraries.
979 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
980 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
981 glibpth="/usr/shlib $glibpth"
982 : Do not use vfork unless overridden by a hint file.
983 usevfork=false
984
985 : Find the basic shell for Bourne shell scripts
986 case "$sh" in
987 '')
988         case "$SYSTYPE" in
989         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
990         *) xxx='/bin/sh';;
991         esac
992         if test -f "$xxx"; then
993                 sh="$xxx"
994         else
995                 : Build up a list and do a single loop so we can 'break' out.
996                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
997                 for xxx in sh bash ksh pdksh ash; do
998                         for p in $pth; do
999                                 try="$try ${p}/${xxx}"
1000                         done
1001                 done
1002                 for xxx in $try; do
1003                         if test -f "$xxx"; then
1004                                 sh="$xxx";
1005                                 break
1006                         elif test -f "$xxx.exe"; then
1007                                 sh="$xxx";
1008                                 break
1009                         fi
1010                 done
1011         fi
1012         ;;
1013 esac
1014
1015 case "$sh" in
1016 '')     cat <<EOM >&2
1017 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1018
1019 Usually it's in /bin/sh.  How did you even get this far?
1020 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1021 we'll try to straighten this all out.
1022 EOM
1023         exit 1
1024         ;;
1025 esac
1026
1027 : see if sh knows # comments
1028 if `$sh -c '#' >/dev/null 2>&1`; then
1029         shsharp=true
1030         spitshell=cat
1031         xcat=/bin/cat
1032         test -f $xcat || xcat=/usr/bin/cat
1033         echo "#!$xcat" >try
1034         $eunicefix try
1035         chmod +x try
1036         ./try > today
1037         if test -s today; then
1038                 sharpbang='#!'
1039         else
1040                 echo "#! $xcat" > try
1041                 $eunicefix try
1042                 chmod +x try
1043                 ./try > today
1044                 if test -s today; then
1045                         sharpbang='#! '
1046                 else
1047                         sharpbang=': use '
1048                 fi
1049         fi
1050 else
1051         echo " "
1052         echo "Your $sh doesn't grok # comments--I will strip them later on."
1053         shsharp=false
1054         cd ..
1055         echo "exec grep -v '^[  ]*#'" >spitshell
1056         chmod +x spitshell
1057         $eunicefix spitshell
1058         spitshell=`pwd`/spitshell
1059         cd UU
1060         echo "I presume that if # doesn't work, #! won't work either!"
1061         sharpbang=': use '
1062 fi
1063 rm -f try today
1064
1065 : figure out how to guarantee sh startup
1066 case "$startsh" in
1067 '') startsh=${sharpbang}${sh} ;;
1068 *)
1069 esac
1070 cat >try <<EOSS
1071 $startsh
1072 set abc
1073 test "$?abc" != 1
1074 EOSS
1075
1076 chmod +x try
1077 $eunicefix try
1078 if ./try; then
1079         : echo "Yup, it does."
1080 else
1081         echo "Hmm... '$startsh' does not guarantee sh startup..."
1082         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1083 fi
1084 rm -f try
1085
1086
1087 : Save command line options in file UU/cmdline.opt for later use in
1088 : generating config.sh.
1089 cat > cmdline.opt <<EOSH
1090 # Configure command line arguments.
1091 config_arg0='$0'
1092 config_args='$*'
1093 config_argc=$#
1094 EOSH
1095 argn=1
1096 for arg in "$@"; do
1097         cat >>cmdline.opt <<EOSH
1098 config_arg$argn='$arg'
1099 EOSH
1100         argn=`expr $argn + 1`
1101 done
1102
1103 : produce awk script to parse command line options
1104 cat >options.awk <<'EOF'
1105 BEGIN {
1106         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1107
1108         len = length(optstr);
1109         for (i = 1; i <= len; i++) {
1110                 c = substr(optstr, i, 1);
1111                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1112                 if (a == ":") {
1113                         arg[c] = 1;
1114                         i++;
1115                 }
1116                 opt[c] = 1;
1117         }
1118 }
1119 {
1120         expect = 0;
1121         str = $0;
1122         if (substr(str, 1, 1) != "-") {
1123                 printf("'%s'\n", str);
1124                 next;
1125         }
1126         len = length($0);
1127         for (i = 2; i <= len; i++) {
1128                 c = substr(str, i, 1);
1129                 if (!opt[c]) {
1130                         printf("-%s\n", substr(str, i));
1131                         next;
1132                 }
1133                 printf("-%s\n", c);
1134                 if (arg[c]) {
1135                         if (i < len)
1136                                 printf("'%s'\n", substr(str, i + 1));
1137                         else
1138                                 expect = 1;
1139                         next;
1140                 }
1141         }
1142 }
1143 END {
1144         if (expect)
1145                 print "?";
1146 }
1147 EOF
1148
1149 : process the command line options
1150 set X `for arg in "$@"; do echo "X$arg"; done |
1151         sed -e s/X// | awk -f options.awk`
1152 eval "set $*"
1153 shift
1154 rm -f options.awk
1155
1156 : set up default values
1157 fastread=''
1158 reuseval=false
1159 config_sh=''
1160 alldone=''
1161 error=''
1162 silent=''
1163 extractsh=''
1164 override=''
1165 knowitall=''
1166 rm -f optdef.sh
1167 cat >optdef.sh <<EOS
1168 $startsh
1169 EOS
1170
1171
1172 : option parsing
1173 while test $# -gt 0; do
1174         case "$1" in
1175         -d) shift; fastread=yes;;
1176         -e) shift; alldone=cont;;
1177         -f)
1178                 shift
1179                 cd ..
1180                 if test -r "$1"; then
1181                         config_sh="$1"
1182                 else
1183                         echo "$me: cannot read config file $1." >&2
1184                         error=true
1185                 fi
1186                 cd UU
1187                 shift;;
1188         -h) shift; error=true;;
1189         -r) shift; reuseval=true;;
1190         -s) shift; silent=true; realsilent=true;;
1191         -E) shift; alldone=exit;;
1192         -K) shift; knowitall=true;;
1193         -O) shift; override=true;;
1194         -S) shift; silent=true; extractsh=true;;
1195         -D)
1196                 shift
1197                 case "$1" in
1198                 *=)
1199                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1200                         echo "$me: ignoring -D $1" >&2
1201                         ;;
1202                 *=*) echo "$1" | \
1203                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1204                 *) echo "$1='define'" >> optdef.sh;;
1205                 esac
1206                 shift
1207                 ;;
1208         -U)
1209                 shift
1210                 case "$1" in
1211                 *=) echo "$1" >> optdef.sh;;
1212                 *=*)
1213                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1214                         echo "$me: ignoring -U $1" >&2
1215                         ;;
1216                 *) echo "$1='undef'" >> optdef.sh;;
1217                 esac
1218                 shift
1219                 ;;
1220         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1221                 exit 0;;
1222         --) break;;
1223         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1224         *) break;;
1225         esac
1226 done
1227
1228 case "$error" in
1229 true)
1230         cat >&2 <<EOM
1231 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1232                  [-U symbol] [-U symbol=]
1233   -d : use defaults for all answers.
1234   -e : go on without questioning past the production of config.sh.
1235   -f : specify an alternate default configuration file.
1236   -h : print this help message and exit (with an error status).
1237   -r : reuse C symbols value if possible (skips costly nm extraction).
1238   -s : silent mode, only echoes questions and essential information.
1239   -D : define symbol to have some value:
1240          -D symbol         symbol gets the value 'define'
1241          -D symbol=value   symbol gets the value 'value'
1242   -E : stop at the end of questions, after having produced config.sh.
1243   -K : do not use unless you know what you are doing.
1244   -O : let -D and -U override definitions from loaded configuration file.
1245   -S : perform variable substitutions on all .SH files (can mix with -f)
1246   -U : undefine symbol:
1247          -U symbol    symbol gets the value 'undef'
1248          -U symbol=   symbol gets completely empty
1249   -V : print version number and exit (with a zero status).
1250 EOM
1251         exit 1
1252         ;;
1253 esac
1254
1255 : Sanity checks
1256 case "$fastread$alldone" in
1257 yescont|yesexit) ;;
1258 *)
1259         if test ! -t 0; then
1260                 echo "Say 'sh Configure', not 'sh <Configure'"
1261                 exit 1
1262         fi
1263         ;;
1264 esac
1265
1266 exec 4>&1
1267 case "$silent" in
1268 true) exec 1>/dev/null;;
1269 esac
1270
1271 : run the defines and the undefines, if any, but leave the file out there...
1272 touch optdef.sh
1273 . ./optdef.sh
1274
1275 : set package name
1276 package=perl5
1277 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1278 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1279 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1280 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1281 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1282 esac
1283
1284 : Some greps do not return status, grrr.
1285 echo "grimblepritz" >grimble
1286 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1287         contains=contains
1288 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1289         contains=grep
1290 else
1291         contains=contains
1292 fi
1293 rm -f grimble
1294 : the following should work in any shell
1295 case "$contains" in
1296 contains*)
1297         echo " "
1298         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1299         cat >contains <<'EOSS'
1300 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1301 EOSS
1302 chmod +x contains
1303 esac
1304
1305 : Find the path to the source tree
1306 case "$src" in
1307 '') case "$0" in
1308     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1309          case "$src" in
1310          /*)    ;;
1311          *)     src=`cd ../$src && pwd` ;;
1312          esac
1313          ;;
1314     *)   src='.';;
1315     esac;;
1316 esac
1317 case "$src" in
1318 '')     src=/
1319         rsrc=/
1320         ;;
1321 /*) rsrc="$src";;
1322 *) rsrc="../$src";;
1323 esac
1324 if test -f $rsrc/Configure && \
1325         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1326 then
1327    : found it, so we are ok.
1328 else
1329         rsrc=''
1330         for src in . .. ../.. ../../.. ../../../..; do
1331                 if test -f ../$src/Configure && \
1332                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1333                 then
1334                         rsrc=../$src
1335                         break
1336                 fi
1337         done
1338 fi
1339 case "$rsrc" in
1340 '')
1341         cat <<EOM >&4
1342
1343 Sorry, I can't seem to locate the source dir for $package.  Please start
1344 Configure with an explicit path -- i.e. /some/path/Configure.
1345
1346 EOM
1347         exit 1
1348         ;;
1349 ../.)   rsrc='..';;
1350 *)
1351         echo " "
1352         echo "Sources for $package found in \"$src\"." >&4
1353         ;;
1354 esac
1355
1356 : script used to extract .SH files with variable substitutions
1357 cat >extract <<'EOS'
1358 CONFIGDOTSH=true
1359 echo "Doing variable substitutions on .SH files..."
1360 if test -f $src/MANIFEST; then
1361         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1362 else
1363         echo "(Looking for .SH files under the source directory.)"
1364         set x `(cd $src; find . -name "*.SH" -print)`
1365 fi
1366 shift
1367 case $# in
1368 0) set x `(cd $src; echo *.SH)`; shift;;
1369 esac
1370 if test ! -f $src/$1; then
1371         shift
1372 fi
1373 mkdir_p='
1374 name=$1;
1375 create="";
1376 while test $name; do
1377         if test ! -d "$name"; then
1378                 create="$name $create";
1379                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1380                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1381         else
1382                 name="";
1383         fi;
1384 done;
1385 for file in $create; do
1386         mkdir $file;
1387 done
1388 '
1389 for file in $*; do
1390         case "$src" in
1391         ".")
1392                 case "$file" in
1393                 */*)
1394                         dir=`expr X$file : 'X\(.*\)/'`
1395                         file=`expr X$file : 'X.*/\(.*\)'`
1396                         (cd $dir && . ./$file)
1397                         ;;
1398                 *)
1399                         . ./$file
1400                         ;;
1401                 esac
1402                 ;;
1403         *)
1404                 case "$file" in
1405                 */*)
1406                         dir=`expr X$file : 'X\(.*\)/'`
1407                         file=`expr X$file : 'X.*/\(.*\)'`
1408                         (set x $dir; shift; eval $mkdir_p)
1409                         sh <$src/$dir/$file
1410                         ;;
1411                 *)
1412                         sh <$src/$file
1413                         ;;
1414                 esac
1415                 ;;
1416         esac
1417 done
1418 if test -f $src/config_h.SH; then
1419         if test ! -f config.h; then
1420         : oops, they left it out of MANIFEST, probably, so do it anyway.
1421         . $src/config_h.SH
1422         fi
1423 fi
1424 EOS
1425
1426 : extract files and exit if asked to do so
1427 case "$extractsh" in
1428 true)
1429         case "$realsilent" in
1430         true) ;;
1431         *) exec 1>&4;;
1432         esac
1433         case "$config_sh" in
1434         '') config_sh='config.sh';;
1435         esac
1436         echo " "
1437         echo "Fetching answers from $config_sh..."
1438         cd ..
1439         . $config_sh
1440         test "$override" && . ./optdef.sh
1441         echo " "
1442         . UU/extract
1443         rm -rf UU
1444         echo "Done."
1445         exit 0
1446         ;;
1447 esac
1448
1449 : Eunice requires " " instead of "", can you believe it
1450 echo " "
1451 : Here we go...
1452 echo "Beginning of configuration questions for $package."
1453
1454 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1455
1456 : first determine how to suppress newline on echo command
1457 echo " "
1458 echo "Checking echo to see how to suppress newlines..."
1459 (echo "hi there\c" ; echo " ") >.echotmp
1460 if $contains c .echotmp >/dev/null 2>&1 ; then
1461         echo "...using -n."
1462         n='-n'
1463         c=''
1464 else
1465         cat <<'EOM'
1466 ...using \c
1467 EOM
1468         n=''
1469         c='\c'
1470 fi
1471 echo $n "The star should be here-->$c"
1472 echo '*'
1473 rm -f .echotmp
1474
1475 : Now test for existence of everything in MANIFEST
1476 echo " "
1477 if test -f $rsrc/MANIFEST; then
1478         echo "First let's make sure your kit is complete.  Checking..." >&4
1479         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1480         rm -f missing
1481         tmppwd=`pwd`
1482         for filelist in x??; do
1483                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1484         done
1485         if test -s missing; then
1486                 cat missing >&4
1487                 cat >&4 <<'EOM'
1488
1489 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1490
1491 You have the option of continuing the configuration process, despite the
1492 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1493 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1494 and contact the author (perlbug@perl.com).
1495
1496 EOM
1497                 echo $n "Continue? [n] $c" >&4
1498                 read ans
1499                 case "$ans" in
1500                 y*)
1501                         echo "Continuing..." >&4
1502                         rm -f missing
1503                         ;;
1504                 *)
1505                         echo "ABORTING..." >&4
1506                         kill $$
1507                         ;;
1508                 esac
1509         else
1510                 echo "Looks good..."
1511         fi
1512 else
1513         echo "There is no MANIFEST file.  I hope your kit is complete !"
1514 fi
1515 rm -f missing x??
1516
1517 echo " "
1518 : Find the appropriate value for a newline for tr
1519 if test -n "$DJGPP"; then
1520        trnl='\012'
1521 fi
1522 if test X"$trnl" = X; then
1523         case "`echo foo|tr '\n' x 2>/dev/null`" in
1524         foox) trnl='\n' ;;
1525         esac
1526 fi
1527 if test X"$trnl" = X; then
1528         case "`echo foo|tr '\012' x 2>/dev/null`" in
1529         foox) trnl='\012' ;;
1530         esac
1531 fi
1532 if test X"$trnl" = X; then
1533         cat <<EOM >&2
1534
1535 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1536
1537 EOM
1538         exit 1
1539 fi
1540
1541 : compute the number of columns on the terminal for proper question formatting
1542 case "$COLUMNS" in
1543 '') COLUMNS='80';;
1544 esac
1545
1546 : set up the echo used in my read
1547 myecho="case \"\$xxxm\" in
1548 '') echo $n \"\$rp $c\" >&4;;
1549 *) case \"\$rp\" in
1550         '') echo $n \"[\$xxxm] $c\";;
1551         *)
1552                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1553                         echo \"\$rp\" >&4
1554                         echo $n \"[\$xxxm] $c\" >&4
1555                 else
1556                         echo $n \"\$rp [\$xxxm] $c\" >&4
1557                 fi
1558                 ;;
1559         esac;;
1560 esac"
1561
1562 : now set up to do reads with possible shell escape and default assignment
1563 cat <<EOSC >myread
1564 $startsh
1565 xxxm=\$dflt
1566 $myecho
1567 ans='!'
1568 case "\$fastread" in
1569 yes) case "\$dflt" in
1570         '') ;;
1571         *) ans='';
1572                 case "\$silent-\$rp" in
1573                 true-) ;;
1574                 *) echo " " >&4;;
1575                 esac;;
1576         esac;;
1577 *) case "\$silent" in
1578         true) case "\$rp" in
1579                 '') ans='';;
1580                 esac;;
1581         esac;;
1582 esac
1583 while expr "X\$ans" : "X!" >/dev/null; do
1584         read answ
1585         set x \$xxxm
1586         shift
1587         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1588         case  "\$answ" in
1589         "!")
1590                 sh 1>&4
1591                 echo " "
1592                 $myecho
1593                 ;;
1594         !*)
1595                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1596                 shift
1597                 sh 1>&4 -c "\$*"
1598                 echo " "
1599                 $myecho
1600                 ;;
1601         "\$ans")
1602                 case "\$ans" in
1603                 \\&*)
1604                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1605                         shift
1606                         case "\$1" in
1607                         -d)
1608                                 fastread=yes
1609                                 echo "(OK, I'll run with -d after this question.)" >&4
1610                                 ;;
1611                         -*)
1612                                 echo "*** Sorry, \$1 not supported yet." >&4
1613                                 ;;
1614                         esac
1615                         $myecho
1616                         ans=!
1617                         ;;
1618                 esac;;
1619         *)
1620                 case "\$aok" in
1621                 y)
1622                         echo "*** Substitution done -- please confirm."
1623                         xxxm="\$ans"
1624                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1625                         xxxm="\$ans"
1626                         ans=!
1627                         ;;
1628                 *)
1629                         echo "*** Error -- try again."
1630                         ans=!
1631                         ;;
1632                 esac
1633                 $myecho
1634                 ;;
1635         esac
1636         case "\$ans\$xxxm\$nostick" in
1637         '')
1638                 ans=!
1639                 $myecho
1640                 ;;
1641         esac
1642 done
1643 case "\$ans" in
1644 '') ans="\$xxxm";;
1645 esac
1646 EOSC
1647
1648 : create .config dir to save info across Configure sessions
1649 test -d ../.config || mkdir ../.config
1650 cat >../.config/README <<EOF
1651 This directory created by Configure to save information that should
1652 persist across sessions for $package.
1653
1654 You may safely delete it if you wish.
1655 EOF
1656
1657 : general instructions
1658 needman=true
1659 firsttime=true
1660 user=`(logname) 2>/dev/null`
1661 case "$user" in
1662 '') user=`whoami 2>&1`;;
1663 esac
1664 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1665         firsttime=false
1666         echo " "
1667         rp='Would you like to see the instructions?'
1668         dflt=n
1669         . ./myread
1670         case "$ans" in
1671         [yY]*) ;;
1672         *) needman=false;;
1673         esac
1674 fi
1675 if $needman; then
1676         cat <<EOH
1677
1678 This installation shell script will examine your system and ask you questions
1679 to determine how the perl5 package should be installed. If you get
1680 stuck on a question, you may use a ! shell escape to start a subshell or
1681 execute a command.  Many of the questions will have default answers in square
1682 brackets; typing carriage return will give you the default.
1683
1684 On some of the questions which ask for file or directory names you are allowed
1685 to use the ~name construct to specify the login directory belonging to "name",
1686 even if you don't have a shell which knows about that.  Questions where this is
1687 allowed will be marked "(~name ok)".
1688
1689 EOH
1690         rp=''
1691         dflt='Type carriage return to continue'
1692         . ./myread
1693         cat <<'EOH'
1694
1695 The prompter used in this script allows you to use shell variables and
1696 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1697 in the default answer, as if the default line was a set of arguments given to a
1698 script shell.  This means you may also use $* to repeat the whole default line,
1699 so you do not have to re-type everything to add something to the default.
1700
1701 Everytime there is a substitution, you will have to confirm.  If there is an
1702 error (e.g. an unmatched backtick), the default answer will remain unchanged
1703 and you will be prompted again.
1704
1705 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1706 the questions and use the computed defaults (or the previous answers if there
1707 was already a config.sh file). Type 'Configure -h' for a list of options.
1708 You may also start interactively and then answer '& -d' at any prompt to turn
1709 on the non-interactive behaviour for the remainder of the execution.
1710
1711 EOH
1712         . ./myread
1713         cat <<EOH
1714
1715 Much effort has been expended to ensure that this shell script will run on any
1716 Unix system.  If despite that it blows up on yours, your best bet is to edit
1717 Configure and run it again.  If you can't run Configure for some reason,
1718 you'll have to generate a config.sh file by hand.  Whatever problems you
1719 have, let me (perlbug@perl.com) know how I blew it.
1720
1721 This installation script affects things in two ways:
1722
1723 1) it may do direct variable substitutions on some of the files included
1724    in this kit.
1725 2) it builds a config.h file for inclusion in C programs.  You may edit
1726    any of these files as the need arises after running this script.
1727
1728 If you make a mistake on a question, there is no easy way to back up to it
1729 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1730 files.  Configure will offer to let you do this before it runs the SH files.
1731
1732 EOH
1733         dflt='Type carriage return to continue'
1734         . ./myread
1735         case "$firsttime" in
1736         true) echo $user >>../.config/instruct;;
1737         esac
1738 fi
1739
1740 : find out where common programs are
1741 echo " "
1742 echo "Locating common programs..." >&4
1743 cat <<EOSC >loc
1744 $startsh
1745 case \$# in
1746 0) exit 1;;
1747 esac
1748 thing=\$1
1749 shift
1750 dflt=\$1
1751 shift
1752 for dir in \$*; do
1753         case "\$thing" in
1754         .)
1755         if test -d \$dir/\$thing; then
1756                 echo \$dir
1757                 exit 0
1758         fi
1759         ;;
1760         *)
1761         for thisthing in \$dir/\$thing; do
1762                 : just loop through to pick last item
1763         done
1764         if test -f \$thisthing; then
1765                 echo \$thisthing
1766                 exit 0
1767         elif test -f \$dir/\$thing.exe; then
1768                 if test -n "$DJGPP"; then
1769                         echo \$dir/\$thing.exe
1770                 else
1771                         : on Eunice apparently
1772                         echo \$dir/\$thing
1773                 fi
1774                 exit 0
1775         fi
1776         ;;
1777         esac
1778 done
1779 echo \$dflt
1780 exit 1
1781 EOSC
1782 chmod +x loc
1783 $eunicefix loc
1784 loclist="
1785 awk
1786 cat
1787 comm
1788 cp
1789 echo
1790 expr
1791 grep
1792 ls
1793 make
1794 mkdir
1795 rm
1796 sed
1797 sort
1798 touch
1799 tr
1800 uniq
1801 "
1802 trylist="
1803 Mcc
1804 ar
1805 byacc
1806 cpp
1807 csh
1808 date
1809 egrep
1810 gzip
1811 less
1812 ln
1813 more
1814 nm
1815 nroff
1816 pg
1817 test
1818 uname
1819 zip
1820 "
1821 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1822 pth="$pth /lib /usr/lib"
1823 for file in $loclist; do
1824         eval xxx=\$$file
1825         case "$xxx" in
1826         /*|?:[\\/]*)
1827                 if test -f "$xxx"; then
1828                         : ok
1829                 else
1830                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1831                         xxx=`./loc $file $file $pth`
1832                 fi
1833                 ;;
1834         '') xxx=`./loc $file $file $pth`;;
1835         *) xxx=`./loc $xxx $xxx $pth`;;
1836         esac
1837         eval $file=$xxx
1838         eval _$file=$xxx
1839         case "$xxx" in
1840         /*)
1841                 echo $file is in $xxx.
1842                 ;;
1843         ?:[\\/]*)
1844                 echo $file is in $xxx.
1845                 ;;
1846         *)
1847                 echo "I don't know where '$file' is, and my life depends on it." >&4
1848                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1849                 exit 1
1850                 ;;
1851         esac
1852 done
1853 echo " "
1854 echo "Don't worry if any of the following aren't found..."
1855 say=offhand
1856 for file in $trylist; do
1857         eval xxx=\$$file
1858         case "$xxx" in
1859         /*|?:[\\/]*)
1860                 if test -f "$xxx"; then
1861                         : ok
1862                 else
1863                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1864                         xxx=`./loc $file $file $pth`
1865                 fi
1866                 ;;
1867         '') xxx=`./loc $file $file $pth`;;
1868         *) xxx=`./loc $xxx $xxx $pth`;;
1869         esac
1870         eval $file=$xxx
1871         eval _$file=$xxx
1872         case "$xxx" in
1873         /*)
1874                 echo $file is in $xxx.
1875                 ;;
1876         ?:[\\/]*)
1877                 echo $file is in $xxx.
1878                 ;;
1879         *)
1880                 echo "I don't see $file out there, $say."
1881                 say=either
1882                 ;;
1883         esac
1884 done
1885 case "$egrep" in
1886 egrep)
1887         echo "Substituting grep for egrep."
1888         egrep=$grep
1889         ;;
1890 esac
1891 case "$ln" in
1892 ln)
1893         echo "Substituting cp for ln."
1894         ln=$cp
1895         ;;
1896 esac
1897 case "$test" in
1898 test)
1899         echo "Hopefully test is built into your sh."
1900         ;;
1901 *)
1902         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1903                 echo "Using the test built into your sh."
1904                 test=test
1905                 _test=test
1906         fi
1907         ;;
1908 esac
1909 case "$echo" in
1910 echo)
1911         echo "Hopefully echo is built into your sh."
1912         ;;
1913 '') ;;
1914 *)
1915         echo " "
1916 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1917         $echo $n "hi there$c" >foo1
1918         echo $n "hi there$c" >foo2
1919         if cmp foo1 foo2 >/dev/null 2>&1; then
1920                 echo "They are compatible.  In fact, they may be identical."
1921         else
1922                 case "$n" in
1923                 '-n') n='' c='\c';;
1924                 *) n='-n' c='';;
1925                 esac
1926                 cat <<FOO
1927 They are not compatible!  You are probably running ksh on a non-USG system.
1928 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1929 have echo built in and we may have to run some Bourne shell scripts.  That
1930 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1931
1932 FOO
1933                 $echo $n "The star should be here-->$c"
1934                 $echo "*"
1935         fi
1936         $rm -f foo1 foo2
1937         ;;
1938 esac
1939
1940 : determine whether symbolic links are supported
1941 echo " "
1942 $touch blurfl
1943 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1944         echo "Symbolic links are supported." >&4
1945         lns="$ln -s"
1946 else
1947         echo "Symbolic links are NOT supported." >&4
1948         lns="$ln"
1949 fi
1950 $rm -f blurfl sym
1951
1952 : see whether [:lower:] and [:upper:] are supported character classes
1953 echo " "
1954 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1955 ABYZ)
1956         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1957         up='[:upper:]'
1958         low='[:lower:]'
1959         ;;
1960 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1961         # (0xc9 and 0xd1), therefore that is a nice testing point.
1962         if test "X$up" = X -o "X$low" = X; then
1963             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1964             ij) up='[A-Z]'
1965                 low='[a-z]'
1966                 ;;
1967             esac
1968         fi
1969         if test "X$up" = X -o "X$low" = X; then
1970             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1971             ij) up='A-Z'
1972                 low='a-z'
1973                 ;;
1974             esac
1975         fi
1976         if test "X$up" = X -o "X$low" = X; then
1977             case "`echo IJ | od -x 2>/dev/null`" in
1978             *C9D1*|*c9d1*)
1979                 echo "Hey, this might be EBCDIC." >&4
1980                 if test "X$up" = X -o "X$low" = X; then
1981                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1982                     ij) up='[A-IJ-RS-Z]'
1983                         low='[a-ij-rs-z]'
1984                         ;;
1985                     esac
1986                 fi
1987                 if test "X$up" = X -o "X$low" = X; then
1988                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1989                     ij) up='A-IJ-RS-Z'
1990                         low='a-ij-rs-z'
1991                         ;;
1992                     esac
1993                 fi
1994                 ;;
1995             esac
1996         fi
1997 esac
1998 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1999 ij)
2000     echo "Using $up and $low to convert case." >&4
2001     ;;
2002 *)
2003     echo "I don't know how to translate letters from upper to lower case." >&4
2004     echo "Your tr is not acting any way I know of." >&4
2005     exit 1
2006     ;;
2007 esac
2008 : set up the translation script tr, must be called with ./tr of course
2009 cat >tr <<EOSC
2010 $startsh
2011 case "\$1\$2" in
2012 '[A-Z][a-z]') exec $tr '$up' '$low';;
2013 '[a-z][A-Z]') exec $tr '$low' '$up';;
2014 esac
2015 exec $tr "\$@"
2016 EOSC
2017 chmod +x tr
2018 $eunicefix tr
2019
2020 : Try to determine whether config.sh was made on this system
2021 case "$config_sh" in
2022 '')
2023 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2024 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2025 # because the A-Z/a-z are not consecutive.
2026 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2027         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2028 newmyuname="$myuname"
2029 dflt=n
2030 case "$knowitall" in
2031 '')
2032         if test -f ../config.sh; then
2033                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2034                         eval "`grep myuname= ../config.sh`"
2035                 fi
2036                 if test "X$myuname" = "X$newmyuname"; then
2037                         dflt=y
2038                 fi
2039         fi
2040         ;;
2041 *) dflt=y;;
2042 esac
2043
2044 : Get old answers from old config file if Configure was run on the
2045 : same system, otherwise use the hints.
2046 hint=default
2047 cd ..
2048 if test -f config.sh; then
2049         echo " "
2050         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2051         . UU/myread
2052         case "$ans" in
2053         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2054         *)  echo "Fetching default answers from your old config.sh file..." >&4
2055                 tmp_n="$n"
2056                 tmp_c="$c"
2057                 tmp_sh="$sh"
2058                 . ./config.sh
2059                 cp config.sh UU
2060                 n="$tmp_n"
2061                 c="$tmp_c"
2062                 : Older versions did not always set $sh.  Catch re-use of such
2063                 : an old config.sh.
2064                 case "$sh" in
2065                 '') sh="$tmp_sh" ;;
2066                 esac
2067                 hint=previous
2068                 ;;
2069         esac
2070 fi
2071 if test ! -f config.sh; then
2072         $cat <<EOM
2073
2074 First time through, eh?  I have some defaults handy for some systems
2075 that need some extra help getting the Configure answers right:
2076
2077 EOM
2078         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2079         dflt=''
2080         : Half the following guesses are probably wrong... If you have better
2081         : tests or hints, please send them to perlbug@perl.com
2082         : The metaconfig authors would also appreciate a copy...
2083         $test -f /irix && osname=irix
2084         $test -f /xenix && osname=sco_xenix
2085         $test -f /dynix && osname=dynix
2086         $test -f /dnix && osname=dnix
2087         $test -f /lynx.os && osname=lynxos
2088         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2089         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2090         $test -f /bin/mips && /bin/mips && osname=mips
2091         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2092                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2093         $test -d /usr/apollo/bin && osname=apollo
2094         $test -f /etc/saf/_sactab && osname=svr4
2095         $test -d /usr/include/minix && osname=minix
2096         if $test -d /MachTen -o -d /MachTen_Folder; then
2097                 osname=machten
2098                 if $test -x /sbin/version; then
2099                         osvers=`/sbin/version | $awk '{print $2}' |
2100                         $sed -e 's/[A-Za-z]$//'`
2101                 elif $test -x /usr/etc/version; then
2102                         osvers=`/usr/etc/version | $awk '{print $2}' |
2103                         $sed -e 's/[A-Za-z]$//'`
2104                 else
2105                         osvers="$2.$3"
2106                 fi
2107         fi
2108        $test -f /sys/posix.dll &&
2109                $test -f /usr/bin/what &&
2110                set X `/usr/bin/what /sys/posix.dll` &&
2111                $test "$3" = UWIN &&
2112                osname=uwin &&
2113                osvers="$5"
2114         if $test -f $uname; then
2115                 set X $myuname
2116                 shift
2117
2118                 case "$5" in
2119                 fps*) osname=fps ;;
2120                 mips*)
2121                         case "$4" in
2122                         umips) osname=umips ;;
2123                         *) osname=mips ;;
2124                         esac;;
2125                 [23]100) osname=mips ;;
2126                 next*) osname=next ;;
2127                 i386*)
2128                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2129                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2130                                 osname='sco'
2131                                 osvers=$tmp
2132                         elif $test -f /etc/kconfig; then
2133                                 osname=isc
2134                                 if test "$lns" = "$ln -s"; then
2135                                         osvers=4
2136                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2137                                         osvers=3
2138                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2139                                         osvers=2
2140                                 fi
2141                         fi
2142                         tmp=''
2143                         ;;
2144                 pc*)
2145                         if test -n "$DJGPP"; then
2146                                 osname=dos
2147                                 osvers=djgpp
2148                         fi
2149                         ;;
2150                 esac
2151
2152                 case "$1" in
2153                 aix) osname=aix
2154                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2155                         case "$tmp" in
2156                         'not found') osvers="$4"."$3" ;;
2157                         '<3240'|'<>3240') osvers=3.2.0 ;;
2158                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2159                         '=3250'|'>3250') osvers=3.2.5 ;;
2160                         *) osvers=$tmp;;
2161                         esac
2162                         ;;
2163                 *dc.osx) osname=dcosx
2164                         osvers="$3"
2165                         ;;
2166                 dnix) osname=dnix
2167                         osvers="$3"
2168                         ;;
2169                 domainos) osname=apollo
2170                         osvers="$3"
2171                         ;;
2172                 dgux) osname=dgux 
2173                         osvers="$3"
2174                         ;;
2175                 dynixptx*) osname=dynixptx
2176                         osvers=`echo "$4"|sed 's/^v//'`
2177                         ;;
2178                 freebsd) osname=freebsd 
2179                         osvers="$3" ;;
2180                 genix) osname=genix ;;
2181                 hp*) osname=hpux 
2182                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2183                         ;;
2184                 irix*) osname=irix
2185                         case "$3" in
2186                         4*) osvers=4 ;;
2187                         5*) osvers=5 ;;
2188                         *)      osvers="$3" ;;
2189                         esac
2190                         ;;
2191                 linux) osname=linux
2192                         case "$3" in
2193                         *)      osvers="$3" ;;
2194                         esac
2195                         ;;
2196                 MiNT) osname=mint
2197                         ;;
2198                 netbsd*) osname=netbsd
2199                         osvers="$3"
2200                         ;;
2201                 news-os) osvers="$3"
2202                         case "$3" in
2203                         4*) osname=newsos4 ;;
2204                         *) osname=newsos ;;
2205                         esac
2206                         ;;
2207                 bsd386) osname=bsd386
2208                         osvers=`$uname -r`
2209                         ;;
2210                 POSIX-BC | posix-bc ) osname=posix-bc
2211                         osvers="$3"
2212                         ;;
2213                 powerux | power_ux | powermax_os | powermaxos | \
2214                 powerunix | power_unix) osname=powerux
2215                         osvers="$3"
2216                         ;;
2217                 next*) osname=next ;;
2218                 solaris) osname=solaris
2219                         case "$3" in
2220                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2221                         *)      osvers="$3" ;;
2222                         esac
2223                         ;;
2224                 sunos) osname=sunos
2225                         case "$3" in
2226                         5*) osname=solaris
2227                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2228                         *)      osvers="$3" ;;
2229                         esac
2230                         ;;
2231                 titanos) osname=titanos
2232                         case "$3" in
2233                         1*) osvers=1 ;;
2234                         2*) osvers=2 ;;
2235                         3*) osvers=3 ;;
2236                         4*) osvers=4 ;;
2237                         *)      osvers="$3" ;;
2238                         esac
2239                         ;;
2240                 ultrix) osname=ultrix
2241                         osvers="$3"
2242                         ;;
2243                 osf1|mls+)      case "$5" in
2244                                 alpha)
2245                                         osname=dec_osf
2246                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2247                                         ;;
2248                         hp*)    osname=hp_osf1  ;;
2249                         mips)   osname=mips_osf1 ;;
2250                         esac
2251                         ;;
2252                 uts) osname=uts 
2253                         osvers="$3"
2254                         ;;
2255                 qnx) osname=qnx
2256                         osvers="$4"
2257                         ;;
2258                 $2) case "$osname" in
2259                         *isc*) ;;
2260                         *freebsd*) ;;
2261                         svr*)
2262                                 : svr4.x or possibly later
2263                                 case "svr$3" in 
2264                                 ${osname}*)
2265                                         osname=svr$3
2266                                         osvers=$4
2267                                         ;;
2268                                 esac
2269                                 case "$osname" in
2270                                 svr4.0)
2271                                         : Check for ESIX
2272                                         if test -f /stand/boot ; then
2273                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2274                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2275                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2276                                                         if test -n "$isesix"; then
2277                                                                 osname=esix4
2278                                                         fi
2279                                                 fi
2280                                         fi
2281                                         ;;
2282                                 esac
2283                                 ;;
2284                         *)      if test -f /etc/systemid; then
2285                                         osname=sco
2286                                         set `echo $3 | $sed 's/\./ /g'` $4
2287                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2288                                                 osvers=$1.$2.$3
2289                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2290                                                 osvers=$1.$2
2291                                         elif $test -f $src/hints/sco_$1.sh; then
2292                                                 osvers=$1
2293                                         fi
2294                                 else
2295                                         case "$osname" in
2296                                         '') : Still unknown.  Probably a generic Sys V.
2297                                                 osname="sysv"
2298                                                 osvers="$3"
2299                                                 ;;
2300                                         esac
2301                                 fi
2302                                 ;;
2303                         esac
2304                         ;;
2305                 *)      case "$osname" in
2306                         '') : Still unknown.  Probably a generic BSD.
2307                                 osname="$1"
2308                                 osvers="$3"
2309                                 ;;
2310                         esac
2311                         ;;
2312                 esac
2313         else
2314                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2315                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2316                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2317                                 osname=news_os
2318                         fi
2319                         $rm -f UU/kernel.what
2320                 elif test -d c:/.; then
2321                         set X $myuname
2322                         osname=os2
2323                         osvers="$5"
2324                 fi
2325         fi
2326         
2327         : Now look for a hint file osname_osvers, unless one has been
2328         : specified already.
2329         case "$hintfile" in
2330         ''|' ')
2331                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2332                 : Also try without trailing minor version numbers.
2333                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2334                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2335                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2336                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2337                 case "$file" in
2338                 '') dflt=none ;;
2339                 *)  case "$osvers" in
2340                         '') dflt=$file
2341                                 ;;
2342                         *)  if $test -f $src/hints/$file.sh ; then
2343                                         dflt=$file
2344                                 elif $test -f $src/hints/$xfile.sh ; then
2345                                         dflt=$xfile
2346                                 elif $test -f $src/hints/$xxfile.sh ; then
2347                                         dflt=$xxfile
2348                                 elif $test -f $src/hints/$xxxfile.sh ; then
2349                                         dflt=$xxxfile
2350                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2351                                         dflt=$xxxxfile
2352                                 elif $test -f "$src/hints/${osname}.sh" ; then
2353                                         dflt="${osname}"
2354                                 else
2355                                         dflt=none
2356                                 fi
2357                                 ;;
2358                         esac
2359                         ;;
2360                 esac
2361                 if $test -f Policy.sh ; then
2362                         case "$dflt" in
2363                         *Policy*) ;;
2364                         none) dflt="Policy" ;;
2365                         *) dflt="Policy $dflt" ;;
2366                         esac
2367                 fi
2368                 ;;
2369         *)
2370                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2371                 ;;
2372         esac
2373
2374         if $test -f Policy.sh ; then
2375                 $cat <<EOM
2376
2377 There's also a Policy hint file available, which should make the
2378 site-specific (policy) questions easier to answer.
2379 EOM
2380
2381         fi
2382
2383         $cat <<EOM
2384
2385 You may give one or more space-separated answers, or "none" if appropriate.
2386 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2387 is a good thing.  DO NOT give a wrong version or a wrong OS.
2388
2389 EOM
2390
2391         rp="Which of these apply, if any?"
2392         . UU/myread
2393         tans=$ans
2394         for file in $tans; do
2395                 if $test X$file = XPolicy -a -f Policy.sh; then
2396                         . Policy.sh
2397                         $cat Policy.sh >> UU/config.sh
2398                 elif $test -f $src/hints/$file.sh; then
2399                         . $src/hints/$file.sh
2400                         $cat $src/hints/$file.sh >> UU/config.sh
2401                 elif $test X$tans = X -o X$tans = Xnone ; then
2402                         : nothing
2403                 else
2404                         : Give one chance to correct a possible typo.
2405                         echo "$file.sh does not exist"
2406                         dflt=$file
2407                         rp="hint to use instead?"
2408                         . UU/myread
2409                         for file in $ans; do
2410                                 if $test -f "$src/hints/$file.sh"; then
2411                                         . $src/hints/$file.sh
2412                                         $cat $src/hints/$file.sh >> UU/config.sh
2413                                 elif $test X$ans = X -o X$ans = Xnone ; then
2414                                         : nothing
2415                                 else
2416                                         echo "$file.sh does not exist -- ignored."
2417                                 fi
2418                         done
2419                 fi
2420         done
2421
2422         hint=recommended
2423         : Remember our hint file for later.
2424         if $test -f "$src/hints/$file.sh" ; then
2425                 hintfile="$file"
2426         else
2427                 hintfile=''
2428         fi
2429 fi
2430 cd UU
2431 ;;
2432 *)
2433         echo " "
2434         echo "Fetching default answers from $config_sh..." >&4
2435         tmp_n="$n"
2436         tmp_c="$c"
2437         cd ..
2438         cp $config_sh config.sh 2>/dev/null
2439         chmod +w config.sh
2440         . ./config.sh
2441         cd UU
2442         cp ../config.sh .
2443         n="$tmp_n"
2444         c="$tmp_c"
2445         hint=previous
2446         ;;
2447 esac
2448 test "$override" && . ./optdef.sh
2449 myuname="$newmyuname"
2450
2451 : Restore computed paths
2452 for file in $loclist $trylist; do
2453         eval $file="\$_$file"
2454 done
2455
2456 cat << EOM
2457
2458 Configure uses the operating system name and version to set some defaults.
2459 The default value is probably right if the name rings a bell. Otherwise,
2460 since spelling matters for me, either accept the default or answer "none"
2461 to leave it blank.
2462
2463 EOM
2464 case "$osname" in
2465         ''|' ')
2466                 case "$hintfile" in
2467                 ''|' '|none) dflt=none ;;
2468                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2469                 esac
2470                 ;;
2471         *) dflt="$osname" ;;
2472 esac
2473 rp="Operating system name?"
2474 . ./myread
2475 case "$ans" in
2476 none)  osname='' ;;
2477 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2478 esac
2479 echo " "
2480 case "$osvers" in
2481         ''|' ')
2482                 case "$hintfile" in
2483                 ''|' '|none) dflt=none ;;
2484                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2485                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2486                         case "$dflt" in
2487                         ''|' ') dflt=none ;;
2488                         esac
2489                         ;;
2490                 esac
2491                 ;;
2492         *) dflt="$osvers" ;;
2493 esac
2494 rp="Operating system version?"
2495 . ./myread
2496 case "$ans" in
2497 none)  osvers='' ;;
2498 *) osvers="$ans" ;;
2499 esac
2500
2501 : who configured the system
2502 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2503 cf_by=`(logname) 2>/dev/null`
2504 case "$cf_by" in
2505 "")
2506         cf_by=`(whoami) 2>/dev/null`
2507         case "$cf_by" in
2508         "") cf_by=unknown ;;
2509         esac ;;
2510 esac
2511
2512 : set up the script used to warn in case of inconsistency
2513 cat <<EOS >whoa
2514 $startsh
2515 EOS
2516 cat <<'EOSC' >>whoa
2517 dflt=y
2518 echo " "
2519 echo "*** WHOA THERE!!! ***" >&4
2520 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2521 rp="    Keep the $hint value?"
2522 . ./myread
2523 case "$ans" in
2524 y) td=$was; tu=$was;;
2525 esac
2526 EOSC
2527
2528 : function used to set $1 to $val
2529 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2530 case "$val$was" in
2531 $define$undef) . ./whoa; eval "$var=\$td";;
2532 $undef$define) . ./whoa; eval "$var=\$tu";;
2533 *) eval "$var=$val";;
2534 esac'
2535
2536 cat <<EOM
2537
2538 Perl can be built to take advantage of threads, on some systems.
2539 To do so, Configure must be run with -Dusethreads.
2540
2541 Note that threading is a highly experimental feature, and
2542 some known race conditions still remain.  If you choose to try
2543 it, be very sure to not actually deploy it for production
2544 purposes.  README.threads has more details, and is required
2545 reading if you enable threads.
2546 EOM
2547 case "$usethreads" in
2548 $define|true|[yY]*)     dflt='y';;
2549 *) dflt='n';;
2550 esac
2551 rp='Build a threading Perl?'
2552 . ./myread
2553 case "$ans" in
2554 y|Y)    val="$define" ;;     
2555 *)      val="$undef" ;;
2556 esac
2557 set usethreads
2558 eval $setvar 
2559
2560 case "$d_oldpthreads" in
2561 '')     : Configure tests would be welcome here.  For now, assume undef.
2562         val="$undef" ;;
2563 *)      val="$d_oldpthreads" ;;
2564 esac
2565 set d_oldpthreads
2566 eval $setvar
2567
2568
2569 case "$usethreads" in
2570 "$define"|true|[yY]*)
2571 : Look for a hint-file generated 'call-back-unit'.  If the
2572 : user has specified that a threading perl is to be built,
2573 : we may need to set or change some other defaults.
2574         if $test -f usethreads.cbu; then
2575                 . ./usethreads.cbu
2576         fi
2577         case "$osname" in
2578         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2579                 # Known thread-capable platforms.
2580                 ;;
2581         *)
2582                 cat >&4 <<EOM
2583 $osname is not known to support threads.
2584 Please let perlbug@perl.com know how to do that.
2585
2586 Cannot continue, aborting.
2587 EOM
2588                 exit 1
2589         ;;
2590         esac # $osname
2591     ;;
2592 esac # $usethreads
2593
2594 cat <<EOM
2595
2596 Perl can be built so that multiple Perl interpreters can coexist
2597 within the same Perl executable.  To do so, Configure must be run with
2598 -Dusemultiplicity.
2599
2600 Normally you do not need this and you should answer no.
2601
2602 EOM
2603 case "$usemultiplicity" in
2604 $define|true|[yY]*)     dflt='y';;
2605 *) dflt='n';;
2606 esac
2607 rp='Build Perl for multiplicity?'
2608 . ./myread
2609 case "$ans" in
2610 y|Y)    val="$define" ;;     
2611 *)      val="$undef" ;;
2612 esac
2613 set usemultiplicity
2614 eval $setvar 
2615
2616 cat <<EOM
2617
2618 Perl can be built to take advantage of explicit 64-bit interfaces,
2619 on some systems.  To do so, Configure must be run with -Duse64bits.
2620
2621 If this doesn't make any sense to you, just accept the default 'n'.
2622 EOM
2623 case "$use64bits" in
2624 $define|true|[yY]*)     dflt='y';;
2625 *) dflt='n';;
2626 esac
2627 rp='Try to use explicit 64-bit interfaces, if available?'
2628 . ./myread
2629 case "$ans" in
2630 y|Y) 
2631         val="$define"
2632         ;;     
2633 *)      
2634         val="$undef"
2635         ;;
2636 esac
2637 set use64bits
2638 eval $setvar
2639
2640 case "$archname64" in
2641 '') archname64='' ;;    # not a typo
2642 esac
2643
2644 case "$use64bits" in
2645 "$define"|true|[yY]*)
2646 : Look for a hint-file generated 'call-back-unit'.  If the
2647 : user has specified that a 64 bit perl is to be built,
2648 : we may need to set or change some other defaults.
2649         if $test -f use64bits.cbu; then
2650                 . ./use64bits.cbu
2651         fi
2652         case "$osname" in
2653         aix|dec_osf|hpux|irix|solaris|unicos)
2654                 # Known 64-bit capable platforms.
2655                 ;;
2656         *)
2657                 cat >&4 <<EOM
2658 $osname is not known to support 64-bit interfaces.
2659 Please let perlbug@perl.com know how to do that.
2660
2661 Cannot continue, aborting.
2662 EOM
2663                 exit 1
2664                 ;;
2665         esac
2666         ;;
2667 esac
2668
2669 : determine the architecture name
2670 echo " "
2671 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2672         tarch=`arch`"-$osname"
2673 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2674         if uname -m > tmparch 2>&1 ; then
2675                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2676                         -e 's/$/'"-$osname/" tmparch`
2677         else
2678                 tarch="$osname"
2679         fi
2680         $rm -f tmparch
2681 else
2682         tarch="$osname"
2683 fi
2684 case "$myarchname" in
2685 ''|"$tarch") ;;
2686 *)
2687         echo "(Your architecture name used to be $myarchname.)"
2688         archname=''
2689         ;;
2690 esac
2691 myarchname="$tarch"
2692 case "$archname" in
2693 '') dflt="$tarch";;
2694 *) dflt="$archname";;
2695 esac
2696 rp='What is your architecture name'
2697 . ./myread
2698 archname="$ans"
2699 case "$usethreads" in
2700 $define)
2701         echo "Threads selected." >&4
2702         case "$archname" in
2703         *-thread*) echo "...and architecture name already has -thread." >&4
2704                 ;;
2705         *)      archname="$archname-thread"
2706                 echo "...setting architecture name to $archname." >&4
2707                 ;;
2708         esac
2709         ;;
2710 esac
2711 case "$usemultiplicity" in
2712 $define)
2713         echo "Multiplicity selected." >&4
2714         case "$archname" in
2715         *-multi*) echo "...and architecture name already has -multi." >&4
2716                 ;;
2717         *)      archname="$archname-multi"
2718                 echo "...setting architecture name to $archname." >&4
2719                 ;;
2720         esac
2721         ;;
2722 esac
2723 case "$use64bits" in
2724 $define)
2725         echo "Explicit 64-bitness selected." >&4
2726         case "$archname64" in
2727         '')
2728                 ;;
2729         *)
2730                 case "$archname" in
2731                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2732                         ;;
2733                 *)      archname="$archname-$archname64"
2734                         echo "...setting architecture name to $archname." >&4
2735                         ;;
2736                 esac
2737                 ;;
2738         esac
2739 esac
2740
2741 : decide how portable to be.  Allow command line overrides.
2742 case "$d_portable" in
2743 "$undef") ;;
2744 *)      d_portable="$define" ;;
2745 esac
2746
2747 : set up shell script to do ~ expansion
2748 cat >filexp <<EOSS
2749 $startsh
2750 : expand filename
2751 case "\$1" in
2752  ~/*|~)
2753         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2754         ;;
2755  ~*)
2756         if $test -f /bin/csh; then
2757                 /bin/csh -f -c "glob \$1"
2758                 failed=\$?
2759                 echo ""
2760                 exit \$failed
2761         else
2762                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2763                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2764                 if $test ! -d "\$dir"; then
2765                         me=\`basename \$0\`
2766                         echo "\$me: can't locate home directory for: \$name" >&2
2767                         exit 1
2768                 fi
2769                 case "\$1" in
2770                 */*)
2771                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2772                         ;;
2773                 *)
2774                         echo \$dir
2775                         ;;
2776                 esac
2777         fi
2778         ;;
2779 *)
2780         echo \$1
2781         ;;
2782 esac
2783 EOSS
2784 chmod +x filexp
2785 $eunicefix filexp
2786
2787 : now set up to get a file name
2788 cat <<EOS >getfile
2789 $startsh
2790 EOS
2791 cat <<'EOSC' >>getfile
2792 tilde=''
2793 fullpath=''
2794 already=''
2795 skip=''
2796 none_ok=''
2797 exp_file=''
2798 nopath_ok=''
2799 orig_rp="$rp"
2800 orig_dflt="$dflt"
2801 case "$gfpth" in
2802 '') gfpth='.' ;;
2803 esac
2804
2805 case "$fn" in
2806 *\(*)
2807         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2808         fn=`echo $fn | sed 's/(.*)//'`
2809         ;;
2810 esac
2811
2812 case "$fn" in
2813 *:*)
2814         loc_file=`expr $fn : '.*:\(.*\)'`
2815         fn=`expr $fn : '\(.*\):.*'`
2816         ;;
2817 esac
2818
2819 case "$fn" in
2820 *~*) tilde=true;;
2821 esac
2822 case "$fn" in
2823 */*) fullpath=true;;
2824 esac
2825 case "$fn" in
2826 *+*) skip=true;;
2827 esac
2828 case "$fn" in
2829 *n*) none_ok=true;;
2830 esac
2831 case "$fn" in
2832 *e*) exp_file=true;;
2833 esac
2834 case "$fn" in
2835 *p*) nopath_ok=true;;
2836 esac
2837
2838 case "$fn" in
2839 *f*) type='File';;
2840 *d*) type='Directory';;
2841 *l*) type='Locate';;
2842 esac
2843
2844 what="$type"
2845 case "$what" in
2846 Locate) what='File';;
2847 esac
2848
2849 case "$exp_file" in
2850 '')
2851         case "$d_portable" in
2852         "$define") ;;
2853         *) exp_file=true;;
2854         esac
2855         ;;
2856 esac
2857
2858 cd ..
2859 while test "$type"; do
2860         redo=''
2861         rp="$orig_rp"
2862         dflt="$orig_dflt"
2863         case "$tilde" in
2864         true) rp="$rp (~name ok)";;
2865         esac
2866         . UU/myread
2867         if test -f UU/getfile.ok && \
2868                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2869         then
2870                 value="$ans"
2871                 ansexp="$ans"
2872                 break
2873         fi
2874         case "$ans" in
2875         none)
2876                 value=''
2877                 ansexp=''
2878                 case "$none_ok" in
2879                 true) type='';;
2880                 esac
2881                 ;;
2882         *)
2883                 case "$tilde" in
2884                 '') value="$ans"
2885                         ansexp="$ans";;
2886                 *)
2887                         value=`UU/filexp $ans`
2888                         case $? in
2889                         0)
2890                                 if test "$ans" != "$value"; then
2891                                         echo "(That expands to $value on this system.)"
2892                                 fi
2893                                 ;;
2894                         *) value="$ans";;
2895                         esac
2896                         ansexp="$value"
2897                         case "$exp_file" in
2898                         '') value="$ans";;
2899                         esac
2900                         ;;
2901                 esac
2902                 case "$fullpath" in
2903                 true)
2904                         case "$ansexp" in
2905                         /*) value="$ansexp" ;;
2906                         *)
2907                                 redo=true
2908                                 case "$already" in
2909                                 true)
2910                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2911                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2912                                         ;;
2913                                 *)
2914                                 echo "Please give a full path name, starting with slash." >&4
2915                                         case "$tilde" in
2916                                         true)
2917                                 echo "Note that using ~name is ok provided it expands well." >&4
2918                                                 already=true
2919                                                 ;;
2920                                         esac
2921                                 esac
2922                                 ;;
2923                         esac
2924                         ;;
2925                 esac
2926                 case "$redo" in
2927                 '')
2928                         case "$type" in
2929                         File)
2930                                 for fp in $gfpth; do
2931                                         if test "X$fp" = X.; then
2932                                             pf="$ansexp"
2933                                         else    
2934                                             pf="$fp/$ansexp"
2935                                         fi
2936                                         if test -f "$pf"; then
2937                                                 type=''
2938                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
2939                                         then
2940                                                 echo "($value is not a plain file, but that's ok.)"
2941                                                 type=''
2942                                         fi
2943                                         if test X"$type" = X; then
2944                                             value="$pf"
2945                                             break
2946                                         fi
2947                                 done
2948                                 ;;
2949                         Directory)
2950                                 for fp in $gfpth; do
2951                                         if test "X$fp" = X.; then
2952                                             pf="$ansexp"
2953                                         else    
2954                                             pf="$fp/$ansexp"
2955                                         fi
2956                                         if test -d "$pf"; then
2957                                                 type=''
2958                                                 value="$pf"
2959                                                 break
2960                                         fi
2961                                 done
2962                                 ;;
2963                         Locate)
2964                                 if test -d "$ansexp"; then
2965                                         echo "(Looking for $loc_file in directory $value.)"
2966                                         value="$value/$loc_file"
2967                                         ansexp="$ansexp/$loc_file"
2968                                 fi
2969                                 if test -f "$ansexp"; then
2970                                         type=''
2971                                 fi
2972                                 case "$nopath_ok" in
2973                                 true)   case "$value" in
2974                                         */*) ;;
2975                                         *)      echo "Assuming $value will be in people's path."
2976                                                 type=''
2977                                                 ;;
2978                                         esac
2979                                         ;;
2980                                 esac
2981                                 ;;
2982                         esac
2983
2984                         case "$skip" in
2985                         true) type='';
2986                         esac
2987
2988                         case "$type" in
2989                         '') ;;
2990                         *)
2991                                 if test "$fastread" = yes; then
2992                                         dflt=y
2993                                 else
2994                                         dflt=n
2995                                 fi
2996                                 rp="$what $value doesn't exist.  Use that name anyway?"
2997                                 . UU/myread
2998                                 dflt=''
2999                                 case "$ans" in
3000                                 y*) type='';;
3001                                 *) echo " ";;
3002                                 esac
3003                                 ;;
3004                         esac
3005                         ;;
3006                 esac
3007                 ;;
3008         esac
3009 done
3010 cd UU
3011 ans="$value"
3012 rp="$orig_rp"
3013 dflt="$orig_dflt"
3014 rm -f getfile.ok
3015 test "X$gfpthkeep" != Xy && gfpth=""
3016 EOSC
3017
3018 : determine root of directory hierarchy where package will be installed.
3019 case "$prefix" in
3020 '')
3021         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3022         ;;
3023 *)
3024         dflt="$prefix"
3025         ;;
3026 esac
3027 $cat <<EOM
3028
3029 By default, $package will be installed in $dflt/bin, manual pages
3030 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3031 installation directories. Typically this is something like /usr/local.
3032 If you wish to have binaries under /usr/bin but other parts of the
3033 installation under /usr/local, that's ok: you will be prompted
3034 separately for each of the installation directories, the prefix being
3035 only used to set the defaults.
3036
3037 EOM
3038 fn=d~
3039 rp='Installation prefix to use?'
3040 . ./getfile
3041 oldprefix=''
3042 case "$prefix" in
3043 '') ;;
3044 *)
3045         case "$ans" in
3046         "$prefix") ;;
3047         *) oldprefix="$prefix";;
3048         esac
3049         ;;
3050 esac
3051 prefix="$ans"
3052 prefixexp="$ansexp"
3053
3054 : is AFS running?
3055 echo " "
3056 case "$afs" in
3057 $define|true)   afs=true ;;
3058 $undef|false)   afs=false ;;
3059 *)      if test -d /afs; then
3060                 afs=true
3061         else
3062                 afs=false
3063         fi
3064         ;;
3065 esac
3066 if $afs; then
3067         echo "AFS may be running... I'll be extra cautious then..." >&4
3068 else
3069         echo "AFS does not seem to be running..." >&4
3070 fi
3071
3072 : determine installation prefix for where package is to be installed.
3073 if $afs; then 
3074 $cat <<EOM
3075
3076 Since you are running AFS, I need to distinguish the directory in which
3077 files will reside from the directory in which they are installed (and from
3078 which they are presumably copied to the former directory by occult means).
3079
3080 EOM
3081         case "$installprefix" in
3082         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3083         *) dflt="$installprefix";;
3084         esac
3085 else
3086 $cat <<EOM
3087
3088 In some special cases, particularly when building $package for distribution,
3089 it is convenient to distinguish between the directory in which files should 
3090 be installed from the directory ($prefix) in which they 
3091 will eventually reside.  For most users, these two directories are the same.
3092
3093 EOM
3094         case "$installprefix" in
3095         '') dflt=$prefix ;;
3096         *) dflt=$installprefix;;
3097         esac
3098 fi
3099 fn=d~
3100 rp='What installation prefix should I use for installing files?'
3101 . ./getfile
3102 installprefix="$ans"
3103 installprefixexp="$ansexp"
3104
3105 : set the prefixit variable, to compute a suitable default value
3106 prefixit='case "$3" in
3107 ""|none)
3108         case "$oldprefix" in
3109         "") eval "$1=\"\$$2\"";;
3110         *)
3111                 case "$3" in
3112                 "") eval "$1=";;
3113                 none)
3114                         eval "tp=\"\$$2\"";
3115                         case "$tp" in
3116                         ""|" ") eval "$1=\"\$$2\"";;
3117                         *) eval "$1=";;
3118                         esac;;
3119                 esac;;
3120         esac;;
3121 *)
3122         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3123         case "$tp" in
3124         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3125         /*-$oldprefix/*|\~*-$oldprefix/*)
3126                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3127         *) eval "$1=\"\$$2\"";;
3128         esac;;
3129 esac'
3130
3131 : set the base revision
3132 baserev=5.0
3133
3134 : get the patchlevel
3135 echo " "
3136 echo "Getting the current patchlevel..." >&4
3137 if $test -r $rsrc/patchlevel.h;then
3138         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3139         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3140 else
3141         patchlevel=0
3142         subversion=0
3143 fi
3144 $echo $n "(You have $package" $c
3145 case "$package" in
3146 "*$baserev")    ;;
3147 *)              $echo $n " $baserev" $c ;;
3148 esac
3149 $echo $n " patchlevel $patchlevel" $c
3150 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3151 echo ".)"
3152
3153 if test 0 -eq "$subversion"; then
3154         version=`LC_ALL=C; export LC_ALL; \
3155                  echo $baserev $patchlevel | \
3156                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3157 else
3158         version=`LC_ALL=C; export LC_ALL; \
3159                  echo $baserev $patchlevel $subversion | \
3160                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3161 fi
3162 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3163 if test "$subversion" -lt 50; then
3164         apiversion=`LC_ALL=C; export LC_ALL; \
3165                  LANGUAGE=C; export LANGUAGE; \
3166                  echo $baserev $patchlevel | \
3167                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3168 else
3169         apiversion="$version"
3170 fi
3171
3172 : determine installation style
3173 : For now, try to deduce it from prefix unless it is already set.
3174 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3175 case "$installstyle" in
3176 '')     case "$prefix" in
3177                 *perl*) dflt='lib';;
3178                 *) dflt='lib/perl5' ;;
3179         esac
3180         ;;
3181 *)      dflt='lib/perl5' ;;
3182 esac
3183 : Probably not worth prompting for this since we prompt for all
3184 : the directories individually, and the prompt would be too long and
3185 : confusing anyway.
3186 installstyle=$dflt
3187
3188 : determine where private library files go
3189 : Usual default is /usr/local/lib/perl5/$version.
3190 : Also allow things like /opt/perl/lib/$version, since 
3191 : /opt/perl/lib/perl5... would be redundant.
3192 : The default "style" setting is made in installstyle.U
3193 case "$installstyle" in
3194 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3195 *)       set dflt privlib lib/$version ;;
3196 esac
3197 eval $prefixit
3198 $cat <<EOM
3199
3200 There are some auxiliary files for $package that need to be put into a
3201 private library directory that is accessible by everyone.
3202
3203 EOM
3204 fn=d~+
3205 rp='Pathname where the private library files will reside?'
3206 . ./getfile
3207 privlib="$ans"
3208 privlibexp="$ansexp"
3209 : Change installation prefix, if necessary.
3210 if $test X"$prefix" != X"$installprefix"; then
3211         installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'`
3212 else
3213         installprivlib="$privlibexp"
3214 fi
3215
3216 : set the prefixup variable, to restore leading tilda escape
3217 prefixup='case "$prefixexp" in
3218 "$prefix") ;;
3219 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3220 esac'
3221
3222 : determine where public architecture dependent libraries go
3223 set archlib archlib
3224 eval $prefixit
3225 : privlib default is /usr/local/lib/$package/$version
3226 : archlib default is /usr/local/lib/$package/$version/$archname
3227 : privlib may have an optional trailing /share.
3228 tdflt=`echo $privlib | $sed 's,/share$,,'`
3229 tdflt=$tdflt/$archname
3230 case "$archlib" in
3231 '')     dflt=$tdflt
3232         ;;
3233 *)      dflt="$archlib"
3234     ;;
3235 esac
3236 $cat <<EOM
3237
3238 $spackage contains architecture-dependent library files.  If you are
3239 sharing libraries in a heterogeneous environment, you might store
3240 these files in a separate location.  Otherwise, you can just include
3241 them with the rest of the public library files.
3242
3243 EOM
3244 fn=d+~
3245 rp='Where do you want to put the public architecture-dependent libraries?'
3246 . ./getfile
3247 archlib="$ans"
3248 archlibexp="$ansexp"
3249 if $test X"$archlib" = X"$privlib"; then
3250         d_archlib="$undef"
3251 else
3252         d_archlib="$define"
3253 fi
3254 : Change installation prefix, if necessary.
3255 if $test X"$prefix" != X"$installprefix"; then
3256         installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'`
3257 else
3258         installarchlib="$archlibexp"
3259 fi
3260
3261
3262 : Binary compatibility with 5.005 is not possible for builds
3263 : with advanced features
3264 case "$usethreads$usemultiplicity" in
3265 *define*) bincompat5005="$undef" ;;
3266 *)      $cat <<EOM
3267
3268 Perl 5.006 can be compiled for binary compatibility with 5.005.
3269 If you decide to do so, you will be able to continue using most
3270 of the extensions that were compiled for Perl 5.005.
3271
3272 EOM
3273         case "$d_bincompat5005" in
3274         "$undef") dflt=n ;;
3275         *) dflt=y ;;
3276         esac
3277         rp='Binary compatibility with Perl 5.005?'
3278         . ./myread
3279         case "$ans" in
3280         y*) val="$define" ;;
3281         *)  val="$undef" ;;
3282         esac
3283         set d_bincompat5005
3284         eval $setvar
3285         case "$d_bincompat5005" in
3286         "$define") bincompat5005="$define" ;;
3287         *) bincompat5005="$undef" ;;
3288         esac
3289         ;;
3290 esac
3291
3292
3293 : make some quick guesses about what we are up against
3294 echo " "
3295 $echo $n "Hmm...  $c"
3296 echo exit 1 >bsd
3297 echo exit 1 >usg
3298 echo exit 1 >v7
3299 echo exit 1 >osf1
3300 echo exit 1 >eunice
3301 echo exit 1 >xenix
3302 echo exit 1 >venix
3303 echo exit 1 >os2
3304 d_bsd="$undef"
3305 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3306 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3307 then
3308         echo "Looks kind of like an OSF/1 system, but we'll see..."
3309         echo exit 0 >osf1
3310 elif test `echo abc | tr a-z A-Z` = Abc ; then
3311         xxx=`./loc addbib blurfl $pth`
3312         if $test -f $xxx; then
3313         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3314                 echo exit 0 >bsd
3315                 echo exit 0 >usg
3316         else
3317                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3318                         echo "Looks kind of like an extended USG system, but we'll see..."
3319                 else
3320                         echo "Looks kind of like a USG system, but we'll see..."
3321                 fi
3322                 echo exit 0 >usg
3323         fi
3324 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3325         echo "Looks kind of like a BSD system, but we'll see..."
3326         d_bsd="$define"
3327         echo exit 0 >bsd
3328 else
3329         echo "Looks kind of like a Version 7 system, but we'll see..."
3330         echo exit 0 >v7
3331 fi
3332 case "$eunicefix" in
3333 *unixtovms*)
3334         $cat <<'EOI'
3335 There is, however, a strange, musty smell in the air that reminds me of
3336 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3337 EOI
3338         echo exit 0 >eunice
3339         d_eunice="$define"
3340 : it so happens the Eunice I know will not run shell scripts in Unix format
3341         ;;
3342 *)
3343         echo " "
3344         echo "Congratulations.  You aren't running Eunice."
3345         d_eunice="$undef"
3346         ;;
3347 esac
3348 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3349 case "$p_" in
3350 :) ;;
3351 *)
3352         $cat <<'EOI'
3353 I have the feeling something is not exactly right, however...don't tell me...
3354 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3355 EOI
3356         echo exit 0 >os2
3357         ;;
3358 esac
3359 if test -f /xenix; then
3360         echo "Actually, this looks more like a XENIX system..."
3361         echo exit 0 >xenix
3362         d_xenix="$define"
3363 else
3364         echo " "
3365         echo "It's not Xenix..."
3366         d_xenix="$undef"
3367 fi
3368 chmod +x xenix
3369 $eunicefix xenix
3370 if test -f /venix; then
3371         echo "Actually, this looks more like a VENIX system..."
3372         echo exit 0 >venix
3373 else
3374         echo " "
3375         if ./xenix; then
3376                 : null
3377         else
3378                 echo "Nor is it Venix..."
3379         fi
3380 fi
3381 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3382 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3383 $rm -f foo
3384
3385 : see if setuid scripts can be secure
3386 $cat <<EOM
3387
3388 Some kernels have a bug that prevents setuid #! scripts from being
3389 secure.  Some sites have disabled setuid #! scripts because of this.
3390
3391 First let's decide if your kernel supports secure setuid #! scripts.
3392 (If setuid #! scripts would be secure but have been disabled anyway,
3393 don't say that they are secure if asked.)
3394
3395 EOM
3396
3397 val="$undef"
3398 if $test -d /dev/fd; then
3399         echo "#!$ls" >reflect
3400         chmod +x,u+s reflect
3401         ./reflect >flect 2>&1
3402         if $contains "/dev/fd" flect >/dev/null; then
3403                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3404                 val="$define"
3405         else
3406                 $cat <<EOM
3407 If you are not sure if they are secure, I can check but I'll need a
3408 username and password different from the one you are using right now.
3409 If you don't have such a username or don't want me to test, simply
3410 enter 'none'.
3411
3412 EOM
3413                 rp='Other username to test security of setuid scripts with?'
3414                 dflt='none'
3415                 . ./myread
3416                 case "$ans" in
3417                 n|none)
3418                         case "$d_suidsafe" in
3419                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3420                                 dflt=n;;
3421                         "$undef")
3422                                 echo "Well, the $hint value is *not* secure." >&4
3423                                 dflt=n;;
3424                         *)      echo "Well, the $hint value *is* secure." >&4
3425                                 dflt=y;;
3426                         esac
3427                         ;;
3428                 *)
3429                         $rm -f reflect flect
3430                         echo "#!$ls" >reflect
3431                         chmod +x,u+s reflect
3432                         echo >flect
3433                         chmod a+w flect
3434                         echo '"su" will (probably) prompt you for '"$ans's password."
3435                         su $ans -c './reflect >flect'
3436                         if $contains "/dev/fd" flect >/dev/null; then
3437                                 echo "Okay, it looks like setuid scripts are secure." >&4
3438                                 dflt=y
3439                         else
3440                                 echo "I don't think setuid scripts are secure." >&4
3441                                 dflt=n
3442                         fi
3443                         ;;
3444                 esac
3445                 rp='Does your kernel have *secure* setuid scripts?'
3446                 . ./myread
3447                 case "$ans" in
3448                 [yY]*)  val="$define";;
3449                 *)      val="$undef";;
3450                 esac
3451         fi
3452 else
3453         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3454         echo "(That's for file descriptors, not floppy disks.)"
3455         val="$undef"
3456 fi
3457 set d_suidsafe
3458 eval $setvar
3459
3460 $rm -f reflect flect
3461
3462 : now see if they want to do setuid emulation
3463 echo " "
3464 val="$undef"
3465 case "$d_suidsafe" in
3466 "$define")
3467         val="$undef"
3468         echo "No need to emulate SUID scripts since they are secure here." >& 4
3469         ;;
3470 *)
3471         $cat <<EOM
3472 Some systems have disabled setuid scripts, especially systems where
3473 setuid scripts cannot be secure.  On systems where setuid scripts have
3474 been disabled, the setuid/setgid bits on scripts are currently
3475 useless.  It is possible for $package to detect those bits and emulate
3476 setuid/setgid in a secure fashion.  This emulation will only work if
3477 setuid scripts have been disabled in your kernel.
3478
3479 EOM
3480         case "$d_dosuid" in
3481         "$define") dflt=y ;;
3482         *) dflt=n ;;
3483         esac
3484         rp="Do you want to do setuid/setgid emulation?"
3485         . ./myread
3486         case "$ans" in
3487         [yY]*)  val="$define";;
3488         *)      val="$undef";;
3489         esac
3490         ;;
3491 esac
3492 set d_dosuid
3493 eval $setvar
3494
3495 : determine where manual pages are on this system
3496 echo " "
3497 case "$sysman" in
3498 '') 
3499         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3500         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3501         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3502         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3503         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3504         sysman=`./loc . /usr/man/man1 $syspath`
3505         ;;
3506 esac
3507 if $test -d "$sysman"; then
3508         echo "System manual is in $sysman." >&4
3509 else
3510         echo "Could not find manual pages in source form." >&4
3511 fi
3512
3513 : see what memory models we can support
3514 case "$models" in
3515 '')
3516         $cat >pdp11.c <<'EOP'
3517 int main() {
3518 #ifdef pdp11
3519         exit(0);
3520 #else
3521         exit(1);
3522 #endif
3523 }
3524 EOP
3525         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3526         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3527                 dflt='unsplit split'
3528         else
3529                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3530                 case "$tans" in
3531                 X) dflt='none';;
3532                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3533                                 dflt='small'
3534                         else
3535                                 dflt=''
3536                         fi
3537                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3538                                 dflt="$dflt medium"
3539                         fi
3540                         if $test -d /lib/large || $test -d /usr/lib/large; then
3541                                 dflt="$dflt large"
3542                         fi
3543                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3544                                 dflt="$dflt huge"
3545                         fi
3546                 esac
3547         fi;;
3548 *) dflt="$models";;
3549 esac
3550 $cat <<EOM
3551  
3552 Some systems have different model sizes.  On most systems they are called
3553 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3554 split.  If your system doesn't support different memory models, say "none".
3555 If you wish to force everything to one memory model, say "none" here and
3556 put the appropriate flags later when it asks you for other cc and ld flags.
3557 Venix systems may wish to put "none" and let the compiler figure things out.
3558 (In the following question multiple model names should be space separated.)
3559
3560 The default for most systems is "none".
3561
3562 EOM
3563 rp="Which memory models are supported?"
3564 . ./myread
3565 models="$ans"
3566
3567 case "$models" in
3568 none)
3569         small=''
3570         medium=''
3571         large=''
3572         huge=''
3573         unsplit=''
3574         split=''
3575         ;;
3576 *split)
3577         case "$split" in
3578         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3579                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3580                         dflt='-i'
3581                 else
3582                         dflt='none'
3583                 fi;;
3584         *) dflt="$split";;
3585         esac
3586         rp="What flag indicates separate I and D space?"
3587         . ./myread
3588         tans="$ans"
3589         case "$tans" in
3590         none) tans='';;
3591         esac
3592         split="$tans"
3593         unsplit='';;
3594 *large*|*small*|*medium*|*huge*)
3595         case "$models" in
3596         *large*)
3597                 case "$large" in
3598                 '') dflt='-Ml';;
3599                 *) dflt="$large";;
3600                 esac
3601         rp="What flag indicates large model?"
3602         . ./myread
3603         tans="$ans"
3604         case "$tans" in
3605         none) tans='';
3606         esac
3607         large="$tans";;
3608         *) large='';;
3609         esac
3610         case "$models" in
3611         *huge*) case "$huge" in
3612                 '') dflt='-Mh';;
3613                 *) dflt="$huge";;
3614                 esac
3615                 rp="What flag indicates huge model?"
3616                 . ./myread
3617                 tans="$ans"
3618                 case "$tans" in
3619                 none) tans='';
3620                 esac
3621                 huge="$tans";;
3622         *) huge="$large";;
3623         esac
3624         case "$models" in
3625         *medium*) case "$medium" in
3626                 '') dflt='-Mm';;
3627                 *) dflt="$medium";;
3628                 esac
3629                 rp="What flag indicates medium model?"
3630                 . ./myread
3631                 tans="$ans"
3632                 case "$tans" in
3633                 none) tans='';
3634                 esac
3635                 medium="$tans";;
3636         *) medium="$large";;
3637         esac
3638         case "$models" in
3639         *small*) case "$small" in
3640                 '') dflt='none';;
3641                 *) dflt="$small";;
3642                 esac
3643                 rp="What flag indicates small model?"
3644                 . ./myread
3645                 tans="$ans"
3646                 case "$tans" in
3647                 none) tans='';
3648                 esac
3649                 small="$tans";;
3650         *) small='';;
3651         esac
3652         ;;
3653 *)
3654         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3655         ;;
3656 esac
3657 $rm -f pdp11.* pdp11
3658
3659 : see if we need a special compiler
3660 echo " "
3661 if ./usg; then
3662         case "$cc" in
3663         '') case "$Mcc" in
3664                 /*) dflt='Mcc';;
3665                 *) case "$large" in
3666                         -M*) dflt='cc';;
3667                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3668                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3669                                                 dflt='cc'
3670                                         else
3671                                                 dflt='cc -M'
3672                                         fi
3673                                 else
3674                                         dflt='cc'
3675                                 fi;;
3676                         esac;;
3677                 esac;;
3678         *)  dflt="$cc";;
3679         esac
3680         case "$dflt" in
3681         *M*)    $cat <<'EOM'
3682 On some older systems the default C compiler will not resolve multiple global
3683 references that happen to have the same name.  On some such systems the "Mcc"
3684 command may be used to force these to be resolved.  On other systems a "cc -M"
3685 command is required.  (Note that the -M flag on other systems indicates a
3686 memory model to use!) If you have the Gnu C compiler, you might wish to use
3687 that instead.
3688
3689 EOM
3690         ;;
3691         esac
3692         rp="Use which C compiler?"
3693         . ./myread
3694         cc="$ans"
3695 else
3696         case "$cc" in
3697         '') dflt=cc;;
3698         *) dflt="$cc";;
3699         esac
3700         rp="Use which C compiler?"
3701         . ./myread
3702         cc="$ans"
3703 fi
3704 : Look for a hint-file generated 'call-back-unit'.  Now that the
3705 : user has specified the compiler, we may need to set or change some
3706 : other defaults.
3707 if $test -f cc.cbu; then
3708     . ./cc.cbu
3709 fi
3710 echo " "
3711 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3712 $cat >gccvers.c <<EOM
3713 #include <stdio.h>
3714 int main() {
3715 #ifdef __GNUC__
3716 #ifdef __VERSION__
3717         printf("%s\n", __VERSION__);
3718 #else
3719         printf("%s\n", "1");
3720 #endif
3721 #endif
3722         exit(0);
3723 }
3724 EOM
3725 if $cc -o gccvers gccvers.c; then
3726         gccversion=`./gccvers`
3727         case "$gccversion" in
3728         '') echo "You are not using GNU cc." ;;
3729         *)  echo "You are using GNU cc $gccversion." ;;
3730         esac
3731 else
3732         echo " "
3733         echo "*** WHOA THERE!!! ***" >&4
3734         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3735         case "$knowitall" in
3736         '')
3737         echo "    You'd better start hunting for one and let me know about it." >&4
3738                 exit 1
3739                 ;;
3740         esac
3741 fi
3742 $rm -f gccvers*
3743 case "$gccversion" in
3744 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3745 esac
3746
3747 : What should the include directory be ?
3748 echo " "
3749 $echo $n "Hmm...  $c"
3750 dflt='/usr/include'
3751 incpath=''
3752 mips_type=''
3753 if $test -f /bin/mips && /bin/mips; then
3754         echo "Looks like a MIPS system..."
3755         $cat >usr.c <<'EOCP'
3756 #ifdef SYSTYPE_BSD43
3757 /bsd43
3758 #endif
3759 EOCP
3760         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3761                 dflt='/bsd43/usr/include'
3762                 incpath='/bsd43'
3763                 mips_type='BSD 4.3'
3764         else
3765                 mips_type='System V'
3766         fi
3767         $rm -f usr.c usr.out
3768         echo "and you're compiling with the $mips_type compiler and libraries."
3769         xxx_prompt=y
3770         echo "exit 0" >mips
3771 else
3772         echo "Doesn't look like a MIPS system."
3773         xxx_prompt=n
3774         echo "exit 1" >mips
3775 fi
3776 chmod +x mips
3777 $eunicefix mips
3778 case "$usrinc" in
3779 '') ;;
3780 *) dflt="$usrinc";;
3781 esac
3782 case "$xxx_prompt" in
3783 y)      fn=d/
3784         echo " "
3785         rp='Where are the include files you want to use?'
3786         . ./getfile
3787         usrinc="$ans"
3788         ;;
3789 *)      usrinc="$dflt"
3790         ;;
3791 esac
3792
3793 : see how we invoke the C preprocessor
3794 echo " "
3795 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3796 cat <<'EOT' >testcpp.c
3797 #define ABC abc
3798 #define XYZ xyz
3799 ABC.XYZ
3800 EOT
3801 cd ..
3802 if test ! -f cppstdin; then
3803         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3804 else
3805         echo "Keeping your $hint cppstdin wrapper."
3806 fi
3807 chmod 755 cppstdin
3808 wrapper=`pwd`/cppstdin
3809 ok='false'
3810 cd UU
3811
3812 if $test "X$cppstdin" != "X" && \
3813         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3814         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3815 then
3816         echo "You used to use $cppstdin $cppminus so we'll use that again."
3817         case "$cpprun" in
3818         '') echo "But let's see if we can live without a wrapper..." ;;
3819         *)
3820                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3821                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3822                 then
3823                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3824                         ok='true'
3825                 else
3826                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3827                 fi
3828                 ;;
3829         esac
3830 else
3831         case "$cppstdin" in
3832         '') ;;
3833         *)
3834                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3835                 ;;
3836         esac
3837 fi
3838
3839 if $ok; then
3840         : nothing
3841 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3842         $cc -E <testcpp.c >testcpp.out 2>&1; \
3843         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3844         echo "Yup, it does."
3845         x_cpp="$cc -E"
3846         x_minus='';
3847 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3848         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3849         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3850         echo "Yup, it does."
3851         x_cpp="$cc -E"
3852         x_minus='-';
3853 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3854         $cc -P <testcpp.c >testcpp.out 2>&1; \
3855         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3856         echo "Yipee, that works!"
3857         x_cpp="$cc -P"
3858         x_minus='';
3859 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3860         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3861         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3862         echo "At long last!"
3863         x_cpp="$cc -P"
3864         x_minus='-';
3865 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3866         $cpp <testcpp.c >testcpp.out 2>&1; \
3867         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3868         echo "It works!"
3869         x_cpp="$cpp"
3870         x_minus='';
3871 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3872         $cpp - <testcpp.c >testcpp.out 2>&1; \
3873         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3874         echo "Hooray, it works!  I was beginning to wonder."
3875         x_cpp="$cpp"
3876         x_minus='-';
3877 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3878         $wrapper <testcpp.c >testcpp.out 2>&1; \
3879         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3880         x_cpp="$wrapper"
3881         x_minus=''
3882         echo "Eureka!"
3883 else
3884         dflt=''
3885         rp="No dice.  I can't find a C preprocessor.  Name one:"
3886         . ./myread
3887         x_cpp="$ans"
3888         x_minus=''
3889         $x_cpp <testcpp.c >testcpp.out 2>&1
3890         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3891                 echo "OK, that will do." >&4
3892         else
3893 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3894                 exit 1
3895         fi
3896 fi
3897
3898 case "$ok" in
3899 false)
3900         cppstdin="$x_cpp"
3901         cppminus="$x_minus"
3902         cpprun="$x_cpp"
3903         cpplast="$x_minus"
3904         set X $x_cpp
3905         shift
3906         case "$1" in
3907         "$cpp")
3908                 echo "Perhaps can we force $cc -E using a wrapper..."
3909                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3910                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3911                 then
3912                         echo "Yup, we can."
3913                         cppstdin="$wrapper"
3914                         cppminus='';
3915                 else
3916                         echo "Nope, we'll have to live without it..."
3917                 fi
3918                 ;;
3919         esac
3920         case "$cpprun" in
3921         "$wrapper")
3922                 cpprun=''
3923                 cpplast=''
3924                 ;;
3925         esac
3926         ;;
3927 esac
3928
3929 case "$cppstdin" in
3930 "$wrapper"|'cppstdin') ;;
3931 *) $rm -f $wrapper;;
3932 esac
3933 $rm -f testcpp.c testcpp.out
3934
3935 : Set private lib path
3936 case "$plibpth" in
3937 '') if ./mips; then
3938                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3939         fi;;
3940 esac
3941 case "$libpth" in
3942 ' ') dlist='';;
3943 '') dlist="$loclibpth $plibpth $glibpth";;
3944 *) dlist="$libpth";;
3945 esac
3946
3947 : Now check and see which directories actually exist, avoiding duplicates
3948 libpth=''
3949 for xxx in $dlist
3950 do
3951     if $test -d $xxx; then
3952                 case " $libpth " in
3953                 *" $xxx "*) ;;
3954                 *) libpth="$libpth $xxx";;
3955                 esac
3956     fi
3957 done
3958 $cat <<'EOM'
3959
3960 Some systems have incompatible or broken versions of libraries.  Among
3961 the directories listed in the question below, please remove any you
3962 know not to be holding relevant libraries, and add any that are needed.
3963 Say "none" for none.
3964
3965 EOM
3966 case "$libpth" in
3967 '') dflt='none';;
3968 *)
3969         set X $libpth
3970         shift
3971         dflt=${1+"$@"}
3972         ;;
3973 esac
3974 rp="Directories to use for library searches?"
3975 . ./myread
3976 case "$ans" in
3977 none) libpth=' ';;
3978 *) libpth="$ans";;
3979 esac
3980
3981 : compute shared library extension
3982 case "$so" in
3983 '')
3984         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3985                 dflt='sl'
3986         else
3987                 dflt='so'
3988         fi
3989         ;;
3990 *) dflt="$so";;
3991 esac
3992 $cat <<EOM
3993
3994 On some systems, shared libraries may be available.  Answer 'none' if
3995 you want to suppress searching of shared libraries for the remaining
3996 of this configuration.
3997
3998 EOM
3999 rp='What is the file extension used for shared libraries?'
4000 . ./myread
4001 so="$ans"
4002
4003 : Define several unixisms.
4004 : Hints files or command line option can be used to override them.
4005 : The convoluted testing is in case hints files set either the old
4006 : or the new name.
4007 case "$_exe" in
4008 '')     case "$exe_ext" in
4009     '') ;;
4010         *)      _exe="$exe_ext" ;;
4011         esac
4012         ;;
4013 esac
4014 case "$_a" in
4015 '')     case "$lib_ext" in
4016     '') _a='.a';;
4017         *)      _a="$lib_ext" ;;
4018         esac
4019         ;;
4020 esac
4021 case "$_o" in
4022 '') case "$obj_ext" in
4023         '')     _o='.o';;
4024         *)      _o="$obj_ext";;
4025         esac
4026         ;;
4027 esac
4028 case "$p_" in
4029 '') case "$path_sep" in
4030         '')     p_=':';;
4031         *)      p_="$path_sep";;
4032         esac
4033         ;;
4034 esac
4035 exe_ext=$_exe
4036 lib_ext=$_a
4037 obj_ext=$_o
4038 path_sep=$p_
4039
4040 : Which makefile gets called first.  This is used by make depend.
4041 case "$firstmakefile" in
4042 '') firstmakefile='makefile';;
4043 esac
4044
4045 cat <<EOM
4046
4047 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4048 Configure must be run with -Dusesocks.
4049
4050 Normally you do not need this and you should answer no.
4051
4052 EOM
4053 case "$usesocks" in
4054 $define|true|[yY]*)     dflt='y';;
4055 *) dflt='n';;
4056 esac
4057 rp='Build Perl for SOCKS?'
4058 . ./myread
4059 case "$ans" in
4060 y|Y)    val="$define" ;;     
4061 *)      val="$undef" ;;
4062 esac
4063 set usesocks
4064 eval $setvar
4065
4066 : Looking for optional libraries
4067 echo " "
4068 echo "Checking for optional libraries..." >&4
4069 case "$libs" in
4070 ' '|'') dflt='';;
4071 *) dflt="$libs";;
4072 esac
4073 case "$libswanted" in
4074 '') libswanted='c_s';;
4075 esac
4076 case "$usesocks" in
4077 $define)
4078         libswanted="$libswanted socks5 socks5_sh"
4079         ;;
4080 esac
4081 for thislib in $libswanted; do
4082         
4083         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4084                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4085                 echo "Found -l$thislib (shared)."
4086                 case " $dflt " in
4087                 *"-l$thislib "*);;
4088                 *) dflt="$dflt -l$thislib";;
4089                 esac
4090         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4091                 echo "Found -l$thislib (shared)."
4092                 case " $dflt " in
4093                 *"-l$thislib "*);;
4094                 *) dflt="$dflt -l$thislib";;
4095                 esac
4096         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4097                 echo "Found -l$thislib."
4098                 case " $dflt " in
4099                 *"-l$thislib "*);;
4100                 *) dflt="$dflt -l$thislib";;
4101                 esac
4102         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4103                 echo "Found -l$thislib."
4104                 case " $dflt " in
4105                 *"-l$thislib "*);;
4106                 *) dflt="$dflt -l$thislib";;
4107                 esac
4108         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4109                 echo "Found -l${thislib}_s."
4110                 case " $dflt " in
4111                 *"-l$thislib "*);;
4112                 *) dflt="$dflt -l${thislib}_s";;
4113                 esac
4114         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4115                 echo "Found -l$thislib."
4116                 case " $dflt " in
4117                 *"-l$thislib "*);;
4118                 *) dflt="$dflt -l$thislib";;
4119                 esac
4120         else
4121                 echo "No -l$thislib."
4122         fi
4123 done
4124 set X $dflt
4125 shift
4126 dflt="$*"
4127 case "$libs" in
4128 '') dflt="$dflt";;
4129 *) dflt="$libs";;
4130 esac
4131 case "$dflt" in
4132 ' '|'') dflt='none';;
4133 esac
4134
4135 $cat <<EOM
4136
4137 In order to compile $package on your machine, a number of libraries
4138 are usually needed.  Include any other special libraries here as well.
4139 Say "none" for none.  The default list is almost always right.
4140 EOM
4141
4142 echo " "
4143 rp="What libraries to use?"
4144 . ./myread
4145 case "$ans" in
4146 none) libs=' ';;
4147 *) libs="$ans";;
4148 esac
4149
4150 : determine optimize, if desired, or use for debug flag also
4151 case "$optimize" in
4152 ' '|$undef) dflt='none';;
4153 '') dflt='-O';;
4154 *) dflt="$optimize";;
4155 esac
4156 $cat <<EOH
4157
4158 Some C compilers have problems with their optimizers.  By default, $package
4159 compiles with the -O flag to use the optimizer.  Alternately, you might want
4160 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4161 systems).  Either flag can be specified here.  To use neither flag, specify
4162 the word "none".
4163
4164 EOH
4165 rp="What optimizer/debugger flag should be used?"
4166 . ./myread
4167 optimize="$ans"
4168 case "$optimize" in
4169 'none') optimize=" ";;
4170 esac
4171
4172 dflt=''
4173 : We will not override a previous value, but we might want to
4174 : augment a hint file
4175 case "$hint" in
4176 none|recommended)
4177         case "$gccversion" in
4178         1*) dflt='-fpcc-struct-return' ;;
4179         esac
4180         case "$optimize" in
4181         *-g*) dflt="$dflt -DDEBUGGING";;
4182         esac
4183         case "$gccversion" in
4184         2*) if test -d /etc/conf/kconfig.d &&
4185                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4186                 then
4187                         dflt="$dflt -posix"
4188                 fi
4189                 ;;
4190         esac
4191         ;;
4192 esac
4193
4194 case "$mips_type" in
4195 *BSD*|'') inclwanted="$locincpth $usrinc";;
4196 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4197 esac
4198 for thisincl in $inclwanted; do
4199         if $test -d $thisincl; then
4200                 if $test x$thisincl != x$usrinc; then
4201                         case "$dflt" in
4202                         *$thisincl*);;
4203                         *) dflt="$dflt -I$thisincl";;
4204                         esac
4205                 fi
4206         fi
4207 done
4208
4209 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4210         xxx=true;
4211 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4212         xxx=true;
4213 else
4214         xxx=false;
4215 fi;
4216 if $xxx; then
4217         case "$dflt" in
4218         *$2*);;
4219         *) dflt="$dflt -D$2";;
4220         esac;
4221 fi'
4222
4223 set signal.h LANGUAGE_C; eval $inctest
4224
4225 case "$usesocks" in
4226 $define)
4227         ccflags="$ccflags -DSOCKS"
4228         ;;
4229 esac
4230
4231 case "$hint" in
4232 none|recommended) dflt="$ccflags $dflt" ;;
4233 *) dflt="$ccflags";;
4234 esac
4235
4236 case "$dflt" in
4237 ''|' ') dflt=none;;
4238 esac
4239 $cat <<EOH
4240
4241 Your C compiler may want other flags.  For this question you should include
4242 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4243 but you should NOT include libraries or ld flags like -lwhatever.  If you
4244 want $package to honor its debug switch, you should include -DDEBUGGING here.
4245 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4246
4247 To use no flags, specify the word "none".
4248
4249 EOH
4250 set X $dflt
4251 shift
4252 dflt=${1+"$@"}
4253 rp="Any additional cc flags?"
4254 . ./myread
4255 case "$ans" in
4256 none) ccflags='';;
4257 *) ccflags="$ans";;
4258 esac
4259
4260 : the following weeds options from ccflags that are of no interest to cpp
4261 cppflags="$ccflags"
4262 case "$gccversion" in
4263 1*) cppflags="$cppflags -D__GNUC__"
4264 esac
4265 case "$mips_type" in
4266 '');;
4267 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4268 esac
4269 case "$cppflags" in
4270 '');;
4271 *)
4272         echo " "
4273         echo "Let me guess what the preprocessor flags are..." >&4
4274         set X $cppflags
4275         shift
4276         cppflags=''
4277         $cat >cpp.c <<'EOM'
4278 #define BLURFL foo
4279
4280 BLURFL xx LFRULB
4281 EOM
4282         previous=''
4283         for flag in $*
4284         do
4285                 case "$flag" in
4286                 -*) ftry="$flag";;
4287                 *) ftry="$previous $flag";;
4288                 esac
4289                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4290                         >cpp1.out 2>/dev/null && \
4291                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4292                         >cpp2.out 2>/dev/null && \
4293                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4294                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4295                 then
4296                         cppflags="$cppflags $ftry"
4297                         previous=''
4298                 else
4299                         previous="$flag"
4300                 fi
4301         done
4302         set X $cppflags
4303         shift
4304         cppflags=${1+"$@"}
4305         case "$cppflags" in
4306         *-*)  echo "They appear to be: $cppflags";;
4307         esac
4308         $rm -f cpp.c cpp?.out
4309         ;;
4310 esac
4311
4312 : flags used in final linking phase
4313 case "$ldflags" in
4314 '') if ./venix; then
4315                 dflt='-i -z'
4316         else
4317                 dflt=''
4318         fi
4319         case "$ccflags" in
4320         *-posix*) dflt="$dflt -posix" ;;
4321         esac
4322         ;;
4323 *) dflt="$ldflags";;
4324 esac
4325
4326 : Try to guess additional flags to pick up local libraries.
4327 for thislibdir in $libpth; do
4328         case " $loclibpth " in
4329         *" $thislibdir "*)
4330                 case "$dflt " in 
4331                 *"-L$thislibdir "*) ;;
4332                 *)  dflt="$dflt -L$thislibdir" ;;
4333                 esac
4334                 ;;
4335         esac
4336 done
4337
4338 case "$dflt" in
4339 '') dflt='none' ;;
4340 esac
4341
4342 $cat <<EOH
4343
4344 Your C linker may need flags.  For this question you should
4345 include -L/whatever and any other flags used by the C linker, but you
4346 should NOT include libraries like -lwhatever.
4347
4348 Make sure you include the appropriate -L/path flags if your C linker
4349 does not normally search all of the directories you specified above,
4350 namely
4351         $libpth
4352 To use no flags, specify the word "none".
4353
4354 EOH
4355
4356 rp="Any additional ld flags (NOT including libraries)?"
4357 . ./myread
4358 case "$ans" in
4359 none) ldflags='';;
4360 *) ldflags="$ans";;
4361 esac
4362 rmlist="$rmlist pdp11"
4363
4364 : coherency check
4365 echo " "
4366 echo "Checking your choice of C compiler and flags for coherency..." >&4
4367 $cat > try.c <<'EOF'
4368 #include <stdio.h>
4369 int main() { printf("Ok\n"); exit(0); }
4370 EOF
4371 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4372 shift
4373 $cat >try.msg <<'EOM'
4374 I've tried to compile and run the following simple program:
4375
4376 EOM
4377 $cat try.c >> try.msg
4378
4379 $cat >> try.msg <<EOM
4380
4381 I used the command:
4382
4383         $*
4384         ./try
4385
4386 and I got the following output:
4387
4388 EOM
4389 dflt=y
4390 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4391         if sh -c './try' >>try.msg 2>&1; then
4392                 xxx=`./try`
4393                 case "$xxx" in
4394                 "Ok") dflt=n ;;
4395                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4396                         case " $libs " in
4397                         *" -lsfio "*)
4398                                 cat >> try.msg <<'EOQS'
4399 If $libs contains -lsfio, and sfio is mis-configured, then it
4400 sometimes (apparently) runs and exits with a 0 status, but with no
4401 output!  It may have to do with sfio's use of _exit vs. exit.
4402
4403 EOQS
4404                                 rp="You have a big problem.  Shall I abort Configure"
4405                                 dflt=y
4406                                 ;;
4407                         esac
4408                         ;;
4409                 esac
4410         else
4411                 echo "The program compiled OK, but exited with status $?." >>try.msg
4412                 rp="You have a problem.  Shall I abort Configure"
4413                 dflt=y
4414         fi
4415 else
4416         echo "I can't compile the test program." >>try.msg
4417         rp="You have a BIG problem.  Shall I abort Configure"
4418         dflt=y
4419 fi
4420 case "$dflt" in
4421 y)
4422         $cat try.msg >&4
4423         case "$knowitall" in
4424         '')
4425                 echo "(The supplied flags or libraries might be incorrect.)"
4426                 ;;
4427         *) dflt=n;;
4428         esac
4429         echo " "
4430         . ./myread
4431         case "$ans" in
4432         n*|N*) ;;
4433         *)      echo "Ok.  Stopping Configure." >&4
4434                 exit 1
4435                 ;;
4436         esac
4437         ;;
4438 n) echo "OK, that should do.";;
4439 esac
4440 $rm -f try try.* core
4441
4442 : determine filename position in cpp output
4443 echo " "
4444 echo "Computing filename position in cpp output for #include directives..." >&4
4445 echo '#include <stdio.h>' > foo.c
4446 $cat >fieldn <<EOF
4447 $startsh
4448 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4449 $grep '^[       ]*#.*stdio\.h' | \
4450 while read cline; do
4451         pos=1
4452         set \$cline
4453         while $test \$# -gt 0; do
4454                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4455                         echo "\$pos"
4456                         exit 0
4457                 fi
4458                 shift
4459                 pos=\`expr \$pos + 1\`
4460         done
4461 done
4462 EOF
4463 chmod +x fieldn
4464 fieldn=`./fieldn`
4465 $rm -f foo.c fieldn
4466 case $fieldn in
4467 '') pos='???';;
4468 1) pos=first;;
4469 2) pos=second;;
4470 3) pos=third;;
4471 *) pos="${fieldn}th";;
4472 esac
4473 echo "Your cpp writes the filename in the $pos field of the line."
4474
4475 : locate header file
4476 $cat >findhdr <<EOF
4477 $startsh
4478 wanted=\$1
4479 name=''
4480 for usrincdir in $usrinc
4481 do
4482         if test -f \$usrincdir/\$wanted; then
4483                 echo "\$usrincdir/\$wanted"
4484                 exit 0
4485         fi
4486 done
4487 awkprg='{ print \$$fieldn }'
4488 echo "#include <\$wanted>" > foo\$\$.c
4489 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4490 $grep "^[       ]*#.*\$wanted" | \
4491 while read cline; do
4492         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4493         case "\$name" in
4494         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4495         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4496         *) exit 2;;
4497         esac;
4498 done;
4499 #
4500 # status = 0: grep returned 0 lines, case statement not executed
4501 # status = 1: headerfile found
4502 # status = 2: while loop executed, no headerfile found
4503 #
4504 status=\$?
4505 $rm -f foo\$\$.c;
4506 if test \$status -eq 1; then
4507         exit 0;
4508 fi
4509 exit 1
4510 EOF
4511 chmod +x findhdr
4512
4513 : define an alternate in-header-list? function
4514 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4515 cont=true; xxf="echo \"<\$1> found.\" >&4";
4516 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4517 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4518 esac;
4519 case $# in 4) instead=instead;; *) instead="at last";; esac;
4520 while $test "$cont"; do
4521         xxx=`./findhdr $1`
4522         var=$2; eval "was=\$$2";
4523         if $test "$xxx" && $test -r "$xxx";
4524         then eval $xxf;
4525         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4526                 cont="";
4527         else eval $xxnf;
4528         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4529         set $yyy; shift; shift; yyy=$@;
4530         case $# in 0) cont="";;
4531         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4532                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4533         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4534                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4535         esac;
4536 done;
4537 while $test "$yyy";
4538 do set $yyy; var=$2; eval "was=\$$2";
4539         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4540         set $yyy; shift; shift; yyy=$@;
4541 done'
4542
4543 : see if this is a malloc.h system
4544 set malloc.h i_malloc
4545 eval $inhdr
4546
4547 : see if stdlib is available
4548 set stdlib.h i_stdlib
4549 eval $inhdr
4550
4551 : determine which malloc to compile in
4552 echo " "
4553 case "$usemymalloc" in
4554 ''|[yY]*|true|$define)  dflt='y' ;;
4555 *)      dflt='n' ;;
4556 esac
4557 rp="Do you wish to attempt to use the malloc that comes with $package?"
4558 . ./myread
4559 usemymalloc="$ans"
4560 case "$ans" in
4561 y*|true)
4562         usemymalloc='y'
4563         mallocsrc='malloc.c'
4564         mallocobj="malloc$_o"
4565         d_mymalloc="$define"
4566         case "$libs" in
4567         *-lmalloc*)
4568                 : Remove malloc from list of libraries to use
4569                 echo "Removing unneeded -lmalloc from library list" >&4
4570                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4571                 shift
4572                 libs="$*"
4573                 echo "libs = $libs" >&4
4574                 ;;
4575         esac
4576         ;;
4577 *)
4578         usemymalloc='n'
4579         mallocsrc=''
4580         mallocobj=''
4581         d_mymalloc="$undef"
4582         ;;
4583 esac
4584
4585 : compute the return types of malloc and free
4586 echo " "
4587 $cat >malloc.c <<END
4588 #$i_malloc I_MALLOC
4589 #$i_stdlib I_STDLIB
4590 #include <stdio.h>
4591 #include <sys/types.h>
4592 #ifdef I_MALLOC
4593 #include <malloc.h>
4594 #endif
4595 #ifdef I_STDLIB
4596 #include <stdlib.h>
4597 #endif
4598 #ifdef TRY_MALLOC
4599 void *malloc();
4600 #endif
4601 #ifdef TRY_FREE
4602 void free();
4603 #endif
4604 END
4605 case "$malloctype" in
4606 '')
4607         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4608                 malloctype='void *'
4609         else
4610                 malloctype='char *'
4611         fi
4612         ;;
4613 esac
4614 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4615
4616 case "$freetype" in
4617 '')
4618         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4619                 freetype='void'
4620         else
4621                 freetype='int'
4622         fi
4623         ;;
4624 esac
4625 echo "Your system uses $freetype free(), it would seem." >&4
4626 $rm -f malloc.[co]
4627 $cat <<EOM
4628
4629 The installation process will also create a directory for
4630 vendor-supplied add-ons.  Vendors who supply perl with their system
4631 may find it convenient to place all vendor-supplied files in this
4632 directory rather than in the main distribution directory.  This will
4633 ease upgrades between binary-compatible maintenance versions of perl.
4634
4635 Of course you may also use these directories in whatever way you see
4636 fit.  For example, you might use them to access modules shared over a
4637 company-wide network.
4638
4639 The default answer should be fine for most people.
4640 This causes further questions about vendor add-ons to be skipped
4641 and no vendor-specific directories will be configured for perl.
4642
4643 EOM
4644 rp='Do you want to configure vendor-specific add-on directories?'
4645 case "$usevendorprefix" in
4646 define|true|[yY]*) dflt=y ;;
4647 *) dflt=n ;;
4648 esac
4649 . ./myread
4650 case "$ans" in
4651 [yY]*)  fn=d~+
4652         rp='Installation prefix to use for vendor-supplied add-ons?'
4653         case "$vendorprefix" in
4654         '') dflt='' ;;
4655         *)  dflt=$vendorprefix ;;
4656         esac
4657         . ./getfile
4658         oldvendorprefix=''
4659         case "$vendorprefix" in
4660         '') ;;
4661         *)      case "$ans" in
4662                 "$prefix") ;;
4663                 *) oldvendorprefix="$prefix";;
4664                 esac
4665                 ;;
4666         esac
4667         usevendorprefix="$define"
4668         vendorprefix="$ans"
4669         vendorprefixexp="$ansexp"
4670         ;;
4671 *)      usevendorprefix="$undef"
4672         vendorprefix=''
4673         vendorprefixexp=''
4674         ;;
4675 esac
4676
4677 case "$vendorprefix" in
4678 '')     d_vendorlib="$undef"
4679         vendorlib=''
4680         vendorlibexp=''
4681         ;;
4682 *)      d_vendorlib="$define"
4683         : determine where vendor-supplied modules go.
4684         : Usual default is /usr/local/lib/perl5/vendor_perl
4685         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4686         case "$installstyle" in
4687         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4688         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4689         esac
4690         fn=d~+
4691         rp='Pathname for the vendor-supplied library files?'
4692         . ./getfile
4693         vendorlib="$ans"
4694         vendorlibexp="$ansexp"
4695         : Change installation prefix, if necessary.
4696         if $test X"$prefix" != X"$installprefix"; then
4697                 installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'`
4698         else
4699                 installvendorlib="$vendorlibexp"
4700         fi
4701         ;;
4702 esac
4703
4704 : Cruising for prototypes
4705 echo " "
4706 echo "Checking out function prototypes..." >&4
4707 $cat >prototype.c <<'EOCP'
4708 int main(int argc, char *argv[]) {
4709         exit(0);}
4710 EOCP
4711 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4712         echo "Your C compiler appears to support function prototypes."
4713         val="$define"
4714 else
4715         echo "Your C compiler doesn't seem to understand function prototypes."
4716         val="$undef"
4717 fi
4718 set prototype
4719 eval $setvar
4720 $rm -f prototype*
4721
4722 case "$prototype" in
4723 "$define") ;;
4724 *)      ansi2knr='ansi2knr'
4725         echo " "
4726         cat <<EOM >&4
4727
4728 $me:  FATAL ERROR:
4729 This version of $package can only be compiled by a compiler that 
4730 understands function prototypes.  Unfortunately, your C compiler 
4731         $cc $ccflags
4732 doesn't seem to understand them.  Sorry about that.
4733
4734 If GNU cc is available for your system, perhaps you could try that instead.  
4735
4736 Eventually, we hope to support building Perl with pre-ANSI compilers.
4737 If you would like to help in that effort, please contact <perlbug@perl.org>.
4738
4739 Aborting Configure now.
4740 EOM
4741         exit 2
4742         ;;
4743 esac
4744
4745 : determine where public executables go
4746 echo " "
4747 set dflt bin bin
4748 eval $prefixit
4749 fn=d~
4750 rp='Pathname where the public executables will reside?'
4751 . ./getfile
4752 if $test "X$ansexp" != "X$binexp"; then
4753         installbin=''
4754 fi
4755 bin="$ans"
4756 binexp="$ansexp"
4757 : Change installation prefix, if necessary.
4758 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4759 if $test X"$prefix" != X"$installprefix"; then
4760         installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'`
4761 else
4762         installbin="$binexp"
4763 fi
4764
4765 : determine whether to install perl also as /usr/bin/perl
4766
4767 echo " "
4768 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4769         $cat <<EOM
4770 Many scripts expect to perl to be installed as /usr/bin/perl.
4771 I can install the perl you are about to compile also as /usr/bin/perl
4772 (in addition to $installbin/perl).
4773 EOM
4774         case "$installusrbinperl" in
4775         "$undef"|[nN]*) dflt='n';;
4776         *)              dflt='y';;
4777         esac
4778         rp="Do you want to install perl as /usr/bin/perl?"
4779         . ./myread
4780         case "$ans" in
4781         [yY]*)  val="$define";;
4782         *)      val="$undef" ;;
4783         esac
4784 else
4785         val="$undef"
4786 fi
4787 set installusrbinperl
4788 eval $setvar
4789
4790 : define a shorthand compile call
4791 compile='
4792 mc_file=$1;
4793 shift;
4794 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4795 : define a shorthand compile call for compilations that should be ok.
4796 compile_ok='
4797 mc_file=$1;
4798 shift;
4799 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4800
4801 echo " "
4802 echo "Checking for GNU C Library..." >&4
4803 cat >gnulibc.c <<EOM
4804 #include <stdio.h>
4805 int main()
4806 {
4807 #ifdef __GLIBC__
4808     exit(0);
4809 #else
4810     exit(1);
4811 #endif
4812 }
4813 EOM
4814 set gnulibc
4815 if eval $compile_ok && ./gnulibc; then
4816         val="$define"
4817         echo "You are using the GNU C Library"
4818 else
4819         val="$undef"
4820         echo "You are not using the GNU C Library"
4821 fi
4822 $rm -f gnulibc*
4823 set d_gnulibc
4824 eval $setvar
4825
4826 : see if nm is to be used to determine whether a symbol is defined or not
4827 case "$usenm" in
4828 '')
4829         dflt=''
4830         case "$d_gnulibc" in
4831         "$define")
4832                 echo " "
4833                 echo "nm probably won't work on the GNU C Library." >&4
4834                 dflt=n
4835                 ;;
4836         esac
4837         case "$dflt" in
4838         '') 
4839                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4840                         echo " "
4841                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4842                         echo "'nm' won't be sufficient on this sytem." >&4
4843                         dflt=n
4844                 fi
4845                 ;;
4846         esac
4847         case "$dflt" in
4848         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4849                 if $test $dflt -gt 20; then
4850                         dflt=y
4851                 else
4852                         dflt=n
4853                 fi
4854                 ;;
4855         esac
4856         ;;
4857 *)
4858         case "$usenm" in
4859         true|$define) dflt=y;;
4860         *) dflt=n;;
4861         esac
4862         ;;
4863 esac
4864 $cat <<EOM
4865
4866 I can use $nm to extract the symbols from your C libraries. This
4867 is a time consuming task which may generate huge output on the disk (up
4868 to 3 megabytes) but that should make the symbols extraction faster. The
4869 alternative is to skip the 'nm' extraction part and to compile a small
4870 test program instead to determine whether each symbol is present. If
4871 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4872 this may be the best solution.
4873
4874 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4875
4876 EOM
4877 rp="Shall I use $nm to extract C symbols from the libraries?"
4878 . ./myread
4879 case "$ans" in
4880 [Nn]*) usenm=false;;
4881 *) usenm=true;;
4882 esac
4883
4884 runnm=$usenm
4885 case "$reuseval" in
4886 true) runnm=false;;
4887 esac
4888
4889 : nm options which may be necessary
4890 case "$nm_opt" in
4891 '') if $test -f /mach_boot; then
4892                 nm_opt=''       # Mach
4893         elif $test -d /usr/ccs/lib; then
4894                 nm_opt='-p'     # Solaris (and SunOS?)
4895         elif $test -f /dgux; then
4896                 nm_opt='-p'     # DG-UX
4897         elif $test -f /lib64/rld; then
4898                 nm_opt='-p'     # 64-bit Irix
4899         else
4900                 nm_opt=''
4901         fi;;
4902 esac
4903
4904 : nm options which may be necessary for shared libraries but illegal
4905 : for archive libraries.  Thank you, Linux.
4906 case "$nm_so_opt" in
4907 '')     case "$myuname" in
4908         *linux*)
4909                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4910                         nm_so_opt='--dynamic'
4911                 fi
4912                 ;;
4913         esac
4914         ;;
4915 esac
4916
4917 case "$runnm" in
4918 true)
4919 : get list of predefined functions in a handy place
4920 echo " "
4921 case "$libc" in
4922 '') libc=unknown
4923         case "$libs" in
4924         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4925         esac
4926         ;;
4927 esac
4928 libnames='';
4929 case "$libs" in
4930 '') ;;
4931 *)  for thislib in $libs; do
4932         case "$thislib" in
4933         -lc|-lc_s)
4934                 : Handle C library specially below.
4935                 ;;
4936         -l*)
4937                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4938                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4939                         :
4940                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4941                         :
4942                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4943                         :
4944                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4945                         :
4946                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4947                         :
4948                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4949                         :
4950                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4951                         :
4952                 else
4953                         try=''
4954                 fi
4955                 libnames="$libnames $try"
4956                 ;;
4957         *) libnames="$libnames $thislib" ;;
4958         esac
4959         done
4960         ;;
4961 esac
4962 xxx=normal
4963 case "$libc" in
4964 unknown)
4965         set /lib/libc.$so
4966         for xxx in $libpth; do
4967                 $test -r $1 || set $xxx/libc.$so
4968                 : The messy sed command sorts on library version numbers.
4969                 $test -r $1 || \
4970                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4971                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4972                                 h
4973                                 s/[0-9][0-9]*/0000&/g
4974                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4975                                 G
4976                                 s/\n/ /' | \
4977                          sort | $sed -e 's/^.* //'`
4978                 eval set \$$#
4979         done
4980         $test -r $1 || set /usr/ccs/lib/libc.$so
4981         $test -r $1 || set /lib/libsys_s$_a
4982         ;;
4983 *)
4984         set blurfl
4985         ;;
4986 esac
4987 if $test -r "$1"; then
4988         echo "Your (shared) C library seems to be in $1."
4989         libc="$1"
4990 elif $test -r /lib/libc && $test -r /lib/clib; then
4991         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4992         xxx=apollo
4993         libc='/lib/clib /lib/libc'
4994         if $test -r /lib/syslib; then
4995                 echo "(Your math library is in /lib/syslib.)"
4996                 libc="$libc /lib/syslib"
4997         fi
4998 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4999         echo "Your C library seems to be in $libc, as you said before."
5000 elif $test -r $incpath/usr/lib/libc$_a; then
5001         libc=$incpath/usr/lib/libc$_a;
5002         echo "Your C library seems to be in $libc.  That's fine."
5003 elif $test -r /lib/libc$_a; then
5004         libc=/lib/libc$_a;
5005         echo "Your C library seems to be in $libc.  You're normal."
5006 else
5007         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5008                 :
5009         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5010                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5011         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5012                 :
5013         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5014                 :
5015         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5016                 :
5017         else
5018                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5019         fi
5020         if $test -r "$tans"; then
5021                 echo "Your C library seems to be in $tans, of all places."
5022                 libc=$tans
5023         else
5024                 libc='blurfl'
5025         fi
5026 fi
5027 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5028         dflt="$libc"
5029         cat <<EOM
5030
5031 If the guess above is wrong (which it might be if you're using a strange
5032 compiler, or your machine supports multiple models), you can override it here.
5033
5034 EOM
5035 else
5036         dflt=''
5037         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5038         cat >&4 <<EOM
5039 I can't seem to find your C library.  I've looked in the following places:
5040
5041 EOM
5042         $sed 's/^/      /' libpath
5043         cat <<EOM
5044
5045 None of these seems to contain your C library. I need to get its name...
5046
5047 EOM
5048 fi
5049 fn=f
5050 rp='Where is your C library?'
5051 . ./getfile
5052 libc="$ans"
5053
5054 echo " "
5055 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5056 set X `cat libnames`
5057 shift
5058 xxx=files
5059 case $# in 1) xxx=file; esac
5060 echo "Extracting names from the following $xxx for later perusal:" >&4
5061 echo " "
5062 $sed 's/^/      /' libnames >&4
5063 echo " "
5064 $echo $n "This may take a while...$c" >&4
5065
5066 for file in $*; do
5067         case $file in
5068         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5069         *) $nm $nm_opt $file 2>/dev/null;;
5070         esac
5071 done >libc.tmp
5072
5073 $echo $n ".$c"
5074 $grep fprintf libc.tmp > libc.ptf
5075 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5076 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5077 xxx='[ADTSIW]'
5078 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5079         eval $xscan;\
5080         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5081                 eval $xrun
5082 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5083         eval $xscan;\
5084         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5085                 eval $xrun
5086 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5087         eval $xscan;\
5088         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5089                 eval $xrun
5090 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5091         eval $xscan;\
5092         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5093                 eval $xrun
5094 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5095         eval $xscan;\
5096         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5097                 eval $xrun
5098 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5099         eval $xscan;\
5100         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5101                 eval $xrun
5102 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5103                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5104         eval $xscan;\
5105         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5106                 eval $xrun
5107 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5108         eval $xscan;\
5109         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5110                 eval $xrun
5111 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5112         eval $xscan;\
5113         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5114                 eval $xrun
5115 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5116         eval $xscan;\
5117         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5118                 eval $xrun
5119 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5120         eval $xscan;\
5121         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5122                 eval $xrun
5123 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5124         eval $xscan;\
5125         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5126                 eval $xrun
5127 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5128         eval $xscan;\
5129         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5130                 eval $xrun
5131 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5132         eval $xscan;\
5133         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5134                 eval $xrun
5135 else
5136         $nm -p $* 2>/dev/null >libc.tmp
5137         $grep fprintf libc.tmp > libc.ptf
5138         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5139                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5140         then
5141                 nm_opt='-p'
5142                 eval $xrun
5143         else
5144                 echo " "
5145                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5146                 com=''
5147                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5148                         for thisname in $libnames $libc; do
5149                                 $ar t $thisname >>libc.tmp
5150                         done
5151                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5152                         echo "Ok." >&4
5153                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5154                         # Repeat libc to extract forwarders to DLL entries too
5155                         for thisname in $libnames $libc; do
5156                                 $ar tv $thisname >>libc.tmp
5157                                 # Revision 50 of EMX has bug in $ar.
5158                                 # it will not extract forwarders to DLL entries
5159                                 # Use emximp which will extract exactly them.
5160                                 emximp -o tmp.imp $thisname \
5161                                     2>/dev/null && \
5162                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5163                                     < tmp.imp >>libc.tmp
5164                                 $rm tmp.imp
5165                         done
5166                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5167                         echo "Ok." >&4
5168                 else
5169                         echo "$ar didn't seem to work right." >&4
5170                         echo "Maybe this is a Cray...trying bld instead..." >&4
5171                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5172                         then
5173                                 for thisname in $libnames; do
5174                                         bld t $libnames | \
5175                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5176                                         $ar t $thisname >>libc.tmp
5177                                 done
5178                                 echo "Ok." >&4
5179                         else
5180                                 echo "That didn't work either.  Giving up." >&4
5181                                 exit 1
5182                         fi
5183                 fi
5184         fi
5185 fi
5186 nm_extract="$com"
5187 if $test -f /lib/syscalls.exp; then
5188         echo " "
5189         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5190         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5191 fi
5192 ;;
5193 esac
5194 $rm -f libnames libpath
5195
5196 : see if dld is available
5197 set dld.h i_dld
5198 eval $inhdr
5199
5200 : is a C symbol defined?
5201 csym='tlook=$1;
5202 case "$3" in
5203 -v) tf=libc.tmp; tc=""; tdc="";;
5204 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5205 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5206 esac;
5207 tx=yes;
5208 case "$reuseval-$4" in
5209 true-) ;;
5210 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5211 esac;
5212 case "$tx" in
5213 yes)
5214         case "$runnm" in
5215         true)
5216                 if $contains $tlook $tf >/dev/null 2>&1;
5217                 then tval=true;
5218                 else tval=false;
5219                 fi;;
5220         *)
5221                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5222                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5223                 then tval=true;
5224                 else tval=false;
5225                 fi;
5226                 $rm -f t t.c;;
5227         esac;;
5228 *)
5229         case "$tval" in
5230         $define) tval=true;;
5231         *) tval=false;;
5232         esac;;
5233 esac;
5234 eval "$2=$tval"'
5235
5236 : define an is-in-libc? function
5237 inlibc='echo " "; td=$define; tu=$undef;
5238 sym=$1; var=$2; eval "was=\$$2";
5239 tx=yes;
5240 case "$reuseval$was" in
5241 true) ;;
5242 true*) tx=no;;
5243 esac;
5244 case "$tx" in
5245 yes)
5246         set $sym tres -f;
5247         eval $csym;
5248         case "$tres" in
5249         true)
5250                 echo "$sym() found." >&4;
5251                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5252         *)
5253                 echo "$sym() NOT found." >&4;
5254                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5255         esac;;
5256 *)
5257         case "$was" in
5258         $define) echo "$sym() found." >&4;;
5259         *) echo "$sym() NOT found." >&4;;
5260         esac;;
5261 esac'
5262
5263 : see if dlopen exists
5264 xxx_runnm="$runnm"
5265 runnm=false
5266 set dlopen d_dlopen
5267 eval $inlibc
5268 runnm="$xxx_runnm"
5269
5270 : determine which dynamic loading, if any, to compile in
5271 echo " "
5272 dldir="ext/DynaLoader"
5273 case "$usedl" in
5274 $define|y|true)
5275         dflt='y'
5276         usedl="$define"
5277         ;;
5278 $undef|n|false)
5279         dflt='n'
5280         usedl="$undef"
5281         ;;
5282 *) 
5283         dflt='n'
5284         case "$d_dlopen" in
5285             $define) dflt='y' ;;
5286         esac
5287         case "$i_dld" in
5288             $define) dflt='y' ;;
5289         esac
5290         : Does a dl_xxx.xs file exist for this operating system
5291         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5292         ;;
5293 esac
5294 rp="Do you wish to use dynamic loading?"
5295 . ./myread
5296 usedl="$ans"
5297 case "$ans" in
5298 y*) usedl="$define"
5299         case "$dlsrc" in
5300         '')
5301                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5302                         dflt="$dldir/dl_${osname}.xs"
5303                 elif $test "$d_dlopen" = "$define" ; then
5304                         dflt="$dldir/dl_dlopen.xs"
5305                 elif $test "$i_dld" = "$define" ; then
5306                         dflt="$dldir/dl_dld.xs"
5307                 else
5308                         dflt=''
5309                 fi
5310                 ;;
5311         *)      dflt="$dldir/$dlsrc"
5312                 ;;
5313         esac
5314     echo "The following dynamic loading files are available:"
5315         : Can not go over to $dldir because getfile has path hard-coded in.
5316         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5317         rp="Source file to use for dynamic loading"
5318         fn="fne"
5319         gfpth="$src"
5320         . ./getfile
5321         usedl="$define"
5322         : emulate basename
5323         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5324
5325         $cat << EOM
5326
5327 Some systems may require passing special flags to $cc -c to
5328 compile modules that will be used to create a shared library.
5329 To use no flags, say "none".
5330
5331 EOM
5332     case "$cccdlflags" in
5333     '') case "$gccversion" in
5334                 '') case "$osname" in
5335                         hpux)   dflt='+z' ;;
5336                         next)   dflt='none' ;;
5337                         irix*)  dflt='-KPIC' ;;
5338                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5339                         sunos)  dflt='-pic' ;;
5340                         *)      dflt='none' ;;
5341                     esac
5342                         ;;
5343                 *)  case "$osname" in
5344                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5345                         *)      dflt='-fpic' ;;
5346                     esac ;;
5347             esac ;;
5348         ' ') dflt='none' ;;
5349     *)  dflt="$cccdlflags" ;;
5350     esac
5351     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5352     . ./myread
5353     case "$ans" in
5354     none) cccdlflags=' ' ;;
5355     *) cccdlflags="$ans" ;;
5356     esac
5357
5358     cat << EOM
5359
5360 Some systems use ld to create libraries that can be dynamically loaded,
5361 while other systems (such as those using ELF) use $cc.
5362
5363 EOM
5364         case "$ld" in
5365         '')     $cat >try.c <<'EOM'
5366 /* Test for whether ELF binaries are produced */
5367 #include <fcntl.h>
5368 #include <stdlib.h>
5369 int main() {
5370         char b[4];
5371         int i = open("a.out",O_RDONLY);
5372         if(i == -1) 
5373                 exit(1); /* fail */
5374         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5375                 exit(0); /* succeed (yes, it's ELF) */
5376         else
5377                 exit(1); /* fail */
5378 }
5379 EOM
5380                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5381                         cat <<EOM
5382 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5383 EOM
5384                         dflt="$cc"
5385                 else
5386                         echo "I'll use ld to build dynamic libraries."
5387                         dflt='ld'
5388                 fi
5389                 rm -f try.c a.out
5390                 ;;
5391         *)      dflt="$ld"
5392                 ;;
5393         esac
5394
5395     rp="What command should be used to create dynamic libraries?"
5396     . ./myread
5397         ld="$ans"
5398
5399     cat << EOM
5400
5401 Some systems may require passing special flags to $ld to create a
5402 library that can be dynamically loaded.  If your ld flags include
5403 -L/other/path options to locate libraries outside your loader's normal
5404 search path, you may need to specify those -L options here as well.  To
5405 use no flags, say "none".
5406
5407 EOM
5408     case "$lddlflags" in
5409     '') case "$osname" in
5410                         beos) dflt='-nostart' ;;
5411                         hpux)  dflt='-b' ;;
5412                         linux|irix*)    dflt='-shared' ;;
5413                         next)  dflt='none' ;;
5414                         solaris) dflt='-G' ;;
5415                         sunos) dflt='-assert nodefinitions' ;;
5416                         svr4*|esix*) dflt="-G $ldflags" ;;
5417                 *)     dflt='none' ;;
5418                         esac
5419                         ;;
5420     *) dflt="$lddlflags" ;;
5421     esac
5422
5423         : Try to guess additional flags to pick up local libraries.
5424         : Be careful not to append to a plain 'none'
5425         case "$dflt" in
5426         none) dflt='' ;;
5427         esac
5428         for thisflag in $ldflags; do
5429                 case "$thisflag" in
5430                 -L*)
5431                         case " $dflt " in
5432                         *" $thisflag "*) ;;
5433                         *) dflt="$dflt $thisflag" ;;
5434                         esac
5435                         ;;
5436                 esac
5437         done
5438
5439         case "$dflt" in
5440         ''|' ') dflt='none' ;;
5441         esac
5442
5443     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5444     . ./myread
5445     case "$ans" in
5446     none) lddlflags=' ' ;;
5447     *) lddlflags="$ans" ;;
5448     esac
5449
5450         cat <<EOM
5451
5452 Some systems may require passing special flags to $cc to indicate that
5453 the resulting executable will use dynamic linking.  To use no flags,
5454 say "none".
5455
5456 EOM
5457     case "$ccdlflags" in
5458     '') case "$osname" in
5459                 hpux)   dflt='-Wl,-E' ;;
5460                 linux)  dflt='-rdynamic' ;;
5461                 next)   dflt='none' ;;
5462                 sunos)  dflt='none' ;;
5463                 *)      dflt='none' ;;
5464             esac ;;
5465     ' ')  dflt='none' ;;
5466     *)  dflt="$ccdlflags" ;;
5467     esac
5468     rp="Any special flags to pass to $cc to use dynamic loading?"
5469     . ./myread
5470     case "$ans" in
5471     none) ccdlflags=' ' ;;
5472     *) ccdlflags="$ans" ;;
5473     esac
5474     ;;
5475 *)  usedl="$undef"
5476         ld='ld'
5477     dlsrc='dl_none.xs'
5478     lddlflags=''
5479     ccdlflags=''
5480     ;;
5481 esac
5482
5483 also=''
5484 case "$usedl" in
5485 $undef)
5486         # No dynamic loading being used, so don't bother even to prompt.
5487         useshrplib='false'
5488         ;;
5489 *)      case "$useshrplib" in
5490         '')     case "$osname" in
5491                 svr4*|dgux|dynixptx|esix|powerux|beos)
5492                         dflt=y
5493                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5494                         ;;
5495                 next*)
5496                         case "$osvers" in
5497                         4*)     dflt=y
5498                                 also='Building a shared libperl is needed for MAB support.'
5499                                 ;;
5500                         *)      dflt=n
5501                                 ;;
5502                         esac
5503                         ;;
5504                 *)      dflt=n
5505                         ;;
5506                 esac
5507                 ;;
5508         $define|true|[Yy]*)
5509                 dflt=y
5510                 ;;
5511         *)      dflt=n
5512                 ;;
5513         esac
5514         $cat << EOM
5515
5516 The perl executable is normally obtained by linking perlmain.c with
5517 libperl${_a}, any static extensions (usually just DynaLoader), and
5518 any other libraries needed on this system (such as -lm, etc.).  Since
5519 your system supports dynamic loading, it is probably possible to build
5520 a shared libperl.$so.  If you will have more than one executable linked
5521 to libperl.$so, this will significantly reduce the size of each
5522 executable, but it may have a noticeable affect on performance.  The
5523 default is probably sensible for your system.
5524 $also
5525
5526 EOM
5527         rp="Build a shared libperl.$so (y/n)"
5528         . ./myread
5529         case "$ans" in
5530         true|$define|[Yy]*)
5531                 useshrplib='true'  ;;
5532         *)      useshrplib='false' ;;
5533         esac
5534         ;;
5535 esac
5536
5537 case "$useshrplib" in
5538 true)
5539         case "$libperl" in
5540         '')
5541                 # Figure out a good name for libperl.so.  Since it gets stored in
5542                 # a version-specific architecture-dependent library, the version
5543                 # number isn't really that important, except for making cc/ld happy.
5544                 #
5545                 # A name such as libperl.so.3.1
5546                 majmin="libperl.$so.$patchlevel.$subversion"
5547                 # A name such as libperl.so.301
5548                 majonly=`echo $patchlevel $subversion |
5549                         $awk '{printf "%d%02d", $1, $2}'`
5550                 majonly=libperl.$so.$majonly
5551                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5552                 # rely on figuring it out from the naming of libc.
5553                 case "${osname}${osvers}" in
5554                 next4*)
5555                         dflt=libperl.5.$so
5556                         # XXX How handle the --version stuff for MAB?
5557                         ;;
5558                 linux*)  # ld won't link with a bare -lperl otherwise.
5559                         dflt=libperl.$so
5560                         ;;
5561                 *)      # Try to guess based on whether libc has major.minor.
5562                         case "$libc" in
5563                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5564                         *libc.$so.[0-9]*) dflt=$majonly ;;
5565                         *)      dflt=libperl.$so ;;
5566                         esac
5567                         ;;
5568                 esac
5569                 ;;
5570         *)      dflt=$libperl
5571                 ;;
5572         esac
5573         cat << EOM
5574
5575 I need to select a good name for the shared libperl.  If your system uses
5576 library names with major and minor numbers, then you might want something
5577 like $majmin.  Alternatively, if your system uses a single version
5578 number for shared libraries, then you might want to use $majonly.
5579 Or, your system might be quite happy with a simple libperl.$so.
5580
5581 Since the shared libperl will get installed into a version-specific
5582 architecture-dependent directory, the version number of the shared perl
5583 library probably isn't important, so the default should be o.k.
5584
5585 EOM
5586         rp='What name do you want to give to the shared libperl?'
5587         . ./myread
5588         libperl=$ans
5589         echo "Ok, I'll use $libperl"
5590         ;;
5591 *)
5592         libperl="libperl${_a}"
5593         ;;
5594 esac
5595
5596 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5597 case "$shrpdir" in
5598 '') ;;
5599 *)      $cat >&4 <<EOM
5600 WARNING:  Use of the shrpdir variable for the installation location of
5601 the shared $libperl is not supported.  It was never documented and
5602 will not work in this version.  Let me (perlbug@perl.com)
5603 know of any problems this may cause.
5604
5605 EOM
5606         case "$shrpdir" in
5607         "$archlibexp/CORE")
5608                 $cat >&4 <<EOM
5609 But your current setting of $shrpdir is
5610 the default anyway, so it's harmless.
5611 EOM
5612                 ;;
5613         *)
5614                 $cat >&4 <<EOM
5615 Further, your current attempted setting of $shrpdir
5616 conflicts with the value of $archlibexp/CORE
5617 that installperl will use.
5618 EOM
5619                 ;;
5620         esac
5621         ;;
5622 esac
5623
5624 # How will the perl executable find the installed shared $libperl?
5625 # Add $xxx to ccdlflags.
5626 # If we can't figure out a command-line option, use $shrpenv to
5627 # set env LD_RUN_PATH.  The main perl makefile uses this.
5628 shrpdir=$archlibexp/CORE
5629 xxx=''
5630 tmp_shrpenv=''
5631 if "$useshrplib"; then
5632     case "$osname" in 
5633         aix)
5634                 # We'll set it in Makefile.SH...
5635                 ;;
5636         solaris|netbsd)
5637                 xxx="-R $shrpdir"
5638                 ;;
5639         freebsd)
5640                 xxx="-Wl,-R$shrpdir"
5641                 ;;
5642         linux|irix*|dec_osf)
5643                 xxx="-Wl,-rpath,$shrpdir"
5644                 ;;
5645         next)
5646                 # next doesn't like the default...
5647                 ;;
5648         beos)
5649                 # beos doesn't like the default, either.
5650                 ;;
5651         hpux*)
5652                 # hpux doesn't like the default, either.
5653                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5654                 ;;
5655         *)
5656                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5657                 ;;
5658         esac
5659         case "$xxx" in
5660         '') ;;
5661         *)      
5662                 # Only add $xxx if it isn't already in ccdlflags.
5663                 case " $ccdlflags " in
5664                 *" $xxx "*)     ;;
5665                 *)      ccdlflags="$ccdlflags $xxx"
5666                         cat <<EOM >&4
5667
5668 Adding $xxx to the flags
5669 passed to $ld so that the perl executable will find the 
5670 installed shared $libperl.
5671
5672 EOM
5673                         ;;
5674                 esac
5675                 ;;
5676         esac
5677 fi
5678 # Fix ccdlflags in AIX for building external extensions.
5679 # (For building Perl itself bare -bE:perl.exp is needed,
5680 #  Makefile.SH takes care of this.)
5681 case "$osname" in
5682 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5683 esac
5684 # Respect a hint or command-line value.
5685 case "$shrpenv" in
5686 '') shrpenv="$tmp_shrpenv" ;;
5687 esac
5688 case "$ldlibpthname" in
5689 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5690 none)   ldlibpthname='' ;;
5691 esac
5692
5693 : determine where manual pages go
5694 set man1dir man1dir none
5695 eval $prefixit
5696 $cat <<EOM
5697
5698 $spackage has manual pages available in source form.
5699 EOM
5700 case "$nroff" in
5701 nroff)
5702         echo "However, you don't have nroff, so they're probably useless to you."
5703         case "$man1dir" in
5704         '') man1dir="none";;
5705         esac;;
5706 esac
5707 echo "If you don't want the manual sources installed, answer 'none'."
5708 case "$man1dir" in
5709 ' ') dflt=none
5710         ;;
5711 '')
5712         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5713         lookpath="$lookpath $prefixexp/man/p_man/man1"
5714         lookpath="$lookpath $prefixexp/man/u_man/man1"
5715         lookpath="$lookpath $prefixexp/man/man.1"
5716         case "$sysman" in
5717         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5718         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5719         esac
5720         set dflt
5721         eval $prefixup
5722         ;;
5723 *)  dflt="$man1dir"
5724         ;;
5725 esac
5726 echo " "
5727 fn=dn+~
5728 rp="Where do the main $spackage manual pages (source) go?"
5729 . ./getfile
5730 if $test "X$man1direxp" != "X$ansexp"; then
5731         installman1dir=''
5732 fi
5733 man1dir="$ans"
5734 man1direxp="$ansexp"
5735 case "$man1dir" in
5736 '')     man1dir=' '
5737         installman1dir='';;
5738 esac
5739
5740 : Change installation prefix, if necessary.
5741 if $test X"$prefix" != X"$installprefix"; then
5742         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5743 else
5744         installman1dir="$man1direxp"
5745 fi
5746
5747 : What suffix to use on installed man pages
5748
5749 case "$man1dir" in
5750 ' ')
5751         man1ext='0'
5752         ;;
5753 *)
5754         rp="What suffix should be used for the main $spackage man pages?"
5755         case "$man1ext" in
5756         '')     case "$man1dir" in
5757                 *1)  dflt=1 ;;
5758                 *1p) dflt=1p ;;
5759                 *1pm) dflt=1pm ;;
5760                 *l) dflt=l;;
5761                 *n) dflt=n;;
5762                 *o) dflt=o;;
5763                 *p) dflt=p;;
5764                 *C) dflt=C;;
5765                 *L) dflt=L;;
5766                 *L1) dflt=L1;;
5767                 *) dflt=1;;
5768                 esac
5769                 ;;
5770         *)      dflt="$man1ext";;
5771         esac
5772         . ./myread
5773         man1ext="$ans"
5774         ;;
5775 esac
5776
5777 : see if we can have long filenames
5778 echo " "
5779 rmlist="$rmlist /tmp/cf$$"
5780 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5781 first=123456789abcdef
5782 second=/tmp/cf$$/$first
5783 $rm -f $first $second
5784 if (echo hi >$first) 2>/dev/null; then
5785         if $test -f 123456789abcde; then
5786                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5787                 val="$undef"
5788         else
5789                 if (echo hi >$second) 2>/dev/null; then
5790                         if $test -f /tmp/cf$$/123456789abcde; then
5791                                 $cat <<'EOM'
5792 That's peculiar... You can have filenames longer than 14 characters, but only
5793 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5794 I shall consider your system cannot support long filenames at all.
5795 EOM
5796                                 val="$undef"
5797                         else
5798                                 echo 'You can have filenames longer than 14 characters.' >&4
5799                                 val="$define"
5800                         fi
5801                 else
5802                         $cat <<'EOM'
5803 How confusing! Some of your filesystems are sane enough to allow filenames
5804 longer than 14 characters but some others like /tmp can't even think about them.
5805 So, for now on, I shall assume your kernel does not allow them at all.
5806 EOM
5807                         val="$undef"
5808                 fi
5809         fi
5810 else
5811         $cat <<'EOM'
5812 You can't have filenames longer than 14 chars.  You can't even think about them!
5813 EOM
5814         val="$undef"
5815 fi 
5816 set d_flexfnam
5817 eval $setvar
5818 $rm -rf /tmp/cf$$ 123456789abcde*
5819
5820 : determine where library module manual pages go
5821 set man3dir man3dir none
5822 eval $prefixit
5823 $cat <<EOM
5824
5825 $spackage has manual pages for many of the library modules.
5826 EOM
5827
5828 case "$nroff" in
5829 nroff)
5830         $cat <<'EOM'
5831 However, you don't have nroff, so they're probably useless to you.
5832 EOM
5833         case "$man3dir" in
5834         '') man3dir="none";;
5835         esac;;
5836 esac
5837
5838 case "$d_flexfnam" in
5839 undef)
5840         $cat <<'EOM'
5841 However, your system can't handle the long file names like File::Basename.3. 
5842 EOM
5843         case "$man3dir" in
5844         '') man3dir="none";;
5845         esac;;
5846 esac
5847
5848 echo "If you don't want the manual sources installed, answer 'none'."
5849 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5850 case "$man3dir" in
5851 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5852         if $test -d "$privlib/man/man3"; then
5853                 cat <<EOM >&4
5854
5855 WARNING:  Previous versions of perl installed man3 pages into
5856 $privlib/man/man3.  This version will suggest a 
5857 new default of $dflt.  
5858 EOM
5859                 tdflt=$dflt
5860                 dflt='n'
5861                 rp='Do you wish to preserve the old behavior?(y/n)'
5862                 . ./myread
5863                 case "$ans" in
5864                 y*) dflt="$privlib/man/man3" ;;
5865                 *)  dflt=$tdflt ;;
5866                 esac
5867     fi
5868         ;;
5869 ' ') dflt=none;;
5870 *)      dflt="$man3dir" ;;
5871 esac
5872 echo " "
5873 fn=dn+~
5874 rp="Where do the $package library man pages (source) go?"
5875 . ./getfile
5876 man3dir="$ans"
5877 man3direxp="$ansexp"
5878 case "$man1dir" in
5879 '')     man3dir=' '
5880         installman3dir='';;
5881 esac
5882
5883 : Change installation prefix, if necessary.
5884 if $test X"$prefix" != X"$installprefix"; then
5885         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5886 else
5887         installman3dir="$man3direxp"
5888 fi
5889
5890 : What suffix to use on installed man pages
5891 case "$man3dir" in
5892 ' ')
5893         man3ext='0'
5894         ;;
5895 *)
5896         rp="What suffix should be used for the $package library man pages?"
5897         case "$man3ext" in
5898         '')     case "$man3dir" in
5899                 *3)  dflt=3 ;;
5900                 *3p) dflt=3p ;;
5901                 *3pm) dflt=3pm ;;
5902                 *l) dflt=l;;
5903                 *n) dflt=n;;
5904                 *o) dflt=o;;
5905                 *p) dflt=p;;
5906                 *C) dflt=C;;
5907                 *L) dflt=L;;
5908                 *L3) dflt=L3;;
5909                 *) dflt=3;;
5910                 esac
5911                 ;;
5912         *)      dflt="$man3ext";;
5913         esac
5914         . ./myread
5915         man3ext="$ans"
5916         ;;
5917 esac
5918
5919 : see if we have to deal with yellow pages, now NIS.
5920 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5921         if $test -f /usr/etc/nibindd; then
5922                 echo " "
5923                 echo "I'm fairly confident you're on a NeXT."
5924                 echo " "
5925                 rp='Do you get the hosts file via NetInfo?'
5926                 dflt=y
5927                 case "$hostcat" in
5928                 nidump*) ;;
5929                 '') ;;
5930                 *) dflt=n;;
5931                 esac
5932                 . ./myread
5933                 case "$ans" in
5934                 y*) hostcat='nidump hosts .';;
5935                 *)      case "$hostcat" in
5936                         nidump*) hostcat='';;
5937                         esac
5938                         ;;
5939                 esac
5940         fi
5941         case "$hostcat" in
5942         nidump*) ;;
5943         *)
5944                 case "$hostcat" in
5945                 *ypcat*) dflt=y;;
5946                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5947                                 dflt=y
5948                         else
5949                                 dflt=n
5950                         fi;;
5951                 *) dflt=n;;
5952                 esac
5953                 echo " "
5954                 rp='Are you getting the hosts file via yellow pages?'
5955                 . ./myread
5956                 case "$ans" in
5957                 y*) hostcat='ypcat hosts';;
5958                 *) hostcat='cat /etc/hosts';;
5959                 esac
5960                 ;;
5961         esac
5962 fi
5963 case "$hostcat" in
5964 '') hostcat='cat /etc/hosts';;
5965 esac
5966 case "$groupcat" in
5967 '') groupcat='cat /etc/group';;
5968 esac
5969 case "$passcat" in
5970 '') passcat='cat /etc/passwd';;
5971 esac
5972
5973 : now get the host name
5974 echo " "
5975 echo "Figuring out host name..." >&4
5976 case "$myhostname" in
5977 '') cont=true
5978         echo 'Maybe "hostname" will work...'
5979         if tans=`sh -c hostname 2>&1` ; then
5980                 myhostname=$tans
5981                 phostname=hostname
5982                 cont=''
5983         fi
5984         ;;
5985 *) cont='';;
5986 esac
5987 if $test "$cont"; then
5988         if ./xenix; then
5989                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5990                 if tans=`cat /etc/systemid 2>&1` ; then
5991                         myhostname=$tans
5992                         phostname='cat /etc/systemid'
5993                         echo "Whadyaknow.  Xenix always was a bit strange..."
5994                         cont=''
5995                 fi
5996         elif $test -r /etc/systemid; then
5997                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5998         fi
5999 fi
6000 if $test "$cont"; then
6001         echo 'No, maybe "uuname -l" will work...'
6002         if tans=`sh -c 'uuname -l' 2>&1` ; then
6003                 myhostname=$tans
6004                 phostname='uuname -l'
6005         else
6006                 echo 'Strange.  Maybe "uname -n" will work...'
6007                 if tans=`sh -c 'uname -n' 2>&1` ; then
6008                         myhostname=$tans
6009                         phostname='uname -n'
6010                 else
6011                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6012                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6013                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6014                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6015                         else
6016                                 case "$myhostname" in
6017                                 '') echo "Does this machine have an identity crisis or something?"
6018                                         phostname='';;
6019                                 *)
6020                                         echo "Well, you said $myhostname before..."
6021                                         phostname='echo $myhostname';;
6022                                 esac
6023                         fi
6024                 fi
6025         fi
6026 fi
6027 : you do not want to know about this
6028 set $myhostname
6029 myhostname=$1
6030
6031 : verify guess
6032 if $test "$myhostname" ; then
6033         dflt=y
6034         rp='Your host name appears to be "'$myhostname'".'" Right?"
6035         . ./myread
6036         case "$ans" in
6037         y*) ;;
6038         *) myhostname='';;
6039         esac
6040 fi
6041
6042 : bad guess or no guess
6043 while $test "X$myhostname" = X ; do
6044         dflt=''
6045         rp="Please type the (one word) name of your host:"
6046         . ./myread
6047         myhostname="$ans"
6048 done
6049
6050 : translate upper to lower if necessary
6051 case "$myhostname" in
6052 *[A-Z]*)
6053         echo "(Normalizing case in your host name)"
6054         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6055         ;;
6056 esac
6057
6058 case "$myhostname" in
6059 *.*)
6060         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6061         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6062         echo "(Trimming domain name from host name--host name is now $myhostname)"
6063         ;;
6064 *) case "$mydomain" in
6065         '')
6066                 {
6067                         test "X$hostcat" = "Xypcat hosts" &&
6068                         ypmatch "$myhostname" hosts 2>/dev/null |\
6069                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6070                         $test -s hosts
6071                 } || {
6072                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6073                                         /[       ]$myhostname[  . ]/p" > hosts
6074                 }
6075                 tmp_re="[       . ]"
6076                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6077                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6078                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6079                         hosts | $sort | $uniq | \
6080                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6081                 case `$echo X$dflt` in
6082                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6083                         dflt=.
6084                         ;;
6085                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6086                         ;;
6087                 esac
6088                 case "$dflt" in
6089                 .)
6090                         tans=`./loc resolv.conf X /etc /usr/etc`
6091                         if $test -f "$tans"; then
6092                                 echo "(Attempting domain name extraction from $tans)"
6093                                 dflt=.`$sed -n -e 's/   / /g' \
6094                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6095                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6096                                 case "$dflt" in
6097                                 .) dflt=.`$sed -n -e 's/        / /g' \
6098                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6099                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6100                                         ;;
6101                                 esac
6102                         fi
6103                         ;;
6104                 esac
6105                 case "$dflt" in
6106                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6107                         dflt=.`sh -c domainname 2>/dev/null`
6108                         case "$dflt" in
6109                         '') dflt='.';;
6110                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6111                         esac
6112                         ;;
6113                 esac
6114                 case "$dflt" in
6115                 .) echo "(Lost all hope -- silly guess then)"
6116                         dflt='.uucp'
6117                         ;;
6118                 esac
6119                 $rm -f hosts
6120                 ;;
6121         *) dflt="$mydomain";;
6122         esac;;
6123 esac
6124 echo " "
6125 rp="What is your domain name?"
6126 . ./myread
6127 tans="$ans"
6128 case "$ans" in
6129 '') ;;
6130 .*) ;;
6131 *) tans=".$tans";;
6132 esac
6133 mydomain="$tans"
6134
6135 : translate upper to lower if necessary
6136 case "$mydomain" in
6137 *[A-Z]*)
6138         echo "(Normalizing case in your domain name)"
6139         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6140         ;;
6141 esac
6142
6143 : a little sanity check here
6144 case "$phostname" in
6145 '') ;;
6146 *)
6147         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6148         $myhostname$mydomain|$myhostname) ;;
6149         *)
6150                 case "$phostname" in
6151                 sed*)
6152                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6153                         ;;
6154                 *)
6155                         echo "(That doesn't agree with your $phostname command, by the way.)"
6156                         ;;
6157                 esac
6158         ;;
6159         esac
6160         ;;
6161 esac
6162
6163 $cat <<EOM
6164
6165 I need to get your e-mail address in Internet format if possible, i.e.
6166 something like user@host.domain. Please answer accurately since I have
6167 no easy means to double check it. The default value provided below
6168 is most probably close to the reality but may not be valid from outside
6169 your organization...
6170
6171 EOM
6172 cont=x
6173 while test "$cont"; do
6174         case "$cf_email" in
6175         '') dflt="$cf_by@$myhostname$mydomain";;
6176         *) dflt="$cf_email";;
6177         esac
6178         rp='What is your e-mail address?'
6179         . ./myread
6180         cf_email="$ans"
6181         case "$cf_email" in
6182         *@*.*) cont='' ;;
6183         *)
6184                 rp='Address does not look like an Internet one.  Use it anyway?'
6185                 case "$fastread" in
6186                 yes) dflt=y ;;
6187                 *) dflt=n ;;
6188                 esac
6189                 . ./myread
6190                 case "$ans" in
6191                 y*) cont='' ;;
6192                 *) echo " " ;;
6193                 esac
6194                 ;;
6195         esac
6196 done
6197
6198 $cat <<EOM
6199
6200 If you or somebody else will be maintaining perl at your site, please
6201 fill in the correct e-mail address here so that they may be contacted
6202 if necessary. Currently, the "perlbug" program included with perl
6203 will send mail to this address in addition to perlbug@perl.com. You may
6204 enter "none" for no administrator.
6205
6206 EOM
6207 case "$perladmin" in
6208 '') dflt="$cf_email";;
6209 *) dflt="$perladmin";;
6210 esac
6211 rp='Perl administrator e-mail address'
6212 . ./myread
6213 perladmin="$ans"
6214
6215 : figure out how to guarantee perl startup
6216 case "$startperl" in
6217 '')
6218         case "$sharpbang" in
6219         *!)
6220                 $cat <<EOH
6221
6222 I can use the #! construct to start perl on your system. This will
6223 make startup of perl scripts faster, but may cause problems if you
6224 want to share those scripts and perl is not in a standard place
6225 ($binexp/perl) on all your platforms. The alternative is to force
6226 a shell by starting the script with a single ':' character.
6227
6228 EOH
6229                 dflt="$binexp/perl"
6230                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6231                 . ./myread
6232                 case "$ans" in
6233                 none)   startperl=": # use perl";;
6234                 *)      startperl="#!$ans"
6235                         if $test 30 -lt `echo "$ans" | wc -c`; then
6236                                 $cat >&4 <<EOM
6237
6238 WARNING:  Some systems limit the #! command to 32 characters.
6239 If you experience difficulty running Perl scripts with #!, try
6240 installing Perl in a directory with a shorter pathname.
6241
6242 EOM
6243                         fi ;;
6244                 esac
6245                 ;;
6246         *) startperl=": # use perl"
6247                 ;;
6248         esac
6249         ;;
6250 esac
6251 echo "I'll use $startperl to start perl scripts."
6252
6253 : figure best path for perl in scripts
6254 case "$perlpath" in
6255 '')
6256         perlpath="$binexp/perl"
6257         case "$startperl" in
6258         *!*) ;;
6259         *)
6260                 $cat <<EOH
6261
6262 I will use the "eval 'exec'" idiom to start Perl on your system.
6263 I can use the full path of your Perl binary for this purpose, but
6264 doing so may cause problems if you want to share those scripts and
6265 Perl is not always in a standard place ($binexp/perl).
6266
6267 EOH
6268                 dflt="$binexp/perl"
6269                 rp="What path shall I use in \"eval 'exec'\"?"
6270                 . ./myread
6271                 perlpath="$ans"
6272                 ;;
6273         esac
6274         ;;
6275 esac
6276 case "$startperl" in
6277 *!*)    ;;
6278 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6279 esac
6280
6281 : determine where public executable scripts go
6282 set scriptdir scriptdir
6283 eval $prefixit
6284 case "$scriptdir" in
6285 '')
6286         dflt="$bin"
6287         : guess some guesses
6288         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6289         $test -d /usr/share/bin     && dflt=/usr/share/bin
6290         $test -d /usr/local/script  && dflt=/usr/local/script
6291         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6292         $test -d $prefixexp/script  && dflt=$prefixexp/script
6293         set dflt
6294         eval $prefixup
6295         ;;
6296 *)  dflt="$scriptdir"
6297         ;;
6298 esac
6299 $cat <<EOM
6300  
6301 Some installations have a separate directory just for executable scripts so
6302 that they can mount it across multiple architectures but keep the scripts in
6303 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6304 Or you might just lump your scripts in with all your other executables.
6305  
6306 EOM
6307 fn=d~
6308 rp='Where do you keep publicly executable scripts?'
6309 . ./getfile
6310 if $test "X$ansexp" != "X$scriptdirexp"; then
6311         installscript=''
6312 fi
6313 scriptdir="$ans"
6314 scriptdirexp="$ansexp"
6315 : Change installation prefix, if necessary.
6316 if $test X"$prefix" != X"$installprefix"; then
6317         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6318 else
6319         installscript="$scriptdirexp"
6320 fi
6321
6322 $cat <<EOM
6323
6324 After $package is installed, you may wish to install various
6325 add-on modules and utilities.  Typically, these add-ons will
6326 be installed under $prefix with the rest
6327 of this package.  However, you may wish to install such add-ons
6328 elsewhere under a different prefix.
6329
6330 If you do not wish to put everything under a single prefix, that's
6331 ok.  You will be prompted for the individual locations; this siteprefix
6332 is only used to suggest the defaults.
6333
6334 The default should be fine for most people.
6335
6336 EOM
6337 fn=d~+
6338 rp='Installation prefix to use for add-on modules and utilities?'
6339 : XXX Here might be another good place for an installstyle setting.
6340 case "$siteprefix" in
6341 '') dflt=$prefix ;;
6342 *)  dflt=$siteprefix ;;
6343 esac
6344 . ./getfile
6345 oldsiteprefix=''
6346 case "$siteprefix" in
6347 '') ;;
6348 *)
6349         case "$ans" in
6350         "$prefix") ;;
6351         *) oldsiteprefix="$prefix";;
6352         esac
6353         ;;
6354 esac
6355 siteprefix="$ans"
6356 siteprefixexp="$ansexp"
6357
6358 : determine where site specific libraries go.
6359 : Usual default is /usr/local/lib/perl5/site_perl
6360 : The default "style" setting is made in installstyle.U
6361 : XXX No longer works with Prefixit stuff.
6362 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6363 case "$installstyle" in
6364 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6365 *)       dflt=$siteprefix/lib/site_$prog ;;
6366 esac
6367 $cat <<EOM
6368
6369 The installation process will create a directory for
6370 site-specific extensions and modules.  Most users find it convenient
6371 to place all site-specific files in this directory rather than in the
6372 main distribution directory.
6373
6374 EOM
6375 fn=d~+
6376 rp='Pathname for the site-specific library files?'
6377 . ./getfile
6378 sitelib="$ans"
6379 sitelibexp="$ansexp"
6380 : Change installation prefix, if necessary.
6381 if $test X"$prefix" != X"$installprefix"; then
6382         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6383 else
6384         installsitelib="$sitelibexp"
6385 fi
6386
6387 : determine where site specific architecture-dependent libraries go.
6388 : sitelib  default is /usr/local/lib/perl5/site_perl/
6389 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6390 : sitelib may have an optional trailing /share.
6391 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6392 tdflt="$tdflt/$apiversion/$archname"
6393 set sitearch sitearch none
6394 eval $prefixit
6395 case "$sitearch" in
6396 '')     dflt="$tdflt" ;;
6397 *)      dflt="$sitearch" ;;
6398 esac
6399 $cat <<EOM
6400
6401 The installation process will also create a directory for
6402 architecture-dependent site-specific extensions and modules.
6403
6404 EOM
6405 fn=nd~+
6406 rp='Pathname for the site-specific architecture-dependent library files?'
6407 . ./getfile
6408 sitearch="$ans"
6409 sitearchexp="$ansexp"
6410 : Change installation prefix, if necessary.
6411 if $test X"$prefix" != X"$installprefix"; then
6412         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
6413 else
6414         installsitearch="$sitearchexp"
6415 fi
6416
6417 cat <<EOM
6418
6419 Previous version of $package used the standard IO mechanisms as defined
6420 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6421 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6422 the default.  This abstraction layer can use AT&T's sfio (if you already
6423 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6424 problems with some extension modules.  Using PerlIO with stdio is safe,
6425 but it is slower than plain stdio and therefore is not the default.
6426
6427 If this doesn't make any sense to you, just accept the default 'n'.
6428 EOM
6429 case "$useperlio" in
6430 $define|true|[yY]*)     dflt='y';;
6431 *) dflt='n';;
6432 esac
6433 rp='Use the experimental PerlIO abstraction layer?'
6434 . ./myread
6435 case "$ans" in
6436 y|Y) 
6437         val="$define"
6438         ;;     
6439 *)      
6440         echo "Ok, doing things the stdio way"
6441         val="$undef"
6442         ;;
6443 esac
6444 set useperlio
6445 eval $setvar 
6446
6447 : Check how to convert floats to strings.
6448 if test "X$d_Gconvert" = X; then
6449         echo " "
6450         echo "Checking for an efficient way to convert floats to strings."
6451         $cat >try.c <<'EOP'
6452 #ifdef TRY_gconvert
6453 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6454 char *myname = "gconvert";
6455 #endif
6456 #ifdef TRY_gcvt
6457 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6458 char *myname = "gcvt";
6459 #endif
6460 #ifdef TRY_sprintf
6461 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6462 char *myname = "sprintf";
6463 #endif
6464
6465 #include <stdio.h>
6466
6467 int
6468 checkit(expect, got)
6469 char *expect;
6470 char *got;
6471 {
6472     if (strcmp(expect, got)) {
6473                 printf("%s oddity:  Expected %s, got %s\n",
6474                         myname, expect, got);
6475                 exit(1);
6476         }
6477 }
6478
6479 int main()
6480
6481         char buf[64]; 
6482         buf[63] = '\0';
6483
6484         /* This must be 1st test on (which?) platform */
6485         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6486         Gconvert(0.1, 8, 0, buf);
6487         checkit("0.1", buf);
6488
6489         Gconvert(1.0, 8, 0, buf); 
6490         checkit("1", buf);
6491
6492         Gconvert(0.0, 8, 0, buf); 
6493         checkit("0", buf);
6494
6495         Gconvert(-1.0, 8, 0, buf); 
6496         checkit("-1", buf);
6497
6498         /* Some Linux gcvt's give 1.e+5 here. */
6499         Gconvert(100000.0, 8, 0, buf); 
6500         checkit("100000", buf);
6501         
6502         /* Some Linux gcvt's give -1.e+5 here. */
6503         Gconvert(-100000.0, 8, 0, buf); 
6504         checkit("-100000", buf);
6505
6506         exit(0);
6507 }
6508 EOP
6509         case "$d_Gconvert" in
6510         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6511         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6512         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6513         *) xxx_list='gconvert gcvt sprintf' ;;
6514         esac
6515
6516         for xxx_convert in $xxx_list; do
6517                 echo "Trying $xxx_convert"
6518                 $rm -f try try$_o
6519                 set try -DTRY_$xxx_convert
6520                 if eval $compile; then
6521                         echo "$xxx_convert" found. >&4
6522                         if ./try; then
6523                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6524                                 break;
6525                         else
6526                                 echo "...But $xxx_convert didn't work as I expected."
6527                         fi
6528                 else
6529                         echo "$xxx_convert NOT found." >&4
6530                 fi
6531         done
6532                 
6533         case "$xxx_convert" in
6534         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6535         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6536         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6537         esac
6538 fi
6539
6540 : Initialize h_fcntl
6541 h_fcntl=false
6542
6543 : Initialize h_sysfile
6544 h_sysfile=false
6545
6546 : access call always available on UNIX
6547 set access d_access
6548 eval $inlibc
6549
6550 : locate the flags for 'access()'
6551 case "$d_access" in
6552 "$define")
6553         echo " "
6554         $cat >access.c <<'EOCP'
6555 #include <sys/types.h>
6556 #ifdef I_FCNTL
6557 #include <fcntl.h>
6558 #endif
6559 #ifdef I_SYS_FILE
6560 #include <sys/file.h>
6561 #endif
6562 #ifdef I_UNISTD
6563 #include <unistd.h>
6564 #endif
6565 int main() {
6566         exit(R_OK);
6567 }
6568 EOCP
6569         : check sys/file.h first, no particular reason here
6570         if $test `./findhdr sys/file.h` && \
6571                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6572                 h_sysfile=true;
6573                 echo "<sys/file.h> defines the *_OK access constants." >&4
6574         elif $test `./findhdr fcntl.h` && \
6575                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6576                 h_fcntl=true;
6577                 echo "<fcntl.h> defines the *_OK access constants." >&4
6578         elif $test `./findhdr unistd.h` && \
6579                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6580                 echo "<unistd.h> defines the *_OK access constants." >&4
6581         else
6582                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6583         fi
6584         ;;
6585 esac
6586 $rm -f access*
6587
6588 : see if accessx exists
6589 set accessx d_accessx
6590 eval $inlibc
6591
6592 : see if alarm exists
6593 set alarm d_alarm
6594 eval $inlibc
6595
6596 : Look for GNU-cc style attribute checking
6597 echo " "
6598 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6599 $cat >attrib.c <<'EOCP'
6600 #include <stdio.h>
6601 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6602 EOCP
6603 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6604         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6605                 echo "Your C compiler doesn't fully support __attribute__."
6606                 val="$undef"
6607         else
6608                 echo "Your C compiler supports __attribute__."
6609                 val="$define"
6610         fi
6611 else
6612         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6613         val="$undef"
6614 fi
6615 set d_attribut
6616 eval $setvar
6617 $rm -f attrib*
6618
6619 : see if bcmp exists
6620 set bcmp d_bcmp
6621 eval $inlibc
6622
6623 : see if bcopy exists
6624 set bcopy d_bcopy
6625 eval $inlibc
6626
6627 : see if this is a unistd.h system
6628 set unistd.h i_unistd
6629 eval $inhdr
6630
6631 : see if getpgrp exists
6632 set getpgrp d_getpgrp
6633 eval $inlibc
6634
6635 case "$d_getpgrp" in
6636 "$define")
6637         echo " "
6638         echo "Checking to see which flavor of getpgrp is in use..."
6639         $cat >set.c <<EOP
6640 #$i_unistd I_UNISTD
6641 #include <sys/types.h>
6642 #ifdef I_UNISTD
6643 #  include <unistd.h>
6644 #endif
6645 int main()
6646 {
6647         if (getuid() == 0) {
6648                 printf("(I see you are running Configure as super-user...)\n");
6649                 setuid(1);
6650         }
6651 #ifdef TRY_BSD_PGRP
6652         if (getpgrp(1) == 0)
6653                 exit(0);
6654 #else
6655         if (getpgrp() > 0)
6656                 exit(0);
6657 #endif
6658         exit(1);
6659 }
6660 EOP
6661         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6662                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6663                 val="$define"
6664         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6665                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6666                 val="$undef"
6667         else
6668                 echo "I can't seem to compile and run the test program."
6669                 if ./usg; then
6670                         xxx="a USG one, i.e. you use getpgrp()."
6671                 else
6672                         # SVR4 systems can appear rather BSD-ish.
6673                         case "$i_unistd" in
6674                         $undef)
6675                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6676                                 val="$define"
6677                                 ;;
6678                         $define)
6679                                 xxx="probably a USG one, i.e. you use getpgrp()."
6680                                 val="$undef"
6681                                 ;;
6682                         esac
6683                 fi
6684                 echo "Assuming your getpgrp is $xxx" >&4
6685         fi
6686         ;;
6687 *) val="$undef";;
6688 esac
6689 set d_bsdgetpgrp
6690 eval $setvar
6691 $rm -f set set.c
6692
6693 : see if setpgrp exists
6694 set setpgrp d_setpgrp
6695 eval $inlibc
6696
6697 case "$d_setpgrp" in
6698 "$define")
6699         echo " "
6700         echo "Checking to see which flavor of setpgrp is in use..."
6701         $cat >set.c <<EOP
6702 #$i_unistd I_UNISTD
6703 #include <sys/types.h>
6704 #ifdef I_UNISTD
6705 #  include <unistd.h>
6706 #endif
6707 int main()
6708 {
6709         if (getuid() == 0) {
6710                 printf("(I see you are running Configure as super-user...)\n");
6711                 setuid(1);
6712         }
6713 #ifdef TRY_BSD_PGRP
6714         if (-1 == setpgrp(1, 1))
6715                 exit(0);
6716 #else
6717         if (setpgrp() != -1)
6718                 exit(0);
6719 #endif
6720         exit(1);
6721 }
6722 EOP
6723         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6724                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6725                 val="$define"
6726         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6727                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6728                 val="$undef"
6729         else
6730                 echo "(I can't seem to compile and run the test program.)"
6731                 if ./usg; then
6732                         xxx="a USG one, i.e. you use setpgrp()."
6733                 else
6734                         # SVR4 systems can appear rather BSD-ish.
6735                         case "$i_unistd" in
6736                         $undef)
6737                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6738                                 val="$define"
6739                                 ;;
6740                         $define)
6741                                 xxx="probably a USG one, i.e. you use setpgrp()."
6742                                 val="$undef"
6743                                 ;;
6744                         esac
6745                 fi
6746                 echo "Assuming your setpgrp is $xxx" >&4
6747         fi
6748         ;;
6749 *) val="$undef";;
6750 esac
6751 set d_bsdsetpgrp
6752 eval $setvar
6753 $rm -f set set.c
6754 : see if bzero exists
6755 set bzero d_bzero
6756 eval $inlibc
6757
6758 : check for lengths of integral types
6759 echo " "
6760 case "$intsize" in
6761 '')
6762         echo "Checking to see how big your integers are..." >&4
6763         $cat >intsize.c <<'EOCP'
6764 #include <stdio.h>
6765 int main()
6766 {
6767         printf("intsize=%d;\n", sizeof(int));
6768         printf("longsize=%d;\n", sizeof(long));
6769         printf("shortsize=%d;\n", sizeof(short));
6770         exit(0);
6771 }
6772 EOCP
6773         set intsize
6774         if eval $compile_ok && ./intsize > /dev/null; then
6775                 eval `./intsize`
6776                 echo "Your integers are $intsize bytes long."
6777                 echo "Your long integers are $longsize bytes long."
6778                 echo "Your short integers are $shortsize bytes long."
6779         else
6780                 $cat >&4 <<EOM
6781 !
6782 Help! I can't compile and run the intsize test program: please enlighten me!
6783 (This is probably a misconfiguration in your system or libraries, and
6784 you really ought to fix it.  Still, I'll try anyway.)
6785 !
6786 EOM
6787                 dflt=4
6788                 rp="What is the size of an integer (in bytes)?"
6789                 . ./myread
6790                 intsize="$ans"
6791                 dflt=$intsize
6792                 rp="What is the size of a long integer (in bytes)?"
6793                 . ./myread
6794                 longsize="$ans"
6795                 dflt=2
6796                 rp="What is the size of a short integer (in bytes)?"
6797                 . ./myread
6798                 shortsize="$ans"
6799         fi
6800         ;;
6801 esac
6802 $rm -f intsize intsize.*
6803
6804 : see if signal is declared as pointer to function returning int or void
6805 echo " "
6806 xxx=`./findhdr signal.h`
6807 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6808 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6809         echo "You have int (*signal())() instead of void." >&4
6810         val="$undef"
6811 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6812         echo "You have void (*signal())()." >&4
6813         val="$define"
6814 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6815         echo "You have int (*signal())() instead of void." >&4
6816         val="$undef"
6817 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6818         echo "You have void (*signal())()." >&4
6819         val="$define"
6820 else
6821         case "$d_voidsig" in
6822         '')
6823         echo "I can't determine whether signal handler returns void or int..." >&4
6824                 dflt=void
6825                 rp="What type does your signal handler return?"
6826                 . ./myread
6827                 case "$ans" in
6828                 v*) val="$define";;
6829                 *) val="$undef";;
6830                 esac;;
6831         "$define")
6832                 echo "As you already told me, signal handler returns void." >&4
6833                 val="$define"
6834                 ;;
6835         *)      echo "As you already told me, signal handler returns int." >&4
6836                 val="$undef"
6837                 ;;
6838         esac
6839 fi
6840 set d_voidsig
6841 eval $setvar
6842 case "$d_voidsig" in
6843 "$define") signal_t="void";;
6844 *) signal_t="int";;
6845 esac
6846 $rm -f $$.tmp
6847
6848 : check for ability to cast large floats to 32-bit ints.
6849 echo " "
6850 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6851 if $test "$intsize" -ge 4; then
6852         xxx=int
6853 else
6854         xxx=long
6855 fi
6856 $cat >try.c <<EOCP
6857 #include <stdio.h>
6858 #include <sys/types.h>
6859 #include <signal.h>
6860 $signal_t blech(s) int s; { exit(3); }
6861 int main()
6862 {
6863         $xxx i32;
6864         double f, g;
6865         int result = 0;
6866         char str[16];
6867         signal(SIGFPE, blech);
6868
6869         /* Don't let compiler optimize the test away.  Store the number 
6870            in a writable string for gcc to pass to sscanf under HP/UX.
6871         */
6872         sprintf(str, "2147483647");
6873         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6874         g = 10 * f;
6875         i32  = ($xxx) g;
6876
6877         /* x86 processors will probably give 0x8000 0000, which is a
6878        sign change.  We don't want that.  We want to mimic SPARC
6879            behavior here, which is to preserve the sign and give
6880            back 0x7fff ffff.
6881         */
6882         if (i32 != ($xxx) f)
6883                 result |= 1;
6884         exit(result);
6885 }
6886 EOCP
6887 set try
6888 if eval $compile_ok; then
6889         ./try
6890         yyy=$?
6891 else
6892         echo "(I can't seem to compile the test program--assuming it can't)"
6893         yyy=1
6894 fi
6895 case "$yyy" in
6896 0)      val="$define"
6897         echo "Yup, it can."
6898         ;;
6899 *)      val="$undef"
6900         echo "Nope, it can't."
6901         ;;
6902 esac
6903 set d_casti32
6904 eval $setvar
6905 $rm -f try try.*
6906
6907 : check for ability to cast negative floats to unsigned
6908 echo " "
6909 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6910 $cat >try.c <<EOCP
6911 #include <stdio.h>
6912 #include <sys/types.h>
6913 #include <signal.h>
6914 $signal_t blech(s) int s; { exit(7); }
6915 $signal_t blech_in_list(s) int s; { exit(4); }
6916 unsigned long dummy_long(p) unsigned long p; { return p; }
6917 unsigned int dummy_int(p) unsigned int p; { return p; }
6918 unsigned short dummy_short(p) unsigned short p; { return p; }
6919 int main()
6920 {
6921         double f;
6922         unsigned long along;
6923         unsigned int aint;
6924         unsigned short ashort;
6925         int result = 0;
6926         char str[16];
6927         
6928         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6929            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6930            optimized the whole file away
6931         */
6932         /* Store the number in a writable string for gcc to pass to 
6933            sscanf under HP/UX.
6934         */
6935         sprintf(str, "-123");
6936         sscanf(str, "%lf", &f);  /* f = -123.; */
6937
6938         signal(SIGFPE, blech);
6939         along = (unsigned long)f;
6940         aint = (unsigned int)f;
6941         ashort = (unsigned short)f;
6942         if (along != (unsigned long)-123)
6943                 result |= 1;
6944         if (aint != (unsigned int)-123)
6945                 result |= 1;
6946         if (ashort != (unsigned short)-123)
6947                 result |= 1;
6948         sprintf(str, "1073741824.");
6949         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6950         f = f + f;
6951         along = 0;
6952         along = (unsigned long)f;
6953         if (along != 0x80000000)
6954                 result |= 2;
6955         f -= 1.;
6956         along = 0;
6957         along = (unsigned long)f;
6958         if (along != 0x7fffffff)
6959                 result |= 1;
6960         f += 2.;
6961         along = 0;
6962         along = (unsigned long)f;
6963         if (along != 0x80000001)
6964                 result |= 2;
6965         if (result)
6966                 exit(result);
6967         signal(SIGFPE, blech_in_list);
6968         sprintf(str, "123.");
6969         sscanf(str, "%lf", &f);  /* f = 123.; */
6970         along = dummy_long((unsigned long)f);
6971         aint = dummy_int((unsigned int)f);
6972         ashort = dummy_short((unsigned short)f);
6973         if (along != (unsigned long)123)
6974                 result |= 4;
6975         if (aint != (unsigned int)123)
6976                 result |= 4;
6977         if (ashort != (unsigned short)123)
6978                 result |= 4;
6979         exit(result);
6980
6981 }
6982 EOCP
6983 set try
6984 if eval $compile_ok; then
6985         ./try
6986         castflags=$?
6987 else
6988         echo "(I can't seem to compile the test program--assuming it can't)"
6989         castflags=7
6990 fi
6991 case "$castflags" in
6992 0)      val="$define"
6993         echo "Yup, it can."
6994         ;;
6995 *)      val="$undef"
6996         echo "Nope, it can't."
6997         ;;
6998 esac
6999 set d_castneg
7000 eval $setvar
7001 $rm -f try.*
7002
7003 : see if vprintf exists
7004 echo " "
7005 if set vprintf val -f d_vprintf; eval $csym; $val; then
7006         echo 'vprintf() found.' >&4
7007         val="$define"
7008         $cat >vprintf.c <<'EOF'
7009 #include <varargs.h>
7010
7011 int main() { xxx("foo"); }
7012
7013 xxx(va_alist)
7014 va_dcl
7015 {
7016         va_list args;
7017         char buf[10];
7018
7019         va_start(args);
7020         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7021 }
7022 EOF
7023         set vprintf
7024         if eval $compile && ./vprintf; then
7025                 echo "Your vsprintf() returns (int)." >&4
7026                 val2="$undef"
7027         else
7028                 echo "Your vsprintf() returns (char*)." >&4
7029                 val2="$define"
7030         fi
7031 else
7032         echo 'vprintf() NOT found.' >&4
7033                 val="$undef"
7034                 val2="$undef"
7035 fi
7036 set d_vprintf
7037 eval $setvar
7038 val=$val2
7039 set d_charvspr
7040 eval $setvar
7041
7042 : see if chown exists
7043 set chown d_chown
7044 eval $inlibc
7045
7046 : see if chroot exists
7047 set chroot d_chroot
7048 eval $inlibc
7049
7050 : see if chsize exists
7051 set chsize d_chsize
7052 eval $inlibc
7053
7054 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7055 while $test $# -ge 2; do
7056         case "$1" in
7057         $define) echo "#include <$2>";;
7058         esac ;
7059     shift 2;
7060 done > try.c;
7061 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7062 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7063         val="$define";
7064 else
7065         val="$undef";
7066 fi;
7067 set $varname;
7068 eval $setvar;
7069 $rm -f try.c try.o'
7070
7071 : see if this is a sys/uio.h system
7072 set sys/uio.h i_sysuio
7073 eval $inhdr
7074
7075 echo "Checking to see if your system supports struct iovec..." >&4
7076 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7077 eval $hasfield
7078 case "$d_iovec_s" in
7079 "$define")      echo "Yup, it does." >&4
7080                 ;;
7081 *)              echo "Nope, it doesn't." >&4
7082                 ;;
7083 esac
7084
7085 socketlib=''
7086 sockethdr=''
7087 : see whether socket exists
7088 echo " "
7089 $echo $n "Hmm... $c" >&4
7090 if set socket val -f d_socket; eval $csym; $val; then
7091         echo "Looks like you have Berkeley networking support." >&4
7092         d_socket="$define"
7093         if set setsockopt val -f; eval $csym; $val; then
7094                 d_oldsock="$undef"
7095         else
7096                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7097                 d_oldsock="$define"
7098         fi
7099 else
7100         if $contains socklib libc.list >/dev/null 2>&1; then
7101                 echo "Looks like you have Berkeley networking support." >&4
7102                 d_socket="$define"
7103                 : we will have to assume that it supports the 4.2 BSD interface
7104                 d_oldsock="$undef"
7105         else
7106                 echo "You don't have Berkeley networking in libc$_a..." >&4
7107                 if test "X$d_socket" = "X$define"; then
7108                    echo "...but you seem to believe that you have sockets." >&4
7109                 else
7110                         for net in net socket
7111                         do
7112                                 if test -f /usr/lib/lib$net$_a; then
7113                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7114                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7115                                         if $contains socket libc.list >/dev/null 2>&1; then
7116                                                 d_socket="$define"
7117                                                 socketlib="-l$net"
7118                                                 case "$net" in
7119                                                 net)
7120                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7121                                                         sockethdr="-I/usr/netinclude"
7122                                                         ;;
7123                                                 esac
7124                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7125                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7126                                                         d_oldsock="$undef"
7127                                                 else
7128                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7129                                                         d_oldsock="$define"
7130                                                 fi
7131                                                 break
7132                                         fi
7133                                 fi
7134                         done
7135                         if test "X$d_socket" != "X$define"; then
7136                            echo "or anywhere else I see." >&4
7137                            d_socket="$undef"
7138                            d_oldsock="$undef"
7139                         fi
7140                 fi
7141         fi
7142 fi
7143
7144 : see if socketpair exists
7145 set socketpair d_sockpair
7146 eval $inlibc
7147
7148
7149 echo " "
7150 echo "Checking the availability of certain socket constants..." >& 4
7151 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7152         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7153         $cat >try.c <<EOF
7154 #include <sys/types.h>
7155 #include <sys/socket.h>
7156 int main() {
7157     int i = $ENUM;
7158 }
7159 EOF
7160         val="$undef"
7161         set try; if eval $compile; then
7162                 val="$define"
7163         fi
7164         set d_${enum}; eval $setvar
7165         $rm -f try.c try
7166 done
7167
7168 set sendmsg d_sendmsg
7169 eval $inlibc
7170
7171 set recvmsg d_recvmsg
7172 eval $inlibc
7173
7174 echo " "
7175 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7176 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7177 eval $hasfield
7178 case "$d_msghdr_s" in
7179 "$define")      echo "Yup, it does." >&4
7180                 ;;
7181 *)              echo "Nope, it doesn't." >&4
7182                 ;;
7183 esac
7184
7185 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7186 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7187 eval $hasfield
7188 case "$d_cmsghdr_s" in
7189 "$define")      echo "Yup, it does." >&4
7190                 ;;
7191 *)              echo "Nope, it doesn't." >&4
7192                 ;;
7193 esac
7194
7195 : check for const keyword
7196 echo " "
7197 echo 'Checking to see if your C compiler knows about "const"...' >&4
7198 $cat >const.c <<'EOCP'
7199 typedef struct spug { int drokk; } spug;
7200 int main()
7201 {
7202         const char *foo;
7203         const spug y;
7204 }
7205 EOCP
7206 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7207         val="$define"
7208         echo "Yup, it does."
7209 else
7210         val="$undef"
7211         echo "Nope, it doesn't."
7212 fi
7213 set d_const
7214 eval $setvar
7215
7216 : see if crypt exists
7217 echo " "
7218 if set crypt val -f d_crypt; eval $csym; $val; then
7219         echo 'crypt() found.' >&4
7220         val="$define"
7221         cryptlib=''
7222 else
7223         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7224         if $test -z "$cryptlib"; then
7225                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7226         else
7227                 cryptlib=-lcrypt
7228         fi
7229         if $test -z "$cryptlib"; then
7230                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7231         else
7232                 cryptlib=-lcrypt
7233         fi
7234         if $test -z "$cryptlib"; then
7235                 cryptlib=`./loc libcrypt$_a "" $libpth`
7236         else
7237                 cryptlib=-lcrypt
7238         fi
7239         if $test -z "$cryptlib"; then
7240                 echo 'crypt() NOT found.' >&4
7241                 val="$undef"
7242         else
7243                 val="$define"
7244         fi
7245 fi
7246 set d_crypt
7247 eval $setvar
7248
7249 : get csh whereabouts
7250 case "$csh" in
7251 'csh') val="$undef" ;;
7252 *) val="$define" ;;
7253 esac
7254 set d_csh
7255 eval $setvar
7256 : Respect a hint or command line value for full_csh.
7257 case "$full_csh" in
7258 '') full_csh=$csh ;;
7259 esac
7260
7261 : see if cuserid exists
7262 set cuserid d_cuserid
7263 eval $inlibc
7264
7265 : see if this is a limits.h system
7266 set limits.h i_limits
7267 eval $inhdr
7268
7269 : see if this is a float.h system
7270 set float.h i_float
7271 eval $inhdr
7272
7273 : See if number of significant digits in a double precision number is known
7274 echo " "
7275 $cat >dbl_dig.c <<EOM
7276 #$i_limits I_LIMITS
7277 #$i_float I_FLOAT
7278 #ifdef I_LIMITS
7279 #include <limits.h>
7280 #endif
7281 #ifdef I_FLOAT
7282 #include <float.h>
7283 #endif
7284 #ifdef DBL_DIG
7285 printf("Contains DBL_DIG");
7286 #endif
7287 EOM
7288 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7289 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7290         echo "DBL_DIG found." >&4
7291         val="$define"
7292 else
7293         echo "DBL_DIG NOT found." >&4
7294         val="$undef"
7295 fi
7296 $rm -f dbl_dig.?
7297 set d_dbl_dig
7298 eval $setvar
7299
7300
7301 if $test X"$use64bits" = X"$define"; then
7302         : see if dbminit64 exists
7303         set dbminit64 d_dbminit64
7304         eval $inlibc
7305
7306         : see if dbmclose64 exists
7307         set dbmclose64 d_dbmclose64
7308         eval $inlibc
7309
7310         : see if fetch64 exists
7311         set fetch64 d_fetch64
7312         eval $inlibc
7313
7314         : see if store64 exists
7315         set store64 d_store64
7316         eval $inlibc
7317
7318         : see if delete64 exists
7319         set delete64 d_delete64
7320         eval $inlibc
7321
7322         : see if firstkey64 exists
7323         set firstkey64 d_firstkey64
7324         eval $inlibc
7325
7326         : see if nextkey64 exists
7327         set nextkey64 d_nextkey64
7328         eval $inlibc
7329 else
7330         val="$undef"
7331         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7332         do
7333                 set $xxx
7334                 eval $setvar
7335         done
7336 fi
7337
7338 : see if difftime exists
7339 set difftime d_difftime
7340 eval $inlibc
7341
7342 : see if sys/stat.h is available
7343 set sys/stat.h i_sysstat
7344 eval $inhdr
7345
7346 : see if this is a dirent system
7347 echo " "
7348 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7349         val="$define"
7350         echo "<dirent.h> found." >&4
7351 else
7352         val="$undef"
7353         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7354                 echo "<sys/dir.h> found." >&4
7355                 echo " "
7356         else
7357                 xinc=`./findhdr sys/ndir.h`
7358         fi
7359         echo "<dirent.h> NOT found." >&4
7360 fi
7361 set i_dirent
7362 eval $setvar
7363
7364 : Look for type of directory structure.
7365 echo " "
7366 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7367
7368 case "$direntrytype" in
7369 ''|' ')
7370         case "$i_dirent" in
7371         $define) guess1='struct dirent' ;;
7372         *) guess1='struct direct'  ;;
7373         esac
7374         ;;
7375 *)      guess1="$direntrytype"
7376         ;;
7377 esac
7378
7379 case "$guess1" in
7380 'struct dirent') guess2='struct direct' ;;
7381 *) guess2='struct dirent' ;;
7382 esac
7383                 
7384 if $contains "$guess1" try.c >/dev/null 2>&1; then
7385         direntrytype="$guess1"
7386         echo "Your directory entries are $direntrytype." >&4
7387 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7388         direntrytype="$guess2"
7389         echo "Your directory entries seem to be $direntrytype." >&4
7390 else
7391         echo "I don't recognize your system's directory entries." >&4
7392         rp="What type is used for directory entries on this system?"
7393         dflt="$guess1"
7394         . ./myread
7395         direntrytype="$ans"
7396 fi
7397 $rm -f try.c
7398
7399
7400 : see if the directory entry stores field length
7401 echo " "
7402 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7403 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7404         echo "Good, your directory entry keeps length information in d_namlen." >&4
7405         val="$define"
7406 else
7407         echo "Your directory entry does not know about the d_namlen field." >&4
7408         val="$undef"
7409 fi
7410 set d_dirnamlen
7411 eval $setvar
7412 $rm -f try.c
7413
7414
7415 if $test X"$use64bits" = X"$define"; then
7416         : see if fstat64 exists
7417         set fstat64 d_fstat64
7418         eval $inlibc
7419
7420         : see if ftruncate64 exists
7421         set ftruncate64 d_ftruncate64
7422         eval $inlibc
7423
7424         : see if lockf64 exists
7425         set lockf64 d_lockf64
7426         eval $inlibc
7427
7428         : see if llseek exists
7429         set llseek d_llseek
7430         eval $inlibc
7431
7432         : see if lseek64 exists
7433         set lseek64 d_lseek64
7434         eval $inlibc
7435
7436         : see if lstat64 exists
7437         set lstat64 d_lstat64
7438         eval $inlibc
7439
7440         : see if open64 exists
7441         set open64 d_open64
7442         eval $inlibc
7443
7444         : see if opendir64 exists
7445         set opendir64 d_opendir64
7446         eval $inlibc
7447
7448         : see if readdir64 exists
7449         set readdir64 d_readdir64
7450         eval $inlibc
7451
7452         : see if seekdir64 exists
7453         set seekdir64 d_seekdir64
7454         eval $inlibc
7455
7456         : see if stat64 exists
7457         set stat64 d_stat64
7458         eval $inlibc
7459
7460         : see if telldir64 exists
7461         set telldir64 d_telldir64
7462         eval $inlibc
7463
7464         : see if truncate64 exists
7465         set truncate64 d_truncate64
7466         eval $inlibc
7467
7468         : check for off64_t
7469         echo " "
7470         echo $n "Checking to see if your system supports off64_t...$c" >&4
7471         $cat >try.c <<EOCP
7472 #include <sys/types.h>
7473 #include <unistd.h>
7474 off64_t foo() { off64_t x; x = 7; return x; }'
7475 EOCP
7476         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7477                 val="$define"
7478                 echo " Yup, it does." >&4
7479         else
7480                 val="$undef"
7481                 echo " Nope, it doesn't." >&4
7482         fi
7483         $rm -f try.*
7484         set d_off64_t
7485         eval $setvar
7486
7487         : check for offset_t
7488         echo " "
7489         echo $n "Checking to see if your system supports offset_t...$c" >&4
7490         $cat >try.c <<EOCP
7491 #include <sys/types.h>
7492 #include <unistd.h>
7493 offset_t foo() { offset_t x; x = 7; return x; }'
7494 EOCP
7495         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7496                 val="$define"
7497                 echo " Yup, it does." >&4
7498         else
7499                 val="$undef"
7500                 echo " Nope, it doesn't." >&4
7501         fi
7502         $rm -f try.*
7503         set d_offset_t
7504         eval $setvar
7505
7506         : check for ino64_t
7507         echo " "
7508         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7509         val="$undef"
7510         case "$i_sysstat" in
7511         "$define" )
7512                 $cat >try.c <<EOCP
7513 #include <sys/types.h>
7514 #include <sys/stat.h>
7515 ino64_t foo() { ino64_t x; x = 7; return x; }'
7516 EOCP
7517                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7518                         val="$define"
7519                 fi
7520                 $rm -f try.*
7521                 ;;
7522         esac
7523         if $test "X$val" = X"$define"; then
7524                 echo " Yup, it does." >&4
7525         else
7526                 echo " Nope, it doesn't." >&4
7527         fi
7528         set d_ino64_t
7529         eval $setvar
7530
7531         : check for struct flock64
7532         echo " "
7533         echo "Checking to see if your system supports struct flock64..." >&4
7534         if $h_fcntl; then
7535                 set d_flock64_s flock64 l_len define fcntl.h
7536                 eval $hasfield
7537         else
7538                 val="$undef"
7539                 set d_flock64_s
7540                 eval $setvar
7541         fi
7542         case "$d_flock64_s" in
7543         "$define")      echo "Yup, it does." >&4
7544                         ;;
7545         *)              echo "Nope, it doesn't." >&4
7546                         ;;
7547         esac
7548
7549         : check for struct dirent64
7550         echo " "
7551         echo "Checking to see if your system supports struct dirent64..." >&4
7552         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7553         eval $hasfield
7554         case "$d_dirent64_s" in
7555         "$define")      echo "Yup, it does." >&4
7556                         ;;
7557         *)              echo "Nope, it doesn't." >&4
7558                         ;;
7559         esac
7560
7561 else
7562         val="$undef"
7563         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
7564         do
7565                 set $xxx
7566                 eval $setvar
7567         done
7568 fi
7569
7570 : see if dlerror exists
7571 xxx_runnm="$runnm"
7572 runnm=false
7573 set dlerror d_dlerror
7574 eval $inlibc
7575 runnm="$xxx_runnm"
7576
7577 : see if dlfcn is available
7578 set dlfcn.h i_dlfcn
7579 eval $inhdr
7580
7581 case "$usedl" in
7582 $define|y|true)
7583         $cat << EOM
7584
7585 On a few systems, the dynamically loaded modules that perl generates and uses
7586 will need a different extension than shared libs. The default will probably
7587 be appropriate.
7588
7589 EOM
7590         case "$dlext" in
7591         '')     dflt="$so" ;;
7592         *)      dflt="$dlext" ;;
7593         esac
7594         rp='What is the extension of dynamically loaded modules'
7595         . ./myread
7596         dlext="$ans"
7597         ;;
7598 *)
7599         dlext="none"
7600         ;;
7601 esac
7602
7603 : Check if dlsym need a leading underscore
7604 echo " "
7605 val="$undef"
7606
7607 case "$dlsrc" in
7608 dl_dlopen.xs)
7609         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7610         $cat >dyna.c <<'EOM'
7611 fred () { }
7612 EOM
7613
7614 $cat >fred.c<<EOM
7615
7616 #include <stdio.h>
7617 #$i_dlfcn I_DLFCN
7618 #ifdef I_DLFCN
7619 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7620 #else
7621 #include <sys/types.h>
7622 #include <nlist.h>
7623 #include <link.h>
7624 #endif
7625
7626 extern int fred() ;
7627
7628 int main()
7629 {
7630     void * handle ;
7631     void * symbol ;
7632 #ifndef RTLD_LAZY
7633     int mode = 1 ;
7634 #else
7635     int mode = RTLD_LAZY ;
7636 #endif
7637     handle = dlopen("./dyna.$dlext", mode) ;
7638     if (handle == NULL) {
7639         printf ("1\n") ;
7640         fflush (stdout) ;
7641         exit(0);
7642     }
7643     symbol = dlsym(handle, "fred") ;
7644     if (symbol == NULL) {
7645         /* try putting a leading underscore */
7646         symbol = dlsym(handle, "_fred") ;
7647         if (symbol == NULL) {
7648             printf ("2\n") ;
7649             fflush (stdout) ;
7650             exit(0);
7651         }
7652         printf ("3\n") ;
7653     }
7654     else
7655         printf ("4\n") ;
7656     fflush (stdout) ;
7657     exit(0);
7658 }
7659 EOM
7660         : Call the object file tmp-dyna.o in case dlext=o.
7661         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7662                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7663                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7664                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7665                 xxx=`./fred`
7666                 case $xxx in
7667                 1)      echo "Test program failed using dlopen." >&4
7668                         echo "Perhaps you should not use dynamic loading." >&4;;
7669                 2)      echo "Test program failed using dlsym." >&4
7670                         echo "Perhaps you should not use dynamic loading." >&4;;
7671                 3)      echo "dlsym needs a leading underscore" >&4
7672                         val="$define" ;;
7673                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7674                 esac
7675         else
7676                 echo "I can't compile and run the test program." >&4
7677         fi
7678         ;;
7679 esac
7680                 
7681 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7682
7683 set d_dlsymun
7684 eval $setvar
7685
7686 hasproto='varname=$1; func=$2; shift; shift;
7687 while $test $# -ge 2; do
7688         case "$1" in
7689         $define) echo "#include <$2>";;
7690         esac ;
7691     shift 2;
7692 done > try.c;
7693 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7694 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7695         echo "$func() prototype found.";
7696         val="$define";
7697 else
7698         echo "$func() prototype NOT found.";
7699         val="$undef";
7700 fi;
7701 set $varname;
7702 eval $setvar;
7703 $rm -f try.c tryout.c'
7704
7705 : see if prototype for drand48 is available
7706 echo " "
7707 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7708 eval $hasproto
7709
7710 : see if dup2 exists
7711 set dup2 d_dup2
7712 eval $inlibc
7713
7714 : see if eaccess exists
7715 set eaccess d_eaccess
7716 eval $inlibc
7717
7718 : see if endgrent exists
7719 set endgrent d_endgrent
7720 eval $inlibc
7721
7722 : see if endhostent exists
7723 set endhostent d_endhent
7724 eval $inlibc
7725
7726 : see if endnetent exists
7727 set endnetent d_endnent
7728 eval $inlibc
7729
7730 : see if endprotoent exists
7731 set endprotoent d_endpent
7732 eval $inlibc
7733
7734 : see if endpwent exists
7735 set endpwent d_endpwent
7736 eval $inlibc
7737
7738 : see if endservent exists
7739 set endservent d_endsent
7740 eval $inlibc
7741
7742 : see if endspent exists
7743 set endspent d_endspent
7744 eval $inlibc
7745
7746 : Locate the flags for 'open()'
7747 echo " "
7748 $cat >open3.c <<'EOCP'
7749 #include <sys/types.h>
7750 #ifdef I_FCNTL
7751 #include <fcntl.h>
7752 #endif
7753 #ifdef I_SYS_FILE
7754 #include <sys/file.h>
7755 #endif
7756 int main() {
7757         if(O_RDONLY);
7758 #ifdef O_TRUNC
7759         exit(0);
7760 #else
7761         exit(1);
7762 #endif
7763 }
7764 EOCP
7765 : check sys/file.h first to get FREAD on Sun
7766 if $test `./findhdr sys/file.h` && \
7767                 set open3 -DI_SYS_FILE && eval $compile; then
7768         h_sysfile=true;
7769         echo "<sys/file.h> defines the O_* constants..." >&4
7770         if ./open3; then
7771                 echo "and you have the 3 argument form of open()." >&4
7772                 val="$define"
7773         else
7774                 echo "but not the 3 argument form of open().  Oh, well." >&4
7775                 val="$undef"
7776         fi
7777 elif $test `./findhdr fcntl.h` && \
7778                 set open3 -DI_FCNTL && eval $compile; then
7779         h_fcntl=true;
7780         echo "<fcntl.h> defines the O_* constants..." >&4
7781         if ./open3; then
7782                 echo "and you have the 3 argument form of open()." >&4
7783                 val="$define"
7784         else
7785                 echo "but not the 3 argument form of open().  Oh, well." >&4
7786                 val="$undef"
7787         fi
7788 else
7789         val="$undef"
7790         echo "I can't find the O_* constant definitions!  You got problems." >&4
7791 fi
7792 set d_open3
7793 eval $setvar
7794 $rm -f open3*
7795
7796 : check for non-blocking I/O stuff
7797 case "$h_sysfile" in
7798 true) echo "#include <sys/file.h>" > head.c;;
7799 *)
7800         case "$h_fcntl" in
7801         true) echo "#include <fcntl.h>" > head.c;;
7802         *) echo "#include <sys/fcntl.h>" > head.c;;
7803         esac
7804         ;;
7805 esac
7806 echo " "
7807 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7808 case "$o_nonblock" in
7809 '')
7810         $cat head.c > try.c
7811         $cat >>try.c <<'EOCP'
7812 int main() {
7813 #ifdef O_NONBLOCK
7814         printf("O_NONBLOCK\n");
7815         exit(0);
7816 #endif
7817 #ifdef O_NDELAY
7818         printf("O_NDELAY\n");
7819         exit(0);
7820 #endif
7821 #ifdef FNDELAY
7822         printf("FNDELAY\n");
7823         exit(0);
7824 #endif
7825         exit(0);
7826 }
7827 EOCP
7828         set try
7829         if eval $compile_ok; then
7830                 o_nonblock=`./try`
7831                 case "$o_nonblock" in
7832                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7833                 *) echo "Seems like we can use $o_nonblock.";;
7834                 esac
7835         else
7836                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7837         fi
7838         ;;
7839 *) echo "Using $hint value $o_nonblock.";;
7840 esac
7841 $rm -f try try.* .out core
7842
7843 echo " "
7844 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7845 case "$eagain" in
7846 '')
7847         $cat head.c > try.c
7848         $cat >>try.c <<EOCP
7849 #include <errno.h>
7850 #include <sys/types.h>
7851 #include <signal.h>
7852 #define MY_O_NONBLOCK $o_nonblock
7853 #ifndef errno  /* XXX need better Configure test */
7854 extern int errno;
7855 #endif
7856 $signal_t blech(x) int x; { exit(3); }
7857 EOCP
7858         $cat >> try.c <<'EOCP'
7859 int main()
7860 {
7861         int pd[2];
7862         int pu[2];
7863         char buf[1];
7864         char string[100];
7865
7866         pipe(pd);       /* Down: child -> parent */
7867         pipe(pu);       /* Up: parent -> child */
7868         if (0 != fork()) {
7869                 int ret;
7870                 close(pd[1]);   /* Parent reads from pd[0] */
7871                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7872                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7873                         exit(1);
7874                 signal(SIGALRM, blech);
7875                 alarm(5);
7876                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7877                         exit(2);
7878                 sprintf(string, "%d\n", ret);
7879                 write(2, string, strlen(string));
7880                 alarm(0);
7881 #ifdef EAGAIN
7882                 if (errno == EAGAIN) {
7883                         printf("EAGAIN\n");
7884                         goto ok;
7885                 }
7886 #endif
7887 #ifdef EWOULDBLOCK
7888                 if (errno == EWOULDBLOCK)
7889                         printf("EWOULDBLOCK\n");
7890 #endif
7891         ok:
7892                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7893                 sleep(2);                               /* Give it time to close our pipe */
7894                 alarm(5);
7895                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7896                 alarm(0);
7897                 sprintf(string, "%d\n", ret);
7898                 write(3, string, strlen(string));
7899                 exit(0);
7900         }
7901
7902         close(pd[0]);                   /* We write to pd[1] */
7903         close(pu[1]);                   /* We read from pu[0] */
7904         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7905         close(pd[1]);                   /* Pipe pd is now fully closed! */
7906         exit(0);                                /* Bye bye, thank you for playing! */
7907 }
7908 EOCP
7909         set try
7910         if eval $compile_ok; then
7911                 echo "$startsh" >mtry
7912                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7913                 chmod +x mtry
7914                 ./mtry >/dev/null 2>&1
7915                 case $? in
7916                 0) eagain=`$cat try.out`;;
7917                 1) echo "Could not perform non-blocking setting!";;
7918                 2) echo "I did a successful read() for something that was not there!";;
7919                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7920                 *) echo "Something terribly wrong happened during testing.";;
7921                 esac
7922                 rd_nodata=`$cat try.ret`
7923                 echo "A read() system call with no data present returns $rd_nodata."
7924                 case "$rd_nodata" in
7925                 0|-1) ;;
7926                 *)
7927                         echo "(That's peculiar, fixing that to be -1.)"
7928                         rd_nodata=-1
7929                         ;;
7930                 esac
7931                 case "$eagain" in
7932                 '')
7933                         echo "Forcing errno EAGAIN on read() with no data available."
7934                         eagain=EAGAIN
7935                         ;;
7936                 *)
7937                         echo "Your read() sets errno to $eagain when no data is available."
7938                         ;;
7939                 esac
7940                 status=`$cat try.err`
7941                 case "$status" in
7942                 0) echo "And it correctly returns 0 to signal EOF.";;
7943                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7944                 *) echo "However, your read() returns '$status' on EOF??";;
7945                 esac
7946                 val="$define"
7947                 if test "$status" = "$rd_nodata"; then
7948                         echo "WARNING: you can't distinguish between EOF and no data!"
7949                         val="$undef"
7950                 fi
7951         else
7952                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7953                 eagain=EAGAIN
7954         fi
7955         set d_eofnblk
7956         eval $setvar
7957         ;;
7958 *)
7959         echo "Using $hint value $eagain."
7960         echo "Your read() returns $rd_nodata when no data is present."
7961         case "$d_eofnblk" in
7962         "$define") echo "And you can see EOF because read() returns 0.";;
7963         "$undef") echo "But you can't see EOF status from read() returned value.";;
7964         *)
7965                 echo "(Assuming you can't see EOF status from read anyway.)"
7966                 d_eofnblk=$undef
7967                 ;;
7968         esac
7969         ;;
7970 esac
7971 $rm -f try try.* .out core head.c mtry
7972
7973 : see if fchmod exists
7974 set fchmod d_fchmod
7975 eval $inlibc
7976
7977 : see if fchown exists
7978 set fchown d_fchown
7979 eval $inlibc
7980
7981 : see if this is an fcntl system
7982 set fcntl d_fcntl
7983 eval $inlibc
7984
7985 : see if sys/select.h has to be included
7986 set sys/select.h i_sysselct
7987 eval $inhdr
7988
7989 : see if we should include time.h, sys/time.h, or both
7990 echo " "
7991 if test "X$timeincl" = X; then
7992         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7993         $echo $n "I'm now running the test program...$c"
7994         $cat >try.c <<'EOCP'
7995 #include <sys/types.h>
7996 #ifdef I_TIME
7997 #include <time.h>
7998 #endif
7999 #ifdef I_SYSTIME
8000 #ifdef SYSTIMEKERNEL
8001 #define KERNEL
8002 #endif
8003 #include <sys/time.h>
8004 #endif
8005 #ifdef I_SYSSELECT
8006 #include <sys/select.h>
8007 #endif
8008 int main()
8009 {
8010         struct tm foo;
8011 #ifdef S_TIMEVAL
8012         struct timeval bar;
8013 #endif
8014 #ifdef S_TIMEZONE
8015         struct timezone tzp;
8016 #endif
8017         if (foo.tm_sec == foo.tm_sec)
8018                 exit(0);
8019 #ifdef S_TIMEVAL
8020         if (bar.tv_sec == bar.tv_sec)
8021                 exit(0);
8022 #endif
8023         exit(1);
8024 }
8025 EOCP
8026         flags=''
8027         for s_timezone in '-DS_TIMEZONE' ''; do
8028         sysselect=''
8029         for s_timeval in '-DS_TIMEVAL' ''; do
8030         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8031         for i_time in '' '-DI_TIME'; do
8032         for i_systime in '-DI_SYSTIME' ''; do
8033                 case "$flags" in
8034                 '') $echo $n ".$c"
8035                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8036                         if eval $compile; then
8037                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8038                                 shift
8039                                 flags="$*"
8040                                 echo " "
8041                                 $echo $n "Succeeded with $flags$c"
8042                         fi
8043                         ;;
8044                 esac
8045         done
8046         done
8047         done
8048         done
8049         done
8050         timeincl=''
8051         echo " "
8052         case "$flags" in
8053         *SYSTIMEKERNEL*) i_systimek="$define"
8054                 timeincl=`./findhdr sys/time.h`
8055                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8056         *) i_systimek="$undef";;
8057         esac
8058         case "$flags" in
8059         *I_TIME*) i_time="$define"
8060                 timeincl=`./findhdr time.h`" $timeincl"
8061                 echo "We'll include <time.h>." >&4;;
8062         *) i_time="$undef";;
8063         esac
8064         case "$flags" in
8065         *I_SYSTIME*) i_systime="$define"
8066                 timeincl=`./findhdr sys/time.h`" $timeincl"
8067                 echo "We'll include <sys/time.h>." >&4;;
8068         *) i_systime="$undef";;
8069         esac
8070         $rm -f try.c try
8071 fi
8072
8073 : check for fd_set items
8074 $cat <<EOM
8075
8076 Checking to see how well your C compiler handles fd_set and friends ...
8077 EOM
8078 $cat >fd_set.c <<EOCP
8079 #$i_systime I_SYS_TIME
8080 #$i_sysselct I_SYS_SELECT
8081 #$d_socket HAS_SOCKET
8082 #include <sys/types.h>
8083 #ifdef HAS_SOCKET
8084 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8085 #endif
8086 #ifdef I_SYS_TIME
8087 #include <sys/time.h>
8088 #endif
8089 #ifdef I_SYS_SELECT
8090 #include <sys/select.h>
8091 #endif
8092 int main() {
8093         fd_set fds;
8094
8095 #ifdef TRYBITS
8096         if(fds.fds_bits);
8097 #endif
8098
8099 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8100         exit(0);
8101 #else
8102         exit(1);
8103 #endif
8104 }
8105 EOCP
8106 set fd_set -DTRYBITS
8107 if eval $compile; then
8108         d_fds_bits="$define"
8109         d_fd_set="$define"
8110         echo "Well, your system knows about the normal fd_set typedef..." >&4
8111         if ./fd_set; then
8112                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8113                 d_fd_macros="$define"
8114         else
8115                 $cat >&4 <<'EOM'
8116 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8117 EOM
8118                 d_fd_macros="$undef"
8119         fi
8120 else
8121         $cat <<'EOM'
8122 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8123 EOM
8124         set fd_set
8125         if eval $compile; then
8126                 d_fds_bits="$undef"
8127                 d_fd_set="$define"
8128                 echo "Well, your system has some sort of fd_set available..." >&4
8129                 if ./fd_set; then
8130                         echo "and you have the normal fd_set macros." >&4
8131                         d_fd_macros="$define"
8132                 else
8133                         $cat <<'EOM'
8134 but not the normal fd_set macros!  Gross!  More work for me...
8135 EOM
8136                         d_fd_macros="$undef"
8137                 fi
8138         else
8139         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8140                 d_fd_set="$undef"
8141                 d_fds_bits="$undef"
8142                 d_fd_macros="$undef"
8143         fi
8144 fi
8145 $rm -f fd_set*
8146
8147 : see if fgetpos exists
8148 set fgetpos d_fgetpos
8149 eval $inlibc
8150
8151
8152 if $test X"$use64bits" = X"$define"; then
8153         : see if fgetpos64 exists
8154         set fgetpos64 d_fgetpos64
8155         eval $inlibc
8156
8157         : see if fopen64 exists
8158         set freopen64 d_fopen64
8159         eval $inlibc
8160
8161         : see if freopen64 exists
8162         set freopen64 d_freopen64
8163         eval $inlibc
8164
8165         : see if fseek64 exists
8166         set fseek64 d_fseek64
8167         eval $inlibc
8168
8169         : see if fseeko64 exists
8170         set fseeko64 d_fseeko64
8171         eval $inlibc
8172
8173         : see if fsetpos64 exists
8174         set fsetpos64 d_fsetpos64
8175         eval $inlibc
8176
8177         : see if ftell64 exists
8178         set ftell64 d_ftell64
8179         eval $inlibc
8180
8181         : see if ftello64 exists
8182         set ftello64 d_ftello64
8183         eval $inlibc
8184
8185         : see if tmpfile64 exists
8186         set tmpfile64 d_tmpfile64
8187         eval $inlibc
8188 else
8189         val="$undef"
8190         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8191         do
8192                 set $xxx
8193                 eval $setvar
8194         done
8195 fi
8196
8197 : see if flock exists
8198 set flock d_flock
8199 eval $inlibc
8200
8201 : see if fork exists
8202 set fork d_fork
8203 eval $inlibc
8204
8205 : see if pathconf exists
8206 set pathconf d_pathconf
8207 eval $inlibc
8208
8209 : see if fpathconf exists
8210 set fpathconf d_fpathconf
8211 eval $inlibc
8212
8213 : see if fseeko exists
8214 set fseeko d_fseeko
8215 eval $inlibc
8216
8217 : see if fsetpos exists
8218 set fsetpos d_fsetpos
8219 eval $inlibc
8220
8221 : see if this is a sys/param system
8222 set sys/param.h i_sysparam
8223 eval $inhdr
8224
8225 : see if this is a sys/mount.h system
8226 set sys/mount.h i_sysmount
8227 eval $inhdr
8228
8229
8230 : see if statfs exists
8231 set statfs d_statfs
8232 eval $inlibc
8233
8234 : see if fstatfs exists
8235 set fstatfs d_fstatfs
8236 eval $inlibc
8237
8238 : see if statfs knows about mount flags
8239 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8240 eval $hasfield
8241
8242
8243 : see if statvfs exists
8244 set statvfs d_statvfs
8245 eval $inlibc
8246
8247 : see if fstatvfs exists
8248 set fstatvfs d_fstatvfs
8249 eval $inlibc
8250
8251
8252 : see if ftello exists
8253 set ftello d_ftello
8254 eval $inlibc
8255
8256 : see if getgrent exists
8257 set getgrent d_getgrent
8258 eval $inlibc
8259
8260 : see if gethostbyaddr exists
8261 set gethostbyaddr d_gethbyaddr
8262 eval $inlibc
8263
8264 : see if gethostbyname exists
8265 set gethostbyname d_gethbyname
8266 eval $inlibc
8267
8268 : see if gethostent exists
8269 set gethostent d_gethent
8270 eval $inlibc
8271
8272 : see how we will look up host name
8273 echo " "
8274 call=''
8275 if set gethostname val -f d_gethname; eval $csym; $val; then
8276         echo 'gethostname() found.' >&4
8277         d_gethname="$define"
8278         call=gethostname
8279 fi
8280 if set uname val -f d_uname; eval $csym; $val; then
8281         if ./xenix; then
8282                 $cat <<'EOM'
8283 uname() was found, but you're running xenix, and older versions of xenix
8284 have a broken uname(). If you don't really know whether your xenix is old
8285 enough to have a broken system call, use the default answer.
8286
8287 EOM
8288                 dflt=y
8289                 case "$d_uname" in
8290                 "$define") dflt=n;;
8291                 esac
8292                 rp='Is your uname() broken?'
8293                 . ./myread
8294                 case "$ans" in
8295                 n*) d_uname="$define"; call=uname;;
8296                 esac
8297         else
8298                 echo 'uname() found.' >&4
8299                 d_uname="$define"
8300                 case "$call" in
8301                 '') call=uname ;;
8302                 esac
8303         fi
8304 fi
8305 case "$d_gethname" in
8306 '') d_gethname="$undef";;
8307 esac
8308 case "$d_uname" in
8309 '') d_uname="$undef";;
8310 esac
8311 case "$d_uname$d_gethname" in
8312 *define*)
8313         dflt=n
8314         cat <<EOM
8315  
8316 Every now and then someone has a $call() that lies about the hostname
8317 but can't be fixed for political or economic reasons.  If you wish, I can
8318 pretend $call() isn't there and maybe compute hostname at run-time
8319 thanks to the '$phostname' command.
8320
8321 EOM
8322         rp="Shall I ignore $call() from now on?"
8323         . ./myread
8324         case "$ans" in
8325         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8326         esac;;
8327 esac
8328 case "$phostname" in
8329 '') aphostname='';;
8330 *) case "$aphostname" in
8331         /*) ;;
8332         *) set X $phostname
8333                 shift
8334                 file=$1
8335                 shift
8336                 file=`./loc $file $file $pth`
8337                 aphostname=`echo $file $*`
8338                 ;;
8339         esac
8340         ;;
8341 esac
8342 case "$d_uname$d_gethname" in
8343 *define*) ;;
8344 *)
8345         case "$phostname" in
8346         '')
8347                 echo "There will be no way for $package to get your hostname." >&4;;
8348         *)
8349         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8350                 ;;
8351         esac;;
8352 esac
8353 case "$d_phostname" in
8354 '') d_phostname="$undef";;
8355 esac
8356
8357 : see if this is a netdb.h system
8358 set netdb.h i_netdb
8359 eval $inhdr
8360
8361 : see if prototypes for various gethostxxx netdb.h functions are available
8362 echo " "
8363 set d_gethostprotos gethostent $i_netdb netdb.h
8364 eval $hasproto
8365
8366 : see if getlogin exists
8367 set getlogin d_getlogin
8368 eval $inlibc
8369
8370 : see if getmntent exists
8371 set getmntent d_getmntent
8372 eval $inlibc
8373
8374 : see if getnetbyaddr exists
8375 set getnetbyaddr d_getnbyaddr
8376 eval $inlibc
8377
8378 : see if getnetbyname exists
8379 set getnetbyname d_getnbyname
8380 eval $inlibc
8381
8382 : see if getnetent exists
8383 set getnetent d_getnent
8384 eval $inlibc
8385
8386 : see if prototypes for various getnetxxx netdb.h functions are available
8387 echo " "
8388 set d_getnetprotos getnetent $i_netdb netdb.h
8389 eval $hasproto
8390
8391
8392 : see if getprotobyname exists
8393 set getprotobyname d_getpbyname
8394 eval $inlibc
8395
8396 : see if getprotobynumber exists
8397 set getprotobynumber d_getpbynumber
8398 eval $inlibc
8399
8400 : see if getprotoent exists
8401 set getprotoent d_getpent
8402 eval $inlibc
8403
8404 : see if getpgid exists
8405 set getpgid d_getpgid
8406 eval $inlibc
8407
8408 : see if getpgrp2 exists
8409 set getpgrp2 d_getpgrp2
8410 eval $inlibc
8411
8412 : see if getppid exists
8413 set getppid d_getppid
8414 eval $inlibc
8415
8416 : see if getpriority exists
8417 set getpriority d_getprior
8418 eval $inlibc
8419
8420 : see if prototypes for various getprotoxxx netdb.h functions are available
8421 echo " "
8422 set d_getprotoprotos getprotoent $i_netdb netdb.h
8423 eval $hasproto
8424
8425 : see if getpwent exists
8426 set getpwent d_getpwent
8427 eval $inlibc
8428
8429
8430 : see if getservbyname exists
8431 set getservbyname d_getsbyname
8432 eval $inlibc
8433
8434 : see if getservbyport exists
8435 set getservbyport d_getsbyport
8436 eval $inlibc
8437
8438 : see if getservent exists
8439 set getservent d_getsent
8440 eval $inlibc
8441
8442 : see if prototypes for various getservxxx netdb.h functions are available
8443 echo " "
8444 set d_getservprotos getservent $i_netdb netdb.h
8445 eval $hasproto
8446
8447 : see if getspent exists
8448 set getspent d_getspent
8449 eval $inlibc
8450
8451 : see if getspnam exists
8452 set getspnam d_getspnam
8453 eval $inlibc
8454
8455 : see if gettimeofday or ftime exists
8456 set gettimeofday d_gettimeod
8457 eval $inlibc
8458 case "$d_gettimeod" in
8459 "$undef")
8460         set ftime d_ftime 
8461         eval $inlibc
8462         ;;
8463 *)
8464         val="$undef"; set d_ftime; eval $setvar
8465         ;;
8466 esac
8467 case "$d_gettimeod$d_ftime" in
8468 "$undef$undef")
8469         echo " "
8470         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8471         ;;
8472 esac
8473
8474 : see if this is an grp system
8475 set grp.h i_grp
8476 eval $inhdr
8477
8478 case "$i_grp" in
8479 $define)
8480         xxx=`./findhdr grp.h`
8481         $cppstdin $cppflags $cppminus < $xxx >$$.h
8482
8483         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8484                 val="$define"
8485         else
8486                 val="$undef"
8487         fi
8488         set d_grpasswd
8489         eval $setvar
8490
8491         $rm -f $$.h
8492         ;;
8493 *)
8494         val="$undef";
8495         set d_grpasswd; eval $setvar
8496         ;;
8497 esac
8498
8499 : see if hasmntopt exists
8500 set hasmntopt d_hasmntopt
8501 eval $inlibc
8502
8503 : see if this is a netinet/in.h or sys/in.h system
8504 set netinet/in.h i_niin sys/in.h i_sysin
8505 eval $inhdr
8506
8507 : see if arpa/inet.h has to be included
8508 set arpa/inet.h i_arpainet
8509 eval $inhdr
8510
8511 : see if htonl --and friends-- exists
8512 val=''
8513 set htonl val
8514 eval $inlibc
8515
8516 : Maybe they are macros.
8517 case "$val" in
8518 $undef)
8519         $cat >htonl.c <<EOM
8520 #include <stdio.h>
8521 #include <sys/types.h>
8522 #$i_niin I_NETINET_IN
8523 #$i_sysin I_SYS_IN
8524 #$i_arpainet I_ARPA_INET
8525 #ifdef I_NETINET_IN
8526 #include <netinet/in.h>
8527 #endif
8528 #ifdef I_SYS_IN
8529 #include <sys/in.h>
8530 #endif
8531 #ifdef I_ARPA_INET
8532 #include <arpa/inet.h>
8533 #endif
8534 #ifdef htonl
8535 printf("Defined as a macro.");
8536 #endif
8537 EOM
8538         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8539         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8540                 val="$define"
8541                 echo "But it seems to be defined as a macro." >&4
8542         fi
8543         $rm -f htonl.?
8544         ;;
8545 esac
8546 set d_htonl
8547 eval $setvar
8548
8549 : see which of string.h or strings.h is needed
8550 echo " "
8551 strings=`./findhdr string.h`
8552 if $test "$strings" && $test -r "$strings"; then
8553         echo "Using <string.h> instead of <strings.h>." >&4
8554         val="$define"
8555 else
8556         val="$undef"
8557         strings=`./findhdr strings.h`
8558         if $test "$strings" && $test -r "$strings"; then
8559                 echo "Using <strings.h> instead of <string.h>." >&4
8560         else
8561                 echo "No string header found -- You'll surely have problems." >&4
8562         fi
8563 fi
8564 set i_string
8565 eval $setvar
8566 case "$i_string" in
8567 "$undef") strings=`./findhdr strings.h`;;
8568 *)        strings=`./findhdr string.h`;;
8569 esac
8570
8571 : index or strchr
8572 echo " "
8573 if set index val -f; eval $csym; $val; then
8574         if set strchr val -f d_strchr; eval $csym; $val; then
8575                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8576                         val="$define"
8577                         vali="$undef"
8578                         echo "strchr() found." >&4
8579                 else
8580                         val="$undef"
8581                         vali="$define"
8582                         echo "index() found." >&4
8583                 fi
8584         else
8585                 val="$undef"
8586                 vali="$define"
8587                 echo "index() found." >&4
8588         fi
8589 else
8590         if set strchr val -f d_strchr; eval $csym; $val; then
8591                 val="$define"
8592                 vali="$undef"
8593                 echo "strchr() found." >&4
8594         else
8595                 echo "No index() or strchr() found!" >&4
8596                 val="$undef"
8597                 vali="$undef"
8598         fi
8599 fi
8600 set d_strchr; eval $setvar
8601 val="$vali"
8602 set d_index; eval $setvar
8603
8604 : check whether inet_aton exists
8605 set inet_aton d_inetaton
8606 eval $inlibc
8607
8608 : see if inttypes.h is available
8609 : we want a real compile instead of Inhdr because some systems
8610 : have an inttypes.h which includes non-existent headers
8611 echo " "
8612 $cat >try.c <<EOCP
8613 #include <inttypes.h>
8614 int main() {
8615         static int32_t foo32 = 0x12345678;
8616 }
8617 EOCP
8618 set try
8619 if eval $compile; then
8620         echo "<inttypes.h> found." >&4
8621         val="$define"
8622 else
8623         echo "<inttypes.h> NOT found." >&4
8624         val="$undef"
8625 fi
8626 $rm -f try.c try
8627 set i_inttypes
8628 eval $setvar
8629
8630 : check for int64_t
8631 case "$use64bits" in
8632 "$define" )
8633         echo " "
8634         echo $n "Checking to see if your system supports int64_t...$c" >&4
8635         $cat >try.c <<EOCP
8636 #include <sys/types.h>
8637 #$i_inttypes I_INTTYPES
8638 #ifdef I_INTTYPES
8639 #include <inttypes.h>
8640 #endif
8641 int64_t foo() { int64_t x; x = 7; return x; }
8642 EOCP
8643         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8644                 val="$define"
8645                 echo " Yup, it does." >&4
8646         else
8647                 val="$undef"
8648                 echo " Nope, it doesn't." >&4
8649         fi
8650         $rm -f try.*
8651         ;;
8652 *)      val="$undef"
8653         ;;
8654 esac
8655 set d_int64t
8656 eval $setvar
8657
8658
8659 : Look for isascii
8660 echo " "
8661 $cat >isascii.c <<'EOCP'
8662 #include <stdio.h>
8663 #include <ctype.h>
8664 int main() {
8665         int c = 'A';
8666         if (isascii(c))
8667                 exit(0);
8668         else
8669                 exit(1);
8670 }
8671 EOCP
8672 set isascii
8673 if eval $compile; then
8674         echo "isascii() found." >&4
8675         val="$define"
8676 else
8677         echo "isascii() NOT found." >&4
8678         val="$undef"
8679 fi
8680 set d_isascii
8681 eval $setvar
8682 $rm -f isascii*
8683
8684 : see if killpg exists
8685 set killpg d_killpg
8686 eval $inlibc
8687
8688 : see if lchown exists
8689 echo " "
8690 $cat > try.c <<'EOCP'
8691 /* System header to define __stub macros and hopefully few prototypes,
8692     which can conflict with char lchown(); below.  */
8693 #include <assert.h>
8694 /* Override any gcc2 internal prototype to avoid an error.  */
8695 /* We use char because int might match the return type of a gcc2
8696    builtin and then its argument prototype would still apply.  */
8697 char lchown();
8698 int main() {
8699     /*  The GNU C library defines this for functions which it implements
8700         to always fail with ENOSYS.  Some functions are actually named
8701         something starting with __ and the normal name is an alias.  */
8702 #if defined (__stub_lchown) || defined (__stub___lchown)
8703 choke me
8704 #else
8705 lchown();
8706 #endif
8707 ; return 0; }
8708 EOCP
8709 set try
8710 if eval $compile; then
8711     $echo "lchown() found." >&4
8712     val="$define"
8713 else
8714     $echo "lchown() NOT found." >&4
8715     val="$undef"
8716 fi
8717 set d_lchown
8718 eval $setvar
8719
8720 : see if link exists
8721 set link d_link
8722 eval $inlibc
8723
8724 : see if localeconv exists
8725 set localeconv d_locconv
8726 eval $inlibc
8727
8728 : see if lockf exists
8729 set lockf d_lockf
8730 eval $inlibc
8731
8732 : check for length of double
8733 echo " "
8734 case "$doublesize" in
8735 '')
8736         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8737         $cat >try.c <<'EOCP'
8738 #include <stdio.h>
8739 int main()
8740 {
8741         printf("%d\n", sizeof(double));
8742 }
8743 EOCP
8744         set try
8745         if eval $compile_ok; then
8746                 doublesize=`./try`
8747                 $echo " $doublesize bytes." >&4
8748         else
8749                 dflt='8'
8750                 echo "(I can't seem to compile the test program.  Guessing...)"
8751                 rp="What is the size of a double precision number (in bytes)?"
8752                 . ./myread
8753                 doublesize="$ans"
8754         fi
8755         ;;
8756 esac
8757 $rm -f try.c try
8758
8759 : check for long doubles
8760 echo " "
8761 echo $n "Checking to see if your system supports long doubles...$c" >&4
8762 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8763 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8764         val="$define"
8765         echo " Yup, it does." >&4
8766 else
8767         val="$undef"
8768         echo " Nope, it doesn't." >&4
8769 fi
8770 $rm try.*
8771 set d_longdbl
8772 eval $setvar
8773
8774 : check for length of long double
8775 case "${d_longdbl}${longdblsize}" in
8776 $define)
8777         echo " "
8778         $echo $n "Checking to see how big your long doubles are...$c" >&4
8779         $cat >try.c <<'EOCP'
8780 #include <stdio.h>
8781 int main()
8782 {
8783         printf("%d\n", sizeof(long double));
8784 }
8785 EOCP
8786         set try
8787         if eval $compile; then
8788                 longdblsize=`./try`
8789                 $echo " $longdblsize bytes." >&4
8790         else
8791                 dflt='8'
8792                 echo " "
8793                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8794                 rp="What is the size of a long double (in bytes)?"
8795                 . ./myread
8796                 longdblsize="$ans"
8797         fi
8798         if $test "X$doublesize" = "X$longdblsize"; then
8799                 echo "(That isn't any different from an ordinary double.)"
8800         fi      
8801         ;;
8802 esac
8803 $rm -f try.c try
8804
8805 : check for long long
8806 echo " "
8807 echo $n "Checking to see if your system supports long long...$c" >&4
8808 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8809 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8810         val="$define"
8811         echo " Yup, it does." >&4
8812 else
8813         val="$undef"
8814         echo " Nope, it doesn't." >&4
8815 fi
8816 $rm try.*
8817 set d_longlong
8818 eval $setvar
8819
8820 : check for length of long long
8821 case "${d_longlong}${longlongsize}" in
8822 $define)
8823         echo " "
8824         $echo $n "Checking to see how big your long longs are...$c" >&4
8825         $cat >try.c <<'EOCP'
8826 #include <stdio.h>
8827 int main()
8828 {
8829         printf("%d\n", sizeof(long long));
8830 }
8831 EOCP
8832         set try
8833         if eval $compile_ok; then
8834                 longlongsize=`./try`
8835                 $echo " $longlongsize bytes." >&4
8836         else
8837                 dflt='8'
8838                 echo " "
8839                 echo "(I can't seem to compile the test program.  Guessing...)"
8840                 rp="What is the size of a long long (in bytes)?"
8841                 . ./myread
8842                 longlongsize="$ans"
8843         fi
8844         if $test "X$longsize" = "X$longlongsize"; then
8845                 echo "(That isn't any different from an ordinary long.)"
8846         fi      
8847         ;;
8848 esac
8849 $rm -f try.c try
8850
8851 : see if lstat exists
8852 set lstat d_lstat
8853 eval $inlibc
8854
8855 : see if madvise exists
8856 set madvise d_madvise
8857 eval $inlibc
8858
8859 : see if mblen exists
8860 set mblen d_mblen
8861 eval $inlibc
8862
8863 : see if mbstowcs exists
8864 set mbstowcs d_mbstowcs
8865 eval $inlibc
8866
8867 : see if mbtowc exists
8868 set mbtowc d_mbtowc
8869 eval $inlibc
8870
8871 : see if memchr exists
8872 set memchr d_memchr
8873 eval $inlibc
8874
8875 : see if memcmp exists
8876 set memcmp d_memcmp
8877 eval $inlibc
8878
8879 : see if memcpy exists
8880 set memcpy d_memcpy
8881 eval $inlibc
8882
8883 : see if memmove exists
8884 set memmove d_memmove
8885 eval $inlibc
8886
8887 : see if memset exists
8888 set memset d_memset
8889 eval $inlibc
8890
8891 : see if mkdir exists
8892 set mkdir d_mkdir
8893 eval $inlibc
8894
8895 : see if mkfifo exists
8896 set mkfifo d_mkfifo
8897 eval $inlibc
8898
8899 : see if mktime exists
8900 set mktime d_mktime
8901 eval $inlibc
8902
8903 : see if this is a sys/mman.h system
8904 set sys/mman.h i_sysmman
8905 eval $inhdr
8906
8907 : see if mmap exists
8908 set mmap d_mmap
8909 eval $inlibc
8910 : see what shmat returns
8911 : default to something harmless
8912 mmaptype='void *'
8913 case "$i_sysmman$d_mmap" in
8914 "$define$define")
8915         $cat >mmap.c <<'END'
8916 #include <sys/mman.h>
8917 void *mmap();
8918 END
8919         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8920                 mmaptype='void *'
8921         else
8922                 mmaptype='caddr_t'
8923         fi
8924         echo "and it returns ($mmaptype)." >&4
8925         ;;
8926 esac
8927
8928
8929
8930 : see if mprotect exists
8931 set mprotect d_mprotect
8932 eval $inlibc
8933
8934 : see if msgctl exists
8935 set msgctl d_msgctl
8936 eval $inlibc
8937
8938 : see if msgget exists
8939 set msgget d_msgget
8940 eval $inlibc
8941
8942 : see if msgsnd exists
8943 set msgsnd d_msgsnd
8944 eval $inlibc
8945
8946 : see if msgrcv exists
8947 set msgrcv d_msgrcv
8948 eval $inlibc
8949
8950 : see how much of the 'msg*(2)' library is present.
8951 h_msg=true
8952 echo " "
8953 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8954 *"$undef"*) h_msg=false;;
8955 esac
8956 case "$osname" in
8957 freebsd)
8958     case "`ipcs 2>&1`" in
8959     "SVID messages"*"not configured"*)
8960         echo "Your $osname does not have the msg*(2) configured." >&4
8961         h_msg=false
8962         val="$undef"
8963         set msgctl d_msgctl
8964         eval $setvar
8965         set msgget d_msgget
8966         eval $setvar
8967         set msgsnd d_msgsnd
8968         eval $setvar
8969         set msgrcv d_msgrcv
8970         eval $setvar
8971         ;;
8972     esac
8973     ;;
8974 esac
8975 : we could also check for sys/ipc.h ...
8976 if $h_msg && $test `./findhdr sys/msg.h`; then
8977         echo "You have the full msg*(2) library." >&4
8978         val="$define"
8979 else
8980         echo "You don't have the full msg*(2) library." >&4
8981         val="$undef"
8982 fi
8983 set d_msg
8984 eval $setvar
8985
8986 : see if msync exists
8987 set msync d_msync
8988 eval $inlibc
8989
8990 : see if munmap exists
8991 set munmap d_munmap
8992 eval $inlibc
8993
8994 : see if nice exists
8995 set nice d_nice
8996 eval $inlibc
8997
8998 : see if POSIX threads are available
8999 if test "X$usethreads" = "X$define"; then
9000         set pthread.h i_pthread
9001         eval $inhdr
9002 else
9003         i_pthread="$undef"
9004 fi
9005
9006
9007
9008 : how to create joinable pthreads
9009 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9010         echo " "
9011         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9012         $cat >try.c <<'EOCP'
9013 #include <pthread.h>
9014 int main() {
9015     int detachstate = JOINABLE;
9016 }
9017 EOCP
9018         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9019         if eval $compile; then
9020                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9021                 val="$undef" # Yes, undef.
9022                 set d_old_pthread_create_joinable
9023                 eval $setvar
9024                 val=""
9025                 set old_pthread_create_joinable
9026                 eval $setvar
9027         else
9028                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9029                 if eval $compile; then
9030                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9031                         val="$define"
9032                         set d_old_pthread_create_joinable
9033                         eval $setvar
9034                         val=PTHREAD_CREATE_UNDETACHED
9035                         set old_pthread_create_joinable
9036                         eval $setvar
9037                 else            
9038                         set try -DJOINABLE=__UNDETACHED
9039                         if eval $compile; then
9040                                 echo "You seem to use __UNDETACHED." >&4
9041                                 val="$define"
9042                                 set d_old_pthread_create_joinable
9043                                 eval $setvar
9044                                 val=__UNDETACHED
9045                                 set old_pthread_create_joinable
9046                                 eval $setvar
9047                         else
9048                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9049                                 val="$define"
9050                                 set d_old_pthread_create_joinable
9051                                 eval $setvar
9052                                 val=0
9053                                 set old_pthread_create_joinable
9054                                 eval $setvar
9055                         fi
9056                 fi
9057         fi
9058         $rm -f try try.*
9059 else
9060     d_old_pthread_create_joinable="$undef"
9061     old_pthread_create_joinable=""
9062 fi
9063
9064 : see if pause exists
9065 set pause d_pause
9066 eval $inlibc
9067
9068 : see if pipe exists
9069 set pipe d_pipe
9070 eval $inlibc
9071
9072 : see if poll exists
9073 set poll d_poll
9074 eval $inlibc
9075
9076
9077 : see whether the various POSIXish _yields exist
9078 $cat >try.c <<EOP
9079 #include <pthread.h>
9080 #include <stdio.h>
9081 int main() {
9082 #ifdef SCHED_YIELD
9083         sched_yield();
9084 #else
9085 #ifdef PTHREAD_YIELD
9086         pthread_yield();
9087 #else
9088 #ifdef PTHREAD_YIELD_NULL
9089         pthread_yield(NULL);
9090 #endif
9091 #endif
9092 #endif
9093 }
9094 EOP
9095 : see if sched_yield exists
9096 set try -DSCHED_YIELD
9097 if eval $compile; then
9098     val="$define"
9099     sched_yield='sched_yield()'
9100 else
9101     val="$undef"
9102 fi
9103 case "$usethreads" in
9104 $define)
9105         case "$val" in
9106         $define) echo 'sched_yield() found.' >&4        ;;
9107         *)       echo 'sched_yield() NOT found.' >&4    ;;
9108         esac
9109 esac
9110 set d_sched_yield
9111 eval $setvar
9112
9113 : see if pthread_yield exists
9114 set try -DPTHREAD_YIELD
9115 if eval $compile; then
9116     val="$define"
9117     case "$sched_yield" in
9118     '') sched_yield='pthread_yield()' ;;
9119     esac
9120 else
9121     set try -DPTHREAD_YIELD_NULL
9122     if eval $compile; then
9123         val="$define"
9124         case "$sched_yield" in
9125         '') sched_yield='pthread_yield(NULL)' ;;
9126         esac
9127     else
9128         val="$undef"
9129     fi
9130 fi
9131 case "$usethreads" in
9132 $define)
9133         case "$val" in
9134         $define) echo 'pthread_yield() found.' >&4      ;;
9135         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9136         esac
9137         ;;
9138 esac
9139 set d_pthread_yield
9140 eval $setvar
9141
9142 case "$sched_yield" in
9143 '') sched_yield=undef ;;
9144 esac
9145
9146 $rm -f try try.*
9147
9148 : see if this is a pwd.h system
9149 set pwd.h i_pwd
9150 eval $inhdr
9151
9152 case "$i_pwd" in
9153 $define)
9154         xxx=`./findhdr pwd.h`
9155         $cppstdin $cppflags $cppminus < $xxx >$$.h
9156
9157         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9158                 val="$define"
9159         else
9160                 val="$undef"
9161         fi
9162         set d_pwquota
9163         eval $setvar
9164
9165         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9166                 val="$define"
9167         else
9168                 val="$undef"
9169         fi
9170         set d_pwage
9171         eval $setvar
9172
9173         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9174                 val="$define"
9175         else
9176                 val="$undef"
9177         fi
9178         set d_pwchange
9179         eval $setvar
9180
9181         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9182                 val="$define"
9183         else
9184                 val="$undef"
9185         fi
9186         set d_pwclass
9187         eval $setvar
9188
9189         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9190                 val="$define"
9191         else
9192                 val="$undef"
9193         fi
9194         set d_pwexpire
9195         eval $setvar
9196
9197         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9198                 val="$define"
9199         else
9200                 val="$undef"
9201         fi
9202         set d_pwcomment
9203         eval $setvar
9204
9205         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9206                 val="$define"
9207         else
9208                 val="$undef"
9209         fi
9210         set d_pwgecos
9211         eval $setvar
9212
9213         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9214                 val="$define"
9215         else
9216                 val="$undef"
9217         fi
9218         set d_pwpasswd
9219         eval $setvar
9220
9221         $rm -f $$.h
9222         ;;
9223 *)
9224         val="$undef"; 
9225         set d_pwquota; eval $setvar
9226         set d_pwage; eval $setvar
9227         set d_pwchange; eval $setvar
9228         set d_pwclass; eval $setvar
9229         set d_pwexpire; eval $setvar
9230         set d_pwcomment; eval $setvar
9231         set d_pwgecos; eval $setvar
9232         set d_pwpasswd; eval $setvar
9233         ;;
9234 esac
9235
9236 : see if readdir and friends exist
9237 set readdir d_readdir
9238 eval $inlibc
9239 set seekdir d_seekdir
9240 eval $inlibc
9241 set telldir d_telldir
9242 eval $inlibc
9243 set rewinddir d_rewinddir
9244 eval $inlibc
9245
9246 : see if readlink exists
9247 set readlink d_readlink
9248 eval $inlibc
9249
9250 : see if readv exists
9251 set readv d_readv
9252 eval $inlibc
9253
9254 : see if rename exists
9255 set rename d_rename
9256 eval $inlibc
9257
9258 : see if rmdir exists
9259 set rmdir d_rmdir
9260 eval $inlibc
9261
9262 : see if memory.h is available.
9263 val=''
9264 set memory.h val
9265 eval $inhdr
9266
9267 : See if it conflicts with string.h
9268 case "$val" in
9269 $define)
9270         case "$strings" in
9271         '') ;;
9272         *)
9273                 $cppstdin $cppflags $cppminus < $strings > mem.h
9274                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9275                         echo " "
9276                         echo "We won't be including <memory.h>."
9277                         val="$undef"
9278                 fi
9279                 $rm -f mem.h
9280                 ;;
9281         esac
9282 esac
9283 set i_memory
9284 eval $setvar
9285
9286 : can bcopy handle overlapping blocks?
9287 val="$undef"
9288 case "$d_bcopy" in
9289 "$define")
9290         echo " "
9291         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9292         $cat >try.c <<EOCP
9293 #$i_memory I_MEMORY
9294 #$i_stdlib I_STDLIB
9295 #$i_string I_STRING
9296 #$i_unistd I_UNISTD
9297 EOCP
9298         $cat >>try.c <<'EOCP'
9299 #include <stdio.h>
9300 #ifdef I_MEMORY
9301 #  include <memory.h>
9302 #endif
9303 #ifdef I_STDLIB
9304 #  include <stdlib.h>
9305 #endif
9306 #ifdef I_STRING
9307 #  include <string.h>
9308 #else
9309 #  include <strings.h>
9310 #endif
9311 #ifdef I_UNISTD
9312 #  include <unistd.h>  /* Needed for NetBSD */
9313 #endif
9314 int main()
9315 {
9316 char buf[128], abc[128];
9317 char *b;
9318 int len;
9319 int off;
9320 int align;
9321
9322 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9323
9324 for (align = 7; align >= 0; align--) {
9325         for (len = 36; len; len--) {
9326                 b = buf+align;
9327                 bcopy(abc, b, len);
9328                 for (off = 1; off <= len; off++) {
9329                         bcopy(b, b+off, len);
9330                         bcopy(b+off, b, len);
9331                         if (bcmp(b, abc, len))
9332                                 exit(1);
9333                 }
9334         }
9335 }
9336 exit(0);
9337 }
9338 EOCP
9339         set try
9340         if eval $compile_ok; then
9341                 if ./try 2>/dev/null; then
9342                         echo "Yes, it can."
9343                         val="$define"
9344                 else
9345                         echo "It can't, sorry."
9346                         case "$d_memmove" in
9347                         "$define") echo "But that's Ok since you have memmove()." ;;
9348                         esac
9349                 fi
9350         else
9351                 echo "(I can't compile the test program, so we'll assume not...)"
9352                 case "$d_memmove" in
9353                 "$define") echo "But that's Ok since you have memmove()." ;;
9354                 esac
9355         fi
9356         ;;
9357 esac
9358 $rm -f try.* try core
9359 set d_safebcpy
9360 eval $setvar
9361
9362 : can memcpy handle overlapping blocks?
9363 val="$undef"
9364 case "$d_memcpy" in
9365 "$define")
9366         echo " "
9367         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9368         $cat >try.c <<EOCP
9369 #$i_memory I_MEMORY
9370 #$i_stdlib I_STDLIB
9371 #$i_string I_STRING
9372 #$i_unistd I_UNISTD
9373 EOCP
9374         $cat >>try.c <<'EOCP'
9375 #include <stdio.h>
9376 #ifdef I_MEMORY
9377 #  include <memory.h>
9378 #endif
9379 #ifdef I_STDLIB
9380 #  include <stdlib.h>
9381 #endif
9382 #ifdef I_STRING
9383 #  include <string.h>
9384 #else
9385 #  include <strings.h>
9386 #endif
9387 #ifdef I_UNISTD
9388 #  include <unistd.h>  /* Needed for NetBSD */
9389 #endif
9390 int main()
9391 {
9392 char buf[128], abc[128];
9393 char *b;
9394 int len;
9395 int off;
9396 int align;
9397
9398 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9399    try to store the string in read-only memory. */
9400 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9401
9402 for (align = 7; align >= 0; align--) {
9403         for (len = 36; len; len--) {
9404                 b = buf+align;
9405                 memcpy(b, abc, len);
9406                 for (off = 1; off <= len; off++) {
9407                         memcpy(b+off, b, len);
9408                         memcpy(b, b+off, len);
9409                         if (memcmp(b, abc, len))
9410                                 exit(1);
9411                 }
9412         }
9413 }
9414 exit(0);
9415 }
9416 EOCP
9417         set try
9418         if eval $compile_ok; then
9419                 if ./try 2>/dev/null; then
9420                         echo "Yes, it can."
9421                         val="$define"
9422                 else
9423                         echo "It can't, sorry."
9424                         case "$d_memmove" in
9425                         "$define") echo "But that's Ok since you have memmove()." ;;
9426                         esac
9427                 fi
9428         else
9429                 echo "(I can't compile the test program, so we'll assume not...)"
9430                 case "$d_memmove" in
9431                 "$define") echo "But that's Ok since you have memmove()." ;;
9432                 esac
9433         fi
9434         ;;
9435 esac
9436 $rm -f try.* try core
9437 set d_safemcpy
9438 eval $setvar
9439
9440 : can memcmp be trusted to compare relative magnitude?
9441 val="$undef"
9442 case "$d_memcmp" in
9443 "$define")
9444         echo " "
9445         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9446         $cat >try.c <<EOCP
9447 #$i_memory I_MEMORY
9448 #$i_stdlib I_STDLIB
9449 #$i_string I_STRING
9450 #$i_unistd I_UNISTD
9451 EOCP
9452         $cat >>try.c <<'EOCP'
9453 #include <stdio.h>
9454 #ifdef I_MEMORY
9455 #  include <memory.h>
9456 #endif
9457 #ifdef I_STDLIB
9458 #  include <stdlib.h>
9459 #endif
9460 #ifdef I_STRING
9461 #  include <string.h>
9462 #else
9463 #  include <strings.h>
9464 #endif
9465 #ifdef I_UNISTD
9466 #  include <unistd.h>  /* Needed for NetBSD */
9467 #endif
9468 int main()
9469 {
9470 char a = -1;
9471 char b = 0;
9472 if ((a < b) && memcmp(&a, &b, 1) < 0)
9473         exit(1);
9474 exit(0);
9475 }
9476 EOCP
9477         set try
9478         if eval $compile_ok; then
9479                 if ./try 2>/dev/null; then
9480                         echo "Yes, it can."
9481                         val="$define"
9482                 else
9483                         echo "No, it can't (it uses signed chars)."
9484                 fi
9485         else
9486                 echo "(I can't compile the test program, so we'll assume not...)"
9487         fi
9488         ;;
9489 esac
9490 $rm -f try.* try core
9491 set d_sanemcmp
9492 eval $setvar
9493
9494 : see if select exists
9495 set select d_select
9496 eval $inlibc
9497
9498 : see if semctl exists
9499 set semctl d_semctl
9500 eval $inlibc
9501
9502 : see if semget exists
9503 set semget d_semget
9504 eval $inlibc
9505
9506 : see if semop exists
9507 set semop d_semop
9508 eval $inlibc
9509
9510 : see how much of the 'sem*(2)' library is present.
9511 h_sem=true
9512 echo " "
9513 case "$d_semctl$d_semget$d_semop" in
9514 *"$undef"*) h_sem=false;;
9515 esac
9516 case "$osname" in
9517 freebsd)
9518     case "`ipcs 2>&1`" in
9519     "SVID messages"*"not configured"*)
9520         echo "Your $osname does not have the sem*(2) configured." >&4
9521         h_sem=false
9522         val="$undef"
9523         set semctl d_semctl
9524         eval $setvar
9525         set semget d_semget
9526         eval $setvar
9527         set semop d_semop
9528         eval $setvar
9529         ;;
9530     esac
9531     ;;
9532 esac
9533 : we could also check for sys/ipc.h ...
9534 if $h_sem && $test `./findhdr sys/sem.h`; then
9535         echo "You have the full sem*(2) library." >&4
9536         val="$define"
9537 else
9538         echo "You don't have the full sem*(2) library." >&4
9539         val="$undef"
9540 fi
9541 set d_sem
9542 eval $setvar
9543
9544 : see whether sys/sem.h defines union semun
9545 echo " "
9546 $cat > try.c <<'END'
9547 #include <sys/types.h>
9548 #include <sys/ipc.h>
9549 #include <sys/sem.h>
9550 int main () { union semun semun; semun.buf = 0; }
9551 END
9552 set try
9553 if eval $compile; then
9554     echo "You have union semun in <sys/sem.h>." >&4
9555     val="$define"
9556 else
9557     echo "You do not have union semun in <sys/sem.h>." >&4
9558     val="$undef"
9559 fi
9560 $rm -f try try.c try.h
9561 set d_union_semun
9562 eval $setvar
9563
9564 : see how to do semctl IPC_STAT
9565 case "$d_sem" in
9566 $define)
9567     : see whether semctl IPC_STAT can use union semun
9568     echo " "
9569     $cat > try.h <<END
9570 #ifndef S_IRUSR
9571 #   ifdef S_IREAD
9572 #       define S_IRUSR S_IREAD
9573 #       define S_IWUSR S_IWRITE
9574 #       define S_IXUSR S_IEXEC
9575 #   else
9576 #       define S_IRUSR 0400
9577 #       define S_IWUSR 0200
9578 #       define S_IXUSR 0100
9579 #   endif
9580 #   define S_IRGRP (S_IRUSR>>3)
9581 #   define S_IWGRP (S_IWUSR>>3)
9582 #   define S_IXGRP (S_IXUSR>>3)
9583 #   define S_IROTH (S_IRUSR>>6)
9584 #   define S_IWOTH (S_IWUSR>>6)
9585 #   define S_IXOTH (S_IXUSR>>6)
9586 #endif
9587 #ifndef S_IRWXU
9588 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9589 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9590 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9591 #endif
9592 END
9593
9594     $cat > try.c <<END
9595 #include <sys/types.h>
9596 #include <sys/ipc.h>
9597 #include <sys/sem.h>
9598 #include <sys/stat.h>
9599 #include <stdio.h>
9600 #include <errno.h>
9601 #include "try.h"
9602 #ifndef errno
9603 extern int errno;
9604 #endif
9605 #$d_union_semun HAS_UNION_SEMUN
9606 int main() {
9607     union semun
9608 #ifndef HAS_UNION_SEMUN
9609     {
9610         int val;
9611         struct semid_ds *buf;
9612         unsigned short *array;
9613     }
9614 #endif
9615     arg;
9616     int sem, st;
9617
9618 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9619     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9620     if (sem > -1) {
9621         struct semid_ds argbuf;
9622         arg.buf = &argbuf;
9623 #       ifdef IPC_STAT
9624         st = semctl(sem, 0, IPC_STAT, arg);
9625         if (st == 0)
9626             printf("semun\n");
9627         else
9628 #       endif /* IPC_STAT */
9629             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9630 #       ifdef IPC_RMID
9631         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9632 #       endif /* IPC_RMID */
9633             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9634     } else
9635 #endif /* IPC_PRIVATE && ... */
9636         printf("semget failed: errno = %d\n", errno);
9637   return 0;
9638 }
9639 END
9640     val="$undef"
9641     set try
9642     if eval $compile; then
9643         xxx=`./try`
9644         case "$xxx" in
9645         semun) val="$define" ;;
9646         esac
9647     fi
9648     $rm -f try try.c
9649     set d_semctl_semun
9650     eval $setvar
9651     case "$d_semctl_semun" in
9652     $define)
9653         echo "You can use union semun for semctl IPC_STAT." >&4
9654         also='also'
9655         ;;
9656     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9657         also=''
9658         ;;
9659     esac
9660
9661     : see whether semctl IPC_STAT can use struct semid_ds pointer
9662     $cat > try.c <<'END'
9663 #include <sys/types.h>
9664 #include <sys/ipc.h>
9665 #include <sys/sem.h>
9666 #include <sys/stat.h>
9667 #include "try.h"
9668 #include <stdio.h>
9669 #include <errno.h>
9670 #ifndef errno
9671 extern int errno;
9672 #endif
9673 int main() {
9674     struct semid_ds arg;
9675     int sem, st;
9676
9677 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9678     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9679     if (sem > -1) {
9680 #       ifdef IPC_STAT
9681         st = semctl(sem, 0, IPC_STAT, &arg);
9682         if (st == 0)
9683             printf("semid_ds\n");
9684         else
9685 #       endif /* IPC_STAT */
9686             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9687 #       ifdef IPC_RMID
9688         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9689 #       endif /* IPC_RMID */
9690             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9691     } else
9692 #endif /* IPC_PRIVATE && ... */
9693         printf("semget failed: errno = %d\n", errno);
9694
9695     return 0;
9696 }
9697 END
9698     val="$undef"
9699     set try
9700     if eval $compile; then
9701         xxx=`./try`
9702         case "$xxx" in
9703         semid_ds) val="$define" ;;
9704         esac
9705     fi
9706     $rm -f try try.c
9707     set d_semctl_semid_ds
9708     eval $setvar
9709     case "$d_semctl_semid_ds" in
9710     $define)
9711         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9712         ;;
9713     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9714         ;;
9715     esac
9716     $rm -f try.h
9717     ;;
9718 *)  val="$undef"
9719
9720     # We do not have the full sem*(2) library, so assume we can not
9721     # use either.
9722
9723     set d_semctl_semun
9724     eval $setvar
9725
9726     set d_semctl_semid_ds
9727     eval $setvar
9728     ;;
9729 esac
9730
9731 : see if setegid exists
9732 set setegid d_setegid
9733 eval $inlibc
9734
9735 : see if seteuid exists
9736 set seteuid d_seteuid
9737 eval $inlibc
9738
9739 : see if setgrent exists
9740 set setgrent d_setgrent
9741 eval $inlibc
9742
9743 : see if sethostent exists
9744 set sethostent d_sethent
9745 eval $inlibc
9746
9747 : see if setlinebuf exists
9748 set setlinebuf d_setlinebuf
9749 eval $inlibc
9750
9751 : see if setlocale exists
9752 set setlocale d_setlocale
9753 eval $inlibc
9754
9755 : see if setnetent exists
9756 set setnetent d_setnent
9757 eval $inlibc
9758
9759 : see if setprotoent exists
9760 set setprotoent d_setpent
9761 eval $inlibc
9762
9763 : see if setpgid exists
9764 set setpgid d_setpgid
9765 eval $inlibc
9766
9767 : see if setpgrp2 exists
9768 set setpgrp2 d_setpgrp2
9769 eval $inlibc
9770
9771 : see if setpriority exists
9772 set setpriority d_setprior
9773 eval $inlibc
9774
9775 : see if setpwent exists
9776 set setpwent d_setpwent
9777 eval $inlibc
9778
9779 : see if setregid exists
9780 set setregid d_setregid
9781 eval $inlibc
9782 set setresgid d_setresgid
9783 eval $inlibc
9784
9785 : see if setreuid exists
9786 set setreuid d_setreuid
9787 eval $inlibc
9788 set setresuid d_setresuid
9789 eval $inlibc
9790
9791 : see if setrgid exists
9792 set setrgid d_setrgid
9793 eval $inlibc
9794
9795 : see if setruid exists
9796 set setruid d_setruid
9797 eval $inlibc
9798
9799 : see if setservent exists
9800 set setservent d_setsent
9801 eval $inlibc
9802
9803 : see if setsid exists
9804 set setsid d_setsid
9805 eval $inlibc
9806
9807 : see if setspent exists
9808 set setspent d_setspent
9809 eval $inlibc
9810
9811 : see if setvbuf exists
9812 set setvbuf d_setvbuf
9813 eval $inlibc
9814
9815 : see if sfio.h is available
9816 set sfio.h i_sfio
9817 eval $inhdr
9818
9819
9820 : see if sfio library is available
9821 case "$i_sfio" in
9822 $define)
9823         val=''
9824         set sfreserve val
9825         eval $inlibc
9826         ;;
9827 *)
9828         val="$undef"
9829         ;;
9830 esac
9831 : Ok, but do we want to use it.
9832 case "$val" in
9833 $define)
9834         case "$usesfio" in
9835         true|$define|[yY]*) dflt='y';;
9836         *) dflt='n';;
9837         esac
9838         echo "$package can use the sfio library, but it is experimental."
9839         rp="You seem to have sfio available, do you want to try using it?"
9840         . ./myread
9841         case "$ans" in
9842         y|Y) ;;
9843         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9844                 val="$undef"
9845                 : Remove sfio from list of libraries to use
9846                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9847                 shift
9848                 libs="$*"
9849                 echo "libs = $libs" >&4
9850                 ;;
9851         esac
9852         ;;
9853 *)      case "$usesfio" in
9854         true|$define|[yY]*)
9855                 echo "Sorry, cannot find sfio on this machine" >&4
9856                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9857                 ;;
9858         esac
9859         ;;
9860 esac
9861 set d_sfio
9862 eval $setvar
9863 case "$d_sfio" in
9864 $define) usesfio='true';;
9865 *) usesfio='false';;
9866 esac
9867
9868 : see if shmctl exists
9869 set shmctl d_shmctl
9870 eval $inlibc
9871
9872 : see if shmget exists
9873 set shmget d_shmget
9874 eval $inlibc
9875
9876 : see if shmat exists
9877 set shmat d_shmat
9878 eval $inlibc
9879 : see what shmat returns
9880 case "$d_shmat" in
9881 "$define")
9882         $cat >shmat.c <<'END'
9883 #include <sys/shm.h>
9884 void *shmat();
9885 END
9886         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9887                 shmattype='void *'
9888         else
9889                 shmattype='char *'
9890         fi
9891         echo "and it returns ($shmattype)." >&4
9892         : see if a prototype for shmat is available
9893         xxx=`./findhdr sys/shm.h`
9894         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9895         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9896                 val="$define"
9897         else
9898                 val="$undef"
9899         fi
9900         $rm -f shmat.[co]
9901         ;;
9902 *)
9903         val="$undef"
9904         ;;
9905 esac
9906 set d_shmatprototype
9907 eval $setvar
9908
9909 : see if shmdt exists
9910 set shmdt d_shmdt
9911 eval $inlibc
9912
9913 : see how much of the 'shm*(2)' library is present.
9914 h_shm=true
9915 echo " "
9916 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9917 *"$undef"*) h_shm=false;;
9918 esac
9919 case "$osname" in
9920 freebsd)
9921     case "`ipcs 2>&1`" in
9922     "SVID shared memory"*"not configured"*)
9923         echo "Your $osname does not have the shm*(2) configured." >&4
9924         h_shm=false
9925         val="$undef"
9926         set shmctl d_shmctl
9927         evat $setvar
9928         set shmget d_shmget
9929         evat $setvar
9930         set shmat d_shmat
9931         evat $setvar
9932         set shmdt d_shmdt
9933         evat $setvar
9934         ;;
9935     esac
9936     ;;
9937 esac
9938 : we could also check for sys/ipc.h ...
9939 if $h_shm && $test `./findhdr sys/shm.h`; then
9940         echo "You have the full shm*(2) library." >&4
9941         val="$define"
9942 else
9943         echo "You don't have the full shm*(2) library." >&4
9944         val="$undef"
9945 fi
9946 set d_shm
9947 eval $setvar
9948
9949 echo " "
9950 : see if we have sigaction
9951 if set sigaction val -f d_sigaction; eval $csym; $val; then
9952         echo 'sigaction() found.' >&4
9953         $cat > try.c <<'EOP'
9954 #include <stdio.h>
9955 #include <sys/types.h>
9956 #include <signal.h>
9957 int main()
9958 {
9959     struct sigaction act, oact;
9960 }
9961 EOP
9962         set try
9963         if eval $compile_ok; then
9964                 val="$define"
9965         else
9966                 echo "But you don't seem to have a useable struct sigaction." >&4
9967                 val="$undef"
9968         fi
9969 else
9970         echo 'sigaction NOT found.' >&4
9971         val="$undef"
9972 fi
9973 set d_sigaction; eval $setvar
9974 $rm -f try try$_o try.c
9975
9976 : see if sigsetjmp exists
9977 echo " "
9978 case "$d_sigsetjmp" in
9979 '')
9980         $cat >try.c <<'EOP'
9981 #include <setjmp.h>
9982 sigjmp_buf env;
9983 int set = 1;
9984 int main()
9985 {
9986         if (sigsetjmp(env,1))
9987                 exit(set);
9988         set = 0;
9989         siglongjmp(env, 1);
9990         exit(1);
9991 }
9992 EOP
9993         set try
9994         if eval $compile; then
9995                 if ./try >/dev/null 2>&1; then
9996                         echo "POSIX sigsetjmp found." >&4
9997                         val="$define"
9998                 else
9999                         $cat >&4 <<EOM
10000 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10001 I'll ignore them.
10002 EOM
10003                         val="$undef"
10004                 fi
10005         else
10006                 echo "sigsetjmp not found." >&4
10007                 val="$undef"
10008         fi
10009         ;;
10010 *) val="$d_sigsetjmp"
10011         case "$d_sigsetjmp" in
10012         $define) echo "POSIX sigsetjmp found." >&4;;
10013         $undef) echo "sigsetjmp not found." >&4;;
10014         esac
10015         ;;
10016 esac
10017 set d_sigsetjmp
10018 eval $setvar
10019 $rm -f try.c try
10020
10021 : see if stat knows about block sizes
10022 echo " "
10023 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10024 eval $hasfield
10025
10026 : see if _ptr and _cnt from stdio act std
10027 echo " "
10028 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10029         echo "(Looks like you have stdio.h from Linux.)"
10030         case "$stdio_ptr" in
10031         '') stdio_ptr='((fp)->_IO_read_ptr)'
10032                 ptr_lval=$define
10033                 ;;
10034         *)      ptr_lval=$d_stdio_ptr_lval;;
10035         esac
10036         case "$stdio_cnt" in
10037         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10038                 cnt_lval=$undef
10039                 ;;
10040         *)      cnt_lval=$d_stdio_cnt_lval;;
10041         esac
10042         case "$stdio_base" in
10043         '') stdio_base='((fp)->_IO_read_base)';;
10044         esac
10045         case "$stdio_bufsiz" in
10046         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10047         esac
10048 else
10049         case "$stdio_ptr" in
10050         '') stdio_ptr='((fp)->_ptr)'
10051                 ptr_lval=$define
10052                 ;;
10053         *)      ptr_lval=$d_stdio_ptr_lval;;
10054         esac
10055         case "$stdio_cnt" in
10056         '') stdio_cnt='((fp)->_cnt)'
10057                 cnt_lval=$define
10058                 ;;
10059         *)      cnt_lval=$d_stdio_cnt_lval;;
10060         esac
10061         case "$stdio_base" in
10062         '') stdio_base='((fp)->_base)';;
10063         esac
10064         case "$stdio_bufsiz" in
10065         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10066         esac
10067 fi
10068 : test whether _ptr and _cnt really work
10069 echo "Checking how std your stdio is..." >&4
10070 $cat >try.c <<EOP
10071 #include <stdio.h>
10072 #define FILE_ptr(fp)    $stdio_ptr
10073 #define FILE_cnt(fp)    $stdio_cnt
10074 int main() {
10075         FILE *fp = fopen("try.c", "r");
10076         char c = getc(fp);
10077         if (
10078                 18 <= FILE_cnt(fp) &&
10079                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10080         )
10081                 exit(0);
10082         exit(1);
10083 }
10084 EOP
10085 val="$undef"
10086 set try
10087 if eval $compile; then
10088         if ./try; then
10089                 echo "Your stdio acts pretty std."
10090                 val="$define"
10091         else
10092                 echo "Your stdio isn't very std."
10093         fi
10094 else
10095         echo "Your stdio doesn't appear very std."
10096 fi
10097 $rm -f try.c try
10098 set d_stdstdio
10099 eval $setvar
10100
10101 : Can _ptr be used as an lvalue?
10102 case "$d_stdstdio$ptr_lval" in
10103 $define$define) val=$define ;;
10104 *) val=$undef ;;
10105 esac
10106 set d_stdio_ptr_lval
10107 eval $setvar
10108
10109 : Can _cnt be used as an lvalue?
10110 case "$d_stdstdio$cnt_lval" in
10111 $define$define) val=$define ;;
10112 *) val=$undef ;;
10113 esac
10114 set d_stdio_cnt_lval
10115 eval $setvar
10116
10117 : see if _base is also standard
10118 val="$undef"
10119 case "$d_stdstdio" in
10120 $define)
10121         $cat >try.c <<EOP
10122 #include <stdio.h>
10123 #define FILE_base(fp)   $stdio_base
10124 #define FILE_bufsiz(fp) $stdio_bufsiz
10125 int main() {
10126         FILE *fp = fopen("try.c", "r");
10127         char c = getc(fp);
10128         if (
10129                 19 <= FILE_bufsiz(fp) &&
10130                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10131         )
10132                 exit(0);
10133         exit(1);
10134 }
10135 EOP
10136         set try
10137         if eval $compile; then
10138                 if ./try; then
10139                         echo "And its _base field acts std."
10140                         val="$define"
10141                 else
10142                         echo "But its _base field isn't std."
10143                 fi
10144         else
10145                 echo "However, it seems to be lacking the _base field."
10146         fi
10147         $rm -f try.c try
10148         ;;
10149 esac
10150 set d_stdiobase
10151 eval $setvar
10152
10153 $cat >&4 <<EOM
10154 Checking how to access stdio streams by file descriptor number...
10155 EOM
10156 case "$stdio_stream_array" in
10157 '')     $cat >try.c <<EOCP
10158 #include <stdio.h>
10159 int main() {
10160   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10161     printf("yes\n");
10162 }
10163 EOCP
10164         for s in _iob __iob __sF
10165         do
10166                 set try -DSTDIO_STREAM_ARRAY=$s
10167                 if eval $compile; then
10168                         case "`./try$exe_ext`" in
10169                         yes)    stdio_stream_array=$s; break ;;
10170                         esac
10171                 fi
10172         done
10173         $rm -f try.* try$exe_ext
10174 esac
10175 case "$stdio_stream_array" in
10176 '')     $cat >&4 <<EOM
10177 I can't figure out how to access stdio streams by file descriptor number.
10178 EOM
10179         d_stdio_stream_array="$undef"
10180         ;;
10181 *)      $cat >&4 <<EOM
10182 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10183 EOM
10184         d_stdio_stream_array="$define"
10185         ;;
10186 esac
10187
10188 : see if strcoll exists
10189 set strcoll d_strcoll
10190 eval $inlibc
10191
10192 : check for structure copying
10193 echo " "
10194 echo "Checking to see if your C compiler can copy structs..." >&4
10195 $cat >try.c <<'EOCP'
10196 int main()
10197 {
10198         struct blurfl {
10199                 int dyick;
10200         } foo, bar;
10201
10202         foo = bar;
10203 }
10204 EOCP
10205 if $cc -c try.c >/dev/null 2>&1 ; then
10206         val="$define"
10207         echo "Yup, it can."
10208 else
10209         val="$undef"
10210         echo "Nope, it can't."
10211 fi
10212 set d_strctcpy
10213 eval $setvar
10214 $rm -f try.*
10215
10216 : see if strerror and/or sys_errlist[] exist
10217 echo " "
10218 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10219     if set strerror val -f d_strerror; eval $csym; $val; then
10220                 echo 'strerror() found.' >&4
10221                 d_strerror="$define"
10222                 d_strerrm='strerror(e)'
10223                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10224                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10225                         d_syserrlst="$define"
10226                 else
10227                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10228                         d_syserrlst="$undef"
10229                 fi
10230     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10231                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10232                 echo 'strerror() found in string header.' >&4
10233                 d_strerror="$define"
10234                 d_strerrm='strerror(e)'
10235                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10236                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10237                                 d_syserrlst="$define"
10238                 else
10239                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10240                         d_syserrlst="$undef"
10241                 fi
10242     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10243                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10244                 d_strerror="$undef"
10245                 d_syserrlst="$define"
10246                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10247     else
10248                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10249                 d_strerror="$undef"
10250                 d_syserrlst="$undef"
10251                 d_strerrm='"unknown"'
10252     fi
10253 fi
10254
10255 : see if strtod exists
10256 set strtod d_strtod
10257 eval $inlibc
10258
10259 : see if strtol exists
10260 set strtol d_strtol
10261 eval $inlibc
10262
10263 : see if strtoul exists
10264 set strtoul d_strtoul
10265 eval $inlibc
10266
10267 : see if strxfrm exists
10268 set strxfrm d_strxfrm
10269 eval $inlibc
10270
10271 : see if symlink exists
10272 set symlink d_symlink
10273 eval $inlibc
10274
10275 : see if syscall exists
10276 set syscall d_syscall
10277 eval $inlibc
10278
10279 : see if sysconf exists
10280 set sysconf d_sysconf
10281 eval $inlibc
10282
10283 : see if system exists
10284 set system d_system
10285 eval $inlibc
10286
10287 : see if tcgetpgrp exists
10288 set tcgetpgrp d_tcgetpgrp
10289 eval $inlibc
10290
10291 : see if tcsetpgrp exists
10292 set tcsetpgrp d_tcsetpgrp
10293 eval $inlibc
10294
10295 : see if sys/types.h has to be included
10296 set sys/types.h i_systypes
10297 eval $inhdr
10298
10299 : see if prototype for telldir is available
10300 echo " "
10301 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10302 eval $hasproto
10303
10304 : define an is-a-typedef? function
10305 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10306 case "$inclist" in
10307 "") inclist="sys/types.h";;
10308 esac;
10309 eval "varval=\$$var";
10310 case "$varval" in
10311 "")
10312         $rm -f temp.c;
10313         for inc in $inclist; do
10314                 echo "#include <$inc>" >>temp.c;
10315         done;
10316         echo "#ifdef $type" >> temp.c;
10317         echo "printf(\"We have $type\");" >> temp.c;
10318         echo "#endif" >> temp.c;
10319         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10320         if $contains $type temp.E >/dev/null 2>&1; then
10321                 eval "$var=\$type";
10322         else
10323                 eval "$var=\$def";
10324         fi;
10325         $rm -f temp.?;;
10326 *) eval "$var=\$varval";;
10327 esac'
10328
10329 : define an is-a-typedef? function that prompts if the type is not available.
10330 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10331 case "$inclist" in
10332 "") inclist="sys/types.h";;
10333 esac;
10334 eval "varval=\$$var";
10335 case "$varval" in
10336 "")
10337         $rm -f temp.c;
10338         for inc in $inclist; do
10339                 echo "#include <$inc>" >>temp.c;
10340         done;
10341         echo "#ifdef $type" >> temp.c;
10342         echo "printf(\"We have $type\");" >> temp.c;
10343         echo "#endif" >> temp.c;
10344         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10345         echo " " ;
10346         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10347         if $contains $type temp.E >/dev/null 2>&1; then
10348                 echo "$type found." >&4;
10349                 eval "$var=\$type";
10350         else
10351                 echo "$type NOT found." >&4;
10352                 dflt="$def";
10353                 . ./myread ;
10354                 eval "$var=\$ans";
10355         fi;
10356         $rm -f temp.?;;
10357 *) eval "$var=\$varval";;
10358 esac'
10359
10360 : see if this is a sys/times.h system
10361 set sys/times.h i_systimes
10362 eval $inhdr
10363
10364 : see if times exists
10365 echo " "
10366 if set times val -f d_times; eval $csym; $val; then
10367         echo 'times() found.' >&4
10368         d_times="$define"
10369         inc=''
10370         case "$i_systimes" in
10371         "$define") inc='sys/times.h';;
10372         esac
10373         rp="What is the type returned by times() on this system?"
10374         set clock_t clocktype long stdio.h sys/types.h $inc
10375         eval $typedef_ask
10376 else
10377         echo 'times() NOT found, hope that will do.' >&4
10378         d_times="$undef"
10379         clocktype='int'
10380 fi
10381
10382 : see if truncate exists
10383 set truncate d_truncate
10384 eval $inlibc
10385
10386 : see if tzname[] exists
10387 echo " "
10388 if set tzname val -a d_tzname; eval $csym; $val; then
10389         val="$define"
10390         echo 'tzname[] found.' >&4
10391 else
10392         val="$undef"
10393         echo 'tzname[] NOT found.' >&4
10394 fi
10395 set d_tzname
10396 eval $setvar
10397
10398 : see if umask exists
10399 set umask d_umask
10400 eval $inlibc
10401
10402 : backward compatibility for d_hvfork
10403 if test X$d_hvfork != X; then
10404         d_vfork="$d_hvfork"
10405         d_hvfork=''
10406 fi
10407 : see if there is a vfork
10408 val=''
10409 set vfork val
10410 eval $inlibc
10411
10412 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10413 : perl on Solaris 2.x, and probably elsewhere.
10414 case "$val" in
10415 $define)
10416         echo " "
10417         case "$usevfork" in
10418         false) dflt='n';;
10419         *) dflt='y';;
10420         esac
10421         cat <<'EOM'
10422  
10423 Perl can only use a vfork() that doesn't suffer from strict
10424 restrictions on calling functions or modifying global data in
10425 the child.  For example, glibc-2.1 contains such a vfork()
10426 that is unsuitable.  If your system provides a proper fork()
10427 call, chances are that you do NOT want perl to use vfork().
10428
10429 EOM
10430         rp="Do you still want to use vfork()?"
10431         . ./myread
10432         case "$ans" in
10433         y|Y) ;;
10434         *)
10435                 echo "Ok, we won't use vfork()."
10436                 val="$undef"
10437                 ;;
10438         esac
10439         ;;
10440 esac
10441 set d_vfork
10442 eval $setvar
10443 case "$d_vfork" in
10444 $define) usevfork='true';;
10445 *) usevfork='false';;
10446 esac
10447
10448 : see if this is an sysdir system
10449 set sys/dir.h i_sysdir
10450 eval $inhdr
10451
10452 : see if this is an sysndir system
10453 set sys/ndir.h i_sysndir
10454 eval $inhdr
10455
10456 : see if closedir exists
10457 set closedir d_closedir
10458 eval $inlibc
10459
10460 case "$d_closedir" in
10461 "$define")
10462         echo " "
10463         echo "Checking whether closedir() returns a status..." >&4
10464         cat > closedir.c <<EOM
10465 #$i_dirent I_DIRENT             /**/
10466 #$i_sysdir I_SYS_DIR            /**/
10467 #$i_sysndir I_SYS_NDIR          /**/
10468 #$i_systypes I_SYS_TYPES        /**/
10469
10470 #if defined(I_SYS_TYPES)
10471 #include <sys/types.h>
10472 #endif
10473 #if defined(I_DIRENT)
10474 #include <dirent.h>
10475 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10476 #include <sys/dir.h>
10477 #endif
10478 #else
10479 #ifdef I_SYS_NDIR
10480 #include <sys/ndir.h>
10481 #else
10482 #ifdef I_SYS_DIR
10483 #ifdef hp9000s500
10484 #include <ndir.h>       /* may be wrong in the future */
10485 #else
10486 #include <sys/dir.h>
10487 #endif
10488 #endif
10489 #endif
10490 #endif 
10491 int main() { return closedir(opendir(".")); }
10492 EOM
10493         set closedir
10494         if eval $compile_ok; then
10495                 if ./closedir > /dev/null 2>&1 ; then
10496                         echo "Yes, it does."
10497                         val="$undef"
10498                 else
10499                         echo "No, it doesn't."
10500                         val="$define"
10501                 fi
10502         else
10503                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10504                 val="$define"
10505         fi
10506         ;;
10507 *)
10508         val="$undef";
10509         ;;
10510 esac
10511 set d_void_closedir
10512 eval $setvar
10513 $rm -f closedir*
10514 : check for volatile keyword
10515 echo " "
10516 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10517 $cat >try.c <<'EOCP'
10518 int main()
10519 {
10520         typedef struct _goo_struct goo_struct;
10521         goo_struct * volatile goo = ((goo_struct *)0);
10522         struct _goo_struct {
10523                 long long_int;
10524                 int reg_int;
10525                 char char_var;
10526         };
10527         typedef unsigned short foo_t;
10528         char *volatile foo;
10529         volatile int bar;
10530         volatile foo_t blech;
10531         foo = foo;
10532 }
10533 EOCP
10534 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10535         val="$define"
10536         echo "Yup, it does."
10537 else
10538         val="$undef"
10539         echo "Nope, it doesn't."
10540 fi
10541 set d_volatile
10542 eval $setvar
10543 $rm -f try.*
10544
10545 : see if there is a wait4
10546 set wait4 d_wait4
10547 eval $inlibc
10548
10549 : see if waitpid exists
10550 set waitpid d_waitpid
10551 eval $inlibc
10552
10553 : see if wcstombs exists
10554 set wcstombs d_wcstombs
10555 eval $inlibc
10556
10557 : see if wctomb exists
10558 set wctomb d_wctomb
10559 eval $inlibc
10560
10561 : see if writev exists
10562 set writev d_writev
10563 eval $inlibc
10564
10565 : preserve RCS keywords in files with variable substitution, grrr
10566 Date='$Date'
10567 Id='$Id'
10568 Log='$Log'
10569 RCSfile='$RCSfile'
10570 Revision='$Revision'
10571
10572 case "$crosscompile" in
10573 ''|[nN]*) crosscompile="$undef" ;;
10574 esac
10575
10576 case "$osname" in
10577 next|rhapsody) multiarch="$define" ;;
10578 esac
10579 case "$multiarch" in
10580 ''|[nN]*) multiarch="$undef" ;;
10581 esac
10582
10583 : check for alignment requirements
10584 echo " "
10585 case "$crosscompile$multiarch" in
10586 *$define*)
10587         $cat <<EOM
10588 You seem to be either cross-compiling or doing a multiarchitecture build,
10589 skipping the memory alignment check.
10590
10591 EOM
10592         case "$alignbytes" in
10593         '') alignbytes=8 ;;
10594         esac
10595         ;;
10596 *)
10597         case "$alignbytes" in
10598         '') echo "Checking alignment constraints..." >&4
10599                 $cat >try.c <<'EOCP'
10600 struct foobar {
10601         char foo;
10602         double bar;
10603 } try_algn;
10604 int main()
10605 {
10606         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10607 }
10608 EOCP
10609                 set try
10610                 if eval $compile_ok; then
10611                         dflt=`./try`
10612                 else
10613                         dflt='8'
10614                         echo "(I can't seem to compile the test program...)"
10615                 fi
10616                 ;;
10617         *) dflt="$alignbytes"
10618                 ;;
10619         esac
10620         rp="Doubles must be aligned on a how-many-byte boundary?"
10621         . ./myread
10622         alignbytes="$ans"
10623         $rm -f try.c try
10624         ;;
10625 esac
10626
10627
10628 : check for ordering of bytes in a long
10629 echo " "
10630 case "$crosscompile$multiarch" in
10631 *$define*)
10632         $cat <<EOM
10633 You seem to be either cross-compiling or doing a multiarchitecture build,
10634 skipping the byteorder check.
10635
10636 EOM
10637         byteorder=''
10638         ;;
10639 *)
10640         case "$byteorder" in
10641         '')
10642                 $cat <<'EOM'
10643 In the following, larger digits indicate more significance.  A big-endian
10644 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10645 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10646 machines may have weird orders like 3412.  A Cray will report 87654321. If
10647 the test program works the default is probably right.
10648 I'm now running the test program...
10649 EOM
10650                 $cat >try.c <<'EOCP'
10651 #include <stdio.h>
10652 int main()
10653 {
10654         int i;
10655         union {
10656                 unsigned long l;
10657                 char c[sizeof(long)];
10658         } u;
10659
10660         if (sizeof(long) > 4)
10661                 u.l = (0x08070605L << 32) | 0x04030201L;
10662         else
10663                 u.l = 0x04030201L;
10664         for (i = 0; i < sizeof(long); i++)
10665                 printf("%c", u.c[i]+'0');
10666         printf("\n");
10667         exit(0);
10668 }
10669 EOCP
10670                 xxx_prompt=y
10671                 set try
10672                 if eval $compile && ./try > /dev/null; then
10673                         dflt=`./try`
10674                         case "$dflt" in
10675                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10676                                 echo "(The test program ran ok.)"
10677                                 echo "byteorder=$dflt"
10678                                 xxx_prompt=n
10679                         ;;
10680                         ????|????????) echo "(The test program ran ok.)" ;;
10681                         *) echo "(The test program didn't run right for some reason.)" ;;
10682                         esac
10683                 else
10684                         dflt='4321'
10685                         cat <<'EOM'
10686 (I can't seem to compile the test program.  Guessing big-endian...)
10687 EOM
10688                 fi
10689                 case "$xxx_prompt" in
10690                 y)
10691                         rp="What is the order of bytes in a long?"
10692                         . ./myread
10693                         byteorder="$ans"
10694                         ;;
10695                 *)      byteorder=$dflt
10696                         ;;
10697                 esac
10698                 ;;
10699         esac
10700         $rm -f try.c try
10701         ;;
10702 esac
10703
10704
10705 : how do we catenate cpp tokens here?
10706 echo " "
10707 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10708 $cat >cpp_stuff.c <<'EOCP'
10709 #define RCAT(a,b)a/**/b
10710 #define ACAT(a,b)a ## b
10711 RCAT(Rei,ser)
10712 ACAT(Cir,cus)
10713 EOCP
10714 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10715 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10716         echo "Oh!  Smells like ANSI's been here." >&4
10717         echo "We can catify or stringify, separately or together!"
10718         cpp_stuff=42
10719 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10720         echo "Ah, yes!  The good old days!" >&4
10721         echo "However, in the good old days we don't know how to stringify and"
10722         echo "catify at the same time."
10723         cpp_stuff=1
10724 else
10725         $cat >&4 <<EOM
10726 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10727 to have to edit the values of CAT[2-5] in config.h...
10728 EOM
10729         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10730 fi
10731 $rm -f cpp_stuff.*
10732
10733 : see if this is a db.h system
10734 set db.h i_db
10735 eval $inhdr
10736
10737 case "$i_db" in
10738 $define)
10739         : Check db version.
10740         echo " "
10741         echo "Checking Berkeley DB version ..." >&4
10742         $cat >try.c <<EOCP
10743 #$d_const HASCONST
10744 #ifndef HASCONST
10745 #define const
10746 #endif
10747 #include <sys/types.h>
10748 #include <stdio.h>
10749 #include <db.h>
10750 int main()
10751 {
10752 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10753     int Major, Minor, Patch ;
10754     unsigned long Version ;
10755     (void)db_version(&Major, &Minor, &Patch) ;
10756     printf("You have Berkeley DB Version 2 or greater\n");
10757
10758     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10759                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10760     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10761                 Major, Minor, Patch) ;
10762
10763     /* check that db.h & libdb are compatible */
10764     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10765         printf("db.h and libdb are incompatible\n") ;
10766         exit(3);        
10767     }
10768
10769     printf("db.h and libdb are compatible\n") ;
10770
10771     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10772                 + DB_VERSION_PATCH ;
10773
10774     /* needs to be >= 2.3.4 */
10775     if (Version < 2003004) {
10776     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10777         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10778         exit(2);        
10779     }
10780
10781     exit(0);
10782 #else
10783 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10784     printf("You have Berkeley DB Version 1\n");
10785     exit(0);    /* DB version < 2: the coast is clear. */
10786 #else
10787     exit(1);    /* <db.h> not Berkeley DB? */
10788 #endif
10789 #endif
10790 }
10791 EOCP
10792         set try
10793         if eval $compile && ./try; then
10794                 echo 'Looks OK.' >&4
10795         else
10796                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10797                 i_db=$undef
10798                 case " $libs " in
10799                 *"-ldb "*)
10800                         : Remove db from list of libraries to use
10801                         echo "Removing unusable -ldb from library list" >&4
10802                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10803                         shift
10804                         libs="$*"
10805                         echo "libs = $libs" >&4
10806                         ;;
10807                 esac
10808         fi
10809         $rm -f try.*
10810         ;;
10811 esac
10812
10813 case "$i_db" in
10814 define)
10815         : Check the return type needed for hash 
10816         echo " "
10817         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10818         $cat >try.c <<EOCP
10819 #$d_const HASCONST
10820 #ifndef HASCONST
10821 #define const
10822 #endif
10823 #include <sys/types.h>
10824 #include <db.h>
10825
10826 #ifndef DB_VERSION_MAJOR
10827 u_int32_t hash_cb (ptr, size)
10828 const void *ptr;
10829 size_t size;
10830 {
10831 }
10832 HASHINFO info;
10833 int main()
10834 {
10835         info.hash = hash_cb;
10836 }
10837 #endif
10838 EOCP
10839         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10840                 if $contains warning try.out >>/dev/null 2>&1 ; then
10841                         db_hashtype='int'
10842                 else
10843                         db_hashtype='u_int32_t'
10844                 fi
10845         else
10846                 : XXX Maybe we should just give up here.
10847                 db_hashtype=u_int32_t
10848                 $cat try.out >&4
10849                 echo "Help:  I can't seem to compile the db test program." >&4
10850                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10851         fi
10852         $rm -f try.*
10853         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10854         ;;
10855 *)      db_hashtype=u_int32_t
10856         ;;
10857 esac
10858 case "$i_db" in
10859 define)
10860         : Check the return type needed for prefix 
10861         echo " "
10862         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10863         cat >try.c <<EOCP
10864 #$d_const HASCONST
10865 #ifndef HASCONST
10866 #define const
10867 #endif
10868 #include <sys/types.h>
10869 #include <db.h>
10870
10871 #ifndef DB_VERSION_MAJOR
10872 size_t prefix_cb (key1, key2)
10873 const DBT *key1;
10874 const DBT *key2;
10875 {
10876 }
10877 BTREEINFO info;
10878 int main()
10879 {
10880         info.prefix = prefix_cb;
10881 }
10882 #endif
10883 EOCP
10884         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10885                 if $contains warning try.out >>/dev/null 2>&1 ; then
10886                         db_prefixtype='int'
10887                 else
10888                         db_prefixtype='size_t'
10889                 fi
10890         else
10891                 db_prefixtype='size_t'
10892                 : XXX Maybe we should just give up here.
10893                 $cat try.out >&4
10894                 echo "Help:  I can't seem to compile the db test program." >&4
10895                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10896         fi
10897         $rm -f try.*
10898         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10899         ;;
10900 *)      db_prefixtype='size_t'
10901         ;;
10902 esac
10903
10904 : check for void type
10905 echo " "
10906 echo "Checking to see how well your C compiler groks the void type..." >&4
10907 case "$voidflags" in
10908 '')
10909         $cat >try.c <<'EOCP'
10910 #if TRY & 1
10911 void sub() {
10912 #else
10913 sub() {
10914 #endif
10915         extern void moo();      /* function returning void */
10916         void (*goo)();          /* ptr to func returning void */
10917 #if TRY & 8
10918         void *hue;              /* generic ptr */
10919 #endif
10920 #if TRY & 2
10921         void (*foo[10])();
10922 #endif
10923
10924 #if TRY & 4
10925         if(goo == moo) {
10926                 exit(0);
10927         }
10928 #endif
10929         exit(0);
10930 }
10931 int main() { sub(); }
10932 EOCP
10933         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10934                 voidflags=$defvoidused
10935         echo "Good.  It appears to support void to the level $package wants.">&4
10936                 if $contains warning .out >/dev/null 2>&1; then
10937                         echo "However, you might get some warnings that look like this:"
10938                         $cat .out
10939                 fi
10940         else
10941 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10942                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10943                         echo "It supports 1..."
10944                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10945                                 echo "It also supports 2..."
10946                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10947                                         voidflags=7
10948                                         echo "And it supports 4 but not 8 definitely."
10949                                 else
10950                                         echo "It doesn't support 4..."
10951                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10952                                                 voidflags=11
10953                                                 echo "But it supports 8."
10954                                         else
10955                                                 voidflags=3
10956                                                 echo "Neither does it support 8."
10957                                         fi
10958                                 fi
10959                         else
10960                                 echo "It does not support 2..."
10961                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10962                                         voidflags=13
10963                                         echo "But it supports 4 and 8."
10964                                 else
10965                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10966                                                 voidflags=5
10967                                                 echo "And it supports 4 but has not heard about 8."
10968                                         else
10969                                                 echo "However it supports 8 but not 4."
10970                                         fi
10971                                 fi
10972                         fi
10973                 else
10974                         echo "There is no support at all for void."
10975                         voidflags=0
10976                 fi
10977         fi
10978 esac
10979 case "$voidflags" in
10980 "$defvoidused") ;;
10981 *)      $cat >&4 <<'EOM'
10982   Support flag bits are:
10983     1: basic void declarations.
10984     2: arrays of pointers to functions returning void.
10985     4: operations between pointers to and addresses of void functions.
10986     8: generic void pointers.
10987 EOM
10988         dflt="$voidflags";
10989         rp="Your void support flags add up to what?"
10990         . ./myread
10991         voidflags="$ans"
10992         ;;
10993 esac
10994 $rm -f try.* .out
10995
10996
10997 : How can we generate normalized random numbers ?
10998 echo " "
10999 echo "Looking for a random number function..." >&4
11000 case "$randfunc" in
11001 '')
11002         if set drand48 val -f; eval $csym; $val; then
11003                 dflt="drand48"
11004                 echo "Good, found drand48()." >&4
11005         elif set random val -f; eval $csym; $val; then
11006                 dflt="random"
11007                 echo "OK, found random()." >&4
11008         else
11009                 dflt="rand"
11010                 echo "Yick, looks like I have to use rand()." >&4
11011         fi
11012         echo " "
11013         ;;
11014 *)
11015         dflt="$randfunc"
11016         ;;
11017 esac
11018 cont=true
11019
11020 case "$ccflags" in
11021 *-Dmy_rand=*|*-Dmy_srand=*)
11022         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11023         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11024         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11025         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11026         ;;
11027 esac
11028
11029 while $test "$cont"; do
11030         rp="Use which function to generate random numbers?"
11031         . ./myread
11032         if $test "$ans" = "$dflt"; then
11033                 : null
11034         else
11035                 randbits=''
11036         fi
11037         randfunc="$ans"
11038         if set $ans val -f; eval $csym; $val; then
11039                 cont=''
11040         else
11041                 dflt=y
11042                 rp="I cannot find function $ans. Use that name anyway?"
11043                 . ./myread
11044                 dflt=rand
11045                 case "$ans" in
11046                         [yY]*) cont='';;
11047                 esac
11048         fi
11049         case "$cont" in
11050         '')
11051                 case "$randfunc" in
11052                 drand48)
11053                         drand01="drand48()"
11054                         seedfunc="srand48"
11055                         randbits=48
11056                         randseedtype=long
11057                         ;;
11058                 rand|random)
11059                         case "$randbits" in
11060                         '')
11061 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11062                                 $cat >try.c <<EOCP
11063 #$i_unistd I_UNISTD
11064 #$i_stdlib I_STDLIB
11065 #include <stdio.h>
11066 #ifdef I_UNISTD
11067 #  include <unistd.h>
11068 #endif
11069 #ifdef I_STDLIB
11070 #  include <stdlib.h>
11071 #endif
11072 int main()
11073 {
11074         register int i;
11075         register unsigned long tmp;
11076         register unsigned long max = 0L;
11077
11078         for (i = 1000; i; i--) {
11079                 tmp = (unsigned long) $randfunc();
11080                 if (tmp > max) max = tmp;
11081         }
11082         for (i = 0; max; i++)
11083                 max /= 2;
11084         printf("%d\n",i);
11085 }
11086 EOCP
11087                                 set try
11088                                 if eval $compile_ok; then
11089                                         dflt=`try`
11090                                 else
11091                                         dflt='?'
11092                                         echo "(I can't seem to compile the test program...)"
11093                                 fi
11094                                 ;;
11095                         *)
11096                                 dflt="$randbits"
11097                                 ;;
11098                         esac
11099                         rp="How many bits does your $randfunc() function produce?"
11100                         . ./myread
11101                         randbits="$ans"
11102                         $rm -f try.c try
11103                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11104                         seedfunc="s$randfunc"
11105                         randseedtype=unsigned
11106                         ;;
11107                 *)
11108                         dflt="31"
11109                         rp="How many bits does your $randfunc() function produce?"
11110                         . ./myread
11111                         randbits="$ans"
11112                         seedfunc="s$randfunc"
11113                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11114                         if set $seedfunc val -f; eval $csym; $val; then
11115                                 echo "(Using $seedfunc() to seed random generator)"
11116                         else
11117                                 echo "(Warning: no $seedfunc() to seed random generator)"
11118                                 seedfunc=rand
11119                         fi
11120                         randseedtype=unsigned
11121                         ;;
11122                 esac
11123                 ;;
11124         esac
11125 done
11126
11127 echo " "
11128 echo "Determining whether or not we are on an EBCDIC system..." >&4
11129 $cat >tebcdic.c <<'EOM'
11130 int main()
11131 {
11132   if ('M'==0xd4) return 0;
11133   return 1;
11134 }
11135 EOM
11136
11137 val=$undef
11138 set tebcdic
11139 if eval $compile_ok; then
11140         if ./tebcdic; then
11141                 echo "You have EBCDIC." >&4
11142                 val="$define"
11143         else
11144                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin, or UTF." >&4
11145         fi
11146 else
11147         echo "I'm unable to compile the test program." >&4
11148         echo "I'll assume ASCII or some ISO Latin." >&4
11149 fi
11150 $rm -f tebcdic.c tebcdic
11151 set ebcdic
11152 eval $setvar
11153
11154 echo " "
11155 $cat >&4 <<EOM
11156 Checking how to flush all pending stdio output...
11157 EOM
11158 # I only know how to find the first 32 possibly open files on SunOS.
11159 # See also hints/sunos_4_1.sh and util.c  --AD
11160 case "$osname" in
11161 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11162 esac
11163 $cat >>try.c <<EOCP
11164 #include <stdio.h>
11165 #$i_unistd I_UNISTD
11166 #ifdef I_UNISTD
11167 # include <unistd.h>
11168 #endif
11169 #$d_sysconf HAS_SYSCONF
11170 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11171 #ifdef HAS_STDIO_STREAM_ARRAY
11172 # define STDIO_STREAM_ARRAY $stdio_stream_array
11173 #endif
11174 int main() {
11175   FILE* p = fopen("try.out", "w");
11176 #ifdef TRY_FPUTC
11177   fputc('x', p);
11178 #else
11179 # ifdef TRY_FPRINTF
11180   fprintf(p, "x");
11181 # endif
11182 #endif
11183 #ifdef TRY_FFLUSH_NULL
11184   fflush(NULL);
11185 #endif
11186 #ifdef TRY_FFLUSH_ALL
11187   {
11188     long open_max = -1;
11189 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11190     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11191 # else
11192 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11193     open_max = sysconf(_SC_OPEN_MAX);
11194 #  else
11195 #   ifdef FOPEN_MAX
11196     open_max = FOPEN_MAX;
11197 #   else
11198 #    ifdef OPEN_MAX
11199     open_max = OPEN_MAX;
11200 #    else
11201 #     ifdef _NFILE
11202     open_max = _NFILE;
11203 #     endif
11204 #    endif
11205 #   endif
11206 #  endif
11207 # endif 
11208 # ifdef HAS_STDIO_STREAM_ARRAY
11209     if (open_max > 0) {
11210       long i;
11211       for (i = 0; i < open_max; i++)
11212             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11213                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11214                 STDIO_STREAM_ARRAY[i]._flag)
11215                 fflush(&STDIO_STREAM_ARRAY[i]);
11216     }   
11217   }
11218 # endif
11219 #endif
11220   _exit(42);
11221 }
11222 EOCP
11223 : first we have to find out how _not_ to flush
11224 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11225     output=''
11226     set try -DTRY_FPUTC
11227     if eval $compile; then
11228             $rm -f try.out
11229             ./try$exe_ext 2>/dev/null
11230             if $test ! -s try.out -a "X$?" = X42; then
11231                 output=-DTRY_FPUTC
11232             fi
11233     fi
11234     case "$output" in
11235     '')
11236             set try -DTRY_FPRINTF
11237             $rm -f try.out
11238             if eval $compile; then
11239                     $rm -f try.out
11240                     ./try$exe_ext 2>/dev/null
11241                     if $test ! -s try.out -a "X$?" = X42; then
11242                         output=-DTRY_FPRINTF
11243                     fi
11244             fi
11245         ;;
11246     esac
11247 fi
11248 : check for fflush NULL behaviour
11249 case "$fflushNULL" in
11250 '')     set try -DTRY_FFLUSH_NULL $output
11251         if eval $compile; then
11252                 $rm -f try.out
11253                 ./try$exe_ext 2>/dev/null
11254                 code="$?"
11255                 if $test -s try.out -a "X$code" = X42; then
11256                         fflushNULL="`$cat try.out`"
11257                 else
11258                         if $test "X$code" != X42; then
11259                                 $cat >&4 <<EOM
11260 (If this test failed, don't worry, we'll try another method shortly.)
11261 EOM
11262                         fi
11263                 fi
11264         fi
11265         $rm -f core try.core core.try.*
11266         case "$fflushNULL" in
11267         x)      $cat >&4 <<EOM
11268 Your fflush(NULL) works okay.
11269 EOM
11270                 fflushNULL="$define"
11271                 ;;
11272         '')     $cat >&4 <<EOM
11273 Your fflush(NULL) isn't working (contrary to ANSI C).
11274 EOM
11275                 fflushNULL="$undef"
11276                 ;;
11277         *)      $cat >&4 <<EOM
11278 Cannot figure out whether your fflush(NULL) works or not.
11279 I'm assuming it doesn't (contrary to ANSI C).
11280 EOM
11281                 fflushNULL="$undef"
11282                 ;;
11283         esac
11284         ;;
11285 $define|true|[yY]*)
11286         fflushNULL="$define"
11287         ;;
11288 *)
11289         fflushNULL="$undef"
11290         ;;
11291 esac
11292 : check explicit looping only if NULL did not work
11293 case "$fflushNULL" in
11294 "$undef")
11295         : check for fflush all behaviour
11296         case "$fflushall" in
11297         '')     set try -DTRY_FFLUSH_ALL $output
11298                 if eval $compile; then
11299                         $cat >&4 <<EOM
11300 (Now testing the other method--but note that also this may fail.)
11301 EOM
11302                         $rm -f try.out
11303                         ./try$exe_ext 2>/dev/null
11304                         if $test -s try.out -a "X$?" = X42; then
11305                                 fflushall="`$cat try.out`"
11306                         fi
11307                 fi
11308                 $rm -f core try.core core.try.*
11309                 case "$fflushall" in
11310                 x)      $cat >&4 <<EOM
11311 Whew. Flushing explicitly all the stdio streams works.
11312 EOM
11313                         fflushall="$define"
11314                         ;;
11315                 '')     $cat >&4 <<EOM
11316 Sigh. Flushing explicitly all the stdio streams doesn't work.
11317 EOM
11318                         fflushall="$undef"
11319                         ;;
11320                 *)      $cat >&4 <<EOM
11321 Cannot figure out whether flushing stdio streams explicitly works or not.
11322 I'm assuming it doesn't.
11323 EOM
11324                         fflushall="$undef"
11325                         ;;
11326                 esac
11327                 ;;
11328         "$define"|true|[yY]*)
11329                 fflushall="$define"
11330                 ;;
11331         *)
11332                 fflushall="$undef"
11333                 ;;
11334         esac
11335         ;;
11336 *)      fflushall="$undef"      
11337         ;;
11338 esac
11339 case "$fflushNULL$fflushall" in
11340 undefundef)
11341         $cat <<EOM
11342 I cannot figure out how to flush pending stdio output.
11343 EOM
11344         ;;
11345 esac
11346 $rm -f try.* try$exe_ext
11347
11348 : see what type file positions are declared as in the library
11349 rp="What is the type for file position used by fsetpos()?"
11350 set fpos_t fpostype long stdio.h sys/types.h
11351 eval $typedef_ask
11352
11353 : Store the full pathname to the ar program for use in the C program
11354 : Respect a hint or command line value for full_ar.
11355 case "$full_ar" in
11356 '') full_ar=$ar ;;
11357 esac
11358
11359 : Store the full pathname to the sed program for use in the C program
11360 full_sed=$sed
11361
11362 : see what type gids are declared as in the kernel
11363 echo " "
11364 echo "Looking for the type for group ids returned by getgid()."
11365 set gid_t gidtype xxx stdio.h sys/types.h
11366 eval $typedef
11367 case "$gidtype" in
11368 xxx)
11369         xxx=`./findhdr sys/user.h`
11370         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11371         case $1 in
11372         unsigned) dflt="$1 $2" ;;
11373         *) dflt="$1" ;;
11374         esac
11375         ;;
11376 *) dflt="$gidtype";;
11377 esac
11378 case "$gidtype" in
11379 gid_t) echo "gid_t found." ;;
11380 *)      rp="What is the type for group ids returned by getgid()?"
11381         . ./myread
11382         gidtype="$ans"
11383         ;;
11384 esac
11385
11386 : see if getgroups exists
11387 set getgroups d_getgrps
11388 eval $inlibc
11389
11390 : see if setgroups exists
11391 set setgroups d_setgrps
11392 eval $inlibc
11393
11394
11395 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11396 echo " "
11397 case "$d_getgrps$d_setgrps" in
11398 *define*)
11399         case "$groupstype" in
11400         '') dflt="$gidtype" ;;
11401         *)  dflt="$groupstype" ;;
11402         esac
11403         $cat <<EOM
11404 What type of pointer is the second argument to getgroups() and setgroups()?
11405 Usually this is the same as group ids, $gidtype, but not always.
11406
11407 EOM
11408         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11409         . ./myread
11410         groupstype="$ans"
11411         ;;
11412 *)  groupstype="$gidtype";;
11413 esac
11414
11415 : see what type lseek is declared as in the kernel
11416 rp="What is the type used for lseek's offset on this system?"
11417 set off_t lseektype long stdio.h sys/types.h
11418 eval $typedef_ask
11419
11420 echo " "
11421 $echo $n "Checking to see how big your file offsets are...$c" >&4
11422 $cat >try.c <<EOCP
11423 #include <sys/types.h>
11424 #include <stdio.h>
11425 int main()
11426 {
11427         printf("%d\n", sizeof($lseektype));
11428 }
11429 EOCP
11430 set try
11431 if eval $compile_ok; then
11432         lseeksize=`./try`
11433         $echo " $lseeksize bytes." >&4
11434 else
11435         dflt='4'
11436         echo " "
11437         echo "(I can't seem to compile the test program.  Guessing...)"
11438         rp="What is the size of your file offsets (in bytes)?"
11439         . ./myread
11440         lseeksize="$ans"
11441 fi
11442 $rm -f try.c try
11443
11444 echo " "
11445 echo "Checking if your $make program sets \$(MAKE)..." >&4
11446 case "$make_set_make" in
11447 '')
11448         $sed 's/^X //' > testmake.mak << 'EOF'
11449 Xall:
11450 X       @echo 'maketemp="$(MAKE)"'
11451 EOF
11452         case "`$make -f testmake.mak 2>/dev/null`" in
11453         *maketemp=*) make_set_make='#' ;;
11454         *)      make_set_make="MAKE=$make" ;;
11455         esac
11456         $rm -f testmake.mak
11457         ;;
11458 esac
11459 case "$make_set_make" in
11460 '#') echo "Yup, it does.";;
11461 *) echo "Nope, it doesn't.";;
11462 esac
11463
11464 : see what type is used for mode_t
11465 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11466 set mode_t modetype int stdio.h sys/types.h
11467 eval $typedef_ask
11468
11469 : define a fucntion to check prototypes
11470 $cat > protochk <<EOSH
11471 $startsh
11472 cc="$cc"
11473 optimize="$optimize"
11474 ccflags="$ccflags"
11475 prototype="$prototype"
11476 define="$define"
11477 rm=$rm
11478 EOSH
11479
11480 $cat >> protochk <<'EOSH'
11481
11482 $rm -f try.c
11483 foo="$1"
11484 shift
11485 while test $# -ge 2; do
11486         case "$1" in
11487                 $define) echo "#include <$2>" >> try.c ;;
11488                 literal) echo "$2" >> try.c ;;
11489         esac
11490     shift 2
11491 done
11492 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11493 cat >> try.c <<'EOCP'
11494 #ifdef CAN_PROTOTYPE
11495 #define _(args) args
11496 #else
11497 #define _(args) ()
11498 #endif
11499 EOCP
11500 echo "$foo" >> try.c
11501 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11502 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11503 status=$?
11504 $rm -f try.[co]
11505 exit $status
11506 EOSH
11507 chmod +x protochk
11508 $eunicefix protochk
11509
11510 : see what type is used for size_t
11511 rp="What is the type used for the length parameter for string functions?"
11512 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11513 eval $typedef_ask
11514
11515 : check for type of arguments to gethostbyaddr. 
11516 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11517         case "$d_gethbyaddr" in
11518         $define)
11519                 $cat <<EOM
11520
11521 Checking to see what type of arguments are accepted by gethostbyaddr().
11522 EOM
11523                 hdrs="$define sys/types.h
11524                         $d_socket sys/socket.h 
11525                         $i_niin netinet/in.h 
11526                         $i_netdb netdb.h
11527                         $i_unistd unistd.h"
11528                 : The first arg can 'char *' or 'void *'
11529                 : The second arg is some of integral type
11530                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11531                         for yyy in size_t long int; do
11532                                 case "$netdb_host_type" in
11533                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11534                                         if ./protochk "$try" $hdrs; then
11535                                                 echo "Your system accepts $xxx for the first arg."
11536                                                 echo "...and $yyy for the second arg."
11537                                                 netdb_host_type="$xxx"
11538                                                 netdb_hlen_type="$yyy"
11539                                         fi
11540                                         ;;
11541                                 esac
11542                         done
11543                 done
11544                 : In case none of those worked, prompt the user.
11545                 case "$netdb_host_type" in
11546                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11547                         dflt='char *'
11548                         . ./myread
11549                         netdb_host_type=$ans
11550                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11551                         dflt="$sizetype"
11552                         . ./myread
11553                         netdb_hlen_type=$ans
11554                         ;;
11555                 esac
11556                 ;;
11557         *)      : no gethostbyaddr, so pick harmless defaults
11558                 netdb_host_type='char *'
11559                 netdb_hlen_type="$sizetype"
11560                 ;;
11561         esac
11562         # Remove the "const" if needed. -- but then we'll have a 
11563         # prototype clash!
11564         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11565 fi
11566
11567 : check for type of argument to gethostbyname. 
11568 if test "X$netdb_name_type" = X ; then
11569         case "$d_gethbyname" in
11570         $define)
11571                 $cat <<EOM
11572
11573 Checking to see what type of argument is accepted by gethostbyname().
11574 EOM
11575                 hdrs="$define sys/types.h
11576                         $d_socket sys/socket.h 
11577                         $i_niin netinet/in.h 
11578                         $i_netdb netdb.h
11579                         $i_unistd unistd.h"
11580                 for xxx in "const char *" "char *"; do
11581                         case "$netdb_name_type" in
11582                         '')     try="extern struct hostent *gethostbyname($xxx);"
11583                                 if ./protochk "$try" $hdrs; then
11584                                         echo "Your system accepts $xxx."
11585                                         netdb_name_type="$xxx"
11586                                 fi
11587                                 ;;
11588                         esac
11589                 done
11590                 : In case none of those worked, prompt the user.
11591                 case "$netdb_name_type" in
11592                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11593                         dflt='char *'
11594                         . ./myread
11595                         netdb_name_type=$ans
11596                         ;;
11597                 esac
11598                 ;;
11599         *)      : no gethostbyname, so pick harmless default
11600                 netdb_name_type='char *'
11601                 ;;
11602         esac
11603 fi
11604
11605 : check for type of 1st argument to getnetbyaddr. 
11606 if test "X$netdb_net_type" = X ; then
11607         case "$d_getnbyaddr" in
11608         $define)
11609                 $cat <<EOM
11610
11611 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11612 EOM
11613                 hdrs="$define sys/types.h
11614                         $d_socket sys/socket.h 
11615                         $i_niin netinet/in.h 
11616                         $i_netdb netdb.h
11617                         $i_unistd unistd.h"
11618                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11619                         case "$netdb_net_type" in
11620                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11621                                 if ./protochk "$try" $hdrs; then
11622                                         echo "Your system accepts $xxx."
11623                                         netdb_net_type="$xxx"
11624                                 fi
11625                                 ;;
11626                         esac
11627                 done
11628                 : In case none of those worked, prompt the user.
11629                 case "$netdb_net_type" in
11630                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11631                         dflt='long'
11632                         . ./myread
11633                         netdb_net_type=$ans
11634                         ;;
11635                 esac
11636                 ;;
11637         *)      : no getnetbyaddr, so pick harmless default
11638                 netdb_net_type='long'
11639                 ;;
11640         esac
11641 fi
11642 : locate the preferred pager for this system
11643 case "$pager" in
11644 '')
11645         dflt=''
11646         case "$pg" in
11647         /*) dflt=$pg;;
11648         esac
11649         case "$more" in
11650         /*) dflt=$more;;
11651         esac
11652         case "$less" in
11653         /*) dflt=$less;;
11654         esac
11655         case "$dflt" in
11656         '') dflt=/usr/ucb/more;;
11657         esac
11658         ;;
11659 *) dflt="$pager";;
11660 esac
11661 echo " "
11662 fn=f/
11663 rp='What pager is used on your system?'
11664 . ./getfile
11665 pager="$ans"
11666
11667 : see what type pids are declared as in the kernel
11668 rp="What is the type of process ids on this system?"
11669 set pid_t pidtype int stdio.h sys/types.h
11670 eval $typedef_ask
11671
11672 : check for length of pointer
11673 echo " "
11674 case "$ptrsize" in
11675 '')
11676         $echo $n "Checking to see how big your pointers are...$c" >&4
11677         if test "$voidflags" -gt 7; then
11678                 echo '#define VOID_PTR char *' > try.c
11679         else
11680                 echo '#define VOID_PTR void *' > try.c
11681         fi
11682         $cat >>try.c <<'EOCP'
11683 #include <stdio.h>
11684 int main()
11685 {
11686         printf("%d\n", sizeof(VOID_PTR));
11687         exit(0);
11688 }
11689 EOCP
11690         set try
11691         if eval $compile_ok; then
11692                 ptrsize=`./try`
11693                 $echo " $ptrsize bytes." >&4
11694         else
11695                 dflt='4'
11696                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11697                 rp="What is the size of a pointer (in bytes)?"
11698                 . ./myread
11699                 ptrsize="$ans"
11700         fi
11701         ;;
11702 esac
11703 $rm -f try.c try
11704
11705 : see if ar generates random libraries by itself
11706 echo " "
11707 echo "Checking how to generate random libraries on your machine..." >&4
11708 echo 'int bar1() { return bar2(); }' > bar1.c
11709 echo 'int bar2() { return 2; }' > bar2.c
11710 $cat > foo.c <<'EOP'
11711 int main() { printf("%d\n", bar1()); exit(0); }
11712 EOP
11713 $cc $ccflags -c bar1.c >/dev/null 2>&1
11714 $cc $ccflags -c bar2.c >/dev/null 2>&1
11715 $cc $ccflags -c foo.c >/dev/null 2>&1
11716 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11717 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11718         ./foobar >/dev/null 2>&1; then
11719         echo "$ar appears to generate random libraries itself."
11720         orderlib=false
11721         ranlib=":"
11722 elif $ar ts bar$_a >/dev/null 2>&1 &&
11723         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11724         ./foobar >/dev/null 2>&1; then
11725                 echo "a table of contents needs to be added with '$ar ts'."
11726                 orderlib=false
11727                 ranlib="$ar ts"
11728 else
11729         case "$ranlib" in
11730         :) ranlib='';;
11731         '')
11732                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11733                 $test -f $ranlib || ranlib=''
11734                 ;;
11735         esac
11736         if $test -n "$ranlib"; then
11737                 echo "your system has '$ranlib'; we'll use that."
11738                 orderlib=false
11739         else
11740                 echo "your system doesn't seem to support random libraries"
11741                 echo "so we'll use lorder and tsort to order the libraries."
11742                 orderlib=true
11743                 ranlib=":"
11744         fi
11745 fi
11746 $rm -f foo* bar* 
11747
11748 : check for type of arguments to select. 
11749 case "$selecttype" in
11750 '') case "$d_select" in
11751         $define)
11752                 $cat <<EOM
11753 Checking to see what type of arguments are accepted by select().
11754 EOM
11755                 hdrs="$define sys/types.h
11756                         $i_systime sys/time.h 
11757                         $i_sysselct sys/select.h
11758                         $d_socket sys/socket.h"
11759                 : The first arg can be int, unsigned, or size_t
11760                 : The last arg may or may not be 'const'
11761                 val=''
11762                 : void pointer has been seen but using that
11763                 : breaks the selectminbits test
11764                 for xxx in 'fd_set *' 'int *'; do
11765                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11766                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11767                                         case "$val" in
11768                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11769                                                 if ./protochk "$try" $hdrs; then
11770                                                         echo "Your system accepts $xxx."
11771                                                         val="$xxx"
11772                                                 fi
11773                                                 ;;
11774                                         esac
11775                                 done
11776                         done
11777                 done
11778                 case "$val" in
11779                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11780                         case "$d_fd_set" in
11781                                 $define) dflt="fd_set *" ;;
11782                                 *)              dflt="int *" ;;
11783                         esac
11784                         . ./myread
11785                         val=$ans
11786                         ;;
11787                 esac
11788                 selecttype="$val"
11789                 ;;
11790         *)      : no select, so pick a harmless default
11791                 selecttype='int *'
11792                 ;;
11793         esac
11794         ;;
11795 esac
11796
11797 : check for the select 'width'
11798 case "$selectminbits" in
11799 '') case "$d_select" in
11800         $define)
11801                 $cat <<EOM
11802
11803 Checking to see on how many bits at a time your select() operates...
11804 EOM
11805                 $cat >try.c <<EOCP
11806 #include <sys/types.h>
11807 #$i_time I_TIME
11808 #$i_systime I_SYS_TIME
11809 #$i_systimek I_SYS_TIME_KERNEL
11810 #ifdef I_TIME
11811 #   include <time.h>
11812 #endif
11813 #ifdef I_SYS_TIME
11814 #   ifdef I_SYS_TIME_KERNEL
11815 #       define KERNEL
11816 #   endif
11817 #   include <sys/time.h>
11818 #   ifdef I_SYS_TIME_KERNEL
11819 #       undef KERNEL
11820 #   endif
11821 #endif
11822 #$i_sysselct I_SYS_SELECT
11823 #ifdef I_SYS_SELECT
11824 #include <sys/select.h>
11825 #endif
11826 #$d_socket HAS_SOCKET
11827 #ifdef HAS_SOCKET
11828 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11829 #endif
11830 #include <stdio.h>
11831 $selecttype b;
11832 #define S sizeof(*(b))
11833 #define MINBITS 64
11834 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11835 #define NBITS  (NBYTES * 8)
11836 int main() {
11837     char s[NBYTES];
11838     struct timeval t;
11839     int i;
11840     FILE* fp;
11841     int fd;
11842
11843     fclose(stdin);
11844     fp = fopen("try.c", "r");
11845     if (fp == 0)
11846       exit(1);
11847     fd = fileno(fp);
11848     if (fd < 0)
11849       exit(2);
11850     b = ($selecttype)s;
11851     for (i = 0; i < NBITS; i++)
11852         FD_SET(i, b);
11853     t.tv_sec  = 0;
11854     t.tv_usec = 0;
11855     select(fd + 1, b, 0, 0, &t);
11856     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11857     printf("%d\n", i + 1);
11858     return 0;
11859 }
11860 EOCP
11861                 set try
11862                 if eval $compile_ok; then
11863                         selectminbits=`./try`
11864                         case "$selectminbits" in
11865                         '')     cat >&4 <<EOM
11866 Cannot figure out on how many bits at a time your select() operates.
11867 I'll play safe and guess it is 32 bits.
11868 EOM
11869                                 selectminbits=32
11870                                 bits="32 bits"
11871                                 ;;
11872                         1)      bits="1 bit" ;;
11873                         *)      bits="$selectminbits bits" ;;
11874                         esac
11875                         echo "Your select() operates on $bits at a time." >&4
11876                 else
11877                         rp='What is the minimum number of bits your select() operates on?'
11878                         case "$byteorder" in
11879                         1234|12345678)  dflt=32 ;;
11880                         *)              dflt=1  ;;
11881                         esac
11882                         . ./myread
11883                         val=$ans
11884                         selectminbits="$val"
11885                 fi
11886                 $rm -f try.* try
11887                 ;;
11888         *)      : no select, so pick a harmless default
11889                 selectminbits='32'
11890                 ;;
11891         esac
11892         ;;
11893 esac
11894
11895 : Trace out the files included by signal.h, then look for SIGxxx names.
11896 : Remove SIGARRAYSIZE used by HPUX.
11897 : Remove SIGSTKSIZE used by Linux.
11898 : Remove SIGSTKSZ used by Posix.
11899 : Remove SIGTYP void lines used by OS2.
11900 xxx=`echo '#include <signal.h>' |
11901         $cppstdin $cppminus $cppflags 2>/dev/null |
11902         $grep '^[       ]*#.*include' | 
11903         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11904 : Check this list of files to be sure we have parsed the cpp output ok.
11905 : This will also avoid potentially non-existent files, such 
11906 : as ../foo/bar.h
11907 xxxfiles=''
11908 for xx in $xxx /dev/null ; do
11909         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11910 done
11911 : If we have found no files, at least try signal.h
11912 case "$xxxfiles" in
11913 '')     xxxfiles=`./findhdr signal.h` ;;
11914 esac
11915 xxx=`awk '
11916 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11917         print substr($2, 4, 20)
11918 }
11919 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11920         print substr($3, 4, 20)
11921 }' $xxxfiles`
11922 : Append some common names just in case the awk scan failed.
11923 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11924 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11925 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11926 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11927 : generate a few handy files for later
11928 $cat > signal.c <<'EOCP'
11929 #include <sys/types.h>
11930 #include <signal.h>
11931 #include <stdio.h>
11932 int main() {
11933
11934 /* Strange style to avoid deeply-nested #if/#else/#endif */
11935 #ifndef NSIG
11936 #  ifdef _NSIG
11937 #    define NSIG (_NSIG)
11938 #  endif
11939 #endif
11940
11941 #ifndef NSIG
11942 #  ifdef SIGMAX
11943 #    define NSIG (SIGMAX+1)
11944 #  endif
11945 #endif
11946
11947 #ifndef NSIG
11948 #  ifdef SIG_MAX
11949 #    define NSIG (SIG_MAX+1)
11950 #  endif
11951 #endif
11952
11953 #ifndef NSIG
11954 #  ifdef MAXSIG
11955 #    define NSIG (MAXSIG+1)
11956 #  endif
11957 #endif
11958
11959 #ifndef NSIG
11960 #  ifdef MAX_SIG
11961 #    define NSIG (MAX_SIG+1)
11962 #  endif
11963 #endif
11964
11965 #ifndef NSIG
11966 #  ifdef SIGARRAYSIZE
11967 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11968 #  endif
11969 #endif
11970
11971 #ifndef NSIG
11972 #  ifdef _sys_nsig
11973 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11974 #  endif
11975 #endif
11976
11977 /* Default to some arbitrary number that's big enough to get most
11978    of the common signals.
11979 */
11980 #ifndef NSIG
11981 #    define NSIG 50
11982 #endif
11983
11984 printf("NSIG %d\n", NSIG);
11985
11986 #ifndef JUST_NSIG
11987
11988 EOCP
11989
11990 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11991 {
11992         printf "#ifdef SIG"; printf $1; printf "\n"
11993         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11994         printf $1; printf ");\n"
11995         printf "#endif\n"
11996 }
11997 END {
11998         printf "#endif /* JUST_NSIG */\n";
11999         printf "}\n";
12000 }
12001 ' >>signal.c
12002 $cat >signal.awk <<'EOP'
12003 BEGIN { ndups = 0 }
12004 $1 ~ /^NSIG$/ { nsig = $2 }
12005 ($1 !~ /^NSIG$/) && (NF == 2) {
12006     if ($2 > maxsig) { maxsig = $2 }
12007     if (sig_name[$2]) {
12008         dup_name[ndups] = $1
12009         dup_num[ndups] = $2
12010         ndups++ 
12011     }
12012     else {
12013         sig_name[$2] = $1
12014         sig_num[$2] = $2
12015     }
12016 }
12017 END { 
12018     if (nsig == 0) {
12019         nsig = maxsig + 1
12020     }
12021     printf("NSIG %d\n", nsig);
12022     for (n = 1; n < nsig; n++) {
12023         if (sig_name[n]) {
12024             printf("%s %d\n", sig_name[n], sig_num[n])
12025         }
12026         else {
12027             printf("NUM%d %d\n", n, n) 
12028         }
12029     }
12030     for (n = 0; n < ndups; n++) {
12031         printf("%s %d\n", dup_name[n], dup_num[n])
12032     }
12033 }
12034 EOP
12035 $cat >signal_cmd <<EOS
12036 $startsh
12037 if $test -s signal.lst; then
12038     echo "Using your existing signal.lst file"
12039         exit 0
12040 fi
12041 xxx="$xxx"
12042 EOS
12043 $cat >>signal_cmd <<'EOS'
12044
12045 set signal
12046 if eval $compile_ok; then
12047         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12048 else
12049         echo "(I can't seem be able to compile the whole test program)" >&4
12050         echo "(I'll try it in little pieces.)" >&4
12051         set signal -DJUST_NSIG
12052         if eval $compile_ok; then
12053                 ./signal$_exe > signal.nsg
12054                 $cat signal.nsg
12055         else
12056                 echo "I can't seem to figure out how many signals you have." >&4
12057                 echo "Guessing 50." >&4
12058                 echo 'NSIG 50' > signal.nsg
12059         fi
12060         : Now look at all the signal names, one at a time.
12061         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12062                 $cat > signal.c <<EOCP
12063 #include <sys/types.h>
12064 #include <signal.h>
12065 #include <stdio.h>
12066 int main() {
12067 printf("$xx %d\n", SIG${xx});
12068 return 0;
12069 }
12070 EOCP
12071                 set signal
12072                 if eval $compile; then
12073                         echo "SIG${xx} found."
12074                         ./signal$_exe  >> signal.ls1
12075                 else
12076                         echo "SIG${xx} NOT found."
12077                 fi
12078         done
12079         if $test -s signal.ls1; then
12080                 $cat signal.nsg signal.ls1 |
12081                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12082         fi
12083
12084 fi
12085 if $test -s signal.lst; then
12086         :
12087 else
12088         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12089         echo 'kill -l' >signal
12090         set X `csh -f <signal`
12091         $rm -f signal
12092         shift
12093         case $# in
12094         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12095         esac
12096         echo $@ | $tr ' ' $trnl | \
12097             $awk '{ printf "%s %d\n", $1, ++s; }
12098                   END { printf "NSIG %d\n", ++s }' >signal.lst
12099 fi
12100 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12101 EOS
12102 chmod a+x signal_cmd
12103 $eunicefix signal_cmd
12104
12105 : generate list of signal names
12106 echo " "
12107 case "$sig_name_init" in
12108 '') doinit=yes ;;
12109 *)  case "$sig_num_init" in
12110     ''|*,*) doinit=yes ;;
12111     esac ;;
12112 esac
12113 case "$doinit" in
12114 yes)
12115         echo "Generating a list of signal names and numbers..." >&4
12116         . ./signal_cmd
12117         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12118         sig_name=`$awk 'BEGIN { printf "ZERO " }
12119                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12120         sig_num=`$awk  'BEGIN { printf "0 " }
12121                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12122         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12123                              !/^NSIG/   { printf "\"%s\", ", $1 }
12124                              END        { printf "0\n" }' signal.lst`
12125         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12126                              !/^NSIG/   { printf "%d, ", $2}
12127                              END        { printf "0\n"}' signal.lst`
12128         ;;
12129 esac
12130 echo "The following $sig_count signals are available:"
12131 echo " "
12132 echo $sig_name | $awk \
12133 'BEGIN { linelen = 0 }
12134 {
12135         for (i = 1; i <= NF; i++) {
12136                 name = "SIG" $i " "
12137                 linelen = linelen + length(name)
12138                 if (linelen > 70) {
12139                         printf "\n"
12140                         linelen = length(name)
12141                 }
12142                 printf "%s", name
12143         }
12144         printf "\n"
12145 }'
12146 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12147
12148 : see what type is used for signed size_t
12149 set ssize_t ssizetype int stdio.h sys/types.h
12150 eval $typedef
12151 dflt="$ssizetype"
12152 $cat > ssize.c <<EOM
12153 #include <stdio.h>
12154 #include <sys/types.h>
12155 #define Size_t $sizetype
12156 #define SSize_t $dflt
12157 int main()
12158 {
12159         if (sizeof(Size_t) == sizeof(SSize_t))
12160                 printf("$dflt\n");
12161         else if (sizeof(Size_t) == sizeof(int))
12162                 printf("int\n");
12163         else 
12164                 printf("long\n");
12165         exit(0);
12166 }
12167 EOM
12168 echo " "
12169 set ssize
12170 if eval $compile_ok && ./ssize > /dev/null; then
12171         ssizetype=`./ssize`
12172         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12173 else
12174         $cat >&4 <<EOM
12175 Help! I can't compile and run the ssize_t test program: please enlighten me!
12176 (This is probably a misconfiguration in your system or libraries, and
12177 you really ought to fix it.  Still, I'll try anyway.)
12178
12179 I need a type that is the same size as $sizetype, but is guaranteed to
12180 be signed.  Common values are ssize_t, int and long.
12181
12182 EOM
12183         rp="What signed type is the same size as $sizetype?"
12184         . ./myread
12185         ssizetype="$ans"
12186 fi
12187 $rm -f ssize ssize.*
12188
12189 : see what type of char stdio uses.
12190 echo " "
12191 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12192         echo "Your stdio uses unsigned chars." >&4
12193         stdchar="unsigned char"
12194 else
12195         echo "Your stdio uses signed chars." >&4
12196         stdchar="char"
12197 fi
12198
12199 : see if time exists
12200 echo " "
12201 if test "X$d_time" = X -o X"$timetype" = X; then
12202     if set time val -f d_time; eval $csym; $val; then
12203                 echo 'time() found.' >&4
12204                 val="$define"
12205                 rp="What is the type returned by time() on this system?"
12206                 set time_t timetype long stdio.h sys/types.h
12207                 eval $typedef_ask
12208     else
12209                 echo 'time() not found, hope that will do.' >&4
12210                 val="$undef"
12211                 timetype='int';
12212     fi
12213     set d_time
12214     eval $setvar
12215 fi
12216
12217 : see what type uids are declared as in the kernel
12218 echo " "
12219 echo "Looking for the type for user ids returned by getuid()."
12220 set uid_t uidtype xxx stdio.h sys/types.h
12221 eval $typedef
12222 case "$uidtype" in
12223 xxx)
12224         xxx=`./findhdr sys/user.h`
12225         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12226         case $1 in
12227         unsigned) dflt="$1 $2" ;;
12228         *) dflt="$1" ;;
12229         esac
12230         ;;
12231 *) dflt="$uidtype";;
12232 esac
12233 case "$uidtype" in
12234 uid_t)  echo "uid_t found." ;;
12235 *)      rp="What is the type for user ids returned by getuid()?"
12236         . ./myread
12237         uidtype="$ans"
12238         ;;
12239 esac
12240
12241 : see if dbm.h is available
12242 : see if dbmclose exists
12243 set dbmclose d_dbmclose
12244 eval $inlibc
12245
12246 case "$d_dbmclose" in
12247 $define)
12248         set dbm.h i_dbm
12249         eval $inhdr
12250         case "$i_dbm" in
12251         $define)
12252                 val="$undef"
12253                 set i_rpcsvcdbm
12254                 eval $setvar
12255                 ;;
12256         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12257                 eval $inhdr
12258                 ;;
12259         esac
12260         ;;
12261 *)      echo "We won't be including <dbm.h>"
12262         val="$undef"
12263         set i_dbm
12264         eval $setvar
12265         val="$undef"
12266         set i_rpcsvcdbm
12267         eval $setvar
12268         ;;
12269 esac
12270
12271 : see if this is a sys/file.h system
12272 val=''
12273 set sys/file.h val
12274 eval $inhdr
12275
12276 : do we need to include sys/file.h ?
12277 case "$val" in
12278 "$define")
12279         echo " "
12280         if $h_sysfile; then
12281                 val="$define"
12282                 echo "We'll be including <sys/file.h>." >&4
12283         else
12284                 val="$undef"
12285                 echo "We won't be including <sys/file.h>." >&4
12286         fi
12287         ;;
12288 *)
12289         h_sysfile=false
12290         ;;
12291 esac
12292 set i_sysfile
12293 eval $setvar
12294
12295 : see if fcntl.h is there
12296 val=''
12297 set fcntl.h val
12298 eval $inhdr
12299
12300 : see if we can include fcntl.h
12301 case "$val" in
12302 "$define")
12303         echo " "
12304         if $h_fcntl; then
12305                 val="$define"
12306                 echo "We'll be including <fcntl.h>." >&4
12307         else
12308                 val="$undef"
12309                 if $h_sysfile; then
12310         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12311                 else
12312                         echo "We won't be including <fcntl.h>." >&4
12313                 fi
12314         fi
12315         ;;
12316 *)
12317         h_fcntl=false
12318         val="$undef"
12319         ;;
12320 esac
12321 set i_fcntl
12322 eval $setvar
12323
12324 : see if locale.h is available
12325 set locale.h i_locale
12326 eval $inhdr
12327
12328 : see if mach cthreads are available
12329 if test "X$usethreads" = "X$define"; then
12330         set mach/cthreads.h i_machcthr
12331         eval $inhdr
12332 else
12333         i_machcthr="$undef"
12334 fi
12335
12336
12337
12338 : see if this is a math.h system
12339 set math.h i_math
12340 eval $inhdr
12341
12342 : see if this is a mntent.h system
12343 set mntent.h i_mntent
12344 eval $inhdr
12345
12346 : see if ndbm.h is available
12347 set ndbm.h t_ndbm
12348 eval $inhdr
12349 case "$t_ndbm" in
12350 $define)
12351         : see if dbm_open exists
12352         set dbm_open d_dbm_open
12353         eval $inlibc
12354         case "$d_dbm_open" in
12355         $undef)
12356                 t_ndbm="$undef"
12357                 echo "We won't be including <ndbm.h>"
12358                 ;;
12359         esac
12360         ;;
12361 esac
12362 val="$t_ndbm"
12363 set i_ndbm
12364 eval $setvar
12365
12366 : see if net/errno.h is available
12367 val=''
12368 set net/errno.h val
12369 eval $inhdr
12370
12371 : Unfortunately, it causes problems on some systems.  Arrgh.
12372 case "$val" in
12373 $define)
12374         cat > try.c <<'EOM'
12375 #include <stdio.h>
12376 #include <errno.h>
12377 #include <net/errno.h>
12378 int func()
12379 {
12380         return ENOTSOCK;
12381 }
12382 EOM
12383         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12384                 echo "We'll be including <net/errno.h>." >&4
12385         else
12386                 echo "We won't be including <net/errno.h>." >&4
12387                 val="$undef"
12388         fi
12389         $rm -f try.* try
12390         ;;
12391 esac
12392 set i_neterrno
12393 eval $setvar
12394
12395 : see if netinet/tcp.h is available
12396 set netinet/tcp.h i_netinettcp
12397 eval $inhdr
12398
12399 : see if this is a poll.h system
12400 set poll.h i_poll
12401 eval $inhdr
12402
12403 : get C preprocessor symbols handy
12404 echo " "
12405 $echo $n "Hmm... $c"
12406 echo $al | $tr ' ' $trnl >Cppsym.know
12407 $cat <<EOSS >Cppsym
12408 $startsh
12409 case "\$1" in
12410 -l) list=true
12411         shift
12412         ;;
12413 esac
12414 unknown=''
12415 case "\$list\$#" in
12416 1|2)
12417         for sym do
12418                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12419                         exit 0
12420                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12421                         :
12422                 else
12423                         unknown="\$unknown \$sym"
12424                 fi
12425         done
12426         set X \$unknown
12427         shift
12428         ;;
12429 esac
12430 case \$# in
12431 0) exit 1;;
12432 esac
12433 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12434 #ifdef \1\\
12435 exit 0; _ _ _ _\1\\      \1\\
12436 #endif\\
12437 /' >Cppsym\$\$
12438 echo "exit 1; _ _ _" >>Cppsym\$\$
12439 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12440 case "\$list" in
12441 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12442 *)
12443         sh Cppsym2\$\$
12444         status=\$?
12445         ;;
12446 esac
12447 $rm -f Cppsym\$\$ Cppsym2\$\$
12448 exit \$status
12449 EOSS
12450 chmod +x Cppsym
12451 $eunicefix Cppsym
12452 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12453
12454 : now check the C compiler for additional symbols
12455 postprocess_cc_v=''
12456 case "$osname" in
12457 aix) postprocess_cc_v="|$tr , ' '" ;;
12458 esac
12459 $cat >ccsym <<EOS
12460 $startsh
12461 $cat >tmp.c <<EOF
12462 extern int foo;
12463 EOF
12464 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12465 do
12466         case "\$i" in
12467         -D*) echo "\$i" | $sed 's/^-D//';;
12468         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12469         esac
12470 done
12471 $rm -f try.c
12472 EOS
12473 postprocess_cc_v=''
12474 chmod +x ccsym
12475 $eunicefix ccsym
12476 ./ccsym > ccsym1.raw
12477 if $test -s ccsym1.raw; then
12478        $sort ccsym1.raw | $uniq >ccsym.raw
12479 else
12480        mv ccsym1.raw ccsym.raw
12481 fi
12482
12483 $awk '/\=/ { print $0; next }
12484         { print $0"=1" }' ccsym.raw >ccsym.list
12485 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12486 $comm -13 ccsym.true ccsym.list >ccsym.own
12487 $comm -12 ccsym.true ccsym.list >ccsym.com
12488 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12489 also=''
12490 if $test -z ccsym.raw; then
12491         echo "Your C compiler doesn't seem to define any symbols!" >&4
12492         echo " "
12493         echo "However, your C preprocessor defines the following symbols:"
12494         $cat Cppsym.true
12495         ccsymbols=''
12496         cppsymbols=`$cat Cppsym.true`
12497         cppsymbols=`echo $cppsymbols`
12498         cppccsymbols="$cppsymbols"
12499 else
12500         if $test -s ccsym.com; then
12501                 echo "Your C compiler and pre-processor define these symbols:"
12502                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12503                 also='also '
12504                 symbols='ones'
12505                 cppccsymbols=`$cat ccsym.com`
12506                 cppccsymbols=`echo $cppccsymbols`
12507                 $test "$silent" || sleep 1
12508         fi
12509         if $test -s ccsym.cpp; then
12510                 $test "$also" && echo " "
12511                 echo "Your C pre-processor ${also}defines the following symbols:"
12512                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12513                 also='further '
12514                 cppsymbols=`$cat ccsym.cpp`
12515                 cppsymbols=`echo $cppsymbols`
12516                 $test "$silent" || sleep 1
12517         fi
12518         if $test -s ccsym.own; then
12519                 $test "$also" && echo " "
12520                 echo "Your C compiler ${also}defines the following cpp symbols:"
12521                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12522                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12523                 ccsymbols=`$cat ccsym.own`
12524                 ccsymbols=`echo $ccsymbols`
12525                 $test "$silent" || sleep 1
12526         fi
12527 fi
12528 $rm -f ccsym*
12529
12530 : see if this is a termio system
12531 val="$undef"
12532 val2="$undef"
12533 val3="$undef"
12534 if $test `./findhdr termios.h`; then
12535         set tcsetattr i_termios
12536         eval $inlibc
12537         val3="$i_termios"
12538 fi
12539 echo " "
12540 case "$val3" in
12541 "$define") echo "You have POSIX termios.h... good!" >&4;;
12542 *) if ./Cppsym pyr; then
12543                 case "`/bin/universe`" in
12544                 ucb) if $test `./findhdr sgtty.h`; then
12545                                 val2="$define"
12546                                 echo "<sgtty.h> found." >&4
12547                         else
12548                                 echo "System is pyramid with BSD universe."
12549                                 echo "<sgtty.h> not found--you could have problems." >&4
12550                         fi;;
12551                 *) if $test `./findhdr termio.h`; then
12552                                 val="$define"
12553                                 echo "<termio.h> found." >&4
12554                         else
12555                                 echo "System is pyramid with USG universe."
12556                                 echo "<termio.h> not found--you could have problems." >&4
12557                         fi;;
12558                 esac
12559         elif ./usg; then
12560                 if $test `./findhdr termio.h`; then
12561                         echo "<termio.h> found." >&4
12562                         val="$define"
12563                 elif $test `./findhdr sgtty.h`; then
12564                         echo "<sgtty.h> found." >&4
12565                         val2="$define"
12566                 else
12567 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12568                 fi
12569         else
12570                 if $test `./findhdr sgtty.h`; then
12571                         echo "<sgtty.h> found." >&4
12572                         val2="$define"
12573                 elif $test `./findhdr termio.h`; then
12574                         echo "<termio.h> found." >&4
12575                         val="$define"
12576                 else
12577 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12578                 fi
12579         fi;;
12580 esac
12581 set i_termio; eval $setvar
12582 val=$val2; set i_sgtty; eval $setvar
12583 val=$val3; set i_termios; eval $setvar
12584
12585 : see if this is a shadow.h system
12586 set shadow.h i_shadow
12587 eval $inhdr
12588
12589 : see if this is a socks.h system
12590 set socks.h i_socks
12591 eval $inhdr
12592
12593 : see if stdarg is available
12594 echo " "
12595 if $test `./findhdr stdarg.h`; then
12596         echo "<stdarg.h> found." >&4
12597         valstd="$define"
12598 else
12599         echo "<stdarg.h> NOT found." >&4
12600         valstd="$undef"
12601 fi
12602
12603 : see if varags is available
12604 echo " "
12605 if $test `./findhdr varargs.h`; then
12606         echo "<varargs.h> found." >&4
12607 else
12608         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12609 fi
12610
12611 : set up the varargs testing programs
12612 $cat > varargs.c <<EOP
12613 #ifdef I_STDARG
12614 #include <stdarg.h>
12615 #endif
12616 #ifdef I_VARARGS
12617 #include <varargs.h>
12618 #endif
12619
12620 #ifdef I_STDARG
12621 int f(char *p, ...)
12622 #else
12623 int f(va_alist)
12624 va_dcl
12625 #endif
12626 {
12627         va_list ap;
12628 #ifndef I_STDARG
12629         char *p;
12630 #endif
12631 #ifdef I_STDARG
12632         va_start(ap,p);
12633 #else
12634         va_start(ap);
12635         p = va_arg(ap, char *);
12636 #endif
12637         va_end(ap);
12638 }
12639 EOP
12640 $cat > varargs <<EOP
12641 $startsh
12642 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12643         echo "true"
12644 else
12645         echo "false"
12646 fi
12647 $rm -f varargs$_o
12648 EOP
12649 chmod +x varargs
12650
12651 : now check which varargs header should be included
12652 echo " "
12653 i_varhdr=''
12654 case "$valstd" in
12655 "$define")
12656         if `./varargs I_STDARG`; then
12657                 val='stdarg.h'
12658         elif `./varargs I_VARARGS`; then
12659                 val='varargs.h'
12660         fi
12661         ;;
12662 *)
12663         if `./varargs I_VARARGS`; then
12664                 val='varargs.h'
12665         fi
12666         ;;
12667 esac
12668 case "$val" in
12669 '')
12670 echo "I could not find the definition for va_dcl... You have problems..." >&4
12671         val="$undef"; set i_stdarg; eval $setvar
12672         val="$undef"; set i_varargs; eval $setvar
12673         ;;
12674 *) 
12675         set i_varhdr
12676         eval $setvar
12677         case "$i_varhdr" in
12678         stdarg.h)
12679                 val="$define"; set i_stdarg; eval $setvar
12680                 val="$undef"; set i_varargs; eval $setvar
12681                 ;;
12682         varargs.h)
12683                 val="$undef"; set i_stdarg; eval $setvar
12684                 val="$define"; set i_varargs; eval $setvar
12685                 ;;
12686         esac
12687         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12688 esac
12689 $rm -f varargs*
12690
12691 : see if stddef is available
12692 set stddef.h i_stddef
12693 eval $inhdr
12694
12695 : see if sys/access.h is available
12696 set sys/access.h i_sysaccess
12697 eval $inhdr
12698
12699 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12700 set sys/filio.h i_sysfilio
12701 eval $inhdr
12702 echo " "
12703 if $test `./findhdr sys/ioctl.h`; then
12704         val="$define"
12705         echo '<sys/ioctl.h> found.' >&4
12706 else
12707         val="$undef"
12708         if $test $i_sysfilio = "$define"; then
12709             echo '<sys/ioctl.h> NOT found.' >&4
12710         else
12711                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12712                 $test $i_termio = "$define" && xxx="termio.h"
12713                 $test $i_termios = "$define" && xxx="termios.h"
12714 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12715         fi
12716 fi
12717 set i_sysioctl
12718 eval $setvar
12719
12720 : see if sys/resource.h has to be included
12721 set sys/resource.h i_sysresrc
12722 eval $inhdr
12723
12724 : see if sys/security.h is available
12725 set sys/security.h i_syssecrt
12726 eval $inhdr
12727
12728 : see if this is a sys/statvfs.h system
12729 set sys/statvfs.h i_sysstatvfs
12730 eval $inhdr
12731
12732 : see if this is a sys/un.h system
12733 set sys/un.h i_sysun
12734 eval $inhdr
12735
12736 : see if this is a syswait system
12737 set sys/wait.h i_syswait
12738 eval $inhdr
12739
12740 : see if this is an utime system
12741 set utime.h i_utime
12742 eval $inhdr
12743
12744 : see if this is a values.h system
12745 set values.h i_values
12746 eval $inhdr
12747
12748 : see if this is a vfork system
12749 case "$d_vfork" in
12750 "$define")
12751         set vfork.h i_vfork
12752         eval $inhdr
12753         ;;
12754 *)
12755         i_vfork="$undef"
12756         ;;
12757 esac
12758
12759 : see if gdbm.h is available
12760 set gdbm.h t_gdbm
12761 eval $inhdr
12762 case "$t_gdbm" in
12763 $define)
12764         : see if gdbm_open exists
12765         set gdbm_open d_gdbm_open
12766         eval $inlibc
12767         case "$d_gdbm_open" in
12768         $undef)
12769                 t_gdbm="$undef"
12770                 echo "We won't be including <gdbm.h>"
12771                 ;;
12772         esac
12773         ;;
12774 esac
12775 val="$t_gdbm"
12776 set i_gdbm
12777 eval $setvar
12778
12779 echo " "
12780 echo "Looking for extensions..." >&4
12781 : If we are using the old config.sh, known_extensions may contain
12782 : old or inaccurate or duplicate values.
12783 known_extensions=''
12784 nonxs_extensions=''
12785 : We do not use find because it might not be available.
12786 : We do not just use MANIFEST because the user may have dropped
12787 : some additional extensions into the source tree and expect them
12788 : to be built.
12789
12790 : Function to recursively find available extensions, ignoring DynaLoader
12791 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12792 find_extensions='
12793     for xxx in *; do
12794        case "$xxx" in
12795            DynaLoader|dynaload) ;;
12796            *)
12797            if $test -f $xxx/$xxx.xs; then
12798                known_extensions="$known_extensions $1$xxx";
12799            elif $test -f $xxx/Makefile.PL; then
12800                nonxs_extensions="$nonxs_extensions $1$xxx";
12801            else
12802                if $test -d $xxx -a $# -lt 10; then
12803                    set $1$xxx/ $*;
12804                    cd $xxx;
12805                    eval $find_extensions;
12806                    cd ..;
12807                    shift;
12808                fi;
12809            fi
12810            ;;
12811        esac;
12812     done'
12813 tdir=`pwd`
12814 cd $rsrc/ext
12815 set X
12816 shift
12817 eval $find_extensions
12818 set X $nonxs_extensions
12819 shift
12820 nonxs_extensions="$*"
12821 set X $known_extensions
12822 shift
12823 known_extensions="$*"
12824 cd $tdir
12825
12826 : Now see which are supported on this system.
12827 avail_ext=''
12828 for xxx in $known_extensions ; do
12829         case "$xxx" in
12830         DB_File|db_file)
12831                 case "$i_db" in
12832                 $define) avail_ext="$avail_ext $xxx" ;;
12833                 esac
12834                 ;;
12835         GDBM_File|gdbm_fil)
12836                 case "$i_gdbm" in 
12837                 $define) avail_ext="$avail_ext $xxx" ;;
12838                 esac
12839                 ;;
12840         NDBM_File|ndbm_fil)
12841                 case "$i_ndbm" in
12842                 $define) avail_ext="$avail_ext $xxx" ;;
12843                 esac
12844                 ;;
12845         ODBM_File|odbm_fil) 
12846                 case "${i_dbm}${i_rpcsvcdbm}" in
12847                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12848                 esac
12849                 ;;
12850         POSIX|posix)
12851                 case "$useposix" in
12852                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12853                 esac
12854                 ;;
12855         Opcode|opcode)
12856                 case "$useopcode" in
12857                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12858                 esac
12859                 ;;
12860         Socket|socket)
12861                 case "$d_socket" in 
12862                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12863                 esac
12864                 ;;
12865         Thread|thread)
12866                 case "$usethreads" in 
12867                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12868                 esac
12869                 ;;
12870         IPC/SysV|ipc/sysv)
12871                 : XXX Do we need a useipcsysv variable here
12872                 case "${d_msg}${d_sem}${d_shm}" in 
12873                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12874                 esac
12875                 ;;
12876         *)      avail_ext="$avail_ext $xxx"
12877                 ;;
12878         esac
12879 done
12880
12881 set X $avail_ext
12882 shift
12883 avail_ext="$*"
12884
12885 : Now see which nonxs extensions are supported on this system.
12886 : For now assume all are.
12887 nonxs_ext=''
12888 for xxx in $nonxs_extensions ; do
12889         case "$xxx" in
12890         *)      nonxs_ext="$nonxs_ext $xxx"
12891                 ;;
12892         esac
12893 done
12894
12895 set X $nonxs_ext
12896 shift
12897 nonxs_ext="$*"
12898
12899 case $usedl in
12900 $define)
12901         $cat <<EOM
12902 A number of extensions are supplied with $package.  You may choose to
12903 compile these extensions for dynamic loading (the default), compile
12904 them into the $package executable (static loading), or not include
12905 them at all.  Answer "none" to include no extensions.
12906 Note that DynaLoader is always built and need not be mentioned here.
12907
12908 EOM
12909         case "$dynamic_ext" in
12910         '') dflt="$avail_ext" ;;
12911         *)      dflt="$dynamic_ext"
12912                 # Perhaps we are reusing an old out-of-date config.sh.
12913                 case "$hint" in
12914                 previous)
12915                         if test X"$dynamic_ext" != X"$avail_ext"; then
12916                                 $cat <<EOM
12917 NOTICE:  Your previous config.sh list may be incorrect. 
12918 The extensions now available to you are 
12919         ${avail_ext}
12920 but the default list from your previous config.sh is
12921         ${dynamic_ext} 
12922
12923 EOM
12924                         fi
12925                         ;;
12926                 esac
12927                 ;;
12928         esac
12929         case "$dflt" in
12930         '')     dflt=none;;
12931         esac
12932         rp="What extensions do you wish to load dynamically?"
12933         . ./myread
12934         case "$ans" in
12935         none) dynamic_ext=' ' ;;
12936         *) dynamic_ext="$ans" ;;
12937         esac
12938
12939         case "$static_ext" in
12940         '')
12941                 : Exclude those already listed in dynamic linking
12942                 dflt=''
12943                 for xxx in $avail_ext; do
12944                         case " $dynamic_ext " in
12945                         *" $xxx "*) ;;
12946                         *) dflt="$dflt $xxx" ;;
12947                         esac
12948                 done
12949                 set X $dflt
12950                 shift
12951                 dflt="$*"
12952                 ;;
12953         *)  dflt="$static_ext" 
12954                 ;;
12955         esac
12956
12957         case "$dflt" in
12958         '')     dflt=none;;
12959         esac
12960         rp="What extensions do you wish to load statically?"
12961         . ./myread
12962         case "$ans" in
12963         none) static_ext=' ' ;;
12964         *) static_ext="$ans" ;;
12965         esac
12966         ;;
12967 *)
12968         $cat <<EOM
12969 A number of extensions are supplied with $package.  Answer "none" 
12970 to include no extensions. 
12971 Note that DynaLoader is always built and need not be mentioned here.
12972
12973 EOM
12974         case "$static_ext" in
12975         '') dflt="$avail_ext" ;;
12976         *)      dflt="$static_ext"
12977                 # Perhaps we are reusing an old out-of-date config.sh.
12978                 case "$hint" in
12979                 previous)
12980                         if test X"$static_ext" != X"$avail_ext"; then
12981                                 $cat <<EOM
12982 NOTICE:  Your previous config.sh list may be incorrect. 
12983 The extensions now available to you are 
12984         ${avail_ext}
12985 but the default list from your previous config.sh is
12986         ${static_ext} 
12987
12988 EOM
12989                         fi
12990                         ;;
12991                 esac
12992                 ;;
12993         esac
12994         : Exclude those that are not xs extensions
12995         case "$dflt" in
12996         '')     dflt=none;;
12997         esac
12998         rp="What extensions do you wish to include?"
12999         . ./myread
13000         case "$ans" in
13001         none) static_ext=' ' ;;
13002         *) static_ext="$ans" ;;
13003         esac
13004         ;;
13005 esac
13006
13007 set X $dynamic_ext $static_ext $nonxs_ext
13008 shift
13009 extensions="$*"
13010
13011 : Remove build directory name from cppstdin so it can be used from
13012 : either the present location or the final installed location.
13013 echo " "
13014 : Get out of the UU directory to get correct path name.
13015 cd ..
13016 case "$cppstdin" in
13017 `pwd`/cppstdin)
13018         echo "Stripping down cppstdin path name"
13019         cppstdin=cppstdin
13020         ;;
13021 esac
13022 cd UU
13023
13024 : end of configuration questions
13025 echo " "
13026 echo "End of configuration questions."
13027 echo " "
13028
13029 : back to where it started
13030 if test -d ../UU; then
13031         cd ..
13032 fi
13033
13034 : configuration may be patched via a 'config.over' file
13035 if $test -f config.over; then
13036         echo " "
13037         dflt=y
13038         rp='I see a config.over file.  Do you wish to load it?'
13039         . UU/myread
13040         case "$ans" in
13041         n*) echo "OK, I'll ignore it.";;
13042         *)      . ./config.over
13043                 echo "Configuration override changes have been loaded."
13044                 ;;
13045         esac
13046 fi
13047
13048 : in case they want portability, strip down executable paths
13049 case "$d_portable" in
13050 "$define")
13051         echo " "
13052         echo "Stripping down executable paths..." >&4
13053         for file in $loclist $trylist; do
13054                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
13055                         eval $file="\$file"
13056                 fi
13057         done
13058         ;;
13059 esac
13060
13061 : create config.sh file
13062 echo " "
13063 echo "Creating config.sh..." >&4
13064 $spitshell <<EOT >config.sh
13065 $startsh
13066 #
13067 # This file was produced by running the Configure script. It holds all the
13068 # definitions figured out by Configure. Should you modify one of these values,
13069 # do not forget to propagate your changes by running "Configure -der". You may
13070 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13071 #
13072
13073 # Package name      : $package
13074 # Source directory  : $src
13075 # Configuration time: $cf_time
13076 # Configured by     : $cf_by
13077 # Target system     : $myuname
13078
13079 Author='$Author'
13080 Date='$Date'
13081 Header='$Header'
13082 Id='$Id'
13083 Locker='$Locker'
13084 Log='$Log'
13085 Mcc='$Mcc'
13086 RCSfile='$RCSfile'
13087 Revision='$Revision'
13088 Source='$Source'
13089 State='$State'
13090 _a='$_a'
13091 _exe='$_exe'
13092 _o='$_o'
13093 afs='$afs'
13094 alignbytes='$alignbytes'
13095 ansi2knr='$ansi2knr'
13096 aphostname='$aphostname'
13097 apiversion='$apiversion'
13098 ar='$ar'
13099 archlib='$archlib'
13100 archlibexp='$archlibexp'
13101 archname64='$archname64'
13102 archname='$archname'
13103 archobjs='$archobjs'
13104 awk='$awk'
13105 baserev='$baserev'
13106 bash='$bash'
13107 bin='$bin'
13108 bincompat5005='$bincompat5005'
13109 binexp='$binexp'
13110 bison='$bison'
13111 byacc='$byacc'
13112 byteorder='$byteorder'
13113 c='$c'
13114 castflags='$castflags'
13115 cat='$cat'
13116 cc='$cc'
13117 cccdlflags='$cccdlflags'
13118 ccdlflags='$ccdlflags'
13119 ccflags='$ccflags'
13120 ccsymbols='$ccsymbols'
13121 cf_by='$cf_by'
13122 cf_email='$cf_email'
13123 cf_time='$cf_time'
13124 chgrp='$chgrp'
13125 chmod='$chmod'
13126 chown='$chown'
13127 clocktype='$clocktype'
13128 comm='$comm'
13129 compress='$compress'
13130 contains='$contains'
13131 cp='$cp'
13132 cpio='$cpio'
13133 cpp='$cpp'
13134 cpp_stuff='$cpp_stuff'
13135 cppccsymbols='$cppccsymbols'
13136 cppflags='$cppflags'
13137 cpplast='$cpplast'
13138 cppminus='$cppminus'
13139 cpprun='$cpprun'
13140 cppstdin='$cppstdin'
13141 cppsymbols='$cppsymbols'
13142 crosscompile='$crosscompile'
13143 cryptlib='$cryptlib'
13144 csh='$csh'
13145 d_Gconvert='$d_Gconvert'
13146 d_access='$d_access'
13147 d_accessx='$d_accessx'
13148 d_alarm='$d_alarm'
13149 d_archlib='$d_archlib'
13150 d_attribut='$d_attribut'
13151 d_bcmp='$d_bcmp'
13152 d_bcopy='$d_bcopy'
13153 d_bincompat5005='$d_bincompat5005'
13154 d_bsd='$d_bsd'
13155 d_bsdgetpgrp='$d_bsdgetpgrp'
13156 d_bsdsetpgrp='$d_bsdsetpgrp'
13157 d_bzero='$d_bzero'
13158 d_casti32='$d_casti32'
13159 d_castneg='$d_castneg'
13160 d_charvspr='$d_charvspr'
13161 d_chown='$d_chown'
13162 d_chroot='$d_chroot'
13163 d_chsize='$d_chsize'
13164 d_closedir='$d_closedir'
13165 d_cmsghdr_s='$d_cmsghdr_s'
13166 d_const='$d_const'
13167 d_crypt='$d_crypt'
13168 d_csh='$d_csh'
13169 d_cuserid='$d_cuserid'
13170 d_dbl_dig='$d_dbl_dig'
13171 d_dbmclose64='$d_dbmclose64'
13172 d_dbminit64='$d_dbminit64'
13173 d_delete64='$d_delete64'
13174 d_difftime='$d_difftime'
13175 d_dirent64_s='$d_dirent64_s'
13176 d_dirnamlen='$d_dirnamlen'
13177 d_dlerror='$d_dlerror'
13178 d_dlopen='$d_dlopen'
13179 d_dlsymun='$d_dlsymun'
13180 d_dosuid='$d_dosuid'
13181 d_drand48proto='$d_drand48proto'
13182 d_dup2='$d_dup2'
13183 d_eaccess='$d_eaccess'
13184 d_endgrent='$d_endgrent'
13185 d_endhent='$d_endhent'
13186 d_endnent='$d_endnent'
13187 d_endpent='$d_endpent'
13188 d_endpwent='$d_endpwent'
13189 d_endsent='$d_endsent'
13190 d_endspent='$d_endspent'
13191 d_eofnblk='$d_eofnblk'
13192 d_eunice='$d_eunice'
13193 d_fchmod='$d_fchmod'
13194 d_fchown='$d_fchown'
13195 d_fcntl='$d_fcntl'
13196 d_fd_macros='$d_fd_macros'
13197 d_fd_set='$d_fd_set'
13198 d_fds_bits='$d_fds_bits'
13199 d_fetch64='$d_fetch64'
13200 d_fgetpos64='$d_fgetpos64'
13201 d_fgetpos='$d_fgetpos'
13202 d_firstkey64='$d_firstkey64'
13203 d_flexfnam='$d_flexfnam'
13204 d_flock64_s='$d_flock64_s'
13205 d_flock='$d_flock'
13206 d_fopen64='$d_fopen64'
13207 d_fork='$d_fork'
13208 d_fpathconf='$d_fpathconf'
13209 d_freopen64='$d_freopen64'
13210 d_fseek64='$d_fseek64'
13211 d_fseeko64='$d_fseeko64'
13212 d_fseeko='$d_fseeko'
13213 d_fsetpos64='$d_fsetpos64'
13214 d_fsetpos='$d_fsetpos'
13215 d_fstat64='$d_fstat64'
13216 d_fstatfs='$d_fstatfs'
13217 d_fstatvfs='$d_fstatvfs'
13218 d_ftell64='$d_ftell64'
13219 d_ftello64='$d_ftello64'
13220 d_ftello='$d_ftello'
13221 d_ftime='$d_ftime'
13222 d_ftruncate64='$d_ftruncate64'
13223 d_getgrent='$d_getgrent'
13224 d_getgrps='$d_getgrps'
13225 d_gethbyaddr='$d_gethbyaddr'
13226 d_gethbyname='$d_gethbyname'
13227 d_gethent='$d_gethent'
13228 d_gethname='$d_gethname'
13229 d_gethostprotos='$d_gethostprotos'
13230 d_getlogin='$d_getlogin'
13231 d_getmntent='$d_getmntent'
13232 d_getnbyaddr='$d_getnbyaddr'
13233 d_getnbyname='$d_getnbyname'
13234 d_getnent='$d_getnent'
13235 d_getnetprotos='$d_getnetprotos'
13236 d_getpbyname='$d_getpbyname'
13237 d_getpbynumber='$d_getpbynumber'
13238 d_getpent='$d_getpent'
13239 d_getpgid='$d_getpgid'
13240 d_getpgrp2='$d_getpgrp2'
13241 d_getpgrp='$d_getpgrp'
13242 d_getppid='$d_getppid'
13243 d_getprior='$d_getprior'
13244 d_getprotoprotos='$d_getprotoprotos'
13245 d_getpwent='$d_getpwent'
13246 d_getsbyname='$d_getsbyname'
13247 d_getsbyport='$d_getsbyport'
13248 d_getsent='$d_getsent'
13249 d_getservprotos='$d_getservprotos'
13250 d_getspent='$d_getspent'
13251 d_getspnam='$d_getspnam'
13252 d_gettimeod='$d_gettimeod'
13253 d_gnulibc='$d_gnulibc'
13254 d_grpasswd='$d_grpasswd'
13255 d_hasmntopt='$d_hasmntopt'
13256 d_htonl='$d_htonl'
13257 d_index='$d_index'
13258 d_inetaton='$d_inetaton'
13259 d_ino64_t='$d_ino64_t'
13260 d_int64t='$d_int64t'
13261 d_iovec_s='$d_iovec_s'
13262 d_isascii='$d_isascii'
13263 d_killpg='$d_killpg'
13264 d_lchown='$d_lchown'
13265 d_link='$d_link'
13266 d_llseek='$d_llseek'
13267 d_locconv='$d_locconv'
13268 d_lockf64='$d_lockf64'
13269 d_lockf='$d_lockf'
13270 d_longdbl='$d_longdbl'
13271 d_longlong='$d_longlong'
13272 d_lseek64='$d_lseek64'
13273 d_lstat64='$d_lstat64'
13274 d_lstat='$d_lstat'
13275 d_madvise='$d_madvise'
13276 d_mblen='$d_mblen'
13277 d_mbstowcs='$d_mbstowcs'
13278 d_mbtowc='$d_mbtowc'
13279 d_memchr='$d_memchr'
13280 d_memcmp='$d_memcmp'
13281 d_memcpy='$d_memcpy'
13282 d_memmove='$d_memmove'
13283 d_memset='$d_memset'
13284 d_mkdir='$d_mkdir'
13285 d_mkfifo='$d_mkfifo'
13286 d_mktime='$d_mktime'
13287 d_mmap='$d_mmap'
13288 d_mprotect='$d_mprotect'
13289 d_msg='$d_msg'
13290 d_msg_ctrunc='$d_msg_ctrunc'
13291 d_msg_dontroute='$d_msg_dontroute'
13292 d_msg_oob='$d_msg_oob'
13293 d_msg_peek='$d_msg_peek'
13294 d_msg_proxy='$d_msg_proxy'
13295 d_msgctl='$d_msgctl'
13296 d_msgget='$d_msgget'
13297 d_msghdr_s='$d_msghdr_s'
13298 d_msgrcv='$d_msgrcv'
13299 d_msgsnd='$d_msgsnd'
13300 d_msync='$d_msync'
13301 d_munmap='$d_munmap'
13302 d_mymalloc='$d_mymalloc'
13303 d_nextkey64='$d_nextkey64'
13304 d_nice='$d_nice'
13305 d_off64_t='$d_off64_t'
13306 d_offset_t='$d_offset_t'
13307 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13308 d_oldpthreads='$d_oldpthreads'
13309 d_oldsock='$d_oldsock'
13310 d_open3='$d_open3'
13311 d_open64='$d_open64'
13312 d_opendir64='$d_opendir64'
13313 d_pathconf='$d_pathconf'
13314 d_pause='$d_pause'
13315 d_phostname='$d_phostname'
13316 d_pipe='$d_pipe'
13317 d_poll='$d_poll'
13318 d_portable='$d_portable'
13319 d_pthread_yield='$d_pthread_yield'
13320 d_pwage='$d_pwage'
13321 d_pwchange='$d_pwchange'
13322 d_pwclass='$d_pwclass'
13323 d_pwcomment='$d_pwcomment'
13324 d_pwexpire='$d_pwexpire'
13325 d_pwgecos='$d_pwgecos'
13326 d_pwpasswd='$d_pwpasswd'
13327 d_pwquota='$d_pwquota'
13328 d_readdir64='$d_readdir64'
13329 d_readdir='$d_readdir'
13330 d_readlink='$d_readlink'
13331 d_readv='$d_readv'
13332 d_recvmsg='$d_recvmsg'
13333 d_rename='$d_rename'
13334 d_rewinddir='$d_rewinddir'
13335 d_rmdir='$d_rmdir'
13336 d_safebcpy='$d_safebcpy'
13337 d_safemcpy='$d_safemcpy'
13338 d_sanemcmp='$d_sanemcmp'
13339 d_sched_yield='$d_sched_yield'
13340 d_scm_rights='$d_scm_rights'
13341 d_seekdir64='$d_seekdir64'
13342 d_seekdir='$d_seekdir'
13343 d_select='$d_select'
13344 d_sem='$d_sem'
13345 d_semctl='$d_semctl'
13346 d_semctl_semid_ds='$d_semctl_semid_ds'
13347 d_semctl_semun='$d_semctl_semun'
13348 d_semget='$d_semget'
13349 d_semop='$d_semop'
13350 d_sendmsg='$d_sendmsg'
13351 d_setegid='$d_setegid'
13352 d_seteuid='$d_seteuid'
13353 d_setgrent='$d_setgrent'
13354 d_setgrps='$d_setgrps'
13355 d_sethent='$d_sethent'
13356 d_setlinebuf='$d_setlinebuf'
13357 d_setlocale='$d_setlocale'
13358 d_setnent='$d_setnent'
13359 d_setpent='$d_setpent'
13360 d_setpgid='$d_setpgid'
13361 d_setpgrp2='$d_setpgrp2'
13362 d_setpgrp='$d_setpgrp'
13363 d_setprior='$d_setprior'
13364 d_setpwent='$d_setpwent'
13365 d_setregid='$d_setregid'
13366 d_setresgid='$d_setresgid'
13367 d_setresuid='$d_setresuid'
13368 d_setreuid='$d_setreuid'
13369 d_setrgid='$d_setrgid'
13370 d_setruid='$d_setruid'
13371 d_setsent='$d_setsent'
13372 d_setsid='$d_setsid'
13373 d_setspent='$d_setspent'
13374 d_setvbuf='$d_setvbuf'
13375 d_sfio='$d_sfio'
13376 d_shm='$d_shm'
13377 d_shmat='$d_shmat'
13378 d_shmatprototype='$d_shmatprototype'
13379 d_shmctl='$d_shmctl'
13380 d_shmdt='$d_shmdt'
13381 d_shmget='$d_shmget'
13382 d_sigaction='$d_sigaction'
13383 d_sigsetjmp='$d_sigsetjmp'
13384 d_socket='$d_socket'
13385 d_sockpair='$d_sockpair'
13386 d_stat64='$d_stat64'
13387 d_statblks='$d_statblks'
13388 d_statfs='$d_statfs'
13389 d_statfsflags='$d_statfsflags'
13390 d_statvfs='$d_statvfs'
13391 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13392 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13393 d_stdio_stream_array='$d_stdio_stream_array'
13394 d_stdiobase='$d_stdiobase'
13395 d_stdstdio='$d_stdstdio'
13396 d_store64='$d_store64'
13397 d_strchr='$d_strchr'
13398 d_strcoll='$d_strcoll'
13399 d_strctcpy='$d_strctcpy'
13400 d_strerrm='$d_strerrm'
13401 d_strerror='$d_strerror'
13402 d_strtod='$d_strtod'
13403 d_strtol='$d_strtol'
13404 d_strtoul='$d_strtoul'
13405 d_strxfrm='$d_strxfrm'
13406 d_suidsafe='$d_suidsafe'
13407 d_symlink='$d_symlink'
13408 d_syscall='$d_syscall'
13409 d_sysconf='$d_sysconf'
13410 d_sysernlst='$d_sysernlst'
13411 d_syserrlst='$d_syserrlst'
13412 d_system='$d_system'
13413 d_tcgetpgrp='$d_tcgetpgrp'
13414 d_tcsetpgrp='$d_tcsetpgrp'
13415 d_telldir64='$d_telldir64'
13416 d_telldir='$d_telldir'
13417 d_telldirproto='$d_telldirproto'
13418 d_time='$d_time'
13419 d_times='$d_times'
13420 d_tmpfile64='$d_tmpfile64'
13421 d_truncate64='$d_truncate64'
13422 d_truncate='$d_truncate'
13423 d_tzname='$d_tzname'
13424 d_umask='$d_umask'
13425 d_uname='$d_uname'
13426 d_union_semun='$d_union_semun'
13427 d_vendorlib='$d_vendorlib'
13428 d_vfork='$d_vfork'
13429 d_void_closedir='$d_void_closedir'
13430 d_voidsig='$d_voidsig'
13431 d_voidtty='$d_voidtty'
13432 d_volatile='$d_volatile'
13433 d_vprintf='$d_vprintf'
13434 d_wait4='$d_wait4'
13435 d_waitpid='$d_waitpid'
13436 d_wcstombs='$d_wcstombs'
13437 d_wctomb='$d_wctomb'
13438 d_writev='$d_writev'
13439 d_xenix='$d_xenix'
13440 date='$date'
13441 db_hashtype='$db_hashtype'
13442 db_prefixtype='$db_prefixtype'
13443 defvoidused='$defvoidused'
13444 direntrytype='$direntrytype'
13445 dlext='$dlext'
13446 dlsrc='$dlsrc'
13447 doublesize='$doublesize'
13448 drand01='$drand01'
13449 dynamic_ext='$dynamic_ext'
13450 eagain='$eagain'
13451 ebcdic='$ebcdic'
13452 echo='$echo'
13453 egrep='$egrep'
13454 emacs='$emacs'
13455 eunicefix='$eunicefix'
13456 exe_ext='$exe_ext'
13457 expr='$expr'
13458 extensions='$extensions'
13459 fflushNULL='$fflushNULL'
13460 fflushall='$fflushall'
13461 find='$find'
13462 firstmakefile='$firstmakefile'
13463 flex='$flex'
13464 fpostype='$fpostype'
13465 freetype='$freetype'
13466 full_ar='$full_ar'
13467 full_csh='$full_csh'
13468 full_sed='$full_sed'
13469 gccversion='$gccversion'
13470 gidtype='$gidtype'
13471 glibpth='$glibpth'
13472 grep='$grep'
13473 groupcat='$groupcat'
13474 groupstype='$groupstype'
13475 gzip='$gzip'
13476 h_fcntl='$h_fcntl'
13477 h_sysfile='$h_sysfile'
13478 hint='$hint'
13479 hostcat='$hostcat'
13480 huge='$huge'
13481 i_arpainet='$i_arpainet'
13482 i_bsdioctl='$i_bsdioctl'
13483 i_db='$i_db'
13484 i_dbm='$i_dbm'
13485 i_dirent='$i_dirent'
13486 i_dld='$i_dld'
13487 i_dlfcn='$i_dlfcn'
13488 i_fcntl='$i_fcntl'
13489 i_float='$i_float'
13490 i_gdbm='$i_gdbm'
13491 i_grp='$i_grp'
13492 i_inttypes='$i_inttypes'
13493 i_limits='$i_limits'
13494 i_locale='$i_locale'
13495 i_machcthr='$i_machcthr'
13496 i_malloc='$i_malloc'
13497 i_math='$i_math'
13498 i_memory='$i_memory'
13499 i_mntent='$i_mntent'
13500 i_ndbm='$i_ndbm'
13501 i_netdb='$i_netdb'
13502 i_neterrno='$i_neterrno'
13503 i_netinettcp='$i_netinettcp'
13504 i_niin='$i_niin'
13505 i_poll='$i_poll'
13506 i_pthread='$i_pthread'
13507 i_pwd='$i_pwd'
13508 i_rpcsvcdbm='$i_rpcsvcdbm'
13509 i_sfio='$i_sfio'
13510 i_sgtty='$i_sgtty'
13511 i_shadow='$i_shadow'
13512 i_socks='$i_socks'
13513 i_stdarg='$i_stdarg'
13514 i_stddef='$i_stddef'
13515 i_stdlib='$i_stdlib'
13516 i_string='$i_string'
13517 i_sysaccess='$i_sysaccess'
13518 i_sysdir='$i_sysdir'
13519 i_sysfile='$i_sysfile'
13520 i_sysfilio='$i_sysfilio'
13521 i_sysin='$i_sysin'
13522 i_sysioctl='$i_sysioctl'
13523 i_sysmman='$i_sysmman'
13524 i_sysmount='$i_sysmount'
13525 i_sysndir='$i_sysndir'
13526 i_sysparam='$i_sysparam'
13527 i_sysresrc='$i_sysresrc'
13528 i_syssecrt='$i_syssecrt'
13529 i_sysselct='$i_sysselct'
13530 i_syssockio='$i_syssockio'
13531 i_sysstat='$i_sysstat'
13532 i_sysstatvfs='$i_sysstatvfs'
13533 i_systime='$i_systime'
13534 i_systimek='$i_systimek'
13535 i_systimes='$i_systimes'
13536 i_systypes='$i_systypes'
13537 i_sysuio='$i_sysuio'
13538 i_sysun='$i_sysun'
13539 i_syswait='$i_syswait'
13540 i_termio='$i_termio'
13541 i_termios='$i_termios'
13542 i_time='$i_time'
13543 i_unistd='$i_unistd'
13544 i_utime='$i_utime'
13545 i_values='$i_values'
13546 i_varargs='$i_varargs'
13547 i_varhdr='$i_varhdr'
13548 i_vfork='$i_vfork'
13549 ignore_versioned_solibs='$ignore_versioned_solibs'
13550 incpath='$incpath'
13551 inews='$inews'
13552 installarchlib='$installarchlib'
13553 installbin='$installbin'
13554 installman1dir='$installman1dir'
13555 installman3dir='$installman3dir'
13556 installprefix='$installprefix'
13557 installprefixexp='$installprefixexp'
13558 installprivlib='$installprivlib'
13559 installscript='$installscript'
13560 installsitearch='$installsitearch'
13561 installsitelib='$installsitelib'
13562 installstyle='$installstyle'
13563 installusrbinperl='$installusrbinperl'
13564 installvendorlib='$installvendorlib'
13565 intsize='$intsize'
13566 known_extensions='$known_extensions'
13567 ksh='$ksh'
13568 large='$large'
13569 ld='$ld'
13570 lddlflags='$lddlflags'
13571 ldflags='$ldflags'
13572 ldlibpthname='$ldlibpthname'
13573 less='$less'
13574 lib_ext='$lib_ext'
13575 libc='$libc'
13576 libperl='$libperl'
13577 libpth='$libpth'
13578 libs='$libs'
13579 libswanted='$libswanted'
13580 line='$line'
13581 lint='$lint'
13582 lkflags='$lkflags'
13583 ln='$ln'
13584 lns='$lns'
13585 locincpth='$locincpth'
13586 loclibpth='$loclibpth'
13587 longdblsize='$longdblsize'
13588 longlongsize='$longlongsize'
13589 longsize='$longsize'
13590 lp='$lp'
13591 lpr='$lpr'
13592 ls='$ls'
13593 lseeksize='$lseeksize'
13594 lseektype='$lseektype'
13595 mail='$mail'
13596 mailx='$mailx'
13597 make='$make'
13598 make_set_make='$make_set_make'
13599 mallocobj='$mallocobj'
13600 mallocsrc='$mallocsrc'
13601 malloctype='$malloctype'
13602 man1dir='$man1dir'
13603 man1direxp='$man1direxp'
13604 man1ext='$man1ext'
13605 man3dir='$man3dir'
13606 man3direxp='$man3direxp'
13607 man3ext='$man3ext'
13608 medium='$medium'
13609 mips='$mips'
13610 mips_type='$mips_type'
13611 mkdir='$mkdir'
13612 mmaptype='$mmaptype'
13613 models='$models'
13614 modetype='$modetype'
13615 more='$more'
13616 multiarch='$multiarch'
13617 mv='$mv'
13618 myarchname='$myarchname'
13619 mydomain='$mydomain'
13620 myhostname='$myhostname'
13621 myuname='$myuname'
13622 n='$n'
13623 netdb_hlen_type='$netdb_hlen_type'
13624 netdb_host_type='$netdb_host_type'
13625 netdb_name_type='$netdb_name_type'
13626 netdb_net_type='$netdb_net_type'
13627 nm='$nm'
13628 nm_opt='$nm_opt'
13629 nm_so_opt='$nm_so_opt'
13630 nonxs_ext='$nonxs_ext'
13631 nroff='$nroff'
13632 o_nonblock='$o_nonblock'
13633 obj_ext='$obj_ext'
13634 old_pthread_create_joinable='$old_pthread_create_joinable'
13635 optimize='$optimize'
13636 orderlib='$orderlib'
13637 osname='$osname'
13638 osvers='$osvers'
13639 package='$package'
13640 pager='$pager'
13641 passcat='$passcat'
13642 patchlevel='$patchlevel'
13643 path_sep='$path_sep'
13644 perl='$perl'
13645 perladmin='$perladmin'
13646 perlpath='$perlpath'
13647 pg='$pg'
13648 phostname='$phostname'
13649 pidtype='$pidtype'
13650 plibpth='$plibpth'
13651 pmake='$pmake'
13652 pr='$pr'
13653 prefix='$prefix'
13654 prefixexp='$prefixexp'
13655 privlib='$privlib'
13656 privlibexp='$privlibexp'
13657 prototype='$prototype'
13658 ptrsize='$ptrsize'
13659 randbits='$randbits'
13660 randfunc='$randfunc'
13661 randseedtype='$randseedtype'
13662 ranlib='$ranlib'
13663 rd_nodata='$rd_nodata'
13664 rm='$rm'
13665 rmail='$rmail'
13666 runnm='$runnm'
13667 sched_yield='$sched_yield'
13668 scriptdir='$scriptdir'
13669 scriptdirexp='$scriptdirexp'
13670 sed='$sed'
13671 seedfunc='$seedfunc'
13672 selectminbits='$selectminbits'
13673 selecttype='$selecttype'
13674 sendmail='$sendmail'
13675 sh='$sh'
13676 shar='$shar'
13677 sharpbang='$sharpbang'
13678 shmattype='$shmattype'
13679 shortsize='$shortsize'
13680 shrpenv='$shrpenv'
13681 shsharp='$shsharp'
13682 sig_count='$sig_count'
13683 sig_name='$sig_name'
13684 sig_name_init='$sig_name_init'
13685 sig_num='$sig_num'
13686 sig_num_init='$sig_num_init'
13687 signal_t='$signal_t'
13688 sitearch='$sitearch'
13689 sitearchexp='$sitearchexp'
13690 sitelib='$sitelib'
13691 sitelibexp='$sitelibexp'
13692 siteprefix='$siteprefix'
13693 siteprefixexp='$siteprefixexp'
13694 sizetype='$sizetype'
13695 sleep='$sleep'
13696 smail='$smail'
13697 small='$small'
13698 so='$so'
13699 sockethdr='$sockethdr'
13700 socketlib='$socketlib'
13701 sort='$sort'
13702 spackage='$spackage'
13703 spitshell='$spitshell'
13704 split='$split'
13705 src='$src'
13706 ssizetype='$ssizetype'
13707 startperl='$startperl'
13708 startsh='$startsh'
13709 static_ext='$static_ext'
13710 stdchar='$stdchar'
13711 stdio_base='$stdio_base'
13712 stdio_bufsiz='$stdio_bufsiz'
13713 stdio_cnt='$stdio_cnt'
13714 stdio_filbuf='$stdio_filbuf'
13715 stdio_ptr='$stdio_ptr'
13716 stdio_stream_array='$stdio_stream_array'
13717 strings='$strings'
13718 submit='$submit'
13719 subversion='$subversion'
13720 sysman='$sysman'
13721 tail='$tail'
13722 tar='$tar'
13723 tbl='$tbl'
13724 tee='$tee'
13725 test='$test'
13726 timeincl='$timeincl'
13727 timetype='$timetype'
13728 touch='$touch'
13729 tr='$tr'
13730 trnl='$trnl'
13731 troff='$troff'
13732 uidtype='$uidtype'
13733 uname='$uname'
13734 uniq='$uniq'
13735 use64bits='$use64bits'
13736 usedl='$usedl'
13737 usemultiplicity='$usemultiplicity'
13738 usemymalloc='$usemymalloc'
13739 usenm='$usenm'
13740 useopcode='$useopcode'
13741 useperlio='$useperlio'
13742 useposix='$useposix'
13743 usesfio='$usesfio'
13744 useshrplib='$useshrplib'
13745 usesocks='$usesocks'
13746 usethreads='$usethreads'
13747 usevendorprefix='$usevendorprefix'
13748 usevfork='$usevfork'
13749 usrinc='$usrinc'
13750 uuname='$uuname'
13751 vendorlib='$vendorlib'
13752 vendorlibexp='$vendorlibexp'
13753 vendorprefix='$vendorprefix'
13754 vendorprefixexp='$vendorprefixexp'
13755 version='$version'
13756 vi='$vi'
13757 voidflags='$voidflags'
13758 xlibpth='$xlibpth'
13759 zcat='$zcat'
13760 zip='$zip'
13761 EOT
13762
13763 : Add in command line options if available
13764 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13765
13766 : add special variables
13767 $test -f $src/patchlevel.h && \
13768 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13769 echo "CONFIGDOTSH=true" >>config.sh
13770
13771 : propagate old symbols
13772 if $test -f UU/config.sh; then
13773         <UU/config.sh sort | uniq >UU/oldconfig.sh
13774         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13775         sort | uniq -u >UU/oldsyms
13776         set X `cat UU/oldsyms`
13777         shift
13778         case $# in
13779         0) ;;
13780         *)
13781                 cat <<EOM
13782 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13783 EOM
13784                 echo "# Variables propagated from previous config.sh file." >>config.sh
13785                 for sym in `cat UU/oldsyms`; do
13786                         echo "    Propagating $hint variable "'$'"$sym..."
13787                         eval 'tmp="$'"${sym}"'"'
13788                         echo "$tmp" | \
13789                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13790                 done
13791                 ;;
13792         esac
13793 fi
13794
13795 : Finish up by extracting the .SH files
13796 case "$alldone" in
13797 exit)
13798         $rm -rf UU
13799         echo "Done."
13800         exit 0
13801         ;;
13802 cont)
13803         ;;
13804 '')
13805         dflt=''
13806         nostick=true
13807         $cat <<EOM
13808
13809 If you'd like to make any changes to the config.sh file before I begin
13810 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13811
13812 EOM
13813         rp="Press return or use a shell escape to edit config.sh:"
13814         . UU/myread
13815         nostick=''
13816         case "$ans" in
13817         '') ;;
13818         *) : in case they cannot read
13819                 sh 1>&4 -c "$ans";;
13820         esac
13821         ;;
13822 esac
13823
13824 : if this fails, just run all the .SH files by hand
13825 . ./config.sh
13826
13827 echo " "
13828 exec 1>&4
13829 . ./UU/extract
13830
13831 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13832         dflt=y
13833         case "$silent" in
13834         true) ;;
13835         *)
13836                 $cat <<EOM
13837
13838 Now you need to generate make dependencies by running "$make depend".
13839 You might prefer to run it in background: "$make depend > makedepend.out &"
13840 It can take a while, so you might not want to run it right now.
13841
13842 EOM
13843                 ;;
13844         esac
13845         rp="Run $make depend now?"
13846         . UU/myread
13847         case "$ans" in
13848         y*)
13849                 $make depend && echo "Now you must run a $make."
13850                 ;;
13851         *)
13852                 echo "You must run '$make depend' then '$make'."
13853                 ;;
13854         esac
13855 elif test -f [Mm]akefile; then
13856         echo " "
13857         echo "Now you must run a $make."
13858 else
13859         echo "Done."
13860 fi
13861
13862 if $test -f Policy.sh; then
13863     $cat <<EOM
13864
13865 If you compile $package on a different machine or from a different object
13866 directory, copy the Policy.sh file from this object directory to the
13867 new one before you run Configure -- this will help you with most of
13868 the policy defaults.
13869
13870 EOM
13871 fi
13872 if $test -f config.msg; then
13873     echo "Hmm.  I also noted the following information while running:"
13874     echo " "
13875     $cat config.msg >&4
13876     $rm -f config.msg
13877 fi
13878 $rm -f kit*isdone ark*isdone
13879 $rm -rf UU
13880
13881 : End of Configure
13882