AIX magic: ccdlflags needs to be different for
[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 22 22:55:08 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_socks=''
632 i_stddef=''
633 i_stdlib=''
634 i_string=''
635 strings=''
636 i_sysaccess=''
637 i_sysdir=''
638 i_sysfile=''
639 d_voidtty=''
640 i_bsdioctl=''
641 i_sysfilio=''
642 i_sysioctl=''
643 i_syssockio=''
644 i_sysmman=''
645 i_sysmount=''
646 i_sysndir=''
647 i_sysparam=''
648 i_sysresrc=''
649 i_syssecrt=''
650 i_sysselct=''
651 i_sysstat=''
652 i_sysstatvfs=''
653 i_systimes=''
654 i_systypes=''
655 d_iovec_s=''
656 i_sysuio=''
657 i_sysun=''
658 i_syswait=''
659 i_sgtty=''
660 i_termio=''
661 i_termios=''
662 i_systime=''
663 i_systimek=''
664 i_time=''
665 timeincl=''
666 i_unistd=''
667 i_utime=''
668 i_values=''
669 i_stdarg=''
670 i_varargs=''
671 i_varhdr=''
672 i_vfork=''
673 installusrbinperl=''
674 intsize=''
675 longsize=''
676 shortsize=''
677 d_dirent64_s=''
678 d_flock64_s=''
679 d_fstat64=''
680 d_ftruncate64=''
681 d_ino64_t=''
682 d_llseek=''
683 d_lockf64=''
684 d_lseek64=''
685 d_lstat64=''
686 d_off64_t=''
687 d_offset_t=''
688 d_open64=''
689 d_opendir64=''
690 d_readdir64=''
691 d_seekdir64=''
692 d_stat64=''
693 d_telldir64=''
694 d_truncate64=''
695 libc=''
696 libperl=''
697 shrpenv=''
698 useshrplib=''
699 glibpth=''
700 libpth=''
701 loclibpth=''
702 plibpth=''
703 xlibpth=''
704 ignore_versioned_solibs=''
705 libs=''
706 lns=''
707 lseeksize=''
708 lseektype=''
709 make_set_make=''
710 d_mymalloc=''
711 freetype=''
712 mallocobj=''
713 mallocsrc=''
714 malloctype=''
715 usemymalloc=''
716 installman1dir=''
717 man1dir=''
718 man1direxp=''
719 man1ext=''
720 installman3dir=''
721 man3dir=''
722 man3direxp=''
723 man3ext=''
724 huge=''
725 large=''
726 medium=''
727 models=''
728 small=''
729 split=''
730 modetype=''
731 multiarch=''
732 mydomain=''
733 myhostname=''
734 phostname=''
735 c=''
736 n=''
737 d_eofnblk=''
738 eagain=''
739 o_nonblock=''
740 rd_nodata=''
741 netdb_hlen_type=''
742 netdb_host_type=''
743 netdb_name_type=''
744 netdb_net_type=''
745 groupcat=''
746 hostcat=''
747 passcat=''
748 orderlib=''
749 ranlib=''
750 package=''
751 spackage=''
752 pager=''
753 apiversion=''
754 patchlevel=''
755 subversion=''
756 version=''
757 perladmin=''
758 perlpath=''
759 pidtype=''
760 prefix=''
761 prefixexp=''
762 installprivlib=''
763 privlib=''
764 privlibexp=''
765 prototype=''
766 ptrsize=''
767 drand01=''
768 randbits=''
769 randfunc=''
770 randseedtype=''
771 seedfunc=''
772 installscript=''
773 scriptdir=''
774 scriptdirexp=''
775 selectminbits=''
776 selecttype=''
777 sh=''
778 sig_count=''
779 sig_name=''
780 sig_name_init=''
781 sig_num=''
782 sig_num_init=''
783 installsitearch=''
784 sitearch=''
785 sitearchexp=''
786 installsitelib=''
787 sitelib=''
788 sitelibexp=''
789 sizetype=''
790 so=''
791 sharpbang=''
792 shsharp=''
793 spitshell=''
794 src=''
795 ssizetype=''
796 startperl=''
797 startsh=''
798 stdchar=''
799 d_fgetpos64=''
800 d_fopen64=''
801 d_freopen64=''
802 d_fseek64=''
803 d_fseeko64=''
804 d_fsetpos64=''
805 d_ftell64=''
806 d_ftello64=''
807 d_tmpfile64=''
808 d_stdio_stream_array=''
809 stdio_stream_array=''
810 sysman=''
811 trnl=''
812 uidtype=''
813 archname64=''
814 use64bits=''
815 usemultiplicity=''
816 nm_opt=''
817 nm_so_opt=''
818 runnm=''
819 usenm=''
820 useperlio=''
821 usesocks=''
822 d_oldpthreads=''
823 usethreads=''
824 incpath=''
825 mips=''
826 mips_type=''
827 usrinc=''
828 defvoidused=''
829 voidflags=''
830 CONFIG=''
831
832 define='define'
833 undef='undef'
834 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
835 rmlist=''
836
837 : We must find out about Eunice early
838 eunicefix=':'
839 if test -f /etc/unixtovms; then
840         eunicefix=/etc/unixtovms
841 fi
842 if test -f /etc/unixtovms.exe; then
843         eunicefix=/etc/unixtovms.exe
844 fi
845
846 i_whoami=''
847 : Possible local include directories to search.
848 : Set locincpth to "" in a hint file to defeat local include searches.
849 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
850 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
851 :
852 : no include file wanted by default
853 inclwanted=''
854
855 : list of known cpp symbols, sorted alphabetically
856 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
857 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
858 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
859 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
860 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
861 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
862 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
863 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
864 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
865 al="$al VMS Xenix286"
866 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
867 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
868 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
869 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
870 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
871 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
872 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
873 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
874 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
875 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
876 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
877 al="$al __SVR4_2__ __UMAXV__"
878 al="$al ____386BSD____ __alpha __alpha__ __amiga"
879 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
880 al="$al __host_mips__"
881 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
882 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
883 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
884 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
885 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
886 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
887 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
888 al="$al __mc88100 __mc88100__ __mips __mips__"
889 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
890 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
891 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
892 al="$al _host_mips _mips _unix"
893 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
894 al="$al apollo ardent att386 att3b"
895 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
896 al="$al cadmus clipper concurrent convex cray ctix"
897 al="$al dmert encore gcos gcx gimpel gould"
898 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
899 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
900 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
901 al="$al i186 i286 i386 i486 i8086"
902 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
903 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
904 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
905 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
906 al="$al mc88000 mc88100 merlin mert mips mvs n16"
907 al="$al ncl_el ncl_mr"
908 al="$al news1500 news1700 news1800 news1900 news3700"
909 al="$al news700 news800 news900 ns16000 ns32000"
910 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
911 al="$al parisc pc532 pdp11 plexus posix pyr"
912 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
913 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
914 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
915 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
916 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
917 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
918 al="$al xenix z8000"
919
920 : Trailing extension.  Override this in a hint file, if needed.
921 _exe=''
922 : Extra object files, if any, needed on this platform.
923 archobjs=''
924 groupstype=''
925 : change the next line if compiling for Xenix/286 on Xenix/386
926 xlibpth='/usr/lib/386 /lib/386'
927
928 : Possible local library directories to search.
929 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
930 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
931
932 : general looking path for locating libraries
933 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
934 glibpth="$glibpth /lib /usr/lib $xlibpth"
935 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
936 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
937
938 : Private path used by Configure to find libraries.  Its value
939 : is prepended to libpth. This variable takes care of special
940 : machines, like the mips.  Usually, it should be empty.
941 plibpth=''
942
943 : default library list
944 libswanted=''
945 : some systems want to use only the non-versioned libso:s
946 ignore_versioned_solibs=''
947 : full support for void wanted by default
948 defvoidused=15
949
950 : set useposix=false in your hint file to disable the POSIX extension.
951 useposix=true
952 : set useopcode=false in your hint file to disable the Opcode extension.
953 useopcode=true
954 : set usemultiplicity on the Configure command line to enable multiplicity.
955 : set usesocks on the Configure command line to enable socks.
956 : set usethreads on the Configure command line to enable threads.
957 : List of libraries we want.
958 : If anyone needs -lnet, put it in a hint file.
959 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
960 libswanted="$libswanted dld ld sun m rt c cposix posix"
961 libswanted="$libswanted ndir dir crypt sec"
962 libswanted="$libswanted ucb bsd BSD PW x"
963 : We probably want to search /usr/shlib before most other libraries.
964 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
965 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
966 glibpth="/usr/shlib $glibpth"
967 : Do not use vfork unless overridden by a hint file.
968 usevfork=false
969
970 : Find the basic shell for Bourne shell scripts
971 case "$sh" in
972 '')
973         case "$SYSTYPE" in
974         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
975         *) xxx='/bin/sh';;
976         esac
977         if test -f "$xxx"; then
978                 sh="$xxx"
979         else
980                 : Build up a list and do a single loop so we can 'break' out.
981                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
982                 for xxx in sh bash ksh pdksh ash; do
983                         for p in $pth; do
984                                 try="$try ${p}/${xxx}"
985                         done
986                 done
987                 for xxx in $try; do
988                         if test -f "$xxx"; then
989                                 sh="$xxx";
990                                 break
991                         elif test -f "$xxx.exe"; then
992                                 sh="$xxx";
993                                 break
994                         fi
995                 done
996         fi
997         ;;
998 esac
999
1000 case "$sh" in
1001 '')     cat <<EOM >&2
1002 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1003
1004 Usually it's in /bin/sh.  How did you even get this far?
1005 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1006 we'll try to straighten this all out.
1007 EOM
1008         exit 1
1009         ;;
1010 esac
1011
1012 : see if sh knows # comments
1013 if `$sh -c '#' >/dev/null 2>&1`; then
1014         shsharp=true
1015         spitshell=cat
1016         xcat=/bin/cat
1017         test -f $xcat || xcat=/usr/bin/cat
1018         echo "#!$xcat" >try
1019         $eunicefix try
1020         chmod +x try
1021         ./try > today
1022         if test -s today; then
1023                 sharpbang='#!'
1024         else
1025                 echo "#! $xcat" > try
1026                 $eunicefix try
1027                 chmod +x try
1028                 ./try > today
1029                 if test -s today; then
1030                         sharpbang='#! '
1031                 else
1032                         sharpbang=': use '
1033                 fi
1034         fi
1035 else
1036         echo " "
1037         echo "Your $sh doesn't grok # comments--I will strip them later on."
1038         shsharp=false
1039         cd ..
1040         echo "exec grep -v '^[  ]*#'" >spitshell
1041         chmod +x spitshell
1042         $eunicefix spitshell
1043         spitshell=`pwd`/spitshell
1044         cd UU
1045         echo "I presume that if # doesn't work, #! won't work either!"
1046         sharpbang=': use '
1047 fi
1048 rm -f try today
1049
1050 : figure out how to guarantee sh startup
1051 case "$startsh" in
1052 '') startsh=${sharpbang}${sh} ;;
1053 *)
1054 esac
1055 cat >try <<EOSS
1056 $startsh
1057 set abc
1058 test "$?abc" != 1
1059 EOSS
1060
1061 chmod +x try
1062 $eunicefix try
1063 if ./try; then
1064         : echo "Yup, it does."
1065 else
1066         echo "Hmm... '$startsh' does not guarantee sh startup..."
1067         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1068 fi
1069 rm -f try
1070
1071
1072 : Save command line options in file UU/cmdline.opt for later use in
1073 : generating config.sh.
1074 cat > cmdline.opt <<EOSH
1075 # Configure command line arguments.
1076 config_arg0='$0'
1077 config_args='$*'
1078 config_argc=$#
1079 EOSH
1080 argn=1
1081 for arg in "$@"; do
1082         cat >>cmdline.opt <<EOSH
1083 config_arg$argn='$arg'
1084 EOSH
1085         argn=`expr $argn + 1`
1086 done
1087
1088 : produce awk script to parse command line options
1089 cat >options.awk <<'EOF'
1090 BEGIN {
1091         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1092
1093         len = length(optstr);
1094         for (i = 1; i <= len; i++) {
1095                 c = substr(optstr, i, 1);
1096                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1097                 if (a == ":") {
1098                         arg[c] = 1;
1099                         i++;
1100                 }
1101                 opt[c] = 1;
1102         }
1103 }
1104 {
1105         expect = 0;
1106         str = $0;
1107         if (substr(str, 1, 1) != "-") {
1108                 printf("'%s'\n", str);
1109                 next;
1110         }
1111         len = length($0);
1112         for (i = 2; i <= len; i++) {
1113                 c = substr(str, i, 1);
1114                 if (!opt[c]) {
1115                         printf("-%s\n", substr(str, i));
1116                         next;
1117                 }
1118                 printf("-%s\n", c);
1119                 if (arg[c]) {
1120                         if (i < len)
1121                                 printf("'%s'\n", substr(str, i + 1));
1122                         else
1123                                 expect = 1;
1124                         next;
1125                 }
1126         }
1127 }
1128 END {
1129         if (expect)
1130                 print "?";
1131 }
1132 EOF
1133
1134 : process the command line options
1135 set X `for arg in "$@"; do echo "X$arg"; done |
1136         sed -e s/X// | awk -f options.awk`
1137 eval "set $*"
1138 shift
1139 rm -f options.awk
1140
1141 : set up default values
1142 fastread=''
1143 reuseval=false
1144 config_sh=''
1145 alldone=''
1146 error=''
1147 silent=''
1148 extractsh=''
1149 override=''
1150 knowitall=''
1151 rm -f optdef.sh
1152 cat >optdef.sh <<EOS
1153 $startsh
1154 EOS
1155
1156
1157 : option parsing
1158 while test $# -gt 0; do
1159         case "$1" in
1160         -d) shift; fastread=yes;;
1161         -e) shift; alldone=cont;;
1162         -f)
1163                 shift
1164                 cd ..
1165                 if test -r "$1"; then
1166                         config_sh="$1"
1167                 else
1168                         echo "$me: cannot read config file $1." >&2
1169                         error=true
1170                 fi
1171                 cd UU
1172                 shift;;
1173         -h) shift; error=true;;
1174         -r) shift; reuseval=true;;
1175         -s) shift; silent=true; realsilent=true;;
1176         -E) shift; alldone=exit;;
1177         -K) shift; knowitall=true;;
1178         -O) shift; override=true;;
1179         -S) shift; silent=true; extractsh=true;;
1180         -D)
1181                 shift
1182                 case "$1" in
1183                 *=)
1184                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1185                         echo "$me: ignoring -D $1" >&2
1186                         ;;
1187                 *=*) echo "$1" | \
1188                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1189                 *) echo "$1='define'" >> optdef.sh;;
1190                 esac
1191                 shift
1192                 ;;
1193         -U)
1194                 shift
1195                 case "$1" in
1196                 *=) echo "$1" >> optdef.sh;;
1197                 *=*)
1198                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1199                         echo "$me: ignoring -U $1" >&2
1200                         ;;
1201                 *) echo "$1='undef'" >> optdef.sh;;
1202                 esac
1203                 shift
1204                 ;;
1205         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1206                 exit 0;;
1207         --) break;;
1208         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1209         *) break;;
1210         esac
1211 done
1212
1213 case "$error" in
1214 true)
1215         cat >&2 <<EOM
1216 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1217                  [-U symbol] [-U symbol=]
1218   -d : use defaults for all answers.
1219   -e : go on without questioning past the production of config.sh.
1220   -f : specify an alternate default configuration file.
1221   -h : print this help message and exit (with an error status).
1222   -r : reuse C symbols value if possible (skips costly nm extraction).
1223   -s : silent mode, only echoes questions and essential information.
1224   -D : define symbol to have some value:
1225          -D symbol         symbol gets the value 'define'
1226          -D symbol=value   symbol gets the value 'value'
1227   -E : stop at the end of questions, after having produced config.sh.
1228   -K : do not use unless you know what you are doing.
1229   -O : let -D and -U override definitions from loaded configuration file.
1230   -S : perform variable substitutions on all .SH files (can mix with -f)
1231   -U : undefine symbol:
1232          -U symbol    symbol gets the value 'undef'
1233          -U symbol=   symbol gets completely empty
1234   -V : print version number and exit (with a zero status).
1235 EOM
1236         exit 1
1237         ;;
1238 esac
1239
1240 : Sanity checks
1241 case "$fastread$alldone" in
1242 yescont|yesexit) ;;
1243 *)
1244         if test ! -t 0; then
1245                 echo "Say 'sh Configure', not 'sh <Configure'"
1246                 exit 1
1247         fi
1248         ;;
1249 esac
1250
1251 exec 4>&1
1252 case "$silent" in
1253 true) exec 1>/dev/null;;
1254 esac
1255
1256 : run the defines and the undefines, if any, but leave the file out there...
1257 touch optdef.sh
1258 . ./optdef.sh
1259
1260 : set package name
1261 package=perl5
1262 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1263 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1264 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1265 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1266 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1267 esac
1268
1269 : Some greps do not return status, grrr.
1270 echo "grimblepritz" >grimble
1271 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1272         contains=contains
1273 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1274         contains=grep
1275 else
1276         contains=contains
1277 fi
1278 rm -f grimble
1279 : the following should work in any shell
1280 case "$contains" in
1281 contains*)
1282         echo " "
1283         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1284         cat >contains <<'EOSS'
1285 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1286 EOSS
1287 chmod +x contains
1288 esac
1289
1290 : Find the path to the source tree
1291 case "$src" in
1292 '') case "$0" in
1293     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1294     *)   src='.';;
1295     esac;;
1296 esac
1297 case "$src" in
1298 '')     src=/
1299         rsrc=/
1300         ;;
1301 /*) rsrc="$src";;
1302 *) rsrc="../$src";;
1303 esac
1304 if test -f $rsrc/Configure && \
1305         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1306 then
1307    : found it, so we are ok.
1308 else
1309         rsrc=''
1310         for src in . .. ../.. ../../.. ../../../..; do
1311                 if test -f ../$src/Configure && \
1312                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1313                 then
1314                         rsrc=../$src
1315                         break
1316                 fi
1317         done
1318 fi
1319 case "$rsrc" in
1320 '')
1321         cat <<EOM >&4
1322
1323 Sorry, I can't seem to locate the source dir for $package.  Please start
1324 Configure with an explicit path -- i.e. /some/path/Configure.
1325
1326 EOM
1327         exit 1
1328         ;;
1329 ../.)   rsrc='..';;
1330 *)
1331         echo " "
1332         echo "Sources for $package found in \"$src\"." >&4
1333         ;;
1334 esac
1335
1336 : script used to extract .SH files with variable substitutions
1337 cat >extract <<'EOS'
1338 CONFIGDOTSH=true
1339 echo "Doing variable substitutions on .SH files..."
1340 if test -f $src/MANIFEST; then
1341         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1342 else
1343         echo "(Looking for .SH files under the source directory.)"
1344         set x `(cd $src; find . -name "*.SH" -print)`
1345 fi
1346 shift
1347 case $# in
1348 0) set x `(cd $src; echo *.SH)`; shift;;
1349 esac
1350 if test ! -f $src/$1; then
1351         shift
1352 fi
1353 mkdir_p='
1354 name=$1;
1355 create="";
1356 while test $name; do
1357         if test ! -d "$name"; then
1358                 create="$name $create";
1359                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1360                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1361         else
1362                 name="";
1363         fi;
1364 done;
1365 for file in $create; do
1366         mkdir $file;
1367 done
1368 '
1369 for file in $*; do
1370         case "$src" in
1371         ".")
1372                 case "$file" in
1373                 */*)
1374                         dir=`expr X$file : 'X\(.*\)/'`
1375                         file=`expr X$file : 'X.*/\(.*\)'`
1376                         (cd $dir && . ./$file)
1377                         ;;
1378                 *)
1379                         . ./$file
1380                         ;;
1381                 esac
1382                 ;;
1383         *)
1384                 case "$file" in
1385                 */*)
1386                         dir=`expr X$file : 'X\(.*\)/'`
1387                         file=`expr X$file : 'X.*/\(.*\)'`
1388                         (set x $dir; shift; eval $mkdir_p)
1389                         sh <$src/$dir/$file
1390                         ;;
1391                 *)
1392                         sh <$src/$file
1393                         ;;
1394                 esac
1395                 ;;
1396         esac
1397 done
1398 if test -f $src/config_h.SH; then
1399         if test ! -f config.h; then
1400         : oops, they left it out of MANIFEST, probably, so do it anyway.
1401         . $src/config_h.SH
1402         fi
1403 fi
1404 EOS
1405
1406 : extract files and exit if asked to do so
1407 case "$extractsh" in
1408 true)
1409         case "$realsilent" in
1410         true) ;;
1411         *) exec 1>&4;;
1412         esac
1413         case "$config_sh" in
1414         '') config_sh='config.sh';;
1415         esac
1416         echo " "
1417         echo "Fetching answers from $config_sh..."
1418         cd ..
1419         . $config_sh
1420         test "$override" && . ./optdef.sh
1421         echo " "
1422         . UU/extract
1423         rm -rf UU
1424         echo "Done."
1425         exit 0
1426         ;;
1427 esac
1428
1429 : Eunice requires " " instead of "", can you believe it
1430 echo " "
1431 : Here we go...
1432 echo "Beginning of configuration questions for $package."
1433
1434 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1435
1436 : first determine how to suppress newline on echo command
1437 echo " "
1438 echo "Checking echo to see how to suppress newlines..."
1439 (echo "hi there\c" ; echo " ") >.echotmp
1440 if $contains c .echotmp >/dev/null 2>&1 ; then
1441         echo "...using -n."
1442         n='-n'
1443         c=''
1444 else
1445         cat <<'EOM'
1446 ...using \c
1447 EOM
1448         n=''
1449         c='\c'
1450 fi
1451 echo $n "The star should be here-->$c"
1452 echo '*'
1453 rm -f .echotmp
1454
1455 : Now test for existence of everything in MANIFEST
1456 echo " "
1457 if test -f $rsrc/MANIFEST; then
1458         echo "First let's make sure your kit is complete.  Checking..." >&4
1459         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1460         rm -f missing
1461         tmppwd=`pwd`
1462         for filelist in x??; do
1463                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1464         done
1465         if test -s missing; then
1466                 cat missing >&4
1467                 cat >&4 <<'EOM'
1468
1469 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1470
1471 You have the option of continuing the configuration process, despite the
1472 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1473 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1474 and contact the author (perlbug@perl.com).
1475
1476 EOM
1477                 echo $n "Continue? [n] $c" >&4
1478                 read ans
1479                 case "$ans" in
1480                 y*)
1481                         echo "Continuing..." >&4
1482                         rm -f missing
1483                         ;;
1484                 *)
1485                         echo "ABORTING..." >&4
1486                         kill $$
1487                         ;;
1488                 esac
1489         else
1490                 echo "Looks good..."
1491         fi
1492 else
1493         echo "There is no MANIFEST file.  I hope your kit is complete !"
1494 fi
1495 rm -f missing x??
1496
1497 echo " "
1498 : Find the appropriate value for a newline for tr
1499 if test -n "$DJGPP"; then
1500        trnl='\012'
1501 fi
1502 if test X"$trnl" = X; then
1503         case "`echo foo|tr '\n' x 2>/dev/null`" in
1504         foox) trnl='\n' ;;
1505         esac
1506 fi
1507 if test X"$trnl" = X; then
1508         case "`echo foo|tr '\012' x 2>/dev/null`" in
1509         foox) trnl='\012' ;;
1510         esac
1511 fi
1512 if test X"$trnl" = X; then
1513         cat <<EOM >&2
1514
1515 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1516
1517 EOM
1518         exit 1
1519 fi
1520
1521 : compute the number of columns on the terminal for proper question formatting
1522 case "$COLUMNS" in
1523 '') COLUMNS='80';;
1524 esac
1525
1526 : set up the echo used in my read
1527 myecho="case \"\$xxxm\" in
1528 '') echo $n \"\$rp $c\" >&4;;
1529 *) case \"\$rp\" in
1530         '') echo $n \"[\$xxxm] $c\";;
1531         *)
1532                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1533                         echo \"\$rp\" >&4
1534                         echo $n \"[\$xxxm] $c\" >&4
1535                 else
1536                         echo $n \"\$rp [\$xxxm] $c\" >&4
1537                 fi
1538                 ;;
1539         esac;;
1540 esac"
1541
1542 : now set up to do reads with possible shell escape and default assignment
1543 cat <<EOSC >myread
1544 $startsh
1545 xxxm=\$dflt
1546 $myecho
1547 ans='!'
1548 case "\$fastread" in
1549 yes) case "\$dflt" in
1550         '') ;;
1551         *) ans='';
1552                 case "\$silent-\$rp" in
1553                 true-) ;;
1554                 *) echo " " >&4;;
1555                 esac;;
1556         esac;;
1557 *) case "\$silent" in
1558         true) case "\$rp" in
1559                 '') ans='';;
1560                 esac;;
1561         esac;;
1562 esac
1563 while expr "X\$ans" : "X!" >/dev/null; do
1564         read answ
1565         set x \$xxxm
1566         shift
1567         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1568         case  "\$answ" in
1569         "!")
1570                 sh 1>&4
1571                 echo " "
1572                 $myecho
1573                 ;;
1574         !*)
1575                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1576                 shift
1577                 sh 1>&4 -c "\$*"
1578                 echo " "
1579                 $myecho
1580                 ;;
1581         "\$ans")
1582                 case "\$ans" in
1583                 \\&*)
1584                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1585                         shift
1586                         case "\$1" in
1587                         -d)
1588                                 fastread=yes
1589                                 echo "(OK, I'll run with -d after this question.)" >&4
1590                                 ;;
1591                         -*)
1592                                 echo "*** Sorry, \$1 not supported yet." >&4
1593                                 ;;
1594                         esac
1595                         $myecho
1596                         ans=!
1597                         ;;
1598                 esac;;
1599         *)
1600                 case "\$aok" in
1601                 y)
1602                         echo "*** Substitution done -- please confirm."
1603                         xxxm="\$ans"
1604                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1605                         xxxm="\$ans"
1606                         ans=!
1607                         ;;
1608                 *)
1609                         echo "*** Error -- try again."
1610                         ans=!
1611                         ;;
1612                 esac
1613                 $myecho
1614                 ;;
1615         esac
1616         case "\$ans\$xxxm\$nostick" in
1617         '')
1618                 ans=!
1619                 $myecho
1620                 ;;
1621         esac
1622 done
1623 case "\$ans" in
1624 '') ans="\$xxxm";;
1625 esac
1626 EOSC
1627
1628 : create .config dir to save info across Configure sessions
1629 test -d ../.config || mkdir ../.config
1630 cat >../.config/README <<EOF
1631 This directory created by Configure to save information that should
1632 persist across sessions for $package.
1633
1634 You may safely delete it if you wish.
1635 EOF
1636
1637 : general instructions
1638 needman=true
1639 firsttime=true
1640 user=`(logname) 2>/dev/null`
1641 case "$user" in
1642 '') user=`whoami 2>&1`;;
1643 esac
1644 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1645         firsttime=false
1646         echo " "
1647         rp='Would you like to see the instructions?'
1648         dflt=n
1649         . ./myread
1650         case "$ans" in
1651         [yY]*) ;;
1652         *) needman=false;;
1653         esac
1654 fi
1655 if $needman; then
1656         cat <<EOH
1657
1658 This installation shell script will examine your system and ask you questions
1659 to determine how the perl5 package should be installed. If you get
1660 stuck on a question, you may use a ! shell escape to start a subshell or
1661 execute a command.  Many of the questions will have default answers in square
1662 brackets; typing carriage return will give you the default.
1663
1664 On some of the questions which ask for file or directory names you are allowed
1665 to use the ~name construct to specify the login directory belonging to "name",
1666 even if you don't have a shell which knows about that.  Questions where this is
1667 allowed will be marked "(~name ok)".
1668
1669 EOH
1670         rp=''
1671         dflt='Type carriage return to continue'
1672         . ./myread
1673         cat <<'EOH'
1674
1675 The prompter used in this script allows you to use shell variables and
1676 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1677 in the default answer, as if the default line was a set of arguments given to a
1678 script shell.  This means you may also use $* to repeat the whole default line,
1679 so you do not have to re-type everything to add something to the default.
1680
1681 Everytime there is a substitution, you will have to confirm.  If there is an
1682 error (e.g. an unmatched backtick), the default answer will remain unchanged
1683 and you will be prompted again.
1684
1685 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1686 the questions and use the computed defaults (or the previous answers if there
1687 was already a config.sh file). Type 'Configure -h' for a list of options.
1688 You may also start interactively and then answer '& -d' at any prompt to turn
1689 on the non-interactive behaviour for the remainder of the execution.
1690
1691 EOH
1692         . ./myread
1693         cat <<EOH
1694
1695 Much effort has been expended to ensure that this shell script will run on any
1696 Unix system.  If despite that it blows up on yours, your best bet is to edit
1697 Configure and run it again.  If you can't run Configure for some reason,
1698 you'll have to generate a config.sh file by hand.  Whatever problems you
1699 have, let me (perlbug@perl.com) know how I blew it.
1700
1701 This installation script affects things in two ways:
1702
1703 1) it may do direct variable substitutions on some of the files included
1704    in this kit.
1705 2) it builds a config.h file for inclusion in C programs.  You may edit
1706    any of these files as the need arises after running this script.
1707
1708 If you make a mistake on a question, there is no easy way to back up to it
1709 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1710 files.  Configure will offer to let you do this before it runs the SH files.
1711
1712 EOH
1713         dflt='Type carriage return to continue'
1714         . ./myread
1715         case "$firsttime" in
1716         true) echo $user >>../.config/instruct;;
1717         esac
1718 fi
1719
1720 : find out where common programs are
1721 echo " "
1722 echo "Locating common programs..." >&4
1723 cat <<EOSC >loc
1724 $startsh
1725 case \$# in
1726 0) exit 1;;
1727 esac
1728 thing=\$1
1729 shift
1730 dflt=\$1
1731 shift
1732 for dir in \$*; do
1733         case "\$thing" in
1734         .)
1735         if test -d \$dir/\$thing; then
1736                 echo \$dir
1737                 exit 0
1738         fi
1739         ;;
1740         *)
1741         for thisthing in \$dir/\$thing; do
1742                 : just loop through to pick last item
1743         done
1744         if test -f \$thisthing; then
1745                 echo \$thisthing
1746                 exit 0
1747         elif test -f \$dir/\$thing.exe; then
1748                 if test -n "$DJGPP"; then
1749                         echo \$dir/\$thing.exe
1750                 else
1751                         : on Eunice apparently
1752                         echo \$dir/\$thing
1753                 fi
1754                 exit 0
1755         fi
1756         ;;
1757         esac
1758 done
1759 echo \$dflt
1760 exit 1
1761 EOSC
1762 chmod +x loc
1763 $eunicefix loc
1764 loclist="
1765 awk
1766 cat
1767 comm
1768 cp
1769 echo
1770 expr
1771 grep
1772 ls
1773 make
1774 mkdir
1775 rm
1776 sed
1777 sort
1778 touch
1779 tr
1780 uniq
1781 "
1782 trylist="
1783 Mcc
1784 ar
1785 byacc
1786 cpp
1787 csh
1788 date
1789 egrep
1790 gzip
1791 less
1792 ln
1793 more
1794 nm
1795 nroff
1796 pg
1797 test
1798 uname
1799 zip
1800 "
1801 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1802 pth="$pth /lib /usr/lib"
1803 for file in $loclist; do
1804         eval xxx=\$$file
1805         case "$xxx" in
1806         /*|?:[\\/]*)
1807                 if test -f "$xxx"; then
1808                         : ok
1809                 else
1810                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1811                         xxx=`./loc $file $file $pth`
1812                 fi
1813                 ;;
1814         '') xxx=`./loc $file $file $pth`;;
1815         *) xxx=`./loc $xxx $xxx $pth`;;
1816         esac
1817         eval $file=$xxx
1818         eval _$file=$xxx
1819         case "$xxx" in
1820         /*)
1821                 echo $file is in $xxx.
1822                 ;;
1823         ?:[\\/]*)
1824                 echo $file is in $xxx.
1825                 ;;
1826         *)
1827                 echo "I don't know where '$file' is, and my life depends on it." >&4
1828                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1829                 exit 1
1830                 ;;
1831         esac
1832 done
1833 echo " "
1834 echo "Don't worry if any of the following aren't found..."
1835 say=offhand
1836 for file in $trylist; do
1837         eval xxx=\$$file
1838         case "$xxx" in
1839         /*|?:[\\/]*)
1840                 if test -f "$xxx"; then
1841                         : ok
1842                 else
1843                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1844                         xxx=`./loc $file $file $pth`
1845                 fi
1846                 ;;
1847         '') xxx=`./loc $file $file $pth`;;
1848         *) xxx=`./loc $xxx $xxx $pth`;;
1849         esac
1850         eval $file=$xxx
1851         eval _$file=$xxx
1852         case "$xxx" in
1853         /*)
1854                 echo $file is in $xxx.
1855                 ;;
1856         ?:[\\/]*)
1857                 echo $file is in $xxx.
1858                 ;;
1859         *)
1860                 echo "I don't see $file out there, $say."
1861                 say=either
1862                 ;;
1863         esac
1864 done
1865 case "$egrep" in
1866 egrep)
1867         echo "Substituting grep for egrep."
1868         egrep=$grep
1869         ;;
1870 esac
1871 case "$ln" in
1872 ln)
1873         echo "Substituting cp for ln."
1874         ln=$cp
1875         ;;
1876 esac
1877 case "$test" in
1878 test)
1879         echo "Hopefully test is built into your sh."
1880         ;;
1881 *)
1882         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1883                 echo "Using the test built into your sh."
1884                 test=test
1885                 _test=test
1886         fi
1887         ;;
1888 esac
1889 case "$echo" in
1890 echo)
1891         echo "Hopefully echo is built into your sh."
1892         ;;
1893 '') ;;
1894 *)
1895         echo " "
1896 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1897         $echo $n "hi there$c" >foo1
1898         echo $n "hi there$c" >foo2
1899         if cmp foo1 foo2 >/dev/null 2>&1; then
1900                 echo "They are compatible.  In fact, they may be identical."
1901         else
1902                 case "$n" in
1903                 '-n') n='' c='\c';;
1904                 *) n='-n' c='';;
1905                 esac
1906                 cat <<FOO
1907 They are not compatible!  You are probably running ksh on a non-USG system.
1908 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1909 have echo built in and we may have to run some Bourne shell scripts.  That
1910 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1911
1912 FOO
1913                 $echo $n "The star should be here-->$c"
1914                 $echo "*"
1915         fi
1916         $rm -f foo1 foo2
1917         ;;
1918 esac
1919
1920 : determine whether symbolic links are supported
1921 echo " "
1922 $touch blurfl
1923 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1924         echo "Symbolic links are supported." >&4
1925         lns="$ln -s"
1926 else
1927         echo "Symbolic links are NOT supported." >&4
1928         lns="$ln"
1929 fi
1930 $rm -f blurfl sym
1931
1932 : see whether [:lower:] and [:upper:] are supported character classes
1933 echo " "
1934 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1935 ABYZ)
1936         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1937         up='[:upper:]'
1938         low='[:lower:]'
1939         ;;
1940 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1941         # (0xc9 and 0xd1), therefore that is a nice testing point.
1942         if test "X$up" = X -o "X$low" = X; then
1943             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1944             ij) up='[A-Z]'
1945                 low='[a-z]'
1946                 ;;
1947             esac
1948         fi
1949         if test "X$up" = X -o "X$low" = X; then
1950             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1951             ij) up='A-Z'
1952                 low='a-z'
1953                 ;;
1954             esac
1955         fi
1956         if test "X$up" = X -o "X$low" = X; then
1957             case "`echo IJ | od -x 2>/dev/null`" in
1958             *C9D1*|*c9d1*)
1959                 echo "Hey, this might be EBCDIC." >&4
1960                 if test "X$up" = X -o "X$low" = X; then
1961                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1962                     ij) up='[A-IJ-RS-Z]'
1963                         low='[a-ij-rs-z]'
1964                         ;;
1965                     esac
1966                 fi
1967                 if test "X$up" = X -o "X$low" = X; then
1968                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1969                     ij) up='A-IJ-RS-Z'
1970                         low='a-ij-rs-z'
1971                         ;;
1972                     esac
1973                 fi
1974                 ;;
1975             esac
1976         fi
1977 esac
1978 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1979 ij)
1980     echo "Using $up and $low to convert case." >&4
1981     ;;
1982 *)
1983     echo "I don't know how to translate letters from upper to lower case." >&4
1984     echo "Your tr is not acting any way I know of." >&4
1985     exit 1
1986     ;;
1987 esac
1988 : set up the translation script tr, must be called with ./tr of course
1989 cat >tr <<EOSC
1990 $startsh
1991 case "\$1\$2" in
1992 '[A-Z][a-z]') exec $tr '$up' '$low';;
1993 '[a-z][A-Z]') exec $tr '$low' '$up';;
1994 esac
1995 exec $tr "\$@"
1996 EOSC
1997 chmod +x tr
1998 $eunicefix tr
1999
2000 : Try to determine whether config.sh was made on this system
2001 case "$config_sh" in
2002 '')
2003 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2004 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2005 # because the A-Z/a-z are not consecutive.
2006 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2007         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2008 newmyuname="$myuname"
2009 dflt=n
2010 case "$knowitall" in
2011 '')
2012         if test -f ../config.sh; then
2013                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2014                         eval "`grep myuname= ../config.sh`"
2015                 fi
2016                 if test "X$myuname" = "X$newmyuname"; then
2017                         dflt=y
2018                 fi
2019         fi
2020         ;;
2021 *) dflt=y;;
2022 esac
2023
2024 : Get old answers from old config file if Configure was run on the
2025 : same system, otherwise use the hints.
2026 hint=default
2027 cd ..
2028 if test -f config.sh; then
2029         echo " "
2030         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2031         . UU/myread
2032         case "$ans" in
2033         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2034         *)  echo "Fetching default answers from your old config.sh file..." >&4
2035                 tmp_n="$n"
2036                 tmp_c="$c"
2037                 tmp_sh="$sh"
2038                 . ./config.sh
2039                 cp config.sh UU
2040                 n="$tmp_n"
2041                 c="$tmp_c"
2042                 : Older versions did not always set $sh.  Catch re-use of such
2043                 : an old config.sh.
2044                 case "$sh" in
2045                 '') sh="$tmp_sh" ;;
2046                 esac
2047                 hint=previous
2048                 ;;
2049         esac
2050 fi
2051 if test ! -f config.sh; then
2052         $cat <<EOM
2053
2054 First time through, eh?  I have some defaults handy for some systems
2055 that need some extra help getting the Configure answers right:
2056
2057 EOM
2058         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2059         dflt=''
2060         : Half the following guesses are probably wrong... If you have better
2061         : tests or hints, please send them to perlbug@perl.com
2062         : The metaconfig authors would also appreciate a copy...
2063         $test -f /irix && osname=irix
2064         $test -f /xenix && osname=sco_xenix
2065         $test -f /dynix && osname=dynix
2066         $test -f /dnix && osname=dnix
2067         $test -f /lynx.os && osname=lynxos
2068         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2069         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2070         $test -f /bin/mips && /bin/mips && osname=mips
2071         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2072                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2073         $test -d /usr/apollo/bin && osname=apollo
2074         $test -f /etc/saf/_sactab && osname=svr4
2075         $test -d /usr/include/minix && osname=minix
2076         if $test -d /MachTen -o -d /MachTen_Folder; then
2077                 osname=machten
2078                 if $test -x /sbin/version; then
2079                         osvers=`/sbin/version | $awk '{print $2}' |
2080                         $sed -e 's/[A-Za-z]$//'`
2081                 elif $test -x /usr/etc/version; then
2082                         osvers=`/usr/etc/version | $awk '{print $2}' |
2083                         $sed -e 's/[A-Za-z]$//'`
2084                 else
2085                         osvers="$2.$3"
2086                 fi
2087         fi
2088        $test -f /sys/posix.dll &&
2089                $test -f /usr/bin/what &&
2090                set X `/usr/bin/what /sys/posix.dll` &&
2091                $test "$3" = UWIN &&
2092                osname=uwin &&
2093                osvers="$5"
2094         if $test -f $uname; then
2095                 set X $myuname
2096                 shift
2097
2098                 case "$5" in
2099                 fps*) osname=fps ;;
2100                 mips*)
2101                         case "$4" in
2102                         umips) osname=umips ;;
2103                         *) osname=mips ;;
2104                         esac;;
2105                 [23]100) osname=mips ;;
2106                 next*) osname=next ;;
2107                 i386*)
2108                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2109                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2110                                 osname='sco'
2111                                 osvers=$tmp
2112                         elif $test -f /etc/kconfig; then
2113                                 osname=isc
2114                                 if test "$lns" = "$ln -s"; then
2115                                         osvers=4
2116                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2117                                         osvers=3
2118                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2119                                         osvers=2
2120                                 fi
2121                         fi
2122                         tmp=''
2123                         ;;
2124                 pc*)
2125                         if test -n "$DJGPP"; then
2126                                 osname=dos
2127                                 osvers=djgpp
2128                         fi
2129                         ;;
2130                 esac
2131
2132                 case "$1" in
2133                 aix) osname=aix
2134                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2135                         case "$tmp" in
2136                         'not found') osvers="$4"."$3" ;;
2137                         '<3240'|'<>3240') osvers=3.2.0 ;;
2138                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2139                         '=3250'|'>3250') osvers=3.2.5 ;;
2140                         *) osvers=$tmp;;
2141                         esac
2142                         ;;
2143                 *dc.osx) osname=dcosx
2144                         osvers="$3"
2145                         ;;
2146                 dnix) osname=dnix
2147                         osvers="$3"
2148                         ;;
2149                 domainos) osname=apollo
2150                         osvers="$3"
2151                         ;;
2152                 dgux) osname=dgux 
2153                         osvers="$3"
2154                         ;;
2155                 dynixptx*) osname=dynixptx
2156                         osvers=`echo "$4"|sed 's/^v//'`
2157                         ;;
2158                 freebsd) osname=freebsd 
2159                         osvers="$3" ;;
2160                 genix) osname=genix ;;
2161                 hp*) osname=hpux 
2162                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2163                         ;;
2164                 irix*) osname=irix
2165                         case "$3" in
2166                         4*) osvers=4 ;;
2167                         5*) osvers=5 ;;
2168                         *)      osvers="$3" ;;
2169                         esac
2170                         ;;
2171                 linux) osname=linux
2172                         case "$3" in
2173                         *)      osvers="$3" ;;
2174                         esac
2175                         ;;
2176                 MiNT) osname=mint
2177                         ;;
2178                 netbsd*) osname=netbsd
2179                         osvers="$3"
2180                         ;;
2181                 news-os) osvers="$3"
2182                         case "$3" in
2183                         4*) osname=newsos4 ;;
2184                         *) osname=newsos ;;
2185                         esac
2186                         ;;
2187                 bsd386) osname=bsd386
2188                         osvers=`$uname -r`
2189                         ;;
2190                 POSIX-BC | posix-bc ) osname=posix-bc
2191                         osvers="$3"
2192                         ;;
2193                 powerux | power_ux | powermax_os | powermaxos | \
2194                 powerunix | power_unix) osname=powerux
2195                         osvers="$3"
2196                         ;;
2197                 next*) osname=next ;;
2198                 solaris) osname=solaris
2199                         case "$3" in
2200                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2201                         *)      osvers="$3" ;;
2202                         esac
2203                         ;;
2204                 sunos) osname=sunos
2205                         case "$3" in
2206                         5*) osname=solaris
2207                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2208                         *)      osvers="$3" ;;
2209                         esac
2210                         ;;
2211                 titanos) osname=titanos
2212                         case "$3" in
2213                         1*) osvers=1 ;;
2214                         2*) osvers=2 ;;
2215                         3*) osvers=3 ;;
2216                         4*) osvers=4 ;;
2217                         *)      osvers="$3" ;;
2218                         esac
2219                         ;;
2220                 ultrix) osname=ultrix
2221                         osvers="$3"
2222                         ;;
2223                 osf1|mls+)      case "$5" in
2224                                 alpha)
2225                                         osname=dec_osf
2226                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2227                                         ;;
2228                         hp*)    osname=hp_osf1  ;;
2229                         mips)   osname=mips_osf1 ;;
2230                         esac
2231                         ;;
2232                 uts) osname=uts 
2233                         osvers="$3"
2234                         ;;
2235                 qnx) osname=qnx
2236                         osvers="$4"
2237                         ;;
2238                 $2) case "$osname" in
2239                         *isc*) ;;
2240                         *freebsd*) ;;
2241                         svr*)
2242                                 : svr4.x or possibly later
2243                                 case "svr$3" in 
2244                                 ${osname}*)
2245                                         osname=svr$3
2246                                         osvers=$4
2247                                         ;;
2248                                 esac
2249                                 case "$osname" in
2250                                 svr4.0)
2251                                         : Check for ESIX
2252                                         if test -f /stand/boot ; then
2253                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2254                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2255                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2256                                                         if test -n "$isesix"; then
2257                                                                 osname=esix4
2258                                                         fi
2259                                                 fi
2260                                         fi
2261                                         ;;
2262                                 esac
2263                                 ;;
2264                         *)      if test -f /etc/systemid; then
2265                                         osname=sco
2266                                         set `echo $3 | $sed 's/\./ /g'` $4
2267                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2268                                                 osvers=$1.$2.$3
2269                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2270                                                 osvers=$1.$2
2271                                         elif $test -f $src/hints/sco_$1.sh; then
2272                                                 osvers=$1
2273                                         fi
2274                                 else
2275                                         case "$osname" in
2276                                         '') : Still unknown.  Probably a generic Sys V.
2277                                                 osname="sysv"
2278                                                 osvers="$3"
2279                                                 ;;
2280                                         esac
2281                                 fi
2282                                 ;;
2283                         esac
2284                         ;;
2285                 *)      case "$osname" in
2286                         '') : Still unknown.  Probably a generic BSD.
2287                                 osname="$1"
2288                                 osvers="$3"
2289                                 ;;
2290                         esac
2291                         ;;
2292                 esac
2293         else
2294                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2295                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2296                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2297                                 osname=news_os
2298                         fi
2299                         $rm -f UU/kernel.what
2300                 elif test -d c:/.; then
2301                         set X $myuname
2302                         osname=os2
2303                         osvers="$5"
2304                 fi
2305         fi
2306         
2307         : Now look for a hint file osname_osvers, unless one has been
2308         : specified already.
2309         case "$hintfile" in
2310         ''|' ')
2311                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2312                 : Also try without trailing minor version numbers.
2313                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2314                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2315                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2316                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2317                 case "$file" in
2318                 '') dflt=none ;;
2319                 *)  case "$osvers" in
2320                         '') dflt=$file
2321                                 ;;
2322                         *)  if $test -f $src/hints/$file.sh ; then
2323                                         dflt=$file
2324                                 elif $test -f $src/hints/$xfile.sh ; then
2325                                         dflt=$xfile
2326                                 elif $test -f $src/hints/$xxfile.sh ; then
2327                                         dflt=$xxfile
2328                                 elif $test -f $src/hints/$xxxfile.sh ; then
2329                                         dflt=$xxxfile
2330                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2331                                         dflt=$xxxxfile
2332                                 elif $test -f "$src/hints/${osname}.sh" ; then
2333                                         dflt="${osname}"
2334                                 else
2335                                         dflt=none
2336                                 fi
2337                                 ;;
2338                         esac
2339                         ;;
2340                 esac
2341                 if $test -f Policy.sh ; then
2342                         case "$dflt" in
2343                         *Policy*) ;;
2344                         none) dflt="Policy" ;;
2345                         *) dflt="Policy $dflt" ;;
2346                         esac
2347                 fi
2348                 ;;
2349         *)
2350                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2351                 ;;
2352         esac
2353
2354         if $test -f Policy.sh ; then
2355                 $cat <<EOM
2356
2357 There's also a Policy hint file available, which should make the
2358 site-specific (policy) questions easier to answer.
2359 EOM
2360
2361         fi
2362
2363         $cat <<EOM
2364
2365 You may give one or more space-separated answers, or "none" if appropriate.
2366 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2367 is a good thing.  DO NOT give a wrong version.
2368
2369 EOM
2370
2371         rp="Which of these apply, if any?"
2372         . UU/myread
2373         tans=$ans
2374         for file in $tans; do
2375                 if $test X$file = XPolicy -a -f Policy.sh; then
2376                         . Policy.sh
2377                         $cat Policy.sh >> UU/config.sh
2378                 elif $test -f $src/hints/$file.sh; then
2379                         . $src/hints/$file.sh
2380                         $cat $src/hints/$file.sh >> UU/config.sh
2381                 elif $test X$tans = X -o X$tans = Xnone ; then
2382                         : nothing
2383                 else
2384                         : Give one chance to correct a possible typo.
2385                         echo "$file.sh does not exist"
2386                         dflt=$file
2387                         rp="hint to use instead?"
2388                         . UU/myread
2389                         for file in $ans; do
2390                                 if $test -f "$src/hints/$file.sh"; then
2391                                         . $src/hints/$file.sh
2392                                         $cat $src/hints/$file.sh >> UU/config.sh
2393                                 elif $test X$ans = X -o X$ans = Xnone ; then
2394                                         : nothing
2395                                 else
2396                                         echo "$file.sh does not exist -- ignored."
2397                                 fi
2398                         done
2399                 fi
2400         done
2401
2402         hint=recommended
2403         : Remember our hint file for later.
2404         if $test -f "$src/hints/$file.sh" ; then
2405                 hintfile="$file"
2406         else
2407                 hintfile=''
2408         fi
2409 fi
2410 cd UU
2411 ;;
2412 *)
2413         echo " "
2414         echo "Fetching default answers from $config_sh..." >&4
2415         tmp_n="$n"
2416         tmp_c="$c"
2417         cd ..
2418         cp $config_sh config.sh 2>/dev/null
2419         chmod +w config.sh
2420         . ./config.sh
2421         cd UU
2422         cp ../config.sh .
2423         n="$tmp_n"
2424         c="$tmp_c"
2425         hint=previous
2426         ;;
2427 esac
2428 test "$override" && . ./optdef.sh
2429 myuname="$newmyuname"
2430
2431 : Restore computed paths
2432 for file in $loclist $trylist; do
2433         eval $file="\$_$file"
2434 done
2435
2436 cat << EOM
2437
2438 Configure uses the operating system name and version to set some defaults.
2439 The default value is probably right if the name rings a bell. Otherwise,
2440 since spelling matters for me, either accept the default or answer "none"
2441 to leave it blank.
2442
2443 EOM
2444 case "$osname" in
2445         ''|' ')
2446                 case "$hintfile" in
2447                 ''|' '|none) dflt=none ;;
2448                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2449                 esac
2450                 ;;
2451         *) dflt="$osname" ;;
2452 esac
2453 rp="Operating system name?"
2454 . ./myread
2455 case "$ans" in
2456 none)  osname='' ;;
2457 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2458 esac
2459 echo " "
2460 case "$osvers" in
2461         ''|' ')
2462                 case "$hintfile" in
2463                 ''|' '|none) dflt=none ;;
2464                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2465                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2466                         case "$dflt" in
2467                         ''|' ') dflt=none ;;
2468                         esac
2469                         ;;
2470                 esac
2471                 ;;
2472         *) dflt="$osvers" ;;
2473 esac
2474 rp="Operating system version?"
2475 . ./myread
2476 case "$ans" in
2477 none)  osvers='' ;;
2478 *) osvers="$ans" ;;
2479 esac
2480
2481 : who configured the system
2482 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2483 cf_by=`(logname) 2>/dev/null`
2484 case "$cf_by" in
2485 "")
2486         cf_by=`(whoami) 2>/dev/null`
2487         case "$cf_by" in
2488         "") cf_by=unknown ;;
2489         esac ;;
2490 esac
2491
2492 : set up the script used to warn in case of inconsistency
2493 cat <<EOS >whoa
2494 $startsh
2495 EOS
2496 cat <<'EOSC' >>whoa
2497 dflt=y
2498 echo " "
2499 echo "*** WHOA THERE!!! ***" >&4
2500 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2501 rp="    Keep the $hint value?"
2502 . ./myread
2503 case "$ans" in
2504 y) td=$was; tu=$was;;
2505 esac
2506 EOSC
2507
2508 : function used to set $1 to $val
2509 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2510 case "$val$was" in
2511 $define$undef) . ./whoa; eval "$var=\$td";;
2512 $undef$define) . ./whoa; eval "$var=\$tu";;
2513 *) eval "$var=$val";;
2514 esac'
2515
2516 cat <<EOM
2517
2518 Perl can be built to take advantage of threads, on some systems.
2519 To do so, Configure must be run with -Dusethreads.
2520
2521 Note that threading is a highly experimental feature, and
2522 some known race conditions still remain.  If you choose to try
2523 it, be very sure to not actually deploy it for production
2524 purposes.  README.threads has more details, and is required
2525 reading if you enable threads.
2526 EOM
2527 case "$usethreads" in
2528 $define|true|[yY]*)     dflt='y';;
2529 *) dflt='n';;
2530 esac
2531 rp='Build a threading Perl?'
2532 . ./myread
2533 case "$ans" in
2534 y|Y)    val="$define" ;;     
2535 *)      val="$undef" ;;
2536 esac
2537 set usethreads
2538 eval $setvar 
2539
2540 case "$d_oldpthreads" in
2541 '')     : Configure tests would be welcome here.  For now, assume undef.
2542         val="$undef" ;;
2543 *)      val="$d_oldpthreads" ;;
2544 esac
2545 set d_oldpthreads
2546 eval $setvar
2547
2548
2549 case "$usethreads" in
2550 "$define"|true|[yY]*)
2551 : Look for a hint-file generated 'call-back-unit'.  If the
2552 : user has specified that a threading perl is to be built,
2553 : we may need to set or change some other defaults.
2554         if $test -f usethreads.cbu; then
2555                 . ./usethreads.cbu
2556         fi
2557         case "$osname" in
2558         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2559                 # Known thread-capable platforms.
2560                 ;;
2561         *)
2562                 cat >&4 <<EOM
2563 $osname is not known to support threads.
2564 Please let perlbug@perl.com know how to do that.
2565
2566 Cannot continue, aborting.
2567 EOM
2568                 exit 1
2569         ;;
2570         esac # $osname
2571     ;;
2572 esac # $usethreads
2573
2574 cat <<EOM
2575
2576 Perl can be built so that multiple Perl interpreters can coexist
2577 within the same Perl executable.  To do so, Configure must be run with
2578 -Dusemultiplicity.
2579
2580 Normally you do not need this and you should answer no.
2581
2582 EOM
2583 case "$usemultiplicity" in
2584 $define|true|[yY]*)     dflt='y';;
2585 *) dflt='n';;
2586 esac
2587 rp='Build Perl for multiplicity?'
2588 . ./myread
2589 case "$ans" in
2590 y|Y)    val="$define" ;;     
2591 *)      val="$undef" ;;
2592 esac
2593 set usemultiplicity
2594 eval $setvar 
2595
2596 cat <<EOM
2597
2598 Perl can be built to take advantage of explicit 64-bit interfaces,
2599 on some systems.  To do so, Configure must be run with -Duse64bits.
2600
2601 If this doesn't make any sense to you, just accept the default 'n'.
2602 EOM
2603 case "$use64bits" in
2604 $define|true|[yY]*)     dflt='y';;
2605 *) dflt='n';;
2606 esac
2607 rp='Try to use explicit 64-bit interfaces, if available?'
2608 . ./myread
2609 case "$ans" in
2610 y|Y) 
2611         val="$define"
2612         ;;     
2613 *)      
2614         val="$undef"
2615         ;;
2616 esac
2617 set use64bits
2618 eval $setvar
2619
2620 case "$archname64" in
2621 '') archname64='' ;;    # not a typo
2622 esac
2623
2624 case "$use64bits" in
2625 "$define"|true|[yY]*)
2626 : Look for a hint-file generated 'call-back-unit'.  If the
2627 : user has specified that a threading perl is to be built,
2628 : we may need to set or change some other defaults.
2629         if $test -f use64bits.cbu; then
2630                 . ./use64bits.cbu
2631         fi
2632         case "$osname" in
2633         aix|dec_osf|hpux|irix|solaris|unicos)
2634                 # Known 64-bit capable platforms.
2635                 ;;
2636         *)
2637                 cat >&4 <<EOM
2638 $osname is not known to support 64-bit interfaces.
2639 Please let perlbug@perl.com know how to do that.
2640
2641 Cannot continue, aborting.
2642 EOM
2643                 exit 1
2644                 ;;
2645         esac
2646         ;;
2647 esac
2648
2649 : determine the architecture name
2650 echo " "
2651 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2652         tarch=`arch`"-$osname"
2653 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2654         if uname -m > tmparch 2>&1 ; then
2655                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2656                         -e 's/$/'"-$osname/" tmparch`
2657         else
2658                 tarch="$osname"
2659         fi
2660         $rm -f tmparch
2661 else
2662         tarch="$osname"
2663 fi
2664 case "$myarchname" in
2665 ''|"$tarch") ;;
2666 *)
2667         echo "(Your architecture name used to be $myarchname.)"
2668         archname=''
2669         ;;
2670 esac
2671 myarchname="$tarch"
2672 case "$archname" in
2673 '') dflt="$tarch";;
2674 *) dflt="$archname";;
2675 esac
2676 rp='What is your architecture name'
2677 . ./myread
2678 archname="$ans"
2679 case "$usethreads" in
2680 $define)
2681         echo "Threads selected." >&4
2682         case "$archname" in
2683         *-thread*) echo "...and architecture name already has -thread." >&4
2684                 ;;
2685         *)      archname="$archname-thread"
2686                 echo "...setting architecture name to $archname." >&4
2687                 ;;
2688         esac
2689         ;;
2690 esac
2691 case "$usemultiplicity" in
2692 $define)
2693         echo "Multiplicity selected." >&4
2694         case "$archname" in
2695         *-multi*) echo "...and architecture name already has -multi." >&4
2696                 ;;
2697         *)      archname="$archname-multi"
2698                 echo "...setting architecture name to $archname." >&4
2699                 ;;
2700         esac
2701         ;;
2702 esac
2703 case "$use64bits" in
2704 $define)
2705         echo "Explicit 64-bitness selected." >&4
2706         case "$archname64" in
2707         '')
2708                 ;;
2709         *)
2710                 case "$archname" in
2711                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2712                         ;;
2713                 *)      archname="$archname-$archname64"
2714                         echo "...setting architecture name to $archname." >&4
2715                         ;;
2716                 esac
2717                 ;;
2718         esac
2719 esac
2720
2721 : is AFS running?
2722 echo " "
2723 case "$afs" in
2724 $define|true)   afs=true ;;
2725 $undef|false)   afs=false ;;
2726 *)      if test -d /afs; then
2727                 afs=true
2728         else
2729                 afs=false
2730         fi
2731         ;;
2732 esac
2733 if $afs; then
2734         echo "AFS may be running... I'll be extra cautious then..." >&4
2735 else
2736         echo "AFS does not seem to be running..." >&4
2737 fi
2738
2739 : decide how portable to be.  Allow command line overrides.
2740 case "$d_portable" in
2741 "$undef") ;;
2742 *)      d_portable="$define" ;;
2743 esac
2744
2745 : set up shell script to do ~ expansion
2746 cat >filexp <<EOSS
2747 $startsh
2748 : expand filename
2749 case "\$1" in
2750  ~/*|~)
2751         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2752         ;;
2753  ~*)
2754         if $test -f /bin/csh; then
2755                 /bin/csh -f -c "glob \$1"
2756                 failed=\$?
2757                 echo ""
2758                 exit \$failed
2759         else
2760                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2761                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2762                 if $test ! -d "\$dir"; then
2763                         me=\`basename \$0\`
2764                         echo "\$me: can't locate home directory for: \$name" >&2
2765                         exit 1
2766                 fi
2767                 case "\$1" in
2768                 */*)
2769                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2770                         ;;
2771                 *)
2772                         echo \$dir
2773                         ;;
2774                 esac
2775         fi
2776         ;;
2777 *)
2778         echo \$1
2779         ;;
2780 esac
2781 EOSS
2782 chmod +x filexp
2783 $eunicefix filexp
2784
2785 : now set up to get a file name
2786 cat <<EOS >getfile
2787 $startsh
2788 EOS
2789 cat <<'EOSC' >>getfile
2790 tilde=''
2791 fullpath=''
2792 already=''
2793 skip=''
2794 none_ok=''
2795 exp_file=''
2796 nopath_ok=''
2797 orig_rp="$rp"
2798 orig_dflt="$dflt"
2799
2800 case "$fn" in
2801 *\(*)
2802         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2803         fn=`echo $fn | sed 's/(.*)//'`
2804         ;;
2805 esac
2806
2807 case "$fn" in
2808 *:*)
2809         loc_file=`expr $fn : '.*:\(.*\)'`
2810         fn=`expr $fn : '\(.*\):.*'`
2811         ;;
2812 esac
2813
2814 case "$fn" in
2815 *~*) tilde=true;;
2816 esac
2817 case "$fn" in
2818 */*) fullpath=true;;
2819 esac
2820 case "$fn" in
2821 *+*) skip=true;;
2822 esac
2823 case "$fn" in
2824 *n*) none_ok=true;;
2825 esac
2826 case "$fn" in
2827 *e*) exp_file=true;;
2828 esac
2829 case "$fn" in
2830 *p*) nopath_ok=true;;
2831 esac
2832
2833 case "$fn" in
2834 *f*) type='File';;
2835 *d*) type='Directory';;
2836 *l*) type='Locate';;
2837 esac
2838
2839 what="$type"
2840 case "$what" in
2841 Locate) what='File';;
2842 esac
2843
2844 case "$exp_file" in
2845 '')
2846         case "$d_portable" in
2847         "$define") ;;
2848         *) exp_file=true;;
2849         esac
2850         ;;
2851 esac
2852
2853 cd ..
2854 while test "$type"; do
2855         redo=''
2856         rp="$orig_rp"
2857         dflt="$orig_dflt"
2858         case "$tilde" in
2859         true) rp="$rp (~name ok)";;
2860         esac
2861         . UU/myread
2862         if test -f UU/getfile.ok && \
2863                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2864         then
2865                 value="$ans"
2866                 ansexp="$ans"
2867                 break
2868         fi
2869         case "$ans" in
2870         none)
2871                 value=''
2872                 ansexp=''
2873                 case "$none_ok" in
2874                 true) type='';;
2875                 esac
2876                 ;;
2877         *)
2878                 case "$tilde" in
2879                 '') value="$ans"
2880                         ansexp="$ans";;
2881                 *)
2882                         value=`UU/filexp $ans`
2883                         case $? in
2884                         0)
2885                                 if test "$ans" != "$value"; then
2886                                         echo "(That expands to $value on this system.)"
2887                                 fi
2888                                 ;;
2889                         *) value="$ans";;
2890                         esac
2891                         ansexp="$value"
2892                         case "$exp_file" in
2893                         '') value="$ans";;
2894                         esac
2895                         ;;
2896                 esac
2897                 case "$fullpath" in
2898                 true)
2899                         case "$ansexp" in
2900                         /*) value="$ansexp" ;;
2901                         *)
2902                                 redo=true
2903                                 case "$already" in
2904                                 true)
2905                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2906                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2907                                         ;;
2908                                 *)
2909                                 echo "Please give a full path name, starting with slash." >&4
2910                                         case "$tilde" in
2911                                         true)
2912                                 echo "Note that using ~name is ok provided it expands well." >&4
2913                                                 already=true
2914                                                 ;;
2915                                         esac
2916                                 esac
2917                                 ;;
2918                         esac
2919                         ;;
2920                 esac
2921                 case "$redo" in
2922                 '')
2923                         case "$type" in
2924                         File)
2925                                 if test -f "$ansexp"; then
2926                                         type=''
2927                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2928                                 then
2929                                         echo "($value is not a plain file, but that's ok.)"
2930                                         type=''
2931                                 fi
2932                                 ;;
2933                         Directory)
2934                                 if test -d "$ansexp"; then
2935                                         type=''
2936                                 fi
2937                                 ;;
2938                         Locate)
2939                                 if test -d "$ansexp"; then
2940                                         echo "(Looking for $loc_file in directory $value.)"
2941                                         value="$value/$loc_file"
2942                                         ansexp="$ansexp/$loc_file"
2943                                 fi
2944                                 if test -f "$ansexp"; then
2945                                         type=''
2946                                 fi
2947                                 case "$nopath_ok" in
2948                                 true)   case "$value" in
2949                                         */*) ;;
2950                                         *)      echo "Assuming $value will be in people's path."
2951                                                 type=''
2952                                                 ;;
2953                                         esac
2954                                         ;;
2955                                 esac
2956                                 ;;
2957                         esac
2958
2959                         case "$skip" in
2960                         true) type='';
2961                         esac
2962
2963                         case "$type" in
2964                         '') ;;
2965                         *)
2966                                 if test "$fastread" = yes; then
2967                                         dflt=y
2968                                 else
2969                                         dflt=n
2970                                 fi
2971                                 rp="$what $value doesn't exist.  Use that name anyway?"
2972                                 . UU/myread
2973                                 dflt=''
2974                                 case "$ans" in
2975                                 y*) type='';;
2976                                 *) echo " ";;
2977                                 esac
2978                                 ;;
2979                         esac
2980                         ;;
2981                 esac
2982                 ;;
2983         esac
2984 done
2985 cd UU
2986 ans="$value"
2987 rp="$orig_rp"
2988 dflt="$orig_dflt"
2989 rm -f getfile.ok
2990 EOSC
2991
2992 : determine root of directory hierarchy where package will be installed.
2993 case "$prefix" in
2994 '')
2995         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2996         ;;
2997 *)
2998         dflt="$prefix"
2999         ;;
3000 esac
3001 $cat <<EOM
3002
3003 By default, $package will be installed in $dflt/bin, manual
3004 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3005 all installation directories. Typically set to /usr/local, but you
3006 may choose /usr if you wish to install $package among your system
3007 binaries. If you wish to have binaries under /bin but manual pages
3008 under /usr/local/man, that's ok: you will be prompted separately
3009 for each of the installation directories, the prefix being only used
3010 to set the defaults.
3011
3012 EOM
3013 fn=d~
3014 rp='Installation prefix to use?'
3015 . ./getfile
3016 oldprefix=''
3017 case "$prefix" in
3018 '') ;;
3019 *)
3020         case "$ans" in
3021         "$prefix") ;;
3022         *) oldprefix="$prefix";;
3023         esac
3024         ;;
3025 esac
3026 prefix="$ans"
3027 prefixexp="$ansexp"
3028
3029 : set the prefixit variable, to compute a suitable default value
3030 prefixit='case "$3" in
3031 ""|none)
3032         case "$oldprefix" in
3033         "") eval "$1=\"\$$2\"";;
3034         *)
3035                 case "$3" in
3036                 "") eval "$1=";;
3037                 none)
3038                         eval "tp=\"\$$2\"";
3039                         case "$tp" in
3040                         ""|" ") eval "$1=\"\$$2\"";;
3041                         *) eval "$1=";;
3042                         esac;;
3043                 esac;;
3044         esac;;
3045 *)
3046         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3047         case "$tp" in
3048         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3049         /*-$oldprefix/*|\~*-$oldprefix/*)
3050                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3051         *) eval "$1=\"\$$2\"";;
3052         esac;;
3053 esac'
3054
3055 : set the base revision
3056 baserev=5.0
3057
3058 : get the patchlevel
3059 echo " "
3060 echo "Getting the current patchlevel..." >&4
3061 if $test -r $rsrc/patchlevel.h;then
3062         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3063         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3064 else
3065         patchlevel=0
3066         subversion=0
3067 fi
3068 $echo $n "(You have $package" $c
3069 case "$package" in
3070 "*$baserev")    ;;
3071 *)              $echo $n " $baserev" $c ;;
3072 esac
3073 $echo $n " patchlevel $patchlevel" $c
3074 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3075 echo ".)"
3076
3077 if test 0 -eq "$subversion"; then
3078         version=`LC_ALL=C; export LC_ALL; \
3079                  echo $baserev $patchlevel | \
3080                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3081 else
3082         version=`LC_ALL=C; export LC_ALL; \
3083                  echo $baserev $patchlevel $subversion | \
3084                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3085 fi
3086 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3087 if test "$subversion" -lt 50; then
3088         apiversion=`LC_ALL=C; export LC_ALL; \
3089                  LANGUAGE=C; export LANGUAGE; \
3090                  echo $baserev $patchlevel | \
3091                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3092 else
3093         apiversion="$version"
3094 fi
3095
3096 : determine where private library files go
3097 : Usual default is /usr/local/lib/perl5/$version.
3098 : Also allow things like /opt/perl/lib/$version, since 
3099 : /opt/perl/lib/perl5... would be redundant.
3100 case "$prefix" in
3101 *perl*) set dflt privlib lib/$version ;;
3102 *)       set dflt privlib lib/$package/$version ;;
3103 esac
3104 eval $prefixit
3105 $cat <<EOM
3106
3107 There are some auxiliary files for $package that need to be put into a
3108 private library directory that is accessible by everyone.
3109
3110 EOM
3111 fn=d~+
3112 rp='Pathname where the private library files will reside?'
3113 . ./getfile
3114 if $test "X$privlibexp" != "X$ansexp"; then
3115         installprivlib=''
3116 fi
3117 privlib="$ans"
3118 privlibexp="$ansexp"
3119 if $afs; then
3120         $cat <<EOM
3121
3122 Since you are running AFS, I need to distinguish the directory in which
3123 private files reside from the directory in which they are installed (and from
3124 which they are presumably copied to the former directory by occult means).
3125
3126 EOM
3127         case "$installprivlib" in
3128         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3129         *) dflt="$installprivlib";;
3130         esac
3131         fn=de~
3132         rp='Where will private files be installed?'
3133         . ./getfile
3134         installprivlib="$ans"
3135 else
3136         installprivlib="$privlibexp"
3137 fi
3138
3139 : set the prefixup variable, to restore leading tilda escape
3140 prefixup='case "$prefixexp" in
3141 "$prefix") ;;
3142 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3143 esac'
3144
3145 : determine where public architecture dependent libraries go
3146 set archlib archlib
3147 eval $prefixit
3148 : privlib default is /usr/local/lib/$package/$version
3149 : archlib default is /usr/local/lib/$package/$version/$archname
3150 : privlib may have an optional trailing /share.
3151 tdflt=`echo $privlib | $sed 's,/share$,,'`
3152 tdflt=$tdflt/$archname
3153 case "$archlib" in
3154 '')     dflt=$tdflt
3155         ;;
3156 *)      dflt="$archlib"
3157     ;;
3158 esac
3159 cat <<EOM
3160
3161 $spackage contains architecture-dependent library files.  If you are
3162 sharing libraries in a heterogeneous environment, you might store
3163 these files in a separate location.  Otherwise, you can just include
3164 them with the rest of the public library files.
3165
3166 EOM
3167 fn=d+~
3168 rp='Where do you want to put the public architecture-dependent libraries?'
3169 . ./getfile
3170 archlib="$ans"
3171 archlibexp="$ansexp"
3172
3173 if $afs; then
3174         $cat <<EOM
3175
3176 Since you are running AFS, I need to distinguish the directory in
3177 which architecture-dependent library files reside from the directory
3178 in which they are installed (and from which they are presumably copied
3179 to the former directory by occult means).
3180
3181 EOM
3182         case "$installarchlib" in
3183         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3184         *) dflt="$installarchlib";;
3185         esac
3186         fn=de~
3187         rp='Where will architecture-dependent library files be installed?'
3188         . ./getfile
3189         installarchlib="$ans"
3190 else
3191         installarchlib="$archlibexp"
3192 fi
3193 if $test X"$archlib" = X"$privlib"; then
3194         d_archlib="$undef"
3195 else
3196         d_archlib="$define"
3197 fi
3198
3199 : make some quick guesses about what we are up against
3200 echo " "
3201 $echo $n "Hmm...  $c"
3202 echo exit 1 >bsd
3203 echo exit 1 >usg
3204 echo exit 1 >v7
3205 echo exit 1 >osf1
3206 echo exit 1 >eunice
3207 echo exit 1 >xenix
3208 echo exit 1 >venix
3209 echo exit 1 >os2
3210 d_bsd="$undef"
3211 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3212 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3213 then
3214         echo "Looks kind of like an OSF/1 system, but we'll see..."
3215         echo exit 0 >osf1
3216 elif test `echo abc | tr a-z A-Z` = Abc ; then
3217         xxx=`./loc addbib blurfl $pth`
3218         if $test -f $xxx; then
3219         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3220                 echo exit 0 >bsd
3221                 echo exit 0 >usg
3222         else
3223                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3224                         echo "Looks kind of like an extended USG system, but we'll see..."
3225                 else
3226                         echo "Looks kind of like a USG system, but we'll see..."
3227                 fi
3228                 echo exit 0 >usg
3229         fi
3230 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3231         echo "Looks kind of like a BSD system, but we'll see..."
3232         d_bsd="$define"
3233         echo exit 0 >bsd
3234 else
3235         echo "Looks kind of like a Version 7 system, but we'll see..."
3236         echo exit 0 >v7
3237 fi
3238 case "$eunicefix" in
3239 *unixtovms*)
3240         $cat <<'EOI'
3241 There is, however, a strange, musty smell in the air that reminds me of
3242 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3243 EOI
3244         echo exit 0 >eunice
3245         d_eunice="$define"
3246 : it so happens the Eunice I know will not run shell scripts in Unix format
3247         ;;
3248 *)
3249         echo " "
3250         echo "Congratulations.  You aren't running Eunice."
3251         d_eunice="$undef"
3252         ;;
3253 esac
3254 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3255 case "$p_" in
3256 :) ;;
3257 *)
3258         $cat <<'EOI'
3259 I have the feeling something is not exactly right, however...don't tell me...
3260 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3261 EOI
3262         echo exit 0 >os2
3263         ;;
3264 esac
3265 if test -f /xenix; then
3266         echo "Actually, this looks more like a XENIX system..."
3267         echo exit 0 >xenix
3268         d_xenix="$define"
3269 else
3270         echo " "
3271         echo "It's not Xenix..."
3272         d_xenix="$undef"
3273 fi
3274 chmod +x xenix
3275 $eunicefix xenix
3276 if test -f /venix; then
3277         echo "Actually, this looks more like a VENIX system..."
3278         echo exit 0 >venix
3279 else
3280         echo " "
3281         if ./xenix; then
3282                 : null
3283         else
3284                 echo "Nor is it Venix..."
3285         fi
3286 fi
3287 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3288 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3289 $rm -f foo
3290
3291 : see if setuid scripts can be secure
3292 $cat <<EOM
3293
3294 Some kernels have a bug that prevents setuid #! scripts from being
3295 secure.  Some sites have disabled setuid #! scripts because of this.
3296
3297 First let's decide if your kernel supports secure setuid #! scripts.
3298 (If setuid #! scripts would be secure but have been disabled anyway,
3299 don't say that they are secure if asked.)
3300
3301 EOM
3302
3303 val="$undef"
3304 if $test -d /dev/fd; then
3305         echo "#!$ls" >reflect
3306         chmod +x,u+s reflect
3307         ./reflect >flect 2>&1
3308         if $contains "/dev/fd" flect >/dev/null; then
3309                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3310                 val="$define"
3311         else
3312                 $cat <<EOM
3313 If you are not sure if they are secure, I can check but I'll need a
3314 username and password different from the one you are using right now.
3315 If you don't have such a username or don't want me to test, simply
3316 enter 'none'.
3317
3318 EOM
3319                 rp='Other username to test security of setuid scripts with?'
3320                 dflt='none'
3321                 . ./myread
3322                 case "$ans" in
3323                 n|none)
3324                         case "$d_suidsafe" in
3325                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3326                                 dflt=n;;
3327                         "$undef")
3328                                 echo "Well, the $hint value is *not* secure." >&4
3329                                 dflt=n;;
3330                         *)      echo "Well, the $hint value *is* secure." >&4
3331                                 dflt=y;;
3332                         esac
3333                         ;;
3334                 *)
3335                         $rm -f reflect flect
3336                         echo "#!$ls" >reflect
3337                         chmod +x,u+s reflect
3338                         echo >flect
3339                         chmod a+w flect
3340                         echo '"su" will (probably) prompt you for '"$ans's password."
3341                         su $ans -c './reflect >flect'
3342                         if $contains "/dev/fd" flect >/dev/null; then
3343                                 echo "Okay, it looks like setuid scripts are secure." >&4
3344                                 dflt=y
3345                         else
3346                                 echo "I don't think setuid scripts are secure." >&4
3347                                 dflt=n
3348                         fi
3349                         ;;
3350                 esac
3351                 rp='Does your kernel have *secure* setuid scripts?'
3352                 . ./myread
3353                 case "$ans" in
3354                 [yY]*)  val="$define";;
3355                 *)      val="$undef";;
3356                 esac
3357         fi
3358 else
3359         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3360         echo "(That's for file descriptors, not floppy disks.)"
3361         val="$undef"
3362 fi
3363 set d_suidsafe
3364 eval $setvar
3365
3366 $rm -f reflect flect
3367
3368 : now see if they want to do setuid emulation
3369 echo " "
3370 val="$undef"
3371 case "$d_suidsafe" in
3372 "$define")
3373         val="$undef"
3374         echo "No need to emulate SUID scripts since they are secure here." >& 4
3375         ;;
3376 *)
3377         $cat <<EOM
3378 Some systems have disabled setuid scripts, especially systems where
3379 setuid scripts cannot be secure.  On systems where setuid scripts have
3380 been disabled, the setuid/setgid bits on scripts are currently
3381 useless.  It is possible for $package to detect those bits and emulate
3382 setuid/setgid in a secure fashion.  This emulation will only work if
3383 setuid scripts have been disabled in your kernel.
3384
3385 EOM
3386         case "$d_dosuid" in
3387         "$define") dflt=y ;;
3388         *) dflt=n ;;
3389         esac
3390         rp="Do you want to do setuid/setgid emulation?"
3391         . ./myread
3392         case "$ans" in
3393         [yY]*)  val="$define";;
3394         *)      val="$undef";;
3395         esac
3396         ;;
3397 esac
3398 set d_dosuid
3399 eval $setvar
3400
3401 : determine where manual pages are on this system
3402 echo " "
3403 case "$sysman" in
3404 '') 
3405         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3406         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3407         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3408         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3409         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3410         sysman=`./loc . /usr/man/man1 $syspath`
3411         ;;
3412 esac
3413 if $test -d "$sysman"; then
3414         echo "System manual is in $sysman." >&4
3415 else
3416         echo "Could not find manual pages in source form." >&4
3417 fi
3418
3419 : see what memory models we can support
3420 case "$models" in
3421 '')
3422         $cat >pdp11.c <<'EOP'
3423 int main() {
3424 #ifdef pdp11
3425         exit(0);
3426 #else
3427         exit(1);
3428 #endif
3429 }
3430 EOP
3431         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3432         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3433                 dflt='unsplit split'
3434         else
3435                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3436                 case "$tans" in
3437                 X) dflt='none';;
3438                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3439                                 dflt='small'
3440                         else
3441                                 dflt=''
3442                         fi
3443                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3444                                 dflt="$dflt medium"
3445                         fi
3446                         if $test -d /lib/large || $test -d /usr/lib/large; then
3447                                 dflt="$dflt large"
3448                         fi
3449                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3450                                 dflt="$dflt huge"
3451                         fi
3452                 esac
3453         fi;;
3454 *) dflt="$models";;
3455 esac
3456 $cat <<EOM
3457  
3458 Some systems have different model sizes.  On most systems they are called
3459 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3460 split.  If your system doesn't support different memory models, say "none".
3461 If you wish to force everything to one memory model, say "none" here and
3462 put the appropriate flags later when it asks you for other cc and ld flags.
3463 Venix systems may wish to put "none" and let the compiler figure things out.
3464 (In the following question multiple model names should be space separated.)
3465
3466 The default for most systems is "none".
3467
3468 EOM
3469 rp="Which memory models are supported?"
3470 . ./myread
3471 models="$ans"
3472
3473 case "$models" in
3474 none)
3475         small=''
3476         medium=''
3477         large=''
3478         huge=''
3479         unsplit=''
3480         split=''
3481         ;;
3482 *split)
3483         case "$split" in
3484         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3485                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3486                         dflt='-i'
3487                 else
3488                         dflt='none'
3489                 fi;;
3490         *) dflt="$split";;
3491         esac
3492         rp="What flag indicates separate I and D space?"
3493         . ./myread
3494         tans="$ans"
3495         case "$tans" in
3496         none) tans='';;
3497         esac
3498         split="$tans"
3499         unsplit='';;
3500 *large*|*small*|*medium*|*huge*)
3501         case "$models" in
3502         *large*)
3503                 case "$large" in
3504                 '') dflt='-Ml';;
3505                 *) dflt="$large";;
3506                 esac
3507         rp="What flag indicates large model?"
3508         . ./myread
3509         tans="$ans"
3510         case "$tans" in
3511         none) tans='';
3512         esac
3513         large="$tans";;
3514         *) large='';;
3515         esac
3516         case "$models" in
3517         *huge*) case "$huge" in
3518                 '') dflt='-Mh';;
3519                 *) dflt="$huge";;
3520                 esac
3521                 rp="What flag indicates huge model?"
3522                 . ./myread
3523                 tans="$ans"
3524                 case "$tans" in
3525                 none) tans='';
3526                 esac
3527                 huge="$tans";;
3528         *) huge="$large";;
3529         esac
3530         case "$models" in
3531         *medium*) case "$medium" in
3532                 '') dflt='-Mm';;
3533                 *) dflt="$medium";;
3534                 esac
3535                 rp="What flag indicates medium model?"
3536                 . ./myread
3537                 tans="$ans"
3538                 case "$tans" in
3539                 none) tans='';
3540                 esac
3541                 medium="$tans";;
3542         *) medium="$large";;
3543         esac
3544         case "$models" in
3545         *small*) case "$small" in
3546                 '') dflt='none';;
3547                 *) dflt="$small";;
3548                 esac
3549                 rp="What flag indicates small model?"
3550                 . ./myread
3551                 tans="$ans"
3552                 case "$tans" in
3553                 none) tans='';
3554                 esac
3555                 small="$tans";;
3556         *) small='';;
3557         esac
3558         ;;
3559 *)
3560         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3561         ;;
3562 esac
3563 $rm -f pdp11.* pdp11
3564
3565 : see if we need a special compiler
3566 echo " "
3567 if ./usg; then
3568         case "$cc" in
3569         '') case "$Mcc" in
3570                 /*) dflt='Mcc';;
3571                 *) case "$large" in
3572                         -M*) dflt='cc';;
3573                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3574                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3575                                                 dflt='cc'
3576                                         else
3577                                                 dflt='cc -M'
3578                                         fi
3579                                 else
3580                                         dflt='cc'
3581                                 fi;;
3582                         esac;;
3583                 esac;;
3584         *)  dflt="$cc";;
3585         esac
3586         case "$dflt" in
3587         *M*)    $cat <<'EOM'
3588 On some older systems the default C compiler will not resolve multiple global
3589 references that happen to have the same name.  On some such systems the "Mcc"
3590 command may be used to force these to be resolved.  On other systems a "cc -M"
3591 command is required.  (Note that the -M flag on other systems indicates a
3592 memory model to use!) If you have the Gnu C compiler, you might wish to use
3593 that instead.
3594
3595 EOM
3596         ;;
3597         esac
3598         rp="Use which C compiler?"
3599         . ./myread
3600         cc="$ans"
3601 else
3602         case "$cc" in
3603         '') dflt=cc;;
3604         *) dflt="$cc";;
3605         esac
3606         rp="Use which C compiler?"
3607         . ./myread
3608         cc="$ans"
3609 fi
3610 : Look for a hint-file generated 'call-back-unit'.  Now that the
3611 : user has specified the compiler, we may need to set or change some
3612 : other defaults.
3613 if $test -f cc.cbu; then
3614     . ./cc.cbu
3615 fi
3616 echo " "
3617 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3618 $cat >gccvers.c <<EOM
3619 #include <stdio.h>
3620 int main() {
3621 #ifdef __GNUC__
3622 #ifdef __VERSION__
3623         printf("%s\n", __VERSION__);
3624 #else
3625         printf("%s\n", "1");
3626 #endif
3627 #endif
3628         exit(0);
3629 }
3630 EOM
3631 if $cc -o gccvers gccvers.c; then
3632         gccversion=`./gccvers`
3633         case "$gccversion" in
3634         '') echo "You are not using GNU cc." ;;
3635         *)  echo "You are using GNU cc $gccversion." ;;
3636         esac
3637 else
3638         echo " "
3639         echo "*** WHOA THERE!!! ***" >&4
3640         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3641         case "$knowitall" in
3642         '')
3643         echo "    You'd better start hunting for one and let me know about it." >&4
3644                 exit 1
3645                 ;;
3646         esac
3647 fi
3648 $rm -f gccvers*
3649 case "$gccversion" in
3650 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3651 esac
3652
3653 : What should the include directory be ?
3654 echo " "
3655 $echo $n "Hmm...  $c"
3656 dflt='/usr/include'
3657 incpath=''
3658 mips_type=''
3659 if $test -f /bin/mips && /bin/mips; then
3660         echo "Looks like a MIPS system..."
3661         $cat >usr.c <<'EOCP'
3662 #ifdef SYSTYPE_BSD43
3663 /bsd43
3664 #endif
3665 EOCP
3666         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3667                 dflt='/bsd43/usr/include'
3668                 incpath='/bsd43'
3669                 mips_type='BSD 4.3'
3670         else
3671                 mips_type='System V'
3672         fi
3673         $rm -f usr.c usr.out
3674         echo "and you're compiling with the $mips_type compiler and libraries."
3675         xxx_prompt=y
3676         echo "exit 0" >mips
3677 else
3678         echo "Doesn't look like a MIPS system."
3679         xxx_prompt=n
3680         echo "exit 1" >mips
3681 fi
3682 chmod +x mips
3683 $eunicefix mips
3684 case "$usrinc" in
3685 '') ;;
3686 *) dflt="$usrinc";;
3687 esac
3688 case "$xxx_prompt" in
3689 y)      fn=d/
3690         echo " "
3691         rp='Where are the include files you want to use?'
3692         . ./getfile
3693         usrinc="$ans"
3694         ;;
3695 *)      usrinc="$dflt"
3696         ;;
3697 esac
3698
3699 : see how we invoke the C preprocessor
3700 echo " "
3701 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3702 cat <<'EOT' >testcpp.c
3703 #define ABC abc
3704 #define XYZ xyz
3705 ABC.XYZ
3706 EOT
3707 cd ..
3708 if test ! -f cppstdin; then
3709         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3710 else
3711         echo "Keeping your $hint cppstdin wrapper."
3712 fi
3713 chmod 755 cppstdin
3714 wrapper=`pwd`/cppstdin
3715 ok='false'
3716 cd UU
3717
3718 if $test "X$cppstdin" != "X" && \
3719         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3720         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3721 then
3722         echo "You used to use $cppstdin $cppminus so we'll use that again."
3723         case "$cpprun" in
3724         '') echo "But let's see if we can live without a wrapper..." ;;
3725         *)
3726                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3727                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3728                 then
3729                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3730                         ok='true'
3731                 else
3732                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3733                 fi
3734                 ;;
3735         esac
3736 else
3737         case "$cppstdin" in
3738         '') ;;
3739         *)
3740                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3741                 ;;
3742         esac
3743 fi
3744
3745 if $ok; then
3746         : nothing
3747 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3748         $cc -E <testcpp.c >testcpp.out 2>&1; \
3749         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3750         echo "Yup, it does."
3751         x_cpp="$cc -E"
3752         x_minus='';
3753 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3754         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3755         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3756         echo "Yup, it does."
3757         x_cpp="$cc -E"
3758         x_minus='-';
3759 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3760         $cc -P <testcpp.c >testcpp.out 2>&1; \
3761         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3762         echo "Yipee, that works!"
3763         x_cpp="$cc -P"
3764         x_minus='';
3765 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3766         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3767         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3768         echo "At long last!"
3769         x_cpp="$cc -P"
3770         x_minus='-';
3771 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3772         $cpp <testcpp.c >testcpp.out 2>&1; \
3773         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3774         echo "It works!"
3775         x_cpp="$cpp"
3776         x_minus='';
3777 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3778         $cpp - <testcpp.c >testcpp.out 2>&1; \
3779         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3780         echo "Hooray, it works!  I was beginning to wonder."
3781         x_cpp="$cpp"
3782         x_minus='-';
3783 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3784         $wrapper <testcpp.c >testcpp.out 2>&1; \
3785         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3786         x_cpp="$wrapper"
3787         x_minus=''
3788         echo "Eureka!"
3789 else
3790         dflt=''
3791         rp="No dice.  I can't find a C preprocessor.  Name one:"
3792         . ./myread
3793         x_cpp="$ans"
3794         x_minus=''
3795         $x_cpp <testcpp.c >testcpp.out 2>&1
3796         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3797                 echo "OK, that will do." >&4
3798         else
3799 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3800                 exit 1
3801         fi
3802 fi
3803
3804 case "$ok" in
3805 false)
3806         cppstdin="$x_cpp"
3807         cppminus="$x_minus"
3808         cpprun="$x_cpp"
3809         cpplast="$x_minus"
3810         set X $x_cpp
3811         shift
3812         case "$1" in
3813         "$cpp")
3814                 echo "Perhaps can we force $cc -E using a wrapper..."
3815                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3816                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3817                 then
3818                         echo "Yup, we can."
3819                         cppstdin="$wrapper"
3820                         cppminus='';
3821                 else
3822                         echo "Nope, we'll have to live without it..."
3823                 fi
3824                 ;;
3825         esac
3826         case "$cpprun" in
3827         "$wrapper")
3828                 cpprun=''
3829                 cpplast=''
3830                 ;;
3831         esac
3832         ;;
3833 esac
3834
3835 case "$cppstdin" in
3836 "$wrapper"|'cppstdin') ;;
3837 *) $rm -f $wrapper;;
3838 esac
3839 $rm -f testcpp.c testcpp.out
3840
3841 : Set private lib path
3842 case "$plibpth" in
3843 '') if ./mips; then
3844                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3845         fi;;
3846 esac
3847 case "$libpth" in
3848 ' ') dlist='';;
3849 '') dlist="$loclibpth $plibpth $glibpth";;
3850 *) dlist="$libpth";;
3851 esac
3852
3853 : Now check and see which directories actually exist, avoiding duplicates
3854 libpth=''
3855 for xxx in $dlist
3856 do
3857     if $test -d $xxx; then
3858                 case " $libpth " in
3859                 *" $xxx "*) ;;
3860                 *) libpth="$libpth $xxx";;
3861                 esac
3862     fi
3863 done
3864 $cat <<'EOM'
3865
3866 Some systems have incompatible or broken versions of libraries.  Among
3867 the directories listed in the question below, please remove any you
3868 know not to be holding relevant libraries, and add any that are needed.
3869 Say "none" for none.
3870
3871 EOM
3872 case "$libpth" in
3873 '') dflt='none';;
3874 *)
3875         set X $libpth
3876         shift
3877         dflt=${1+"$@"}
3878         ;;
3879 esac
3880 rp="Directories to use for library searches?"
3881 . ./myread
3882 case "$ans" in
3883 none) libpth=' ';;
3884 *) libpth="$ans";;
3885 esac
3886
3887 : compute shared library extension
3888 case "$so" in
3889 '')
3890         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3891                 dflt='sl'
3892         else
3893                 dflt='so'
3894         fi
3895         ;;
3896 *) dflt="$so";;
3897 esac
3898 $cat <<EOM
3899
3900 On some systems, shared libraries may be available.  Answer 'none' if
3901 you want to suppress searching of shared libraries for the remaining
3902 of this configuration.
3903
3904 EOM
3905 rp='What is the file extension used for shared libraries?'
3906 . ./myread
3907 so="$ans"
3908
3909 : Define several unixisms.
3910 : Hints files or command line option can be used to override them.
3911 : The convoluted testing is in case hints files set either the old
3912 : or the new name.
3913 case "$_exe" in
3914 '')     case "$exe_ext" in
3915     '') ;;
3916         *)      _exe="$exe_ext" ;;
3917         esac
3918         ;;
3919 esac
3920 case "$_a" in
3921 '')     case "$lib_ext" in
3922     '') _a='.a';;
3923         *)      _a="$lib_ext" ;;
3924         esac
3925         ;;
3926 esac
3927 case "$_o" in
3928 '') case "$obj_ext" in
3929         '')     _o='.o';;
3930         *)      _o="$obj_ext";;
3931         esac
3932         ;;
3933 esac
3934 case "$p_" in
3935 '') case "$path_sep" in
3936         '')     p_=':';;
3937         *)      p_="$path_sep";;
3938         esac
3939         ;;
3940 esac
3941 exe_ext=$_exe
3942 lib_ext=$_a
3943 obj_ext=$_o
3944 path_sep=$p_
3945
3946 : Which makefile gets called first.  This is used by make depend.
3947 case "$firstmakefile" in
3948 '') firstmakefile='makefile';;
3949 esac
3950
3951 cat <<EOM
3952
3953 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3954 Configure must be run with -Dusesocks.
3955
3956 Normally you do not need this and you should answer no.
3957
3958 EOM
3959 case "$usesocks" in
3960 $define|true|[yY]*)     dflt='y';;
3961 *) dflt='n';;
3962 esac
3963 rp='Build Perl for SOCKS?'
3964 . ./myread
3965 case "$ans" in
3966 y|Y)    val="$define" ;;     
3967 *)      val="$undef" ;;
3968 esac
3969 set usesocks
3970 eval $setvar
3971
3972 : Looking for optional libraries
3973 echo " "
3974 echo "Checking for optional libraries..." >&4
3975 case "$libs" in
3976 ' '|'') dflt='';;
3977 *) dflt="$libs";;
3978 esac
3979 case "$libswanted" in
3980 '') libswanted='c_s';;
3981 esac
3982 case "$usesocks" in
3983 $define)
3984         libswanted="$libswanted socks5 socks5_sh"
3985         ;;
3986 esac
3987 for thislib in $libswanted; do
3988         
3989         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3990                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3991                 echo "Found -l$thislib (shared)."
3992                 case " $dflt " in
3993                 *"-l$thislib "*);;
3994                 *) dflt="$dflt -l$thislib";;
3995                 esac
3996         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3997                 echo "Found -l$thislib (shared)."
3998                 case " $dflt " in
3999                 *"-l$thislib "*);;
4000                 *) dflt="$dflt -l$thislib";;
4001                 esac
4002         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4003                 echo "Found -l$thislib."
4004                 case " $dflt " in
4005                 *"-l$thislib "*);;
4006                 *) dflt="$dflt -l$thislib";;
4007                 esac
4008         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4009                 echo "Found -l$thislib."
4010                 case " $dflt " in
4011                 *"-l$thislib "*);;
4012                 *) dflt="$dflt -l$thislib";;
4013                 esac
4014         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4015                 echo "Found -l${thislib}_s."
4016                 case " $dflt " in
4017                 *"-l$thislib "*);;
4018                 *) dflt="$dflt -l${thislib}_s";;
4019                 esac
4020         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4021                 echo "Found -l$thislib."
4022                 case " $dflt " in
4023                 *"-l$thislib "*);;
4024                 *) dflt="$dflt -l$thislib";;
4025                 esac
4026         else
4027                 echo "No -l$thislib."
4028         fi
4029 done
4030 set X $dflt
4031 shift
4032 dflt="$*"
4033 case "$libs" in
4034 '') dflt="$dflt";;
4035 *) dflt="$libs";;
4036 esac
4037 case "$dflt" in
4038 ' '|'') dflt='none';;
4039 esac
4040
4041 $cat <<EOM
4042
4043 In order to compile $package on your machine, a number of libraries
4044 are usually needed.  Include any other special libraries here as well.
4045 Say "none" for none.  The default list is almost always right.
4046 EOM
4047
4048 echo " "
4049 rp="What libraries to use?"
4050 . ./myread
4051 case "$ans" in
4052 none) libs=' ';;
4053 *) libs="$ans";;
4054 esac
4055
4056 : determine optimize, if desired, or use for debug flag also
4057 case "$optimize" in
4058 ' '|$undef) dflt='none';;
4059 '') dflt='-O';;
4060 *) dflt="$optimize";;
4061 esac
4062 $cat <<EOH
4063
4064 Some C compilers have problems with their optimizers.  By default, $package
4065 compiles with the -O flag to use the optimizer.  Alternately, you might want
4066 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4067 systems).  Either flag can be specified here.  To use neither flag, specify
4068 the word "none".
4069
4070 EOH
4071 rp="What optimizer/debugger flag should be used?"
4072 . ./myread
4073 optimize="$ans"
4074 case "$optimize" in
4075 'none') optimize=" ";;
4076 esac
4077
4078 dflt=''
4079 : We will not override a previous value, but we might want to
4080 : augment a hint file
4081 case "$hint" in
4082 none|recommended)
4083         case "$gccversion" in
4084         1*) dflt='-fpcc-struct-return' ;;
4085         esac
4086         case "$optimize" in
4087         *-g*) dflt="$dflt -DDEBUGGING";;
4088         esac
4089         case "$gccversion" in
4090         2*) if test -d /etc/conf/kconfig.d &&
4091                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4092                 then
4093                         dflt="$dflt -posix"
4094                 fi
4095                 ;;
4096         esac
4097         ;;
4098 esac
4099
4100 case "$mips_type" in
4101 *BSD*|'') inclwanted="$locincpth $usrinc";;
4102 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4103 esac
4104 for thisincl in $inclwanted; do
4105         if $test -d $thisincl; then
4106                 if $test x$thisincl != x$usrinc; then
4107                         case "$dflt" in
4108                         *$thisincl*);;
4109                         *) dflt="$dflt -I$thisincl";;
4110                         esac
4111                 fi
4112         fi
4113 done
4114
4115 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4116         xxx=true;
4117 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4118         xxx=true;
4119 else
4120         xxx=false;
4121 fi;
4122 if $xxx; then
4123         case "$dflt" in
4124         *$2*);;
4125         *) dflt="$dflt -D$2";;
4126         esac;
4127 fi'
4128
4129 set signal.h LANGUAGE_C; eval $inctest
4130
4131 case "$usesocks" in
4132 $define)
4133         ccflags="$ccflags -DSOCKS"
4134         ;;
4135 esac
4136
4137 case "$hint" in
4138 none|recommended) dflt="$ccflags $dflt" ;;
4139 *) dflt="$ccflags";;
4140 esac
4141
4142 case "$dflt" in
4143 ''|' ') dflt=none;;
4144 esac
4145 $cat <<EOH
4146
4147 Your C compiler may want other flags.  For this question you should include
4148 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4149 but you should NOT include libraries or ld flags like -lwhatever.  If you
4150 want $package to honor its debug switch, you should include -DDEBUGGING here.
4151 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4152
4153 To use no flags, specify the word "none".
4154
4155 EOH
4156 set X $dflt
4157 shift
4158 dflt=${1+"$@"}
4159 rp="Any additional cc flags?"
4160 . ./myread
4161 case "$ans" in
4162 none) ccflags='';;
4163 *) ccflags="$ans";;
4164 esac
4165
4166 : the following weeds options from ccflags that are of no interest to cpp
4167 cppflags="$ccflags"
4168 case "$gccversion" in
4169 1*) cppflags="$cppflags -D__GNUC__"
4170 esac
4171 case "$mips_type" in
4172 '');;
4173 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4174 esac
4175 case "$cppflags" in
4176 '');;
4177 *)
4178         echo " "
4179         echo "Let me guess what the preprocessor flags are..." >&4
4180         set X $cppflags
4181         shift
4182         cppflags=''
4183         $cat >cpp.c <<'EOM'
4184 #define BLURFL foo
4185
4186 BLURFL xx LFRULB
4187 EOM
4188         previous=''
4189         for flag in $*
4190         do
4191                 case "$flag" in
4192                 -*) ftry="$flag";;
4193                 *) ftry="$previous $flag";;
4194                 esac
4195                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4196                         >cpp1.out 2>/dev/null && \
4197                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4198                         >cpp2.out 2>/dev/null && \
4199                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4200                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4201                 then
4202                         cppflags="$cppflags $ftry"
4203                         previous=''
4204                 else
4205                         previous="$flag"
4206                 fi
4207         done
4208         set X $cppflags
4209         shift
4210         cppflags=${1+"$@"}
4211         case "$cppflags" in
4212         *-*)  echo "They appear to be: $cppflags";;
4213         esac
4214         $rm -f cpp.c cpp?.out
4215         ;;
4216 esac
4217
4218 : flags used in final linking phase
4219 case "$ldflags" in
4220 '') if ./venix; then
4221                 dflt='-i -z'
4222         else
4223                 dflt=''
4224         fi
4225         case "$ccflags" in
4226         *-posix*) dflt="$dflt -posix" ;;
4227         esac
4228         ;;
4229 *) dflt="$ldflags";;
4230 esac
4231
4232 : Try to guess additional flags to pick up local libraries.
4233 for thislibdir in $libpth; do
4234         case " $loclibpth " in
4235         *" $thislibdir "*)
4236                 case "$dflt " in 
4237                 *"-L$thislibdir "*) ;;
4238                 *)  dflt="$dflt -L$thislibdir" ;;
4239                 esac
4240                 ;;
4241         esac
4242 done
4243
4244 case "$dflt" in
4245 '') dflt='none' ;;
4246 esac
4247
4248 $cat <<EOH
4249
4250 Your C linker may need flags.  For this question you should
4251 include -L/whatever and any other flags used by the C linker, but you
4252 should NOT include libraries like -lwhatever.
4253
4254 Make sure you include the appropriate -L/path flags if your C linker
4255 does not normally search all of the directories you specified above,
4256 namely
4257         $libpth
4258 To use no flags, specify the word "none".
4259
4260 EOH
4261
4262 rp="Any additional ld flags (NOT including libraries)?"
4263 . ./myread
4264 case "$ans" in
4265 none) ldflags='';;
4266 *) ldflags="$ans";;
4267 esac
4268 rmlist="$rmlist pdp11"
4269
4270 : coherency check
4271 echo " "
4272 echo "Checking your choice of C compiler and flags for coherency..." >&4
4273 $cat > try.c <<'EOF'
4274 #include <stdio.h>
4275 int main() { printf("Ok\n"); exit(0); }
4276 EOF
4277 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4278 shift
4279 $cat >try.msg <<'EOM'
4280 I've tried to compile and run the following simple program:
4281
4282 EOM
4283 $cat try.c >> try.msg
4284
4285 $cat >> try.msg <<EOM
4286
4287 I used the command:
4288
4289         $*
4290         ./try
4291
4292 and I got the following output:
4293
4294 EOM
4295 dflt=y
4296 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4297         if sh -c './try' >>try.msg 2>&1; then
4298                 xxx=`./try`
4299                 case "$xxx" in
4300                 "Ok") dflt=n ;;
4301                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4302                         case " $libs " in
4303                         *" -lsfio "*)
4304                                 cat >> try.msg <<'EOQS'
4305 If $libs contains -lsfio, and sfio is mis-configured, then it
4306 sometimes (apparently) runs and exits with a 0 status, but with no
4307 output!  It may have to do with sfio's use of _exit vs. exit.
4308
4309 EOQS
4310                                 rp="You have a big problem.  Shall I abort Configure"
4311                                 dflt=y
4312                                 ;;
4313                         esac
4314                         ;;
4315                 esac
4316         else
4317                 echo "The program compiled OK, but exited with status $?." >>try.msg
4318                 rp="You have a problem.  Shall I abort Configure"
4319                 dflt=y
4320         fi
4321 else
4322         echo "I can't compile the test program." >>try.msg
4323         rp="You have a BIG problem.  Shall I abort Configure"
4324         dflt=y
4325 fi
4326 case "$dflt" in
4327 y)
4328         $cat try.msg >&4
4329         case "$knowitall" in
4330         '')
4331                 echo "(The supplied flags or libraries might be incorrect.)"
4332                 ;;
4333         *) dflt=n;;
4334         esac
4335         echo " "
4336         . ./myread
4337         case "$ans" in
4338         n*|N*) ;;
4339         *)      echo "Ok.  Stopping Configure." >&4
4340                 exit 1
4341                 ;;
4342         esac
4343         ;;
4344 n) echo "OK, that should do.";;
4345 esac
4346 $rm -f try try.* core
4347
4348 : determine filename position in cpp output
4349 echo " "
4350 echo "Computing filename position in cpp output for #include directives..." >&4
4351 echo '#include <stdio.h>' > foo.c
4352 $cat >fieldn <<EOF
4353 $startsh
4354 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4355 $grep '^[       ]*#.*stdio\.h' | \
4356 while read cline; do
4357         pos=1
4358         set \$cline
4359         while $test \$# -gt 0; do
4360                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4361                         echo "\$pos"
4362                         exit 0
4363                 fi
4364                 shift
4365                 pos=\`expr \$pos + 1\`
4366         done
4367 done
4368 EOF
4369 chmod +x fieldn
4370 fieldn=`./fieldn`
4371 $rm -f foo.c fieldn
4372 case $fieldn in
4373 '') pos='???';;
4374 1) pos=first;;
4375 2) pos=second;;
4376 3) pos=third;;
4377 *) pos="${fieldn}th";;
4378 esac
4379 echo "Your cpp writes the filename in the $pos field of the line."
4380
4381 : locate header file
4382 $cat >findhdr <<EOF
4383 $startsh
4384 wanted=\$1
4385 name=''
4386 for usrincdir in $usrinc
4387 do
4388         if test -f \$usrincdir/\$wanted; then
4389                 echo "\$usrincdir/\$wanted"
4390                 exit 0
4391         fi
4392 done
4393 awkprg='{ print \$$fieldn }'
4394 echo "#include <\$wanted>" > foo\$\$.c
4395 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4396 $grep "^[       ]*#.*\$wanted" | \
4397 while read cline; do
4398         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4399         case "\$name" in
4400         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4401         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4402         *) exit 2;;
4403         esac;
4404 done;
4405 #
4406 # status = 0: grep returned 0 lines, case statement not executed
4407 # status = 1: headerfile found
4408 # status = 2: while loop executed, no headerfile found
4409 #
4410 status=\$?
4411 $rm -f foo\$\$.c;
4412 if test \$status -eq 1; then
4413         exit 0;
4414 fi
4415 exit 1
4416 EOF
4417 chmod +x findhdr
4418
4419 : define an alternate in-header-list? function
4420 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4421 cont=true; xxf="echo \"<\$1> found.\" >&4";
4422 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4423 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4424 esac;
4425 case $# in 4) instead=instead;; *) instead="at last";; esac;
4426 while $test "$cont"; do
4427         xxx=`./findhdr $1`
4428         var=$2; eval "was=\$$2";
4429         if $test "$xxx" && $test -r "$xxx";
4430         then eval $xxf;
4431         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4432                 cont="";
4433         else eval $xxnf;
4434         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4435         set $yyy; shift; shift; yyy=$@;
4436         case $# in 0) cont="";;
4437         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4438                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4439         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4440                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4441         esac;
4442 done;
4443 while $test "$yyy";
4444 do set $yyy; var=$2; eval "was=\$$2";
4445         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4446         set $yyy; shift; shift; yyy=$@;
4447 done'
4448
4449 : see if this is a malloc.h system
4450 set malloc.h i_malloc
4451 eval $inhdr
4452
4453 : see if stdlib is available
4454 set stdlib.h i_stdlib
4455 eval $inhdr
4456
4457 : determine which malloc to compile in
4458 echo " "
4459 case "$usemymalloc" in
4460 ''|[yY]*|true|$define)  dflt='y' ;;
4461 *)      dflt='n' ;;
4462 esac
4463 rp="Do you wish to attempt to use the malloc that comes with $package?"
4464 . ./myread
4465 usemymalloc="$ans"
4466 case "$ans" in
4467 y*|true)
4468         usemymalloc='y'
4469         mallocsrc='malloc.c'
4470         mallocobj="malloc$_o"
4471         d_mymalloc="$define"
4472         case "$libs" in
4473         *-lmalloc*)
4474                 : Remove malloc from list of libraries to use
4475                 echo "Removing unneeded -lmalloc from library list" >&4
4476                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4477                 shift
4478                 libs="$*"
4479                 echo "libs = $libs" >&4
4480                 ;;
4481         esac
4482         ;;
4483 *)
4484         usemymalloc='n'
4485         mallocsrc=''
4486         mallocobj=''
4487         d_mymalloc="$undef"
4488         ;;
4489 esac
4490
4491 : compute the return types of malloc and free
4492 echo " "
4493 $cat >malloc.c <<END
4494 #$i_malloc I_MALLOC
4495 #$i_stdlib I_STDLIB
4496 #include <stdio.h>
4497 #include <sys/types.h>
4498 #ifdef I_MALLOC
4499 #include <malloc.h>
4500 #endif
4501 #ifdef I_STDLIB
4502 #include <stdlib.h>
4503 #endif
4504 #ifdef TRY_MALLOC
4505 void *malloc();
4506 #endif
4507 #ifdef TRY_FREE
4508 void free();
4509 #endif
4510 END
4511 case "$malloctype" in
4512 '')
4513         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4514                 malloctype='void *'
4515         else
4516                 malloctype='char *'
4517         fi
4518         ;;
4519 esac
4520 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4521
4522 case "$freetype" in
4523 '')
4524         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4525                 freetype='void'
4526         else
4527                 freetype='int'
4528         fi
4529         ;;
4530 esac
4531 echo "Your system uses $freetype free(), it would seem." >&4
4532 $rm -f malloc.[co]
4533 : Cruising for prototypes
4534 echo " "
4535 echo "Checking out function prototypes..." >&4
4536 $cat >prototype.c <<'EOCP'
4537 int main(int argc, char *argv[]) {
4538         exit(0);}
4539 EOCP
4540 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4541         echo "Your C compiler appears to support function prototypes."
4542         val="$define"
4543 else
4544         echo "Your C compiler doesn't seem to understand function prototypes."
4545         val="$undef"
4546 fi
4547 set prototype
4548 eval $setvar
4549 $rm -f prototype*
4550
4551 case "$prototype" in
4552 "$define") ;;
4553 *)      ansi2knr='ansi2knr'
4554         echo " "
4555         cat <<EOM >&4
4556
4557 $me:  FATAL ERROR:
4558 This version of $package can only be compiled by a compiler that 
4559 understands function prototypes.  Unfortunately, your C compiler 
4560         $cc $ccflags
4561 doesn't seem to understand them.  Sorry about that.
4562
4563 If GNU cc is available for your system, perhaps you could try that instead.  
4564
4565 Eventually, we hope to support building Perl with pre-ANSI compilers.
4566 If you would like to help in that effort, please contact <perlbug@perl.org>.
4567
4568 Aborting Configure now.
4569 EOM
4570         exit 2
4571         ;;
4572 esac
4573
4574 : determine where public executables go
4575 echo " "
4576 set dflt bin bin
4577 eval $prefixit
4578 fn=d~
4579 rp='Pathname where the public executables will reside?'
4580 . ./getfile
4581 if $test "X$ansexp" != "X$binexp"; then
4582         installbin=''
4583 fi
4584 bin="$ans"
4585 binexp="$ansexp"
4586 if $afs; then
4587         $cat <<EOM
4588
4589 Since you are running AFS, I need to distinguish the directory in which
4590 executables reside from the directory in which they are installed (and from
4591 which they are presumably copied to the former directory by occult means).
4592
4593 EOM
4594         case "$installbin" in
4595         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4596         *) dflt="$installbin";;
4597         esac
4598         fn=de~
4599         rp='Where will public executables be installed?'
4600         . ./getfile
4601         installbin="$ans"
4602 else
4603         installbin="$binexp"
4604 fi
4605
4606 : determine whether to install perl also as /usr/bin/perl
4607
4608 echo " "
4609 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4610         $cat <<EOM
4611 Many scripts expect to perl to be installed as /usr/bin/perl.
4612 I can install the perl you are about to compile also as /usr/bin/perl
4613 (in addition to $installbin/perl).
4614 EOM
4615         case "$installusrbinperl" in
4616         "$undef"|[nN]*) dflt='n';;
4617         *)              dflt='y';;
4618         esac
4619         rp="Do you want to install perl as /usr/bin/perl?"
4620         . ./myread
4621         case "$ans" in
4622         [yY]*)  val="$define";;
4623         *)      val="$undef" ;;
4624         esac
4625 else
4626         val="$undef"
4627 fi
4628 set installusrbinperl
4629 eval $setvar
4630
4631 : define a shorthand compile call
4632 compile='
4633 mc_file=$1;
4634 shift;
4635 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4636 : define a shorthand compile call for compilations that should be ok.
4637 compile_ok='
4638 mc_file=$1;
4639 shift;
4640 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4641
4642 echo " "
4643 echo "Checking for GNU C Library..." >&4
4644 cat >gnulibc.c <<EOM
4645 #include <stdio.h>
4646 int main()
4647 {
4648 #ifdef __GLIBC__
4649     exit(0);
4650 #else
4651     exit(1);
4652 #endif
4653 }
4654 EOM
4655 set gnulibc
4656 if eval $compile_ok && ./gnulibc; then
4657         val="$define"
4658         echo "You are using the GNU C Library"
4659 else
4660         val="$undef"
4661         echo "You are not using the GNU C Library"
4662 fi
4663 $rm -f gnulibc*
4664 set d_gnulibc
4665 eval $setvar
4666
4667 : see if nm is to be used to determine whether a symbol is defined or not
4668 case "$usenm" in
4669 '')
4670         dflt=''
4671         case "$d_gnulibc" in
4672         "$define")
4673                 echo " "
4674                 echo "nm probably won't work on the GNU C Library." >&4
4675                 dflt=n
4676                 ;;
4677         esac
4678         case "$dflt" in
4679         '') 
4680                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4681                         echo " "
4682                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4683                         echo "'nm' won't be sufficient on this sytem." >&4
4684                         dflt=n
4685                 fi
4686                 ;;
4687         esac
4688         case "$dflt" in
4689         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4690                 if $test $dflt -gt 20; then
4691                         dflt=y
4692                 else
4693                         dflt=n
4694                 fi
4695                 ;;
4696         esac
4697         ;;
4698 *)
4699         case "$usenm" in
4700         true|$define) dflt=y;;
4701         *) dflt=n;;
4702         esac
4703         ;;
4704 esac
4705 $cat <<EOM
4706
4707 I can use $nm to extract the symbols from your C libraries. This
4708 is a time consuming task which may generate huge output on the disk (up
4709 to 3 megabytes) but that should make the symbols extraction faster. The
4710 alternative is to skip the 'nm' extraction part and to compile a small
4711 test program instead to determine whether each symbol is present. If
4712 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4713 this may be the best solution.
4714
4715 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4716
4717 EOM
4718 rp="Shall I use $nm to extract C symbols from the libraries?"
4719 . ./myread
4720 case "$ans" in
4721 [Nn]*) usenm=false;;
4722 *) usenm=true;;
4723 esac
4724
4725 runnm=$usenm
4726 case "$reuseval" in
4727 true) runnm=false;;
4728 esac
4729
4730 : nm options which may be necessary
4731 case "$nm_opt" in
4732 '') if $test -f /mach_boot; then
4733                 nm_opt=''       # Mach
4734         elif $test -d /usr/ccs/lib; then
4735                 nm_opt='-p'     # Solaris (and SunOS?)
4736         elif $test -f /dgux; then
4737                 nm_opt='-p'     # DG-UX
4738         elif $test -f /lib64/rld; then
4739                 nm_opt='-p'     # 64-bit Irix
4740         else
4741                 nm_opt=''
4742         fi;;
4743 esac
4744
4745 : nm options which may be necessary for shared libraries but illegal
4746 : for archive libraries.  Thank you, Linux.
4747 case "$nm_so_opt" in
4748 '')     case "$myuname" in
4749         *linux*)
4750                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4751                         nm_so_opt='--dynamic'
4752                 fi
4753                 ;;
4754         esac
4755         ;;
4756 esac
4757
4758 case "$runnm" in
4759 true)
4760 : get list of predefined functions in a handy place
4761 echo " "
4762 case "$libc" in
4763 '') libc=unknown
4764         case "$libs" in
4765         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4766         esac
4767         ;;
4768 esac
4769 libnames='';
4770 case "$libs" in
4771 '') ;;
4772 *)  for thislib in $libs; do
4773         case "$thislib" in
4774         -lc|-lc_s)
4775                 : Handle C library specially below.
4776                 ;;
4777         -l*)
4778                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4779                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4780                         :
4781                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4782                         :
4783                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4784                         :
4785                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4786                         :
4787                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4788                         :
4789                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4790                         :
4791                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4792                         :
4793                 else
4794                         try=''
4795                 fi
4796                 libnames="$libnames $try"
4797                 ;;
4798         *) libnames="$libnames $thislib" ;;
4799         esac
4800         done
4801         ;;
4802 esac
4803 xxx=normal
4804 case "$libc" in
4805 unknown)
4806         set /lib/libc.$so
4807         for xxx in $libpth; do
4808                 $test -r $1 || set $xxx/libc.$so
4809                 : The messy sed command sorts on library version numbers.
4810                 $test -r $1 || \
4811                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4812                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4813                                 h
4814                                 s/[0-9][0-9]*/0000&/g
4815                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4816                                 G
4817                                 s/\n/ /' | \
4818                          sort | $sed -e 's/^.* //'`
4819                 eval set \$$#
4820         done
4821         $test -r $1 || set /usr/ccs/lib/libc.$so
4822         $test -r $1 || set /lib/libsys_s$_a
4823         ;;
4824 *)
4825         set blurfl
4826         ;;
4827 esac
4828 if $test -r "$1"; then
4829         echo "Your (shared) C library seems to be in $1."
4830         libc="$1"
4831 elif $test -r /lib/libc && $test -r /lib/clib; then
4832         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4833         xxx=apollo
4834         libc='/lib/clib /lib/libc'
4835         if $test -r /lib/syslib; then
4836                 echo "(Your math library is in /lib/syslib.)"
4837                 libc="$libc /lib/syslib"
4838         fi
4839 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4840         echo "Your C library seems to be in $libc, as you said before."
4841 elif $test -r $incpath/usr/lib/libc$_a; then
4842         libc=$incpath/usr/lib/libc$_a;
4843         echo "Your C library seems to be in $libc.  That's fine."
4844 elif $test -r /lib/libc$_a; then
4845         libc=/lib/libc$_a;
4846         echo "Your C library seems to be in $libc.  You're normal."
4847 else
4848         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4849                 :
4850         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4851                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4852         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4853                 :
4854         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4855                 :
4856         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4857                 :
4858         else
4859                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4860         fi
4861         if $test -r "$tans"; then
4862                 echo "Your C library seems to be in $tans, of all places."
4863                 libc=$tans
4864         else
4865                 libc='blurfl'
4866         fi
4867 fi
4868 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4869         dflt="$libc"
4870         cat <<EOM
4871
4872 If the guess above is wrong (which it might be if you're using a strange
4873 compiler, or your machine supports multiple models), you can override it here.
4874
4875 EOM
4876 else
4877         dflt=''
4878         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4879         cat >&4 <<EOM
4880 I can't seem to find your C library.  I've looked in the following places:
4881
4882 EOM
4883         $sed 's/^/      /' libpath
4884         cat <<EOM
4885
4886 None of these seems to contain your C library. I need to get its name...
4887
4888 EOM
4889 fi
4890 fn=f
4891 rp='Where is your C library?'
4892 . ./getfile
4893 libc="$ans"
4894
4895 echo " "
4896 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4897 set X `cat libnames`
4898 shift
4899 xxx=files
4900 case $# in 1) xxx=file; esac
4901 echo "Extracting names from the following $xxx for later perusal:" >&4
4902 echo " "
4903 $sed 's/^/      /' libnames >&4
4904 echo " "
4905 $echo $n "This may take a while...$c" >&4
4906
4907 for file in $*; do
4908         case $file in
4909         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4910         *) $nm $nm_opt $file 2>/dev/null;;
4911         esac
4912 done >libc.tmp
4913
4914 $echo $n ".$c"
4915 $grep fprintf libc.tmp > libc.ptf
4916 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4917 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4918 xxx='[ADTSIW]'
4919 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4920         eval $xscan;\
4921         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4922                 eval $xrun
4923 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4924         eval $xscan;\
4925         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4926                 eval $xrun
4927 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4928         eval $xscan;\
4929         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4930                 eval $xrun
4931 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4932         eval $xscan;\
4933         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4934                 eval $xrun
4935 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4936         eval $xscan;\
4937         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4938                 eval $xrun
4939 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4940         eval $xscan;\
4941         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4942                 eval $xrun
4943 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4944                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4945         eval $xscan;\
4946         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4947                 eval $xrun
4948 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4949         eval $xscan;\
4950         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4951                 eval $xrun
4952 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4953         eval $xscan;\
4954         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4955                 eval $xrun
4956 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4957         eval $xscan;\
4958         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4959                 eval $xrun
4960 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4961         eval $xscan;\
4962         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4963                 eval $xrun
4964 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4965         eval $xscan;\
4966         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4967                 eval $xrun
4968 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4969         eval $xscan;\
4970         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4971                 eval $xrun
4972 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4973         eval $xscan;\
4974         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4975                 eval $xrun
4976 else
4977         $nm -p $* 2>/dev/null >libc.tmp
4978         $grep fprintf libc.tmp > libc.ptf
4979         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4980                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4981         then
4982                 nm_opt='-p'
4983                 eval $xrun
4984         else
4985                 echo " "
4986                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4987                 com=''
4988                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4989                         for thisname in $libnames $libc; do
4990                                 $ar t $thisname >>libc.tmp
4991                         done
4992                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4993                         echo "Ok." >&4
4994                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4995                         # Repeat libc to extract forwarders to DLL entries too
4996                         for thisname in $libnames $libc; do
4997                                 $ar tv $thisname >>libc.tmp
4998                                 # Revision 50 of EMX has bug in $ar.
4999                                 # it will not extract forwarders to DLL entries
5000                                 # Use emximp which will extract exactly them.
5001                                 emximp -o tmp.imp $thisname \
5002                                     2>/dev/null && \
5003                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5004                                     < tmp.imp >>libc.tmp
5005                                 $rm tmp.imp
5006                         done
5007                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5008                         echo "Ok." >&4
5009                 else
5010                         echo "$ar didn't seem to work right." >&4
5011                         echo "Maybe this is a Cray...trying bld instead..." >&4
5012                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5013                         then
5014                                 for thisname in $libnames; do
5015                                         bld t $libnames | \
5016                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5017                                         $ar t $thisname >>libc.tmp
5018                                 done
5019                                 echo "Ok." >&4
5020                         else
5021                                 echo "That didn't work either.  Giving up." >&4
5022                                 exit 1
5023                         fi
5024                 fi
5025         fi
5026 fi
5027 nm_extract="$com"
5028 if $test -f /lib/syscalls.exp; then
5029         echo " "
5030         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5031         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5032 fi
5033 ;;
5034 esac
5035 $rm -f libnames libpath
5036
5037 : see if dld is available
5038 set dld.h i_dld
5039 eval $inhdr
5040
5041 : is a C symbol defined?
5042 csym='tlook=$1;
5043 case "$3" in
5044 -v) tf=libc.tmp; tc=""; tdc="";;
5045 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5046 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5047 esac;
5048 tx=yes;
5049 case "$reuseval-$4" in
5050 true-) ;;
5051 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5052 esac;
5053 case "$tx" in
5054 yes)
5055         case "$runnm" in
5056         true)
5057                 if $contains $tlook $tf >/dev/null 2>&1;
5058                 then tval=true;
5059                 else tval=false;
5060                 fi;;
5061         *)
5062                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5063                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5064                 then tval=true;
5065                 else tval=false;
5066                 fi;
5067                 $rm -f t t.c;;
5068         esac;;
5069 *)
5070         case "$tval" in
5071         $define) tval=true;;
5072         *) tval=false;;
5073         esac;;
5074 esac;
5075 eval "$2=$tval"'
5076
5077 : define an is-in-libc? function
5078 inlibc='echo " "; td=$define; tu=$undef;
5079 sym=$1; var=$2; eval "was=\$$2";
5080 tx=yes;
5081 case "$reuseval$was" in
5082 true) ;;
5083 true*) tx=no;;
5084 esac;
5085 case "$tx" in
5086 yes)
5087         set $sym tres -f;
5088         eval $csym;
5089         case "$tres" in
5090         true)
5091                 echo "$sym() found." >&4;
5092                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5093         *)
5094                 echo "$sym() NOT found." >&4;
5095                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5096         esac;;
5097 *)
5098         case "$was" in
5099         $define) echo "$sym() found." >&4;;
5100         *) echo "$sym() NOT found." >&4;;
5101         esac;;
5102 esac'
5103
5104 : see if dlopen exists
5105 xxx_runnm="$runnm"
5106 runnm=false
5107 set dlopen d_dlopen
5108 eval $inlibc
5109 runnm="$xxx_runnm"
5110
5111 : determine which dynamic loading, if any, to compile in
5112 echo " "
5113 dldir="ext/DynaLoader"
5114 case "$usedl" in
5115 $define|y|true)
5116         dflt='y'
5117         usedl="$define"
5118         ;;
5119 $undef|n|false)
5120         dflt='n'
5121         usedl="$undef"
5122         ;;
5123 *) 
5124         dflt='n'
5125         case "$d_dlopen" in
5126             $define) dflt='y' ;;
5127         esac
5128         case "$i_dld" in
5129             $define) dflt='y' ;;
5130         esac
5131         : Does a dl_xxx.xs file exist for this operating system
5132         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5133         ;;
5134 esac
5135 rp="Do you wish to use dynamic loading?"
5136 . ./myread
5137 usedl="$ans"
5138 case "$ans" in
5139 y*) usedl="$define"
5140         case "$dlsrc" in
5141         '')
5142                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5143                         dflt="$dldir/dl_${osname}.xs"
5144                 elif $test "$d_dlopen" = "$define" ; then
5145                         dflt="$dldir/dl_dlopen.xs"
5146                 elif $test "$i_dld" = "$define" ; then
5147                         dflt="$dldir/dl_dld.xs"
5148                 else
5149                         dflt=''
5150                 fi
5151                 ;;
5152         *)      dflt="$dldir/$dlsrc"
5153                 ;;
5154         esac
5155     echo "The following dynamic loading files are available:"
5156         : Can not go over to $dldir because getfile has path hard-coded in.
5157         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5158         rp="Source file to use for dynamic loading"
5159         fn="fne"
5160         # XXX This getfile call will fail the existence check if you try 
5161         # building away from $src (this is not supported yet).
5162         . ./getfile
5163         usedl="$define"
5164         : emulate basename
5165         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5166
5167         $cat << EOM
5168
5169 Some systems may require passing special flags to $cc -c to
5170 compile modules that will be used to create a shared library.
5171 To use no flags, say "none".
5172
5173 EOM
5174     case "$cccdlflags" in
5175     '') case "$gccversion" in
5176                 '') case "$osname" in
5177                         hpux)   dflt='+z' ;;
5178                         next)   dflt='none' ;;
5179                         irix*)  dflt='-KPIC' ;;
5180                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5181                         sunos)  dflt='-pic' ;;
5182                         *)      dflt='none' ;;
5183                     esac
5184                         ;;
5185                 *)  case "$osname" in
5186                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5187                         *)      dflt='-fpic' ;;
5188                     esac ;;
5189             esac ;;
5190         ' ') dflt='none' ;;
5191     *)  dflt="$cccdlflags" ;;
5192     esac
5193     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5194     . ./myread
5195     case "$ans" in
5196     none) cccdlflags=' ' ;;
5197     *) cccdlflags="$ans" ;;
5198     esac
5199
5200     cat << EOM
5201
5202 Some systems use ld to create libraries that can be dynamically loaded,
5203 while other systems (such as those using ELF) use $cc.
5204
5205 EOM
5206         case "$ld" in
5207         '')     $cat >try.c <<'EOM'
5208 /* Test for whether ELF binaries are produced */
5209 #include <fcntl.h>
5210 #include <stdlib.h>
5211 int main() {
5212         char b[4];
5213         int i = open("a.out",O_RDONLY);
5214         if(i == -1) 
5215                 exit(1); /* fail */
5216         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5217                 exit(0); /* succeed (yes, it's ELF) */
5218         else
5219                 exit(1); /* fail */
5220 }
5221 EOM
5222                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5223                         cat <<EOM
5224 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5225 EOM
5226                         dflt="$cc"
5227                 else
5228                         echo "I'll use ld to build dynamic libraries."
5229                         dflt='ld'
5230                 fi
5231                 rm -f try.c a.out
5232                 ;;
5233         *)      dflt="$ld"
5234                 ;;
5235         esac
5236
5237     rp="What command should be used to create dynamic libraries?"
5238     . ./myread
5239         ld="$ans"
5240
5241     cat << EOM
5242
5243 Some systems may require passing special flags to $ld to create a
5244 library that can be dynamically loaded.  If your ld flags include
5245 -L/other/path options to locate libraries outside your loader's normal
5246 search path, you may need to specify those -L options here as well.  To
5247 use no flags, say "none".
5248
5249 EOM
5250     case "$lddlflags" in
5251     '') case "$osname" in
5252                         beos) dflt='-nostart' ;;
5253                         hpux)  dflt='-b' ;;
5254                         linux|irix*)    dflt='-shared' ;;
5255                         next)  dflt='none' ;;
5256                         solaris) dflt='-G' ;;
5257                         sunos) dflt='-assert nodefinitions' ;;
5258                         svr4*|esix*) dflt="-G $ldflags" ;;
5259                 *)     dflt='none' ;;
5260                         esac
5261                         ;;
5262     *) dflt="$lddlflags" ;;
5263     esac
5264
5265         : Try to guess additional flags to pick up local libraries.
5266         : Be careful not to append to a plain 'none'
5267         case "$dflt" in
5268         none) dflt='' ;;
5269         esac
5270         for thisflag in $ldflags; do
5271                 case "$thisflag" in
5272                 -L*)
5273                         case " $dflt " in
5274                         *" $thisflag "*) ;;
5275                         *) dflt="$dflt $thisflag" ;;
5276                         esac
5277                         ;;
5278                 esac
5279         done
5280
5281         case "$dflt" in
5282         ''|' ') dflt='none' ;;
5283         esac
5284
5285     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5286     . ./myread
5287     case "$ans" in
5288     none) lddlflags=' ' ;;
5289     *) lddlflags="$ans" ;;
5290     esac
5291
5292         cat <<EOM
5293
5294 Some systems may require passing special flags to $cc to indicate that
5295 the resulting executable will use dynamic linking.  To use no flags,
5296 say "none".
5297
5298 EOM
5299     case "$ccdlflags" in
5300     '') case "$osname" in
5301                 hpux)   dflt='-Wl,-E' ;;
5302                 linux)  dflt='-rdynamic' ;;
5303                 next)   dflt='none' ;;
5304                 sunos)  dflt='none' ;;
5305                 *)      dflt='none' ;;
5306             esac ;;
5307     ' ')  dflt='none' ;;
5308     *)  dflt="$ccdlflags" ;;
5309     esac
5310     rp="Any special flags to pass to $cc to use dynamic loading?"
5311     . ./myread
5312     case "$ans" in
5313     none) ccdlflags=' ' ;;
5314     *) ccdlflags="$ans" ;;
5315     esac
5316     ;;
5317 *)  usedl="$undef"
5318         ld='ld'
5319     dlsrc='dl_none.xs'
5320     lddlflags=''
5321     ccdlflags=''
5322     ;;
5323 esac
5324
5325 also=''
5326 case "$usedl" in
5327 $undef)
5328         # No dynamic loading being used, so don't bother even to prompt.
5329         useshrplib='false'
5330         ;;
5331 *)      case "$useshrplib" in
5332         '')     case "$osname" in
5333                 svr4*|dgux|dynixptx|esix|powerux|beos)
5334                         dflt=y
5335                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5336                         ;;
5337                 next*)
5338                         case "$osvers" in
5339                         4*)     dflt=y
5340                                 also='Building a shared libperl is needed for MAB support.'
5341                                 ;;
5342                         *)      dflt=n
5343                                 ;;
5344                         esac
5345                         ;;
5346                 *)      dflt=n
5347                         ;;
5348                 esac
5349                 ;;
5350         $define|true|[Yy]*)
5351                 dflt=y
5352                 ;;
5353         *)      dflt=n
5354                 ;;
5355         esac
5356         $cat << EOM
5357
5358 The perl executable is normally obtained by linking perlmain.c with
5359 libperl${_a}, any static extensions (usually just DynaLoader), and
5360 any other libraries needed on this system (such as -lm, etc.).  Since
5361 your system supports dynamic loading, it is probably possible to build
5362 a shared libperl.$so.  If you will have more than one executable linked
5363 to libperl.$so, this will significantly reduce the size of each
5364 executable, but it may have a noticeable affect on performance.  The
5365 default is probably sensible for your system.
5366 $also
5367
5368 EOM
5369         rp="Build a shared libperl.$so (y/n)"
5370         . ./myread
5371         case "$ans" in
5372         true|$define|[Yy]*)
5373                 useshrplib='true'
5374                 # Why does next4 have to be so different?
5375                 case "${osname}${osvers}" in
5376                 next4*|rhapsody*)
5377                         xxx='DYLD_LIBRARY_PATH' ;;
5378                 os2*)   xxx='' ;; # Nothing special needed.
5379                 beos*)  xxx='' ;;
5380                 *)              xxx='LD_LIBRARY_PATH' ;;
5381                 esac
5382                 ;;
5383         *)      useshrplib='false' ;;
5384         esac
5385         ;;
5386 esac
5387
5388 case "$useshrplib" in
5389 true)
5390         case "$libperl" in
5391         '')
5392                 # Figure out a good name for libperl.so.  Since it gets stored in
5393                 # a version-specific architecture-dependent library, the version
5394                 # number isn't really that important, except for making cc/ld happy.
5395                 #
5396                 # A name such as libperl.so.3.1
5397                 majmin="libperl.$so.$patchlevel.$subversion"
5398                 # A name such as libperl.so.301
5399                 majonly=`echo $patchlevel $subversion |
5400                         $awk '{printf "%d%02d", $1, $2}'`
5401                 majonly=libperl.$so.$majonly
5402                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5403                 # rely on figuring it out from the naming of libc.
5404                 case "${osname}${osvers}" in
5405                 next4*)
5406                         dflt=libperl.5.$so
5407                         # XXX How handle the --version stuff for MAB?
5408                         ;;
5409                 linux*)  # ld won't link with a bare -lperl otherwise.
5410                         dflt=libperl.$so
5411                         ;;
5412                 *)      # Try to guess based on whether libc has major.minor.
5413                         case "$libc" in
5414                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5415                         *libc.$so.[0-9]*) dflt=$majonly ;;
5416                         *)      dflt=libperl.$so ;;
5417                         esac
5418                         ;;
5419                 esac
5420                 ;;
5421         *)      dflt=$libperl
5422                 ;;
5423         esac
5424         cat << EOM
5425
5426 I need to select a good name for the shared libperl.  If your system uses
5427 library names with major and minor numbers, then you might want something
5428 like $majmin.  Alternatively, if your system uses a single version
5429 number for shared libraries, then you might want to use $majonly.
5430 Or, your system might be quite happy with a simple libperl.$so.
5431
5432 Since the shared libperl will get installed into a version-specific
5433 architecture-dependent directory, the version number of the shared perl
5434 library probably isn't important, so the default should be o.k.
5435
5436 EOM
5437         rp='What name do you want to give to the shared libperl?'
5438         . ./myread
5439         libperl=$ans
5440         echo "Ok, I'll use $libperl"
5441         ;;
5442 *)
5443         libperl="libperl${_a}"
5444         ;;
5445 esac
5446
5447 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5448 case "$shrpdir" in
5449 '') ;;
5450 *)      $cat >&4 <<EOM
5451 WARNING:  Use of the shrpdir variable for the installation location of
5452 the shared $libperl is not supported.  It was never documented and
5453 will not work in this version.  Let me (perlbug@perl.com)
5454 know of any problems this may cause.
5455
5456 EOM
5457         case "$shrpdir" in
5458         "$archlibexp/CORE")
5459                 $cat >&4 <<EOM
5460 But your current setting of $shrpdir is
5461 the default anyway, so it's harmless.
5462 EOM
5463                 ;;
5464         *)
5465                 $cat >&4 <<EOM
5466 Further, your current attempted setting of $shrpdir
5467 conflicts with the value of $archlibexp/CORE
5468 that installperl will use.
5469 EOM
5470                 ;;
5471         esac
5472         ;;
5473 esac
5474
5475 # How will the perl executable find the installed shared $libperl?
5476 # Add $xxx to ccdlflags.
5477 # If we can't figure out a command-line option, use $shrpenv to
5478 # set env LD_RUN_PATH.  The main perl makefile uses this.
5479 shrpdir=$archlibexp/CORE
5480 xxx=''
5481 tmp_shrpenv=''
5482 if "$useshrplib"; then
5483     case "$osname" in 
5484         aix)
5485                 # We'll set it in Makefile.SH...
5486                 ;;
5487         solaris|netbsd)
5488                 xxx="-R $shrpdir"
5489                 ;;
5490         freebsd)
5491                 xxx="-Wl,-R$shrpdir"
5492                 ;;
5493         linux|irix*|dec_osf)
5494                 xxx="-Wl,-rpath,$shrpdir"
5495                 ;;
5496         next)
5497                 # next doesn't like the default...
5498                 ;;
5499         beos)
5500                 # beos doesn't like the default, either.
5501                 ;;
5502         hpux*)
5503                 # hpux doesn't like the default, either.
5504                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5505                 ;;
5506         *)
5507                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5508                 ;;
5509         esac
5510         case "$xxx" in
5511         '') ;;
5512         *)      
5513                 # Only add $xxx if it isn't already in ccdlflags.
5514                 case " $ccdlflags " in
5515                 *" $xxx "*)     ;;
5516                 *)      ccdlflags="$ccdlflags $xxx"
5517                         cat <<EOM >&4
5518
5519 Adding $xxx to the flags
5520 passed to $ld so that the perl executable will find the 
5521 installed shared $libperl.
5522
5523 EOM
5524                         ;;
5525                 esac
5526                 ;;
5527         esac
5528 fi
5529 case "$osname" in
5530 aix*) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5531 esac
5532 # Respect a hint or command-line value.
5533 case "$shrpenv" in
5534 '') shrpenv="$tmp_shrpenv" ;;
5535 esac
5536
5537 : determine where manual pages go
5538 set man1dir man1dir none
5539 eval $prefixit
5540 $cat <<EOM
5541
5542 $spackage has manual pages available in source form.
5543 EOM
5544 case "$nroff" in
5545 nroff)
5546         echo "However, you don't have nroff, so they're probably useless to you."
5547         case "$man1dir" in
5548         '') man1dir="none";;
5549         esac;;
5550 esac
5551 echo "If you don't want the manual sources installed, answer 'none'."
5552 case "$man1dir" in
5553 ' ') dflt=none
5554         ;;
5555 '')
5556         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5557         lookpath="$lookpath $prefixexp/man/p_man/man1"
5558         lookpath="$lookpath $prefixexp/man/u_man/man1"
5559         lookpath="$lookpath $prefixexp/man/man.1"
5560         case "$sysman" in
5561         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5562         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5563         esac
5564         set dflt
5565         eval $prefixup
5566         ;;
5567 *)  dflt="$man1dir"
5568         ;;
5569 esac
5570 echo " "
5571 fn=dn+~
5572 rp="Where do the main $spackage manual pages (source) go?"
5573 . ./getfile
5574 if $test "X$man1direxp" != "X$ansexp"; then
5575         installman1dir=''
5576 fi
5577 man1dir="$ans"
5578 man1direxp="$ansexp"
5579 case "$man1dir" in
5580 '') man1dir=' '
5581         installman1dir='';;
5582 esac
5583 if $afs; then
5584         $cat <<EOM
5585
5586 Since you are running AFS, I need to distinguish the directory in which
5587 manual pages reside from the directory in which they are installed (and from
5588 which they are presumably copied to the former directory by occult means).
5589
5590 EOM
5591         case "$installman1dir" in
5592         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5593         *) dflt="$installman1dir";;
5594         esac
5595         fn=de~
5596         rp='Where will man pages be installed?'
5597         . ./getfile
5598         installman1dir="$ans"
5599 else
5600         installman1dir="$man1direxp"
5601 fi
5602
5603 : What suffix to use on installed man pages
5604
5605 case "$man1dir" in
5606 ' ')
5607         man1ext='0'
5608         ;;
5609 *)
5610         rp="What suffix should be used for the main $spackage man pages?"
5611         case "$man1ext" in
5612         '')     case "$man1dir" in
5613                 *1)  dflt=1 ;;
5614                 *1p) dflt=1p ;;
5615                 *1pm) dflt=1pm ;;
5616                 *l) dflt=l;;
5617                 *n) dflt=n;;
5618                 *o) dflt=o;;
5619                 *p) dflt=p;;
5620                 *C) dflt=C;;
5621                 *L) dflt=L;;
5622                 *L1) dflt=L1;;
5623                 *) dflt=1;;
5624                 esac
5625                 ;;
5626         *)      dflt="$man1ext";;
5627         esac
5628         . ./myread
5629         man1ext="$ans"
5630         ;;
5631 esac
5632
5633 : see if we can have long filenames
5634 echo " "
5635 rmlist="$rmlist /tmp/cf$$"
5636 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5637 first=123456789abcdef
5638 second=/tmp/cf$$/$first
5639 $rm -f $first $second
5640 if (echo hi >$first) 2>/dev/null; then
5641         if $test -f 123456789abcde; then
5642                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5643                 val="$undef"
5644         else
5645                 if (echo hi >$second) 2>/dev/null; then
5646                         if $test -f /tmp/cf$$/123456789abcde; then
5647                                 $cat <<'EOM'
5648 That's peculiar... You can have filenames longer than 14 characters, but only
5649 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5650 I shall consider your system cannot support long filenames at all.
5651 EOM
5652                                 val="$undef"
5653                         else
5654                                 echo 'You can have filenames longer than 14 characters.' >&4
5655                                 val="$define"
5656                         fi
5657                 else
5658                         $cat <<'EOM'
5659 How confusing! Some of your filesystems are sane enough to allow filenames
5660 longer than 14 characters but some others like /tmp can't even think about them.
5661 So, for now on, I shall assume your kernel does not allow them at all.
5662 EOM
5663                         val="$undef"
5664                 fi
5665         fi
5666 else
5667         $cat <<'EOM'
5668 You can't have filenames longer than 14 chars.  You can't even think about them!
5669 EOM
5670         val="$undef"
5671 fi 
5672 set d_flexfnam
5673 eval $setvar
5674 $rm -rf /tmp/cf$$ 123456789abcde*
5675
5676 : determine where library module manual pages go
5677 set man3dir man3dir none
5678 eval $prefixit
5679 $cat <<EOM
5680
5681 $spackage has manual pages for many of the library modules.
5682 EOM
5683
5684 case "$nroff" in
5685 nroff)
5686         $cat <<'EOM'
5687 However, you don't have nroff, so they're probably useless to you.
5688 EOM
5689         case "$man3dir" in
5690         '') man3dir="none";;
5691         esac;;
5692 esac
5693
5694 case "$d_flexfnam" in
5695 undef)
5696         $cat <<'EOM'
5697 However, your system can't handle the long file names like File::Basename.3. 
5698 EOM
5699         case "$man3dir" in
5700         '') man3dir="none";;
5701         esac;;
5702 esac
5703
5704 echo "If you don't want the manual sources installed, answer 'none'."
5705 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5706 case "$man3dir" in
5707 '')     case "$prefix" in 
5708         *$prog*) dflt=`echo $man1dir | 
5709                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5710         *)      dflt="$privlib/man/man3" ;;
5711         esac
5712         ;;
5713 ' ') dflt=none;;
5714 *)      dflt="$man3dir" ;;
5715 esac
5716 echo " "
5717
5718 fn=dn+~
5719 rp="Where do the $package library man pages (source) go?"
5720 . ./getfile
5721 if test "X$man3direxp" != "X$ansexp"; then
5722         installman3dir=''
5723 fi
5724
5725 man3dir="$ans"
5726 man3direxp="$ansexp"
5727 case "$man3dir" in
5728 '') man3dir=' '
5729         installman3dir='';;
5730 esac
5731 if $afs; then
5732         $cat <<EOM
5733
5734 Since you are running AFS, I need to distinguish the directory in which
5735 manual pages reside from the directory in which they are installed (and from
5736 which they are presumably copied to the former directory by occult means).
5737
5738 EOM
5739         case "$installman3dir" in
5740         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5741         *) dflt="$installman3dir";;
5742         esac
5743         fn=de~
5744         rp='Where will man pages be installed?'
5745         . ./getfile
5746         installman3dir="$ans"
5747 else
5748         installman3dir="$man3direxp"
5749 fi
5750
5751 : What suffix to use on installed man pages
5752
5753 case "$man3dir" in
5754 ' ')
5755         man3ext='0'
5756         ;;
5757 *)
5758         rp="What suffix should be used for the $package library man pages?"
5759         case "$man3ext" in
5760         '')     case "$man3dir" in
5761                 *3)  dflt=3 ;;
5762                 *3p) dflt=3p ;;
5763                 *3pm) dflt=3pm ;;
5764                 *l) dflt=l;;
5765                 *n) dflt=n;;
5766                 *o) dflt=o;;
5767                 *p) dflt=p;;
5768                 *C) dflt=C;;
5769                 *L) dflt=L;;
5770                 *L3) dflt=L3;;
5771                 *) dflt=3;;
5772                 esac
5773                 ;;
5774         *)      dflt="$man3ext";;
5775         esac
5776         . ./myread
5777         man3ext="$ans"
5778         ;;
5779 esac
5780
5781 : see if we have to deal with yellow pages, now NIS.
5782 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5783         if $test -f /usr/etc/nibindd; then
5784                 echo " "
5785                 echo "I'm fairly confident you're on a NeXT."
5786                 echo " "
5787                 rp='Do you get the hosts file via NetInfo?'
5788                 dflt=y
5789                 case "$hostcat" in
5790                 nidump*) ;;
5791                 '') ;;
5792                 *) dflt=n;;
5793                 esac
5794                 . ./myread
5795                 case "$ans" in
5796                 y*) hostcat='nidump hosts .';;
5797                 *)      case "$hostcat" in
5798                         nidump*) hostcat='';;
5799                         esac
5800                         ;;
5801                 esac
5802         fi
5803         case "$hostcat" in
5804         nidump*) ;;
5805         *)
5806                 case "$hostcat" in
5807                 *ypcat*) dflt=y;;
5808                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5809                                 dflt=y
5810                         else
5811                                 dflt=n
5812                         fi;;
5813                 *) dflt=n;;
5814                 esac
5815                 echo " "
5816                 rp='Are you getting the hosts file via yellow pages?'
5817                 . ./myread
5818                 case "$ans" in
5819                 y*) hostcat='ypcat hosts';;
5820                 *) hostcat='cat /etc/hosts';;
5821                 esac
5822                 ;;
5823         esac
5824 fi
5825 case "$hostcat" in
5826 '') hostcat='cat /etc/hosts';;
5827 esac
5828 case "$groupcat" in
5829 '') groupcat='cat /etc/group';;
5830 esac
5831 case "$passcat" in
5832 '') passcat='cat /etc/passwd';;
5833 esac
5834
5835 : now get the host name
5836 echo " "
5837 echo "Figuring out host name..." >&4
5838 case "$myhostname" in
5839 '') cont=true
5840         echo 'Maybe "hostname" will work...'
5841         if tans=`sh -c hostname 2>&1` ; then
5842                 myhostname=$tans
5843                 phostname=hostname
5844                 cont=''
5845         fi
5846         ;;
5847 *) cont='';;
5848 esac
5849 if $test "$cont"; then
5850         if ./xenix; then
5851                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5852                 if tans=`cat /etc/systemid 2>&1` ; then
5853                         myhostname=$tans
5854                         phostname='cat /etc/systemid'
5855                         echo "Whadyaknow.  Xenix always was a bit strange..."
5856                         cont=''
5857                 fi
5858         elif $test -r /etc/systemid; then
5859                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5860         fi
5861 fi
5862 if $test "$cont"; then
5863         echo 'No, maybe "uuname -l" will work...'
5864         if tans=`sh -c 'uuname -l' 2>&1` ; then
5865                 myhostname=$tans
5866                 phostname='uuname -l'
5867         else
5868                 echo 'Strange.  Maybe "uname -n" will work...'
5869                 if tans=`sh -c 'uname -n' 2>&1` ; then
5870                         myhostname=$tans
5871                         phostname='uname -n'
5872                 else
5873                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5874                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5875                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5876                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5877                         else
5878                                 case "$myhostname" in
5879                                 '') echo "Does this machine have an identity crisis or something?"
5880                                         phostname='';;
5881                                 *)
5882                                         echo "Well, you said $myhostname before..."
5883                                         phostname='echo $myhostname';;
5884                                 esac
5885                         fi
5886                 fi
5887         fi
5888 fi
5889 : you do not want to know about this
5890 set $myhostname
5891 myhostname=$1
5892
5893 : verify guess
5894 if $test "$myhostname" ; then
5895         dflt=y
5896         rp='Your host name appears to be "'$myhostname'".'" Right?"
5897         . ./myread
5898         case "$ans" in
5899         y*) ;;
5900         *) myhostname='';;
5901         esac
5902 fi
5903
5904 : bad guess or no guess
5905 while $test "X$myhostname" = X ; do
5906         dflt=''
5907         rp="Please type the (one word) name of your host:"
5908         . ./myread
5909         myhostname="$ans"
5910 done
5911
5912 : translate upper to lower if necessary
5913 case "$myhostname" in
5914 *[A-Z]*)
5915         echo "(Normalizing case in your host name)"
5916         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5917         ;;
5918 esac
5919
5920 case "$myhostname" in
5921 *.*)
5922         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5923         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5924         echo "(Trimming domain name from host name--host name is now $myhostname)"
5925         ;;
5926 *) case "$mydomain" in
5927         '')
5928                 {
5929                         test "X$hostcat" = "Xypcat hosts" &&
5930                         ypmatch "$myhostname" hosts 2>/dev/null |\
5931                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5932                         $test -s hosts
5933                 } || {
5934                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5935                                         /[       ]$myhostname[  . ]/p" > hosts
5936                 }
5937                 tmp_re="[       . ]"
5938                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5939                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5940                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5941                         hosts | $sort | $uniq | \
5942                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5943                 case `$echo X$dflt` in
5944                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5945                         dflt=.
5946                         ;;
5947                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5948                         ;;
5949                 esac
5950                 case "$dflt" in
5951                 .)
5952                         tans=`./loc resolv.conf X /etc /usr/etc`
5953                         if $test -f "$tans"; then
5954                                 echo "(Attempting domain name extraction from $tans)"
5955                                 dflt=.`$sed -n -e 's/   / /g' \
5956                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5957                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5958                                 case "$dflt" in
5959                                 .) dflt=.`$sed -n -e 's/        / /g' \
5960                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5961                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5962                                         ;;
5963                                 esac
5964                         fi
5965                         ;;
5966                 esac
5967                 case "$dflt" in
5968                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5969                         dflt=.`sh -c domainname 2>/dev/null`
5970                         case "$dflt" in
5971                         '') dflt='.';;
5972                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5973                         esac
5974                         ;;
5975                 esac
5976                 case "$dflt" in
5977                 .) echo "(Lost all hope -- silly guess then)"
5978                         dflt='.uucp'
5979                         ;;
5980                 esac
5981                 $rm -f hosts
5982                 ;;
5983         *) dflt="$mydomain";;
5984         esac;;
5985 esac
5986 echo " "
5987 rp="What is your domain name?"
5988 . ./myread
5989 tans="$ans"
5990 case "$ans" in
5991 '') ;;
5992 .*) ;;
5993 *) tans=".$tans";;
5994 esac
5995 mydomain="$tans"
5996
5997 : translate upper to lower if necessary
5998 case "$mydomain" in
5999 *[A-Z]*)
6000         echo "(Normalizing case in your domain name)"
6001         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6002         ;;
6003 esac
6004
6005 : a little sanity check here
6006 case "$phostname" in
6007 '') ;;
6008 *)
6009         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6010         $myhostname$mydomain|$myhostname) ;;
6011         *)
6012                 case "$phostname" in
6013                 sed*)
6014                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6015                         ;;
6016                 *)
6017                         echo "(That doesn't agree with your $phostname command, by the way.)"
6018                         ;;
6019                 esac
6020         ;;
6021         esac
6022         ;;
6023 esac
6024
6025 $cat <<EOM
6026
6027 I need to get your e-mail address in Internet format if possible, i.e.
6028 something like user@host.domain. Please answer accurately since I have
6029 no easy means to double check it. The default value provided below
6030 is most probably close to the reality but may not be valid from outside
6031 your organization...
6032
6033 EOM
6034 cont=x
6035 while test "$cont"; do
6036         case "$cf_email" in
6037         '') dflt="$cf_by@$myhostname$mydomain";;
6038         *) dflt="$cf_email";;
6039         esac
6040         rp='What is your e-mail address?'
6041         . ./myread
6042         cf_email="$ans"
6043         case "$cf_email" in
6044         *@*.*) cont='' ;;
6045         *)
6046                 rp='Address does not look like an Internet one.  Use it anyway?'
6047                 case "$fastread" in
6048                 yes) dflt=y ;;
6049                 *) dflt=n ;;
6050                 esac
6051                 . ./myread
6052                 case "$ans" in
6053                 y*) cont='' ;;
6054                 *) echo " " ;;
6055                 esac
6056                 ;;
6057         esac
6058 done
6059
6060 $cat <<EOM
6061
6062 If you or somebody else will be maintaining perl at your site, please
6063 fill in the correct e-mail address here so that they may be contacted
6064 if necessary. Currently, the "perlbug" program included with perl
6065 will send mail to this address in addition to perlbug@perl.com. You may
6066 enter "none" for no administrator.
6067
6068 EOM
6069 case "$perladmin" in
6070 '') dflt="$cf_email";;
6071 *) dflt="$perladmin";;
6072 esac
6073 rp='Perl administrator e-mail address'
6074 . ./myread
6075 perladmin="$ans"
6076
6077 : figure out how to guarantee perl startup
6078 case "$startperl" in
6079 '')
6080         case "$sharpbang" in
6081         *!)
6082                 $cat <<EOH
6083
6084 I can use the #! construct to start perl on your system. This will
6085 make startup of perl scripts faster, but may cause problems if you
6086 want to share those scripts and perl is not in a standard place
6087 ($binexp/perl) on all your platforms. The alternative is to force
6088 a shell by starting the script with a single ':' character.
6089
6090 EOH
6091                 dflt="$binexp/perl"
6092                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6093                 . ./myread
6094                 case "$ans" in
6095                 none)   startperl=": # use perl";;
6096                 *)      startperl="#!$ans"
6097                         if $test 30 -lt `echo "$ans" | wc -c`; then
6098                                 $cat >&4 <<EOM
6099
6100 WARNING:  Some systems limit the #! command to 32 characters.
6101 If you experience difficulty running Perl scripts with #!, try
6102 installing Perl in a directory with a shorter pathname.
6103
6104 EOM
6105                         fi ;;
6106                 esac
6107                 ;;
6108         *) startperl=": # use perl"
6109                 ;;
6110         esac
6111         ;;
6112 esac
6113 echo "I'll use $startperl to start perl scripts."
6114
6115 : figure best path for perl in scripts
6116 case "$perlpath" in
6117 '')
6118         perlpath="$binexp/perl"
6119         case "$startperl" in
6120         *!*) ;;
6121         *)
6122                 $cat <<EOH
6123
6124 I will use the "eval 'exec'" idiom to start Perl on your system.
6125 I can use the full path of your Perl binary for this purpose, but
6126 doing so may cause problems if you want to share those scripts and
6127 Perl is not always in a standard place ($binexp/perl).
6128
6129 EOH
6130                 dflt="$binexp/perl"
6131                 rp="What path shall I use in \"eval 'exec'\"?"
6132                 . ./myread
6133                 perlpath="$ans"
6134                 ;;
6135         esac
6136         ;;
6137 esac
6138 case "$startperl" in
6139 *!*)    ;;
6140 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6141 esac
6142
6143 : determine where public executable scripts go
6144 set scriptdir scriptdir
6145 eval $prefixit
6146 case "$scriptdir" in
6147 '')
6148         dflt="$bin"
6149         : guess some guesses
6150         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6151         $test -d /usr/share/bin && dflt=/usr/share/bin
6152         $test -d /usr/local/script && dflt=/usr/local/script
6153         $test -d $prefixexp/script && dflt=$prefixexp/script
6154         set dflt
6155         eval $prefixup
6156         ;;
6157 *)  dflt="$scriptdir"
6158         ;;
6159 esac
6160 $cat <<EOM
6161  
6162 Some installations have a separate directory just for executable scripts so
6163 that they can mount it across multiple architectures but keep the scripts in
6164 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6165 Or you might just lump your scripts in with all your other executables.
6166  
6167 EOM
6168 fn=d~
6169 rp='Where do you keep publicly executable scripts?'
6170 . ./getfile
6171 if $test "X$ansexp" != "X$scriptdirexp"; then
6172         installscript=''
6173 fi
6174 scriptdir="$ans"
6175 scriptdirexp="$ansexp"
6176 if $afs; then
6177         $cat <<EOM
6178
6179 Since you are running AFS, I need to distinguish the directory in which
6180 scripts reside from the directory in which they are installed (and from
6181 which they are presumably copied to the former directory by occult means).
6182
6183 EOM
6184         case "$installscript" in
6185         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6186         *) dflt="$installscript";;
6187         esac
6188         fn=de~
6189         rp='Where will public scripts be installed?'
6190         . ./getfile
6191         installscript="$ans"
6192 else
6193         installscript="$scriptdirexp"
6194 fi
6195
6196 : determine where site specific libraries go.
6197 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6198 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6199 case "$prefix" in
6200 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6201 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6202 esac
6203 eval $prefixit
6204 $cat <<EOM
6205
6206 The installation process will also create a directory for
6207 site-specific extensions and modules.  Some users find it convenient
6208 to place all site-specific files in this directory rather than in the
6209 main distribution directory.
6210
6211 EOM
6212 fn=d~+
6213 rp='Pathname for the site-specific library files?'
6214 . ./getfile
6215 if $test "X$sitelibexp" != "X$ansexp"; then
6216         installsitelib=''
6217 fi
6218 sitelib="$ans"
6219 sitelibexp="$ansexp"
6220 if $afs; then
6221         $cat <<EOM
6222
6223 Since you are running AFS, I need to distinguish the directory in
6224 which site-specific files reside from the directory in which they are
6225 installed (and from which they are presumably copied to the former
6226 directory by occult means).
6227
6228 EOM
6229         case "$installsitelib" in
6230         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6231         *) dflt="$installsitelib";;
6232         esac
6233         fn=de~
6234         rp='Where will site-specific files be installed?'
6235         . ./getfile
6236         installsitelib="$ans"
6237 else
6238         installsitelib="$sitelibexp"
6239 fi
6240
6241 : determine where site specific architecture-dependent libraries go.
6242 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6243 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6244 : sitelib may have an optional trailing /share.
6245 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6246 tdflt="$tdflt/$archname"
6247 set sitearch sitearch none
6248 eval $prefixit
6249 case "$sitearch" in
6250 '')     dflt="$tdflt" ;;
6251 *)      dflt="$sitearch" ;;
6252 esac
6253 $cat <<EOM
6254
6255 The installation process will also create a directory for
6256 architecture-dependent site-specific extensions and modules.
6257
6258 EOM
6259 fn=nd~+
6260 rp='Pathname for the site-specific architecture-dependent library files?'
6261 . ./getfile
6262 if $test "X$sitearchexp" != "X$ansexp"; then
6263         installsitearch=''
6264 fi
6265 sitearch="$ans"
6266 sitearchexp="$ansexp"
6267 if $afs; then
6268         $cat <<EOM
6269
6270 Since you are running AFS, I need to distinguish the directory in
6271 which site-specific architecture-dependent library files reside from
6272 the directory in which they are installed (and from which they are
6273 presumably copied to the former directory by occult means).
6274
6275 EOM
6276         case "$installsitearch" in
6277         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6278         *) dflt="$installsitearch";;
6279         esac
6280         fn=de~
6281         rp='Where will site-specific architecture-dependent files be installed?'
6282         . ./getfile
6283         installsitearch="$ans"
6284 else
6285         installsitearch="$sitearchexp"
6286 fi
6287
6288 cat <<EOM
6289
6290 Previous version of $package used the standard IO mechanisms as defined
6291 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6292 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6293 the default.  This abstraction layer can use AT&T's sfio (if you already
6294 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6295 problems with some extension modules.  Using PerlIO with stdio is safe,
6296 but it is slower than plain stdio and therefore is not the default.
6297
6298 If this doesn't make any sense to you, just accept the default 'n'.
6299 EOM
6300 case "$useperlio" in
6301 $define|true|[yY]*)     dflt='y';;
6302 *) dflt='n';;
6303 esac
6304 rp='Use the experimental PerlIO abstraction layer?'
6305 . ./myread
6306 case "$ans" in
6307 y|Y) 
6308         val="$define"
6309         ;;     
6310 *)      
6311         echo "Ok, doing things the stdio way"
6312         val="$undef"
6313         ;;
6314 esac
6315 set useperlio
6316 eval $setvar 
6317
6318 : Check how to convert floats to strings.
6319 if test "X$d_Gconvert" = X; then
6320         echo " "
6321         echo "Checking for an efficient way to convert floats to strings."
6322         $cat >try.c <<'EOP'
6323 #ifdef TRY_gconvert
6324 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6325 char *myname = "gconvert";
6326 #endif
6327 #ifdef TRY_gcvt
6328 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6329 char *myname = "gcvt";
6330 #endif
6331 #ifdef TRY_sprintf
6332 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6333 char *myname = "sprintf";
6334 #endif
6335
6336 #include <stdio.h>
6337
6338 int
6339 checkit(expect, got)
6340 char *expect;
6341 char *got;
6342 {
6343     if (strcmp(expect, got)) {
6344                 printf("%s oddity:  Expected %s, got %s\n",
6345                         myname, expect, got);
6346                 exit(1);
6347         }
6348 }
6349
6350 int main()
6351
6352         char buf[64]; 
6353         buf[63] = '\0';
6354
6355         /* This must be 1st test on (which?) platform */
6356         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6357         Gconvert(0.1, 8, 0, buf);
6358         checkit("0.1", buf);
6359
6360         Gconvert(1.0, 8, 0, buf); 
6361         checkit("1", buf);
6362
6363         Gconvert(0.0, 8, 0, buf); 
6364         checkit("0", buf);
6365
6366         Gconvert(-1.0, 8, 0, buf); 
6367         checkit("-1", buf);
6368
6369         /* Some Linux gcvt's give 1.e+5 here. */
6370         Gconvert(100000.0, 8, 0, buf); 
6371         checkit("100000", buf);
6372         
6373         /* Some Linux gcvt's give -1.e+5 here. */
6374         Gconvert(-100000.0, 8, 0, buf); 
6375         checkit("-100000", buf);
6376
6377         exit(0);
6378 }
6379 EOP
6380         case "$d_Gconvert" in
6381         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6382         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6383         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6384         *) xxx_list='gconvert gcvt sprintf' ;;
6385         esac
6386
6387         for xxx_convert in $xxx_list; do
6388                 echo "Trying $xxx_convert"
6389                 $rm -f try try$_o
6390                 set try -DTRY_$xxx_convert
6391                 if eval $compile; then
6392                         echo "$xxx_convert" found. >&4
6393                         if ./try; then
6394                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6395                                 break;
6396                         else
6397                                 echo "...But $xxx_convert didn't work as I expected."
6398                         fi
6399                 else
6400                         echo "$xxx_convert NOT found." >&4
6401                 fi
6402         done
6403                 
6404         case "$xxx_convert" in
6405         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6406         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6407         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6408         esac
6409 fi
6410
6411 : Initialize h_fcntl
6412 h_fcntl=false
6413
6414 : Initialize h_sysfile
6415 h_sysfile=false
6416
6417 : access call always available on UNIX
6418 set access d_access
6419 eval $inlibc
6420
6421 : locate the flags for 'access()'
6422 case "$d_access" in
6423 "$define")
6424         echo " "
6425         $cat >access.c <<'EOCP'
6426 #include <sys/types.h>
6427 #ifdef I_FCNTL
6428 #include <fcntl.h>
6429 #endif
6430 #ifdef I_SYS_FILE
6431 #include <sys/file.h>
6432 #endif
6433 #ifdef I_UNISTD
6434 #include <unistd.h>
6435 #endif
6436 int main() {
6437         exit(R_OK);
6438 }
6439 EOCP
6440         : check sys/file.h first, no particular reason here
6441         if $test `./findhdr sys/file.h` && \
6442                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6443                 h_sysfile=true;
6444                 echo "<sys/file.h> defines the *_OK access constants." >&4
6445         elif $test `./findhdr fcntl.h` && \
6446                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6447                 h_fcntl=true;
6448                 echo "<fcntl.h> defines the *_OK access constants." >&4
6449         elif $test `./findhdr unistd.h` && \
6450                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6451                 echo "<unistd.h> defines the *_OK access constants." >&4
6452         else
6453                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6454         fi
6455         ;;
6456 esac
6457 $rm -f access*
6458
6459 : see if accessx exists
6460 set accessx d_accessx
6461 eval $inlibc
6462
6463 : see if alarm exists
6464 set alarm d_alarm
6465 eval $inlibc
6466
6467 : Look for GNU-cc style attribute checking
6468 echo " "
6469 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6470 $cat >attrib.c <<'EOCP'
6471 #include <stdio.h>
6472 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6473 EOCP
6474 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6475         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6476                 echo "Your C compiler doesn't fully support __attribute__."
6477                 val="$undef"
6478         else
6479                 echo "Your C compiler supports __attribute__."
6480                 val="$define"
6481         fi
6482 else
6483         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6484         val="$undef"
6485 fi
6486 set d_attribut
6487 eval $setvar
6488 $rm -f attrib*
6489
6490 : see if bcmp exists
6491 set bcmp d_bcmp
6492 eval $inlibc
6493
6494 : see if bcopy exists
6495 set bcopy d_bcopy
6496 eval $inlibc
6497
6498 : see if this is a unistd.h system
6499 set unistd.h i_unistd
6500 eval $inhdr
6501
6502 : see if getpgrp exists
6503 set getpgrp d_getpgrp
6504 eval $inlibc
6505
6506 case "$d_getpgrp" in
6507 "$define")
6508         echo " "
6509         echo "Checking to see which flavor of getpgrp is in use..."
6510         $cat >set.c <<EOP
6511 #$i_unistd I_UNISTD
6512 #include <sys/types.h>
6513 #ifdef I_UNISTD
6514 #  include <unistd.h>
6515 #endif
6516 int main()
6517 {
6518         if (getuid() == 0) {
6519                 printf("(I see you are running Configure as super-user...)\n");
6520                 setuid(1);
6521         }
6522 #ifdef TRY_BSD_PGRP
6523         if (getpgrp(1) == 0)
6524                 exit(0);
6525 #else
6526         if (getpgrp() > 0)
6527                 exit(0);
6528 #endif
6529         exit(1);
6530 }
6531 EOP
6532         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6533                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6534                 val="$define"
6535         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6536                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6537                 val="$undef"
6538         else
6539                 echo "I can't seem to compile and run the test program."
6540                 if ./usg; then
6541                         xxx="a USG one, i.e. you use getpgrp()."
6542                 else
6543                         # SVR4 systems can appear rather BSD-ish.
6544                         case "$i_unistd" in
6545                         $undef)
6546                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6547                                 val="$define"
6548                                 ;;
6549                         $define)
6550                                 xxx="probably a USG one, i.e. you use getpgrp()."
6551                                 val="$undef"
6552                                 ;;
6553                         esac
6554                 fi
6555                 echo "Assuming your getpgrp is $xxx" >&4
6556         fi
6557         ;;
6558 *) val="$undef";;
6559 esac
6560 set d_bsdgetpgrp
6561 eval $setvar
6562 $rm -f set set.c
6563
6564 : see if setpgrp exists
6565 set setpgrp d_setpgrp
6566 eval $inlibc
6567
6568 case "$d_setpgrp" in
6569 "$define")
6570         echo " "
6571         echo "Checking to see which flavor of setpgrp is in use..."
6572         $cat >set.c <<EOP
6573 #$i_unistd I_UNISTD
6574 #include <sys/types.h>
6575 #ifdef I_UNISTD
6576 #  include <unistd.h>
6577 #endif
6578 int main()
6579 {
6580         if (getuid() == 0) {
6581                 printf("(I see you are running Configure as super-user...)\n");
6582                 setuid(1);
6583         }
6584 #ifdef TRY_BSD_PGRP
6585         if (-1 == setpgrp(1, 1))
6586                 exit(0);
6587 #else
6588         if (setpgrp() != -1)
6589                 exit(0);
6590 #endif
6591         exit(1);
6592 }
6593 EOP
6594         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6595                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6596                 val="$define"
6597         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6598                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6599                 val="$undef"
6600         else
6601                 echo "(I can't seem to compile and run the test program.)"
6602                 if ./usg; then
6603                         xxx="a USG one, i.e. you use setpgrp()."
6604                 else
6605                         # SVR4 systems can appear rather BSD-ish.
6606                         case "$i_unistd" in
6607                         $undef)
6608                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6609                                 val="$define"
6610                                 ;;
6611                         $define)
6612                                 xxx="probably a USG one, i.e. you use setpgrp()."
6613                                 val="$undef"
6614                                 ;;
6615                         esac
6616                 fi
6617                 echo "Assuming your setpgrp is $xxx" >&4
6618         fi
6619         ;;
6620 *) val="$undef";;
6621 esac
6622 set d_bsdsetpgrp
6623 eval $setvar
6624 $rm -f set set.c
6625 : see if bzero exists
6626 set bzero d_bzero
6627 eval $inlibc
6628
6629 : check for lengths of integral types
6630 echo " "
6631 case "$intsize" in
6632 '')
6633         echo "Checking to see how big your integers are..." >&4
6634         $cat >intsize.c <<'EOCP'
6635 #include <stdio.h>
6636 int main()
6637 {
6638         printf("intsize=%d;\n", sizeof(int));
6639         printf("longsize=%d;\n", sizeof(long));
6640         printf("shortsize=%d;\n", sizeof(short));
6641         exit(0);
6642 }
6643 EOCP
6644         set intsize
6645         if eval $compile_ok && ./intsize > /dev/null; then
6646                 eval `./intsize`
6647                 echo "Your integers are $intsize bytes long."
6648                 echo "Your long integers are $longsize bytes long."
6649                 echo "Your short integers are $shortsize bytes long."
6650         else
6651                 $cat >&4 <<EOM
6652 !
6653 Help! I can't compile and run the intsize test program: please enlighten me!
6654 (This is probably a misconfiguration in your system or libraries, and
6655 you really ought to fix it.  Still, I'll try anyway.)
6656 !
6657 EOM
6658                 dflt=4
6659                 rp="What is the size of an integer (in bytes)?"
6660                 . ./myread
6661                 intsize="$ans"
6662                 dflt=$intsize
6663                 rp="What is the size of a long integer (in bytes)?"
6664                 . ./myread
6665                 longsize="$ans"
6666                 dflt=2
6667                 rp="What is the size of a short integer (in bytes)?"
6668                 . ./myread
6669                 shortsize="$ans"
6670         fi
6671         ;;
6672 esac
6673 $rm -f intsize intsize.*
6674
6675 : see if signal is declared as pointer to function returning int or void
6676 echo " "
6677 xxx=`./findhdr signal.h`
6678 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6679 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6680         echo "You have int (*signal())() instead of void." >&4
6681         val="$undef"
6682 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6683         echo "You have void (*signal())()." >&4
6684         val="$define"
6685 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6686         echo "You have int (*signal())() instead of void." >&4
6687         val="$undef"
6688 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6689         echo "You have void (*signal())()." >&4
6690         val="$define"
6691 else
6692         case "$d_voidsig" in
6693         '')
6694         echo "I can't determine whether signal handler returns void or int..." >&4
6695                 dflt=void
6696                 rp="What type does your signal handler return?"
6697                 . ./myread
6698                 case "$ans" in
6699                 v*) val="$define";;
6700                 *) val="$undef";;
6701                 esac;;
6702         "$define")
6703                 echo "As you already told me, signal handler returns void." >&4
6704                 val="$define"
6705                 ;;
6706         *)      echo "As you already told me, signal handler returns int." >&4
6707                 val="$undef"
6708                 ;;
6709         esac
6710 fi
6711 set d_voidsig
6712 eval $setvar
6713 case "$d_voidsig" in
6714 "$define") signal_t="void";;
6715 *) signal_t="int";;
6716 esac
6717 $rm -f $$.tmp
6718
6719 : check for ability to cast large floats to 32-bit ints.
6720 echo " "
6721 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6722 if $test "$intsize" -ge 4; then
6723         xxx=int
6724 else
6725         xxx=long
6726 fi
6727 $cat >try.c <<EOCP
6728 #include <stdio.h>
6729 #include <sys/types.h>
6730 #include <signal.h>
6731 $signal_t blech(s) int s; { exit(3); }
6732 int main()
6733 {
6734         $xxx i32;
6735         double f, g;
6736         int result = 0;
6737         char str[16];
6738         signal(SIGFPE, blech);
6739
6740         /* Don't let compiler optimize the test away.  Store the number 
6741            in a writable string for gcc to pass to sscanf under HP/UX.
6742         */
6743         sprintf(str, "2147483647");
6744         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6745         g = 10 * f;
6746         i32  = ($xxx) g;
6747
6748         /* x86 processors will probably give 0x8000 0000, which is a
6749        sign change.  We don't want that.  We want to mimic SPARC
6750            behavior here, which is to preserve the sign and give
6751            back 0x7fff ffff.
6752         */
6753         if (i32 != ($xxx) f)
6754                 result |= 1;
6755         exit(result);
6756 }
6757 EOCP
6758 set try
6759 if eval $compile_ok; then
6760         ./try
6761         yyy=$?
6762 else
6763         echo "(I can't seem to compile the test program--assuming it can't)"
6764         yyy=1
6765 fi
6766 case "$yyy" in
6767 0)      val="$define"
6768         echo "Yup, it can."
6769         ;;
6770 *)      val="$undef"
6771         echo "Nope, it can't."
6772         ;;
6773 esac
6774 set d_casti32
6775 eval $setvar
6776 $rm -f try try.*
6777
6778 : check for ability to cast negative floats to unsigned
6779 echo " "
6780 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6781 $cat >try.c <<EOCP
6782 #include <stdio.h>
6783 #include <sys/types.h>
6784 #include <signal.h>
6785 $signal_t blech(s) int s; { exit(7); }
6786 $signal_t blech_in_list(s) int s; { exit(4); }
6787 unsigned long dummy_long(p) unsigned long p; { return p; }
6788 unsigned int dummy_int(p) unsigned int p; { return p; }
6789 unsigned short dummy_short(p) unsigned short p; { return p; }
6790 int main()
6791 {
6792         double f;
6793         unsigned long along;
6794         unsigned int aint;
6795         unsigned short ashort;
6796         int result = 0;
6797         char str[16];
6798         
6799         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6800            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6801            optimized the whole file away
6802         */
6803         /* Store the number in a writable string for gcc to pass to 
6804            sscanf under HP/UX.
6805         */
6806         sprintf(str, "-123");
6807         sscanf(str, "%lf", &f);  /* f = -123.; */
6808
6809         signal(SIGFPE, blech);
6810         along = (unsigned long)f;
6811         aint = (unsigned int)f;
6812         ashort = (unsigned short)f;
6813         if (along != (unsigned long)-123)
6814                 result |= 1;
6815         if (aint != (unsigned int)-123)
6816                 result |= 1;
6817         if (ashort != (unsigned short)-123)
6818                 result |= 1;
6819         sprintf(str, "1073741824.");
6820         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6821         f = f + f;
6822         along = 0;
6823         along = (unsigned long)f;
6824         if (along != 0x80000000)
6825                 result |= 2;
6826         f -= 1.;
6827         along = 0;
6828         along = (unsigned long)f;
6829         if (along != 0x7fffffff)
6830                 result |= 1;
6831         f += 2.;
6832         along = 0;
6833         along = (unsigned long)f;
6834         if (along != 0x80000001)
6835                 result |= 2;
6836         if (result)
6837                 exit(result);
6838         signal(SIGFPE, blech_in_list);
6839         sprintf(str, "123.");
6840         sscanf(str, "%lf", &f);  /* f = 123.; */
6841         along = dummy_long((unsigned long)f);
6842         aint = dummy_int((unsigned int)f);
6843         ashort = dummy_short((unsigned short)f);
6844         if (along != (unsigned long)123)
6845                 result |= 4;
6846         if (aint != (unsigned int)123)
6847                 result |= 4;
6848         if (ashort != (unsigned short)123)
6849                 result |= 4;
6850         exit(result);
6851
6852 }
6853 EOCP
6854 set try
6855 if eval $compile_ok; then
6856         ./try
6857         castflags=$?
6858 else
6859         echo "(I can't seem to compile the test program--assuming it can't)"
6860         castflags=7
6861 fi
6862 case "$castflags" in
6863 0)      val="$define"
6864         echo "Yup, it can."
6865         ;;
6866 *)      val="$undef"
6867         echo "Nope, it can't."
6868         ;;
6869 esac
6870 set d_castneg
6871 eval $setvar
6872 $rm -f try.*
6873
6874 : see if vprintf exists
6875 echo " "
6876 if set vprintf val -f d_vprintf; eval $csym; $val; then
6877         echo 'vprintf() found.' >&4
6878         val="$define"
6879         $cat >vprintf.c <<'EOF'
6880 #include <varargs.h>
6881
6882 int main() { xxx("foo"); }
6883
6884 xxx(va_alist)
6885 va_dcl
6886 {
6887         va_list args;
6888         char buf[10];
6889
6890         va_start(args);
6891         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6892 }
6893 EOF
6894         set vprintf
6895         if eval $compile && ./vprintf; then
6896                 echo "Your vsprintf() returns (int)." >&4
6897                 val2="$undef"
6898         else
6899                 echo "Your vsprintf() returns (char*)." >&4
6900                 val2="$define"
6901         fi
6902 else
6903         echo 'vprintf() NOT found.' >&4
6904                 val="$undef"
6905                 val2="$undef"
6906 fi
6907 set d_vprintf
6908 eval $setvar
6909 val=$val2
6910 set d_charvspr
6911 eval $setvar
6912
6913 : see if chown exists
6914 set chown d_chown
6915 eval $inlibc
6916
6917 : see if chroot exists
6918 set chroot d_chroot
6919 eval $inlibc
6920
6921 : see if chsize exists
6922 set chsize d_chsize
6923 eval $inlibc
6924
6925 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6926 while $test $# -ge 2; do
6927         case "$1" in
6928         $define) echo "#include <$2>";;
6929         esac ;
6930     shift 2;
6931 done > try.c;
6932 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6933 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6934         val="$define";
6935 else
6936         val="$undef";
6937 fi;
6938 set $varname;
6939 eval $setvar;
6940 $rm -f try.c try.o'
6941
6942 : see if this is a sys/uio.h system
6943 set sys/uio.h i_sysuio
6944 eval $inhdr
6945
6946 echo "Checking to see if your system supports struct iovec..." >&4
6947 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6948 eval $hasfield
6949 case "$d_iovec_s" in
6950 "$define")      echo "Yup, it does." >&4
6951                 ;;
6952 *)              echo "Nope, it doesn't." >&4
6953                 ;;
6954 esac
6955
6956 socketlib=''
6957 sockethdr=''
6958 : see whether socket exists
6959 echo " "
6960 $echo $n "Hmm... $c" >&4
6961 if set socket val -f d_socket; eval $csym; $val; then
6962         echo "Looks like you have Berkeley networking support." >&4
6963         d_socket="$define"
6964         if set setsockopt val -f; eval $csym; $val; then
6965                 d_oldsock="$undef"
6966         else
6967                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6968                 d_oldsock="$define"
6969         fi
6970 else
6971         if $contains socklib libc.list >/dev/null 2>&1; then
6972                 echo "Looks like you have Berkeley networking support." >&4
6973                 d_socket="$define"
6974                 : we will have to assume that it supports the 4.2 BSD interface
6975                 d_oldsock="$undef"
6976         else
6977                 echo "You don't have Berkeley networking in libc$_a..." >&4
6978                 if test "X$d_socket" = "X$define"; then
6979                    echo "...but you seem to believe that you have sockets." >&4
6980                 else
6981                         for net in net socket
6982                         do
6983                                 if test -f /usr/lib/lib$net$_a; then
6984                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6985                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6986                                         if $contains socket libc.list >/dev/null 2>&1; then
6987                                                 d_socket="$define"
6988                                                 socketlib="-l$net"
6989                                                 case "$net" in
6990                                                 net)
6991                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6992                                                         sockethdr="-I/usr/netinclude"
6993                                                         ;;
6994                                                 esac
6995                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6996                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6997                                                         d_oldsock="$undef"
6998                                                 else
6999                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7000                                                         d_oldsock="$define"
7001                                                 fi
7002                                                 break
7003                                         fi
7004                                 fi
7005                         done
7006                         if test "X$d_socket" != "X$define"; then
7007                            echo "or anywhere else I see." >&4
7008                            d_socket="$undef"
7009                            d_oldsock="$undef"
7010                         fi
7011                 fi
7012         fi
7013 fi
7014
7015 : see if socketpair exists
7016 set socketpair d_sockpair
7017 eval $inlibc
7018
7019
7020 echo " "
7021 echo "Checking the availability of certain socket constants..." >& 4
7022 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7023         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7024         $cat >try.c <<EOF
7025 #include <sys/types.h>
7026 #include <sys/socket.h>
7027 int main() {
7028     int i = $ENUM;
7029 }
7030 EOF
7031         val="$undef"
7032         set try; if eval $compile; then
7033                 val="$define"
7034         fi
7035         set d_${enum}; eval $setvar
7036         $rm -f try.c try
7037 done
7038
7039 set sendmsg d_sendmsg
7040 eval $inlibc
7041
7042 set recvmsg d_recvmsg
7043 eval $inlibc
7044
7045 echo " "
7046 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7047 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7048 eval $hasfield
7049 case "$d_msghdr_s" in
7050 "$define")      echo "Yup, it does." >&4
7051                 ;;
7052 *)              echo "Nope, it doesn't." >&4
7053                 ;;
7054 esac
7055
7056 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7057 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7058 eval $hasfield
7059 case "$d_cmsghdr_s" in
7060 "$define")      echo "Yup, it does." >&4
7061                 ;;
7062 *)              echo "Nope, it doesn't." >&4
7063                 ;;
7064 esac
7065
7066 : check for const keyword
7067 echo " "
7068 echo 'Checking to see if your C compiler knows about "const"...' >&4
7069 $cat >const.c <<'EOCP'
7070 typedef struct spug { int drokk; } spug;
7071 int main()
7072 {
7073         const char *foo;
7074         const spug y;
7075 }
7076 EOCP
7077 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7078         val="$define"
7079         echo "Yup, it does."
7080 else
7081         val="$undef"
7082         echo "Nope, it doesn't."
7083 fi
7084 set d_const
7085 eval $setvar
7086
7087 : see if crypt exists
7088 echo " "
7089 if set crypt val -f d_crypt; eval $csym; $val; then
7090         echo 'crypt() found.' >&4
7091         val="$define"
7092         cryptlib=''
7093 else
7094         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7095         if $test -z "$cryptlib"; then
7096                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7097         else
7098                 cryptlib=-lcrypt
7099         fi
7100         if $test -z "$cryptlib"; then
7101                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7102         else
7103                 cryptlib=-lcrypt
7104         fi
7105         if $test -z "$cryptlib"; then
7106                 cryptlib=`./loc libcrypt$_a "" $libpth`
7107         else
7108                 cryptlib=-lcrypt
7109         fi
7110         if $test -z "$cryptlib"; then
7111                 echo 'crypt() NOT found.' >&4
7112                 val="$undef"
7113         else
7114                 val="$define"
7115         fi
7116 fi
7117 set d_crypt
7118 eval $setvar
7119
7120 : get csh whereabouts
7121 case "$csh" in
7122 'csh') val="$undef" ;;
7123 *) val="$define" ;;
7124 esac
7125 set d_csh
7126 eval $setvar
7127 : Respect a hint or command line value for full_csh.
7128 case "$full_csh" in
7129 '') full_csh=$csh ;;
7130 esac
7131
7132 : see if cuserid exists
7133 set cuserid d_cuserid
7134 eval $inlibc
7135
7136 : see if this is a limits.h system
7137 set limits.h i_limits
7138 eval $inhdr
7139
7140 : see if this is a float.h system
7141 set float.h i_float
7142 eval $inhdr
7143
7144 : See if number of significant digits in a double precision number is known
7145 echo " "
7146 $cat >dbl_dig.c <<EOM
7147 #$i_limits I_LIMITS
7148 #$i_float I_FLOAT
7149 #ifdef I_LIMITS
7150 #include <limits.h>
7151 #endif
7152 #ifdef I_FLOAT
7153 #include <float.h>
7154 #endif
7155 #ifdef DBL_DIG
7156 printf("Contains DBL_DIG");
7157 #endif
7158 EOM
7159 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7160 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7161         echo "DBL_DIG found." >&4
7162         val="$define"
7163 else
7164         echo "DBL_DIG NOT found." >&4
7165         val="$undef"
7166 fi
7167 $rm -f dbl_dig.?
7168 set d_dbl_dig
7169 eval $setvar
7170
7171
7172 if $test X"$use64bits" = X"$define"; then
7173         : see if dbminit64 exists
7174         set dbminit64 d_dbminit64
7175         eval $inlibc
7176
7177         : see if dbmclose64 exists
7178         set dbmclose64 d_dbmclose64
7179         eval $inlibc
7180
7181         : see if fetch64 exists
7182         set fetch64 d_fetch64
7183         eval $inlibc
7184
7185         : see if store64 exists
7186         set store64 d_store64
7187         eval $inlibc
7188
7189         : see if delete64 exists
7190         set delete64 d_delete64
7191         eval $inlibc
7192
7193         : see if firstkey64 exists
7194         set firstkey64 d_firstkey64
7195         eval $inlibc
7196
7197         : see if nextkey64 exists
7198         set nextkey64 d_nextkey64
7199         eval $inlibc
7200 else
7201         val="$undef"
7202         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7203         do
7204                 set $xxx
7205                 eval $setvar
7206         done
7207 fi
7208
7209 : see if difftime exists
7210 set difftime d_difftime
7211 eval $inlibc
7212
7213 : see if sys/stat.h is available
7214 set sys/stat.h i_sysstat
7215 eval $inhdr
7216
7217 : see if this is a dirent system
7218 echo " "
7219 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7220         val="$define"
7221         echo "<dirent.h> found." >&4
7222 else
7223         val="$undef"
7224         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7225                 echo "<sys/dir.h> found." >&4
7226                 echo " "
7227         else
7228                 xinc=`./findhdr sys/ndir.h`
7229         fi
7230         echo "<dirent.h> NOT found." >&4
7231 fi
7232 set i_dirent
7233 eval $setvar
7234
7235 : Look for type of directory structure.
7236 echo " "
7237 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7238
7239 case "$direntrytype" in
7240 ''|' ')
7241         case "$i_dirent" in
7242         $define) guess1='struct dirent' ;;
7243         *) guess1='struct direct'  ;;
7244         esac
7245         ;;
7246 *)      guess1="$direntrytype"
7247         ;;
7248 esac
7249
7250 case "$guess1" in
7251 'struct dirent') guess2='struct direct' ;;
7252 *) guess2='struct dirent' ;;
7253 esac
7254                 
7255 if $contains "$guess1" try.c >/dev/null 2>&1; then
7256         direntrytype="$guess1"
7257         echo "Your directory entries are $direntrytype." >&4
7258 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7259         direntrytype="$guess2"
7260         echo "Your directory entries seem to be $direntrytype." >&4
7261 else
7262         echo "I don't recognize your system's directory entries." >&4
7263         rp="What type is used for directory entries on this system?"
7264         dflt="$guess1"
7265         . ./myread
7266         direntrytype="$ans"
7267 fi
7268 $rm -f try.c
7269
7270
7271 : see if the directory entry stores field length
7272 echo " "
7273 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7274 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7275         echo "Good, your directory entry keeps length information in d_namlen." >&4
7276         val="$define"
7277 else
7278         echo "Your directory entry does not know about the d_namlen field." >&4
7279         val="$undef"
7280 fi
7281 set d_dirnamlen
7282 eval $setvar
7283 $rm -f try.c
7284
7285
7286 if $test X"$use64bits" = X"$define"; then
7287         : see if fstat64 exists
7288         set fstat64 d_fstat64
7289         eval $inlibc
7290
7291         : see if ftruncate64 exists
7292         set ftruncate64 d_ftruncate64
7293         eval $inlibc
7294
7295         : see if lockf64 exists
7296         set lockf64 d_lockf64
7297         eval $inlibc
7298
7299         : see if llseek exists
7300         set llseek d_llseek
7301         eval $inlibc
7302
7303         : see if lseek64 exists
7304         set lseek64 d_lseek64
7305         eval $inlibc
7306
7307         : see if lstat64 exists
7308         set lstat64 d_lstat64
7309         eval $inlibc
7310
7311         : see if open64 exists
7312         set open64 d_open64
7313         eval $inlibc
7314
7315         : see if opendir64 exists
7316         set opendir64 d_opendir64
7317         eval $inlibc
7318
7319         : see if readdir64 exists
7320         set readdir64 d_readdir64
7321         eval $inlibc
7322
7323         : see if seekdir64 exists
7324         set seekdir64 d_seekdir64
7325         eval $inlibc
7326
7327         : see if stat64 exists
7328         set stat64 d_stat64
7329         eval $inlibc
7330
7331         : see if telldir64 exists
7332         set telldir64 d_telldir64
7333         eval $inlibc
7334
7335         : see if truncate64 exists
7336         set truncate64 d_truncate64
7337         eval $inlibc
7338
7339         : check for off64_t
7340         echo " "
7341         echo $n "Checking to see if your system supports off64_t...$c" >&4
7342         $cat >try.c <<EOCP
7343 #include <sys/types.h>
7344 #include <unistd.h>
7345 off64_t foo() { off64_t x; x = 7; return x; }'
7346 EOCP
7347         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7348                 val="$define"
7349                 echo " Yup, it does." >&4
7350         else
7351                 val="$undef"
7352                 echo " Nope, it doesn't." >&4
7353         fi
7354         $rm -f try.*
7355         set d_off64_t
7356         eval $setvar
7357
7358         : check for offset_t
7359         echo " "
7360         echo $n "Checking to see if your system supports offset_t...$c" >&4
7361         $cat >try.c <<EOCP
7362 #include <sys/types.h>
7363 #include <unistd.h>
7364 offset_t foo() { offset_t x; x = 7; return x; }'
7365 EOCP
7366         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7367                 val="$define"
7368                 echo " Yup, it does." >&4
7369         else
7370                 val="$undef"
7371                 echo " Nope, it doesn't." >&4
7372         fi
7373         $rm -f try.*
7374         set d_offset_t
7375         eval $setvar
7376
7377         : check for ino64_t
7378         echo " "
7379         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7380         val="$undef"
7381         case "$i_sysstat" in
7382         "$define" )
7383                 $cat >try.c <<EOCP
7384 #include <sys/types.h>
7385 #include <sys/stat.h>
7386 ino64_t foo() { ino64_t x; x = 7; return x; }'
7387 EOCP
7388                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7389                         val="$define"
7390                 fi
7391                 $rm -f try.*
7392                 ;;
7393         esac
7394         if $test "X$val" = X"$define"; then
7395                 echo " Yup, it does." >&4
7396         else
7397                 echo " Nope, it doesn't." >&4
7398         fi
7399         set d_ino64_t
7400         eval $setvar
7401
7402         : check for struct flock64
7403         echo " "
7404         echo "Checking to see if your system supports struct flock64..." >&4
7405         if $h_fcntl; then
7406                 set d_flock64_s flock64 l_len define fcntl.h
7407                 eval $hasfield
7408         else
7409                 val="$undef"
7410                 set d_flock64_s
7411                 eval $setvar
7412         fi
7413         case "$d_flock64_s" in
7414         "$define")      echo "Yup, it does." >&4
7415                         ;;
7416         *)              echo "Nope, it doesn't." >&4
7417                         ;;
7418         esac
7419
7420         : check for struct dirent64
7421         echo " "
7422         echo "Checking to see if your system supports struct dirent64..." >&4
7423         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7424         eval $hasfield
7425         case "$d_dirent64_s" in
7426         "$define")      echo "Yup, it does." >&4
7427                         ;;
7428         *)              echo "Nope, it doesn't." >&4
7429                         ;;
7430         esac
7431
7432 else
7433         val="$undef"
7434         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
7435         do
7436                 set $xxx
7437                 eval $setvar
7438         done
7439 fi
7440
7441 : see if dlerror exists
7442 xxx_runnm="$runnm"
7443 runnm=false
7444 set dlerror d_dlerror
7445 eval $inlibc
7446 runnm="$xxx_runnm"
7447
7448 : see if dlfcn is available
7449 set dlfcn.h i_dlfcn
7450 eval $inhdr
7451
7452 case "$usedl" in
7453 $define|y|true)
7454         $cat << EOM
7455
7456 On a few systems, the dynamically loaded modules that perl generates and uses
7457 will need a different extension than shared libs. The default will probably
7458 be appropriate.
7459
7460 EOM
7461         case "$dlext" in
7462         '')     dflt="$so" ;;
7463         *)      dflt="$dlext" ;;
7464         esac
7465         rp='What is the extension of dynamically loaded modules'
7466         . ./myread
7467         dlext="$ans"
7468         ;;
7469 *)
7470         dlext="none"
7471         ;;
7472 esac
7473
7474 : Check if dlsym need a leading underscore
7475 echo " "
7476 val="$undef"
7477
7478 case "$dlsrc" in
7479 dl_dlopen.xs)
7480         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7481         $cat >dyna.c <<'EOM'
7482 fred () { }
7483 EOM
7484
7485 $cat >fred.c<<EOM
7486
7487 #include <stdio.h>
7488 #$i_dlfcn I_DLFCN
7489 #ifdef I_DLFCN
7490 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7491 #else
7492 #include <sys/types.h>
7493 #include <nlist.h>
7494 #include <link.h>
7495 #endif
7496
7497 extern int fred() ;
7498
7499 int main()
7500 {
7501     void * handle ;
7502     void * symbol ;
7503 #ifndef RTLD_LAZY
7504     int mode = 1 ;
7505 #else
7506     int mode = RTLD_LAZY ;
7507 #endif
7508     handle = dlopen("./dyna.$dlext", mode) ;
7509     if (handle == NULL) {
7510         printf ("1\n") ;
7511         fflush (stdout) ;
7512         exit(0);
7513     }
7514     symbol = dlsym(handle, "fred") ;
7515     if (symbol == NULL) {
7516         /* try putting a leading underscore */
7517         symbol = dlsym(handle, "_fred") ;
7518         if (symbol == NULL) {
7519             printf ("2\n") ;
7520             fflush (stdout) ;
7521             exit(0);
7522         }
7523         printf ("3\n") ;
7524     }
7525     else
7526         printf ("4\n") ;
7527     fflush (stdout) ;
7528     exit(0);
7529 }
7530 EOM
7531         : Call the object file tmp-dyna.o in case dlext=o.
7532         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7533                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7534                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7535                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7536                 xxx=`./fred`
7537                 case $xxx in
7538                 1)      echo "Test program failed using dlopen." >&4
7539                         echo "Perhaps you should not use dynamic loading." >&4;;
7540                 2)      echo "Test program failed using dlsym." >&4
7541                         echo "Perhaps you should not use dynamic loading." >&4;;
7542                 3)      echo "dlsym needs a leading underscore" >&4
7543                         val="$define" ;;
7544                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7545                 esac
7546         else
7547                 echo "I can't compile and run the test program." >&4
7548         fi
7549         ;;
7550 esac
7551                 
7552 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7553
7554 set d_dlsymun
7555 eval $setvar
7556
7557 hasproto='varname=$1; func=$2; shift; shift;
7558 while $test $# -ge 2; do
7559         case "$1" in
7560         $define) echo "#include <$2>";;
7561         esac ;
7562     shift 2;
7563 done > try.c;
7564 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7565 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7566         echo "$func() prototype found.";
7567         val="$define";
7568 else
7569         echo "$func() prototype NOT found.";
7570         val="$undef";
7571 fi;
7572 set $varname;
7573 eval $setvar;
7574 $rm -f try.c tryout.c'
7575
7576 : see if prototype for drand48 is available
7577 echo " "
7578 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7579 eval $hasproto
7580
7581 : see if dup2 exists
7582 set dup2 d_dup2
7583 eval $inlibc
7584
7585 : see if eaccess exists
7586 set eaccess d_eaccess
7587 eval $inlibc
7588
7589 : see if endgrent exists
7590 set endgrent d_endgrent
7591 eval $inlibc
7592
7593 : see if endhostent exists
7594 set endhostent d_endhent
7595 eval $inlibc
7596
7597 : see if endnetent exists
7598 set endnetent d_endnent
7599 eval $inlibc
7600
7601 : see if endprotoent exists
7602 set endprotoent d_endpent
7603 eval $inlibc
7604
7605 : see if endpwent exists
7606 set endpwent d_endpwent
7607 eval $inlibc
7608
7609 : see if endservent exists
7610 set endservent d_endsent
7611 eval $inlibc
7612
7613 : see if endspent exists
7614 set endspent d_endspent
7615 eval $inlibc
7616
7617 : Locate the flags for 'open()'
7618 echo " "
7619 $cat >open3.c <<'EOCP'
7620 #include <sys/types.h>
7621 #ifdef I_FCNTL
7622 #include <fcntl.h>
7623 #endif
7624 #ifdef I_SYS_FILE
7625 #include <sys/file.h>
7626 #endif
7627 int main() {
7628         if(O_RDONLY);
7629 #ifdef O_TRUNC
7630         exit(0);
7631 #else
7632         exit(1);
7633 #endif
7634 }
7635 EOCP
7636 : check sys/file.h first to get FREAD on Sun
7637 if $test `./findhdr sys/file.h` && \
7638                 set open3 -DI_SYS_FILE && eval $compile; then
7639         h_sysfile=true;
7640         echo "<sys/file.h> defines the O_* constants..." >&4
7641         if ./open3; then
7642                 echo "and you have the 3 argument form of open()." >&4
7643                 val="$define"
7644         else
7645                 echo "but not the 3 argument form of open().  Oh, well." >&4
7646                 val="$undef"
7647         fi
7648 elif $test `./findhdr fcntl.h` && \
7649                 set open3 -DI_FCNTL && eval $compile; then
7650         h_fcntl=true;
7651         echo "<fcntl.h> defines the O_* constants..." >&4
7652         if ./open3; then
7653                 echo "and you have the 3 argument form of open()." >&4
7654                 val="$define"
7655         else
7656                 echo "but not the 3 argument form of open().  Oh, well." >&4
7657                 val="$undef"
7658         fi
7659 else
7660         val="$undef"
7661         echo "I can't find the O_* constant definitions!  You got problems." >&4
7662 fi
7663 set d_open3
7664 eval $setvar
7665 $rm -f open3*
7666
7667 : check for non-blocking I/O stuff
7668 case "$h_sysfile" in
7669 true) echo "#include <sys/file.h>" > head.c;;
7670 *)
7671         case "$h_fcntl" in
7672         true) echo "#include <fcntl.h>" > head.c;;
7673         *) echo "#include <sys/fcntl.h>" > head.c;;
7674         esac
7675         ;;
7676 esac
7677 echo " "
7678 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7679 case "$o_nonblock" in
7680 '')
7681         $cat head.c > try.c
7682         $cat >>try.c <<'EOCP'
7683 int main() {
7684 #ifdef O_NONBLOCK
7685         printf("O_NONBLOCK\n");
7686         exit(0);
7687 #endif
7688 #ifdef O_NDELAY
7689         printf("O_NDELAY\n");
7690         exit(0);
7691 #endif
7692 #ifdef FNDELAY
7693         printf("FNDELAY\n");
7694         exit(0);
7695 #endif
7696         exit(0);
7697 }
7698 EOCP
7699         set try
7700         if eval $compile_ok; then
7701                 o_nonblock=`./try`
7702                 case "$o_nonblock" in
7703                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7704                 *) echo "Seems like we can use $o_nonblock.";;
7705                 esac
7706         else
7707                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7708         fi
7709         ;;
7710 *) echo "Using $hint value $o_nonblock.";;
7711 esac
7712 $rm -f try try.* .out core
7713
7714 echo " "
7715 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7716 case "$eagain" in
7717 '')
7718         $cat head.c > try.c
7719         $cat >>try.c <<EOCP
7720 #include <errno.h>
7721 #include <sys/types.h>
7722 #include <signal.h>
7723 #define MY_O_NONBLOCK $o_nonblock
7724 #ifndef errno  /* XXX need better Configure test */
7725 extern int errno;
7726 #endif
7727 $signal_t blech(x) int x; { exit(3); }
7728 EOCP
7729         $cat >> try.c <<'EOCP'
7730 int main()
7731 {
7732         int pd[2];
7733         int pu[2];
7734         char buf[1];
7735         char string[100];
7736
7737         pipe(pd);       /* Down: child -> parent */
7738         pipe(pu);       /* Up: parent -> child */
7739         if (0 != fork()) {
7740                 int ret;
7741                 close(pd[1]);   /* Parent reads from pd[0] */
7742                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7743                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7744                         exit(1);
7745                 signal(SIGALRM, blech);
7746                 alarm(5);
7747                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7748                         exit(2);
7749                 sprintf(string, "%d\n", ret);
7750                 write(2, string, strlen(string));
7751                 alarm(0);
7752 #ifdef EAGAIN
7753                 if (errno == EAGAIN) {
7754                         printf("EAGAIN\n");
7755                         goto ok;
7756                 }
7757 #endif
7758 #ifdef EWOULDBLOCK
7759                 if (errno == EWOULDBLOCK)
7760                         printf("EWOULDBLOCK\n");
7761 #endif
7762         ok:
7763                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7764                 sleep(2);                               /* Give it time to close our pipe */
7765                 alarm(5);
7766                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7767                 alarm(0);
7768                 sprintf(string, "%d\n", ret);
7769                 write(3, string, strlen(string));
7770                 exit(0);
7771         }
7772
7773         close(pd[0]);                   /* We write to pd[1] */
7774         close(pu[1]);                   /* We read from pu[0] */
7775         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7776         close(pd[1]);                   /* Pipe pd is now fully closed! */
7777         exit(0);                                /* Bye bye, thank you for playing! */
7778 }
7779 EOCP
7780         set try
7781         if eval $compile_ok; then
7782                 echo "$startsh" >mtry
7783                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7784                 chmod +x mtry
7785                 ./mtry >/dev/null 2>&1
7786                 case $? in
7787                 0) eagain=`$cat try.out`;;
7788                 1) echo "Could not perform non-blocking setting!";;
7789                 2) echo "I did a successful read() for something that was not there!";;
7790                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7791                 *) echo "Something terribly wrong happened during testing.";;
7792                 esac
7793                 rd_nodata=`$cat try.ret`
7794                 echo "A read() system call with no data present returns $rd_nodata."
7795                 case "$rd_nodata" in
7796                 0|-1) ;;
7797                 *)
7798                         echo "(That's peculiar, fixing that to be -1.)"
7799                         rd_nodata=-1
7800                         ;;
7801                 esac
7802                 case "$eagain" in
7803                 '')
7804                         echo "Forcing errno EAGAIN on read() with no data available."
7805                         eagain=EAGAIN
7806                         ;;
7807                 *)
7808                         echo "Your read() sets errno to $eagain when no data is available."
7809                         ;;
7810                 esac
7811                 status=`$cat try.err`
7812                 case "$status" in
7813                 0) echo "And it correctly returns 0 to signal EOF.";;
7814                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7815                 *) echo "However, your read() returns '$status' on EOF??";;
7816                 esac
7817                 val="$define"
7818                 if test "$status" = "$rd_nodata"; then
7819                         echo "WARNING: you can't distinguish between EOF and no data!"
7820                         val="$undef"
7821                 fi
7822         else
7823                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7824                 eagain=EAGAIN
7825         fi
7826         set d_eofnblk
7827         eval $setvar
7828         ;;
7829 *)
7830         echo "Using $hint value $eagain."
7831         echo "Your read() returns $rd_nodata when no data is present."
7832         case "$d_eofnblk" in
7833         "$define") echo "And you can see EOF because read() returns 0.";;
7834         "$undef") echo "But you can't see EOF status from read() returned value.";;
7835         *)
7836                 echo "(Assuming you can't see EOF status from read anyway.)"
7837                 d_eofnblk=$undef
7838                 ;;
7839         esac
7840         ;;
7841 esac
7842 $rm -f try try.* .out core head.c mtry
7843
7844 : see if fchmod exists
7845 set fchmod d_fchmod
7846 eval $inlibc
7847
7848 : see if fchown exists
7849 set fchown d_fchown
7850 eval $inlibc
7851
7852 : see if this is an fcntl system
7853 set fcntl d_fcntl
7854 eval $inlibc
7855
7856 : see if sys/select.h has to be included
7857 set sys/select.h i_sysselct
7858 eval $inhdr
7859
7860 : see if we should include time.h, sys/time.h, or both
7861 echo " "
7862 if test "X$timeincl" = X; then
7863         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7864         $echo $n "I'm now running the test program...$c"
7865         $cat >try.c <<'EOCP'
7866 #include <sys/types.h>
7867 #ifdef I_TIME
7868 #include <time.h>
7869 #endif
7870 #ifdef I_SYSTIME
7871 #ifdef SYSTIMEKERNEL
7872 #define KERNEL
7873 #endif
7874 #include <sys/time.h>
7875 #endif
7876 #ifdef I_SYSSELECT
7877 #include <sys/select.h>
7878 #endif
7879 int main()
7880 {
7881         struct tm foo;
7882 #ifdef S_TIMEVAL
7883         struct timeval bar;
7884 #endif
7885 #ifdef S_TIMEZONE
7886         struct timezone tzp;
7887 #endif
7888         if (foo.tm_sec == foo.tm_sec)
7889                 exit(0);
7890 #ifdef S_TIMEVAL
7891         if (bar.tv_sec == bar.tv_sec)
7892                 exit(0);
7893 #endif
7894         exit(1);
7895 }
7896 EOCP
7897         flags=''
7898         for s_timezone in '-DS_TIMEZONE' ''; do
7899         sysselect=''
7900         for s_timeval in '-DS_TIMEVAL' ''; do
7901         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7902         for i_time in '' '-DI_TIME'; do
7903         for i_systime in '-DI_SYSTIME' ''; do
7904                 case "$flags" in
7905                 '') $echo $n ".$c"
7906                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7907                         if eval $compile; then
7908                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7909                                 shift
7910                                 flags="$*"
7911                                 echo " "
7912                                 $echo $n "Succeeded with $flags$c"
7913                         fi
7914                         ;;
7915                 esac
7916         done
7917         done
7918         done
7919         done
7920         done
7921         timeincl=''
7922         echo " "
7923         case "$flags" in
7924         *SYSTIMEKERNEL*) i_systimek="$define"
7925                 timeincl=`./findhdr sys/time.h`
7926                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7927         *) i_systimek="$undef";;
7928         esac
7929         case "$flags" in
7930         *I_TIME*) i_time="$define"
7931                 timeincl=`./findhdr time.h`" $timeincl"
7932                 echo "We'll include <time.h>." >&4;;
7933         *) i_time="$undef";;
7934         esac
7935         case "$flags" in
7936         *I_SYSTIME*) i_systime="$define"
7937                 timeincl=`./findhdr sys/time.h`" $timeincl"
7938                 echo "We'll include <sys/time.h>." >&4;;
7939         *) i_systime="$undef";;
7940         esac
7941         $rm -f try.c try
7942 fi
7943
7944 : check for fd_set items
7945 $cat <<EOM
7946
7947 Checking to see how well your C compiler handles fd_set and friends ...
7948 EOM
7949 $cat >fd_set.c <<EOCP
7950 #$i_systime I_SYS_TIME
7951 #$i_sysselct I_SYS_SELECT
7952 #$d_socket HAS_SOCKET
7953 #include <sys/types.h>
7954 #ifdef HAS_SOCKET
7955 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7956 #endif
7957 #ifdef I_SYS_TIME
7958 #include <sys/time.h>
7959 #endif
7960 #ifdef I_SYS_SELECT
7961 #include <sys/select.h>
7962 #endif
7963 int main() {
7964         fd_set fds;
7965
7966 #ifdef TRYBITS
7967         if(fds.fds_bits);
7968 #endif
7969
7970 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7971         exit(0);
7972 #else
7973         exit(1);
7974 #endif
7975 }
7976 EOCP
7977 set fd_set -DTRYBITS
7978 if eval $compile; then
7979         d_fds_bits="$define"
7980         d_fd_set="$define"
7981         echo "Well, your system knows about the normal fd_set typedef..." >&4
7982         if ./fd_set; then
7983                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7984                 d_fd_macros="$define"
7985         else
7986                 $cat >&4 <<'EOM'
7987 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7988 EOM
7989                 d_fd_macros="$undef"
7990         fi
7991 else
7992         $cat <<'EOM'
7993 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7994 EOM
7995         set fd_set
7996         if eval $compile; then
7997                 d_fds_bits="$undef"
7998                 d_fd_set="$define"
7999                 echo "Well, your system has some sort of fd_set available..." >&4
8000                 if ./fd_set; then
8001                         echo "and you have the normal fd_set macros." >&4
8002                         d_fd_macros="$define"
8003                 else
8004                         $cat <<'EOM'
8005 but not the normal fd_set macros!  Gross!  More work for me...
8006 EOM
8007                         d_fd_macros="$undef"
8008                 fi
8009         else
8010         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8011                 d_fd_set="$undef"
8012                 d_fds_bits="$undef"
8013                 d_fd_macros="$undef"
8014         fi
8015 fi
8016 $rm -f fd_set*
8017
8018 : see if fgetpos exists
8019 set fgetpos d_fgetpos
8020 eval $inlibc
8021
8022
8023 if $test X"$use64bits" = X"$define"; then
8024         : see if fgetpos64 exists
8025         set fgetpos64 d_fgetpos64
8026         eval $inlibc
8027
8028         : see if fopen64 exists
8029         set freopen64 d_fopen64
8030         eval $inlibc
8031
8032         : see if freopen64 exists
8033         set freopen64 d_freopen64
8034         eval $inlibc
8035
8036         : see if fseek64 exists
8037         set fseek64 d_fseek64
8038         eval $inlibc
8039
8040         : see if fseeko64 exists
8041         set fseeko64 d_fseeko64
8042         eval $inlibc
8043
8044         : see if fsetpos64 exists
8045         set fsetpos64 d_fsetpos64
8046         eval $inlibc
8047
8048         : see if ftell64 exists
8049         set ftell64 d_ftell64
8050         eval $inlibc
8051
8052         : see if ftello64 exists
8053         set ftello64 d_ftello64
8054         eval $inlibc
8055
8056         : see if tmpfile64 exists
8057         set tmpfile64 d_tmpfile64
8058         eval $inlibc
8059 else
8060         val="$undef"
8061         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8062         do
8063                 set $xxx
8064                 eval $setvar
8065         done
8066 fi
8067
8068 : see if flock exists
8069 set flock d_flock
8070 eval $inlibc
8071
8072 : see if fork exists
8073 set fork d_fork
8074 eval $inlibc
8075
8076 : see if pathconf exists
8077 set pathconf d_pathconf
8078 eval $inlibc
8079
8080 : see if fpathconf exists
8081 set fpathconf d_fpathconf
8082 eval $inlibc
8083
8084 : see if fseeko exists
8085 set fseeko d_fseeko
8086 eval $inlibc
8087
8088 : see if fsetpos exists
8089 set fsetpos d_fsetpos
8090 eval $inlibc
8091
8092 : see if this is a sys/param system
8093 set sys/param.h i_sysparam
8094 eval $inhdr
8095
8096 : see if this is a sys/mount.h system
8097 set sys/mount.h i_sysmount
8098 eval $inhdr
8099
8100
8101 : see if statfs exists
8102 set statfs d_statfs
8103 eval $inlibc
8104
8105 : see if fstatfs exists
8106 set fstatfs d_fstatfs
8107 eval $inlibc
8108
8109 : see if statfs knows about mount flags
8110 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8111 eval $hasfield
8112
8113
8114 : see if statvfs exists
8115 set statvfs d_statvfs
8116 eval $inlibc
8117
8118 : see if fstatvfs exists
8119 set fstatvfs d_fstatvfs
8120 eval $inlibc
8121
8122
8123 : see if ftello exists
8124 set ftello d_ftello
8125 eval $inlibc
8126
8127 : see if getgrent exists
8128 set getgrent d_getgrent
8129 eval $inlibc
8130
8131 : see if gethostbyaddr exists
8132 set gethostbyaddr d_gethbyaddr
8133 eval $inlibc
8134
8135 : see if gethostbyname exists
8136 set gethostbyname d_gethbyname
8137 eval $inlibc
8138
8139 : see if gethostent exists
8140 set gethostent d_gethent
8141 eval $inlibc
8142
8143 : see how we will look up host name
8144 echo " "
8145 call=''
8146 if set gethostname val -f d_gethname; eval $csym; $val; then
8147         echo 'gethostname() found.' >&4
8148         d_gethname="$define"
8149         call=gethostname
8150 fi
8151 if set uname val -f d_uname; eval $csym; $val; then
8152         if ./xenix; then
8153                 $cat <<'EOM'
8154 uname() was found, but you're running xenix, and older versions of xenix
8155 have a broken uname(). If you don't really know whether your xenix is old
8156 enough to have a broken system call, use the default answer.
8157
8158 EOM
8159                 dflt=y
8160                 case "$d_uname" in
8161                 "$define") dflt=n;;
8162                 esac
8163                 rp='Is your uname() broken?'
8164                 . ./myread
8165                 case "$ans" in
8166                 n*) d_uname="$define"; call=uname;;
8167                 esac
8168         else
8169                 echo 'uname() found.' >&4
8170                 d_uname="$define"
8171                 case "$call" in
8172                 '') call=uname ;;
8173                 esac
8174         fi
8175 fi
8176 case "$d_gethname" in
8177 '') d_gethname="$undef";;
8178 esac
8179 case "$d_uname" in
8180 '') d_uname="$undef";;
8181 esac
8182 case "$d_uname$d_gethname" in
8183 *define*)
8184         dflt=n
8185         cat <<EOM
8186  
8187 Every now and then someone has a $call() that lies about the hostname
8188 but can't be fixed for political or economic reasons.  If you wish, I can
8189 pretend $call() isn't there and maybe compute hostname at run-time
8190 thanks to the '$phostname' command.
8191
8192 EOM
8193         rp="Shall I ignore $call() from now on?"
8194         . ./myread
8195         case "$ans" in
8196         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8197         esac;;
8198 esac
8199 case "$phostname" in
8200 '') aphostname='';;
8201 *) case "$aphostname" in
8202         /*) ;;
8203         *) set X $phostname
8204                 shift
8205                 file=$1
8206                 shift
8207                 file=`./loc $file $file $pth`
8208                 aphostname=`echo $file $*`
8209                 ;;
8210         esac
8211         ;;
8212 esac
8213 case "$d_uname$d_gethname" in
8214 *define*) ;;
8215 *)
8216         case "$phostname" in
8217         '')
8218                 echo "There will be no way for $package to get your hostname." >&4;;
8219         *)
8220         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8221                 ;;
8222         esac;;
8223 esac
8224 case "$d_phostname" in
8225 '') d_phostname="$undef";;
8226 esac
8227
8228 : see if this is a netdb.h system
8229 set netdb.h i_netdb
8230 eval $inhdr
8231
8232 : see if prototypes for various gethostxxx netdb.h functions are available
8233 echo " "
8234 set d_gethostprotos gethostent $i_netdb netdb.h
8235 eval $hasproto
8236
8237 : see if getlogin exists
8238 set getlogin d_getlogin
8239 eval $inlibc
8240
8241 : see if getmntent exists
8242 set getmntent d_getmntent
8243 eval $inlibc
8244
8245 : see if getnetbyaddr exists
8246 set getnetbyaddr d_getnbyaddr
8247 eval $inlibc
8248
8249 : see if getnetbyname exists
8250 set getnetbyname d_getnbyname
8251 eval $inlibc
8252
8253 : see if getnetent exists
8254 set getnetent d_getnent
8255 eval $inlibc
8256
8257 : see if prototypes for various getnetxxx netdb.h functions are available
8258 echo " "
8259 set d_getnetprotos getnetent $i_netdb netdb.h
8260 eval $hasproto
8261
8262
8263 : see if getprotobyname exists
8264 set getprotobyname d_getpbyname
8265 eval $inlibc
8266
8267 : see if getprotobynumber exists
8268 set getprotobynumber d_getpbynumber
8269 eval $inlibc
8270
8271 : see if getprotoent exists
8272 set getprotoent d_getpent
8273 eval $inlibc
8274
8275 : see if getpgid exists
8276 set getpgid d_getpgid
8277 eval $inlibc
8278
8279 : see if getpgrp2 exists
8280 set getpgrp2 d_getpgrp2
8281 eval $inlibc
8282
8283 : see if getppid exists
8284 set getppid d_getppid
8285 eval $inlibc
8286
8287 : see if getpriority exists
8288 set getpriority d_getprior
8289 eval $inlibc
8290
8291 : see if prototypes for various getprotoxxx netdb.h functions are available
8292 echo " "
8293 set d_getprotoprotos getprotoent $i_netdb netdb.h
8294 eval $hasproto
8295
8296 : see if getpwent exists
8297 set getpwent d_getpwent
8298 eval $inlibc
8299
8300
8301 : see if getservbyname exists
8302 set getservbyname d_getsbyname
8303 eval $inlibc
8304
8305 : see if getservbyport exists
8306 set getservbyport d_getsbyport
8307 eval $inlibc
8308
8309 : see if getservent exists
8310 set getservent d_getsent
8311 eval $inlibc
8312
8313 : see if prototypes for various getservxxx netdb.h functions are available
8314 echo " "
8315 set d_getservprotos getservent $i_netdb netdb.h
8316 eval $hasproto
8317
8318 : see if getspent exists
8319 set getspent d_getspent
8320 eval $inlibc
8321
8322 : see if getspnam exists
8323 set getspnam d_getspnam
8324 eval $inlibc
8325
8326 : see if gettimeofday or ftime exists
8327 set gettimeofday d_gettimeod
8328 eval $inlibc
8329 case "$d_gettimeod" in
8330 "$undef")
8331         set ftime d_ftime 
8332         eval $inlibc
8333         ;;
8334 *)
8335         val="$undef"; set d_ftime; eval $setvar
8336         ;;
8337 esac
8338 case "$d_gettimeod$d_ftime" in
8339 "$undef$undef")
8340         echo " "
8341         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8342         ;;
8343 esac
8344
8345 : see if this is an grp system
8346 set grp.h i_grp
8347 eval $inhdr
8348
8349 case "$i_grp" in
8350 $define)
8351         xxx=`./findhdr grp.h`
8352         $cppstdin $cppflags $cppminus < $xxx >$$.h
8353
8354         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8355                 val="$define"
8356         else
8357                 val="$undef"
8358         fi
8359         set d_grpasswd
8360         eval $setvar
8361
8362         $rm -f $$.h
8363         ;;
8364 *)
8365         val="$undef";
8366         set d_grpasswd; eval $setvar
8367         ;;
8368 esac
8369
8370 : see if hasmntopt exists
8371 set hasmntopt d_hasmntopt
8372 eval $inlibc
8373
8374 : see if this is a netinet/in.h or sys/in.h system
8375 set netinet/in.h i_niin sys/in.h i_sysin
8376 eval $inhdr
8377
8378 : see if arpa/inet.h has to be included
8379 set arpa/inet.h i_arpainet
8380 eval $inhdr
8381
8382 : see if htonl --and friends-- exists
8383 val=''
8384 set htonl val
8385 eval $inlibc
8386
8387 : Maybe they are macros.
8388 case "$val" in
8389 $undef)
8390         $cat >htonl.c <<EOM
8391 #include <stdio.h>
8392 #include <sys/types.h>
8393 #$i_niin I_NETINET_IN
8394 #$i_sysin I_SYS_IN
8395 #$i_arpainet I_ARPA_INET
8396 #ifdef I_NETINET_IN
8397 #include <netinet/in.h>
8398 #endif
8399 #ifdef I_SYS_IN
8400 #include <sys/in.h>
8401 #endif
8402 #ifdef I_ARPA_INET
8403 #include <arpa/inet.h>
8404 #endif
8405 #ifdef htonl
8406 printf("Defined as a macro.");
8407 #endif
8408 EOM
8409         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8410         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8411                 val="$define"
8412                 echo "But it seems to be defined as a macro." >&4
8413         fi
8414         $rm -f htonl.?
8415         ;;
8416 esac
8417 set d_htonl
8418 eval $setvar
8419
8420 : see which of string.h or strings.h is needed
8421 echo " "
8422 strings=`./findhdr string.h`
8423 if $test "$strings" && $test -r "$strings"; then
8424         echo "Using <string.h> instead of <strings.h>." >&4
8425         val="$define"
8426 else
8427         val="$undef"
8428         strings=`./findhdr strings.h`
8429         if $test "$strings" && $test -r "$strings"; then
8430                 echo "Using <strings.h> instead of <string.h>." >&4
8431         else
8432                 echo "No string header found -- You'll surely have problems." >&4
8433         fi
8434 fi
8435 set i_string
8436 eval $setvar
8437 case "$i_string" in
8438 "$undef") strings=`./findhdr strings.h`;;
8439 *)        strings=`./findhdr string.h`;;
8440 esac
8441
8442 : index or strchr
8443 echo " "
8444 if set index val -f; eval $csym; $val; then
8445         if set strchr val -f d_strchr; eval $csym; $val; then
8446                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8447                         val="$define"
8448                         vali="$undef"
8449                         echo "strchr() found." >&4
8450                 else
8451                         val="$undef"
8452                         vali="$define"
8453                         echo "index() found." >&4
8454                 fi
8455         else
8456                 val="$undef"
8457                 vali="$define"
8458                 echo "index() found." >&4
8459         fi
8460 else
8461         if set strchr val -f d_strchr; eval $csym; $val; then
8462                 val="$define"
8463                 vali="$undef"
8464                 echo "strchr() found." >&4
8465         else
8466                 echo "No index() or strchr() found!" >&4
8467                 val="$undef"
8468                 vali="$undef"
8469         fi
8470 fi
8471 set d_strchr; eval $setvar
8472 val="$vali"
8473 set d_index; eval $setvar
8474
8475 : check whether inet_aton exists
8476 set inet_aton d_inetaton
8477 eval $inlibc
8478
8479 : see if inttypes.h is available
8480 : we want a real compile instead of Inhdr because some systems
8481 : have an inttypes.h which includes non-existent headers
8482 echo " "
8483 $cat >try.c <<EOCP
8484 #include <inttypes.h>
8485 int main() {
8486         static int32_t foo32 = 0x12345678;
8487 }
8488 EOCP
8489 set try
8490 if eval $compile; then
8491         echo "<inttypes.h> found." >&4
8492         val="$define"
8493 else
8494         echo "<inttypes.h> NOT found." >&4
8495         val="$undef"
8496 fi
8497 $rm -f try.c try
8498 set i_inttypes
8499 eval $setvar
8500
8501 : check for int64_t
8502 case "$use64bits" in
8503 "$define" )
8504         echo " "
8505         echo $n "Checking to see if your system supports int64_t...$c" >&4
8506         $cat >try.c <<EOCP
8507 #include <sys/types.h>
8508 #$i_inttypes I_INTTYPES
8509 #ifdef I_INTTYPES
8510 #include <inttypes.h>
8511 #endif
8512 int64_t foo() { int64_t x; x = 7; return x; }
8513 EOCP
8514         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8515                 val="$define"
8516                 echo " Yup, it does." >&4
8517         else
8518                 val="$undef"
8519                 echo " Nope, it doesn't." >&4
8520         fi
8521         $rm -f try.*
8522         ;;
8523 *)      val="$undef"
8524         ;;
8525 esac
8526 set d_int64t
8527 eval $setvar
8528
8529
8530 : Look for isascii
8531 echo " "
8532 $cat >isascii.c <<'EOCP'
8533 #include <stdio.h>
8534 #include <ctype.h>
8535 int main() {
8536         int c = 'A';
8537         if (isascii(c))
8538                 exit(0);
8539         else
8540                 exit(1);
8541 }
8542 EOCP
8543 set isascii
8544 if eval $compile; then
8545         echo "isascii() found." >&4
8546         val="$define"
8547 else
8548         echo "isascii() NOT found." >&4
8549         val="$undef"
8550 fi
8551 set d_isascii
8552 eval $setvar
8553 $rm -f isascii*
8554
8555 : see if killpg exists
8556 set killpg d_killpg
8557 eval $inlibc
8558
8559 : see if lchown exists
8560 echo " "
8561 $cat > try.c <<'EOCP'
8562 /* System header to define __stub macros and hopefully few prototypes,
8563     which can conflict with char lchown(); below.  */
8564 #include <assert.h>
8565 /* Override any gcc2 internal prototype to avoid an error.  */
8566 /* We use char because int might match the return type of a gcc2
8567    builtin and then its argument prototype would still apply.  */
8568 char lchown();
8569 int main() {
8570     /*  The GNU C library defines this for functions which it implements
8571         to always fail with ENOSYS.  Some functions are actually named
8572         something starting with __ and the normal name is an alias.  */
8573 #if defined (__stub_lchown) || defined (__stub___lchown)
8574 choke me
8575 #else
8576 lchown();
8577 #endif
8578 ; return 0; }
8579 EOCP
8580 set try
8581 if eval $compile; then
8582     $echo "lchown() found." >&4
8583     val="$define"
8584 else
8585     $echo "lchown() NOT found." >&4
8586     val="$undef"
8587 fi
8588 set d_lchown
8589 eval $setvar
8590
8591 : see if link exists
8592 set link d_link
8593 eval $inlibc
8594
8595 : see if localeconv exists
8596 set localeconv d_locconv
8597 eval $inlibc
8598
8599 : see if lockf exists
8600 set lockf d_lockf
8601 eval $inlibc
8602
8603 : check for length of double
8604 echo " "
8605 case "$doublesize" in
8606 '')
8607         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8608         $cat >try.c <<'EOCP'
8609 #include <stdio.h>
8610 int main()
8611 {
8612         printf("%d\n", sizeof(double));
8613 }
8614 EOCP
8615         set try
8616         if eval $compile_ok; then
8617                 doublesize=`./try`
8618                 $echo " $doublesize bytes." >&4
8619         else
8620                 dflt='8'
8621                 echo "(I can't seem to compile the test program.  Guessing...)"
8622                 rp="What is the size of a double precision number (in bytes)?"
8623                 . ./myread
8624                 doublesize="$ans"
8625         fi
8626         ;;
8627 esac
8628 $rm -f try.c try
8629
8630 : check for long doubles
8631 echo " "
8632 echo $n "Checking to see if your system supports long doubles...$c" >&4
8633 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8634 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8635         val="$define"
8636         echo " Yup, it does." >&4
8637 else
8638         val="$undef"
8639         echo " Nope, it doesn't." >&4
8640 fi
8641 $rm try.*
8642 set d_longdbl
8643 eval $setvar
8644
8645 : check for length of long double
8646 case "${d_longdbl}${longdblsize}" in
8647 $define)
8648         echo " "
8649         $echo $n "Checking to see how big your long doubles are...$c" >&4
8650         $cat >try.c <<'EOCP'
8651 #include <stdio.h>
8652 int main()
8653 {
8654         printf("%d\n", sizeof(long double));
8655 }
8656 EOCP
8657         set try
8658         if eval $compile; then
8659                 longdblsize=`./try`
8660                 $echo " $longdblsize bytes." >&4
8661         else
8662                 dflt='8'
8663                 echo " "
8664                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8665                 rp="What is the size of a long double (in bytes)?"
8666                 . ./myread
8667                 longdblsize="$ans"
8668         fi
8669         if $test "X$doublesize" = "X$longdblsize"; then
8670                 echo "(That isn't any different from an ordinary double.)"
8671         fi      
8672         ;;
8673 esac
8674 $rm -f try.c try
8675
8676 : check for long long
8677 echo " "
8678 echo $n "Checking to see if your system supports long long...$c" >&4
8679 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8680 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8681         val="$define"
8682         echo " Yup, it does." >&4
8683 else
8684         val="$undef"
8685         echo " Nope, it doesn't." >&4
8686 fi
8687 $rm try.*
8688 set d_longlong
8689 eval $setvar
8690
8691 : check for length of long long
8692 case "${d_longlong}${longlongsize}" in
8693 $define)
8694         echo " "
8695         $echo $n "Checking to see how big your long longs are...$c" >&4
8696         $cat >try.c <<'EOCP'
8697 #include <stdio.h>
8698 int main()
8699 {
8700         printf("%d\n", sizeof(long long));
8701 }
8702 EOCP
8703         set try
8704         if eval $compile_ok; then
8705                 longlongsize=`./try`
8706                 $echo " $longlongsize bytes." >&4
8707         else
8708                 dflt='8'
8709                 echo " "
8710                 echo "(I can't seem to compile the test program.  Guessing...)"
8711                 rp="What is the size of a long long (in bytes)?"
8712                 . ./myread
8713                 longlongsize="$ans"
8714         fi
8715         if $test "X$longsize" = "X$longlongsize"; then
8716                 echo "(That isn't any different from an ordinary long.)"
8717         fi      
8718         ;;
8719 esac
8720 $rm -f try.c try
8721
8722 : see if lstat exists
8723 set lstat d_lstat
8724 eval $inlibc
8725
8726 : see if madvise exists
8727 set madvise d_madvise
8728 eval $inlibc
8729
8730 : see if mblen exists
8731 set mblen d_mblen
8732 eval $inlibc
8733
8734 : see if mbstowcs exists
8735 set mbstowcs d_mbstowcs
8736 eval $inlibc
8737
8738 : see if mbtowc exists
8739 set mbtowc d_mbtowc
8740 eval $inlibc
8741
8742 : see if memchr exists
8743 set memchr d_memchr
8744 eval $inlibc
8745
8746 : see if memcmp exists
8747 set memcmp d_memcmp
8748 eval $inlibc
8749
8750 : see if memcpy exists
8751 set memcpy d_memcpy
8752 eval $inlibc
8753
8754 : see if memmove exists
8755 set memmove d_memmove
8756 eval $inlibc
8757
8758 : see if memset exists
8759 set memset d_memset
8760 eval $inlibc
8761
8762 : see if mkdir exists
8763 set mkdir d_mkdir
8764 eval $inlibc
8765
8766 : see if mkfifo exists
8767 set mkfifo d_mkfifo
8768 eval $inlibc
8769
8770 : see if mktime exists
8771 set mktime d_mktime
8772 eval $inlibc
8773
8774 : see if this is a sys/mman.h system
8775 set sys/mman.h i_sysmman
8776 eval $inhdr
8777
8778 : see if mmap exists
8779 set mmap d_mmap
8780 eval $inlibc
8781 : see what shmat returns
8782 : default to something harmless
8783 mmaptype='void *'
8784 case "$i_sysmman$d_mmap" in
8785 "$define$define")
8786         $cat >mmap.c <<'END'
8787 #include <sys/mman.h>
8788 void *mmap();
8789 END
8790         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8791                 mmaptype='void *'
8792         else
8793                 mmaptype='caddr_t'
8794         fi
8795         echo "and it returns ($mmaptype)." >&4
8796         ;;
8797 esac
8798
8799
8800
8801 : see if mprotect exists
8802 set mprotect d_mprotect
8803 eval $inlibc
8804
8805 : see if msgctl exists
8806 set msgctl d_msgctl
8807 eval $inlibc
8808
8809 : see if msgget exists
8810 set msgget d_msgget
8811 eval $inlibc
8812
8813 : see if msgsnd exists
8814 set msgsnd d_msgsnd
8815 eval $inlibc
8816
8817 : see if msgrcv exists
8818 set msgrcv d_msgrcv
8819 eval $inlibc
8820
8821 : see how much of the 'msg*(2)' library is present.
8822 h_msg=true
8823 echo " "
8824 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8825 *"$undef"*) h_msg=false;;
8826 esac
8827 case "$osname" in
8828 freebsd)
8829     case "`ipcs 2>&1`" in
8830     "SVID messages"*"not configured"*)
8831         echo "Your $osname does not have the msg*(2) configured." >&4
8832         h_msg=false
8833         val="$undef"
8834         set msgctl d_msgctl
8835         eval $setvar
8836         set msgget d_msgget
8837         eval $setvar
8838         set msgsnd d_msgsnd
8839         eval $setvar
8840         set msgrcv d_msgrcv
8841         eval $setvar
8842         ;;
8843     esac
8844     ;;
8845 esac
8846 : we could also check for sys/ipc.h ...
8847 if $h_msg && $test `./findhdr sys/msg.h`; then
8848         echo "You have the full msg*(2) library." >&4
8849         val="$define"
8850 else
8851         echo "You don't have the full msg*(2) library." >&4
8852         val="$undef"
8853 fi
8854 set d_msg
8855 eval $setvar
8856
8857 : see if msync exists
8858 set msync d_msync
8859 eval $inlibc
8860
8861 : see if munmap exists
8862 set munmap d_munmap
8863 eval $inlibc
8864
8865 : see if nice exists
8866 set nice d_nice
8867 eval $inlibc
8868
8869 : see if POSIX threads are available
8870 if test "X$usethreads" = "X$define"; then
8871         set pthread.h i_pthread
8872         eval $inhdr
8873 else
8874         i_pthread="$undef"
8875 fi
8876
8877
8878
8879 : how to create joinable pthreads
8880 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8881         echo " "
8882         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8883         $cat >try.c <<'EOCP'
8884 #include <pthread.h>
8885 int main() {
8886     int detachstate = JOINABLE;
8887 }
8888 EOCP
8889         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8890         if eval $compile; then
8891                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8892                 val="$undef" # Yes, undef.
8893                 set d_old_pthread_create_joinable
8894                 eval $setvar
8895                 val=""
8896                 set old_pthread_create_joinable
8897                 eval $setvar
8898         else
8899                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8900                 if eval $compile; then
8901                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8902                         val="$define"
8903                         set d_old_pthread_create_joinable
8904                         eval $setvar
8905                         val=PTHREAD_CREATE_UNDETACHED
8906                         set old_pthread_create_joinable
8907                         eval $setvar
8908                 else            
8909                         set try -DJOINABLE=__UNDETACHED
8910                         if eval $compile; then
8911                                 echo "You seem to use __UNDETACHED." >&4
8912                                 val="$define"
8913                                 set d_old_pthread_create_joinable
8914                                 eval $setvar
8915                                 val=__UNDETACHED
8916                                 set old_pthread_create_joinable
8917                                 eval $setvar
8918                         else
8919                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8920                                 val="$define"
8921                                 set d_old_pthread_create_joinable
8922                                 eval $setvar
8923                                 val=0
8924                                 set old_pthread_create_joinable
8925                                 eval $setvar
8926                         fi
8927                 fi
8928         fi
8929         $rm -f try try.*
8930 else
8931     d_old_pthread_create_joinable="$undef"
8932     old_pthread_create_joinable=""
8933 fi
8934
8935 : see if pause exists
8936 set pause d_pause
8937 eval $inlibc
8938
8939 : see if pipe exists
8940 set pipe d_pipe
8941 eval $inlibc
8942
8943 : see if poll exists
8944 set poll d_poll
8945 eval $inlibc
8946
8947
8948 : see whether the various POSIXish _yields exist
8949 $cat >try.c <<EOP
8950 #include <pthread.h>
8951 #include <stdio.h>
8952 int main() {
8953 #ifdef SCHED_YIELD
8954         sched_yield();
8955 #else
8956 #ifdef PTHREAD_YIELD
8957         pthread_yield();
8958 #else
8959 #ifdef PTHREAD_YIELD_NULL
8960         pthread_yield(NULL);
8961 #endif
8962 #endif
8963 #endif
8964 }
8965 EOP
8966 : see if sched_yield exists
8967 set try -DSCHED_YIELD
8968 if eval $compile; then
8969     val="$define"
8970     sched_yield='sched_yield()'
8971 else
8972     val="$undef"
8973 fi
8974 case "$usethreads" in
8975 $define)
8976         case "$val" in
8977         $define) echo 'sched_yield() found.' >&4        ;;
8978         *)       echo 'sched_yield() NOT found.' >&4    ;;
8979         esac
8980 esac
8981 set d_sched_yield
8982 eval $setvar
8983
8984 : see if pthread_yield exists
8985 set try -DPTHREAD_YIELD
8986 if eval $compile; then
8987     val="$define"
8988     case "$sched_yield" in
8989     '') sched_yield='pthread_yield()' ;;
8990     esac
8991 else
8992     set try -DPTHREAD_YIELD_NULL
8993     if eval $compile; then
8994         val="$define"
8995         case "$sched_yield" in
8996         '') sched_yield='pthread_yield(NULL)' ;;
8997         esac
8998     else
8999         val="$undef"
9000     fi
9001 fi
9002 case "$usethreads" in
9003 $define)
9004         case "$val" in
9005         $define) echo 'pthread_yield() found.' >&4      ;;
9006         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9007         esac
9008         ;;
9009 esac
9010 set d_pthread_yield
9011 eval $setvar
9012
9013 case "$sched_yield" in
9014 '') sched_yield=undef ;;
9015 esac
9016
9017 $rm -f try try.*
9018
9019 : see if this is a pwd.h system
9020 set pwd.h i_pwd
9021 eval $inhdr
9022
9023 case "$i_pwd" in
9024 $define)
9025         xxx=`./findhdr pwd.h`
9026         $cppstdin $cppflags $cppminus < $xxx >$$.h
9027
9028         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9029                 val="$define"
9030         else
9031                 val="$undef"
9032         fi
9033         set d_pwquota
9034         eval $setvar
9035
9036         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9037                 val="$define"
9038         else
9039                 val="$undef"
9040         fi
9041         set d_pwage
9042         eval $setvar
9043
9044         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9045                 val="$define"
9046         else
9047                 val="$undef"
9048         fi
9049         set d_pwchange
9050         eval $setvar
9051
9052         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9053                 val="$define"
9054         else
9055                 val="$undef"
9056         fi
9057         set d_pwclass
9058         eval $setvar
9059
9060         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9061                 val="$define"
9062         else
9063                 val="$undef"
9064         fi
9065         set d_pwexpire
9066         eval $setvar
9067
9068         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9069                 val="$define"
9070         else
9071                 val="$undef"
9072         fi
9073         set d_pwcomment
9074         eval $setvar
9075
9076         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9077                 val="$define"
9078         else
9079                 val="$undef"
9080         fi
9081         set d_pwgecos
9082         eval $setvar
9083
9084         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9085                 val="$define"
9086         else
9087                 val="$undef"
9088         fi
9089         set d_pwpasswd
9090         eval $setvar
9091
9092         $rm -f $$.h
9093         ;;
9094 *)
9095         val="$undef"; 
9096         set d_pwquota; eval $setvar
9097         set d_pwage; eval $setvar
9098         set d_pwchange; eval $setvar
9099         set d_pwclass; eval $setvar
9100         set d_pwexpire; eval $setvar
9101         set d_pwcomment; eval $setvar
9102         set d_pwgecos; eval $setvar
9103         set d_pwpasswd; eval $setvar
9104         ;;
9105 esac
9106
9107 : see if readdir and friends exist
9108 set readdir d_readdir
9109 eval $inlibc
9110 set seekdir d_seekdir
9111 eval $inlibc
9112 set telldir d_telldir
9113 eval $inlibc
9114 set rewinddir d_rewinddir
9115 eval $inlibc
9116
9117 : see if readlink exists
9118 set readlink d_readlink
9119 eval $inlibc
9120
9121 : see if readv exists
9122 set readv d_readv
9123 eval $inlibc
9124
9125 : see if rename exists
9126 set rename d_rename
9127 eval $inlibc
9128
9129 : see if rmdir exists
9130 set rmdir d_rmdir
9131 eval $inlibc
9132
9133 : see if memory.h is available.
9134 val=''
9135 set memory.h val
9136 eval $inhdr
9137
9138 : See if it conflicts with string.h
9139 case "$val" in
9140 $define)
9141         case "$strings" in
9142         '') ;;
9143         *)
9144                 $cppstdin $cppflags $cppminus < $strings > mem.h
9145                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9146                         echo " "
9147                         echo "We won't be including <memory.h>."
9148                         val="$undef"
9149                 fi
9150                 $rm -f mem.h
9151                 ;;
9152         esac
9153 esac
9154 set i_memory
9155 eval $setvar
9156
9157 : can bcopy handle overlapping blocks?
9158 val="$undef"
9159 case "$d_bcopy" in
9160 "$define")
9161         echo " "
9162         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9163         $cat >try.c <<EOCP
9164 #$i_memory I_MEMORY
9165 #$i_stdlib I_STDLIB
9166 #$i_string I_STRING
9167 #$i_unistd I_UNISTD
9168 EOCP
9169         $cat >>try.c <<'EOCP'
9170 #include <stdio.h>
9171 #ifdef I_MEMORY
9172 #  include <memory.h>
9173 #endif
9174 #ifdef I_STDLIB
9175 #  include <stdlib.h>
9176 #endif
9177 #ifdef I_STRING
9178 #  include <string.h>
9179 #else
9180 #  include <strings.h>
9181 #endif
9182 #ifdef I_UNISTD
9183 #  include <unistd.h>  /* Needed for NetBSD */
9184 #endif
9185 int main()
9186 {
9187 char buf[128], abc[128];
9188 char *b;
9189 int len;
9190 int off;
9191 int align;
9192
9193 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9194
9195 for (align = 7; align >= 0; align--) {
9196         for (len = 36; len; len--) {
9197                 b = buf+align;
9198                 bcopy(abc, b, len);
9199                 for (off = 1; off <= len; off++) {
9200                         bcopy(b, b+off, len);
9201                         bcopy(b+off, b, len);
9202                         if (bcmp(b, abc, len))
9203                                 exit(1);
9204                 }
9205         }
9206 }
9207 exit(0);
9208 }
9209 EOCP
9210         set try
9211         if eval $compile_ok; then
9212                 if ./try 2>/dev/null; then
9213                         echo "Yes, it can."
9214                         val="$define"
9215                 else
9216                         echo "It can't, sorry."
9217                         case "$d_memmove" in
9218                         "$define") echo "But that's Ok since you have memmove()." ;;
9219                         esac
9220                 fi
9221         else
9222                 echo "(I can't compile the test program, so we'll assume not...)"
9223                 case "$d_memmove" in
9224                 "$define") echo "But that's Ok since you have memmove()." ;;
9225                 esac
9226         fi
9227         ;;
9228 esac
9229 $rm -f try.* try core
9230 set d_safebcpy
9231 eval $setvar
9232
9233 : can memcpy handle overlapping blocks?
9234 val="$undef"
9235 case "$d_memcpy" in
9236 "$define")
9237         echo " "
9238         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9239         $cat >try.c <<EOCP
9240 #$i_memory I_MEMORY
9241 #$i_stdlib I_STDLIB
9242 #$i_string I_STRING
9243 #$i_unistd I_UNISTD
9244 EOCP
9245         $cat >>try.c <<'EOCP'
9246 #include <stdio.h>
9247 #ifdef I_MEMORY
9248 #  include <memory.h>
9249 #endif
9250 #ifdef I_STDLIB
9251 #  include <stdlib.h>
9252 #endif
9253 #ifdef I_STRING
9254 #  include <string.h>
9255 #else
9256 #  include <strings.h>
9257 #endif
9258 #ifdef I_UNISTD
9259 #  include <unistd.h>  /* Needed for NetBSD */
9260 #endif
9261 int main()
9262 {
9263 char buf[128], abc[128];
9264 char *b;
9265 int len;
9266 int off;
9267 int align;
9268
9269 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9270    try to store the string in read-only memory. */
9271 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9272
9273 for (align = 7; align >= 0; align--) {
9274         for (len = 36; len; len--) {
9275                 b = buf+align;
9276                 memcpy(b, abc, len);
9277                 for (off = 1; off <= len; off++) {
9278                         memcpy(b+off, b, len);
9279                         memcpy(b, b+off, len);
9280                         if (memcmp(b, abc, len))
9281                                 exit(1);
9282                 }
9283         }
9284 }
9285 exit(0);
9286 }
9287 EOCP
9288         set try
9289         if eval $compile_ok; then
9290                 if ./try 2>/dev/null; then
9291                         echo "Yes, it can."
9292                         val="$define"
9293                 else
9294                         echo "It can't, sorry."
9295                         case "$d_memmove" in
9296                         "$define") echo "But that's Ok since you have memmove()." ;;
9297                         esac
9298                 fi
9299         else
9300                 echo "(I can't compile the test program, so we'll assume not...)"
9301                 case "$d_memmove" in
9302                 "$define") echo "But that's Ok since you have memmove()." ;;
9303                 esac
9304         fi
9305         ;;
9306 esac
9307 $rm -f try.* try core
9308 set d_safemcpy
9309 eval $setvar
9310
9311 : can memcmp be trusted to compare relative magnitude?
9312 val="$undef"
9313 case "$d_memcmp" in
9314 "$define")
9315         echo " "
9316         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9317         $cat >try.c <<EOCP
9318 #$i_memory I_MEMORY
9319 #$i_stdlib I_STDLIB
9320 #$i_string I_STRING
9321 #$i_unistd I_UNISTD
9322 EOCP
9323         $cat >>try.c <<'EOCP'
9324 #include <stdio.h>
9325 #ifdef I_MEMORY
9326 #  include <memory.h>
9327 #endif
9328 #ifdef I_STDLIB
9329 #  include <stdlib.h>
9330 #endif
9331 #ifdef I_STRING
9332 #  include <string.h>
9333 #else
9334 #  include <strings.h>
9335 #endif
9336 #ifdef I_UNISTD
9337 #  include <unistd.h>  /* Needed for NetBSD */
9338 #endif
9339 int main()
9340 {
9341 char a = -1;
9342 char b = 0;
9343 if ((a < b) && memcmp(&a, &b, 1) < 0)
9344         exit(1);
9345 exit(0);
9346 }
9347 EOCP
9348         set try
9349         if eval $compile_ok; then
9350                 if ./try 2>/dev/null; then
9351                         echo "Yes, it can."
9352                         val="$define"
9353                 else
9354                         echo "No, it can't (it uses signed chars)."
9355                 fi
9356         else
9357                 echo "(I can't compile the test program, so we'll assume not...)"
9358         fi
9359         ;;
9360 esac
9361 $rm -f try.* try core
9362 set d_sanemcmp
9363 eval $setvar
9364
9365 : see if select exists
9366 set select d_select
9367 eval $inlibc
9368
9369 : see if semctl exists
9370 set semctl d_semctl
9371 eval $inlibc
9372
9373 : see if semget exists
9374 set semget d_semget
9375 eval $inlibc
9376
9377 : see if semop exists
9378 set semop d_semop
9379 eval $inlibc
9380
9381 : see how much of the 'sem*(2)' library is present.
9382 h_sem=true
9383 echo " "
9384 case "$d_semctl$d_semget$d_semop" in
9385 *"$undef"*) h_sem=false;;
9386 esac
9387 case "$osname" in
9388 freebsd)
9389     case "`ipcs 2>&1`" in
9390     "SVID messages"*"not configured"*)
9391         echo "Your $osname does not have the sem*(2) configured." >&4
9392         h_sem=false
9393         val="$undef"
9394         set semctl d_semctl
9395         eval $setvar
9396         set semget d_semget
9397         eval $setvar
9398         set semop d_semop
9399         eval $setvar
9400         ;;
9401     esac
9402     ;;
9403 esac
9404 : we could also check for sys/ipc.h ...
9405 if $h_sem && $test `./findhdr sys/sem.h`; then
9406         echo "You have the full sem*(2) library." >&4
9407         val="$define"
9408 else
9409         echo "You don't have the full sem*(2) library." >&4
9410         val="$undef"
9411 fi
9412 set d_sem
9413 eval $setvar
9414
9415 : see whether sys/sem.h defines union semun
9416 echo " "
9417 $cat > try.c <<'END'
9418 #include <sys/types.h>
9419 #include <sys/ipc.h>
9420 #include <sys/sem.h>
9421 int main () { union semun semun; semun.buf = 0; }
9422 END
9423 set try
9424 if eval $compile; then
9425     echo "You have union semun in <sys/sem.h>." >&4
9426     val="$define"
9427 else
9428     echo "You do not have union semun in <sys/sem.h>." >&4
9429     val="$undef"
9430 fi
9431 $rm -f try try.c try.h
9432 set d_union_semun
9433 eval $setvar
9434
9435 : see how to do semctl IPC_STAT
9436 case "$d_sem" in
9437 $define)
9438     : see whether semctl IPC_STAT can use union semun
9439     echo " "
9440     $cat > try.h <<END
9441 #ifndef S_IRUSR
9442 #   ifdef S_IREAD
9443 #       define S_IRUSR S_IREAD
9444 #       define S_IWUSR S_IWRITE
9445 #       define S_IXUSR S_IEXEC
9446 #   else
9447 #       define S_IRUSR 0400
9448 #       define S_IWUSR 0200
9449 #       define S_IXUSR 0100
9450 #   endif
9451 #   define S_IRGRP (S_IRUSR>>3)
9452 #   define S_IWGRP (S_IWUSR>>3)
9453 #   define S_IXGRP (S_IXUSR>>3)
9454 #   define S_IROTH (S_IRUSR>>6)
9455 #   define S_IWOTH (S_IWUSR>>6)
9456 #   define S_IXOTH (S_IXUSR>>6)
9457 #endif
9458 #ifndef S_IRWXU
9459 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9460 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9461 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9462 #endif
9463 END
9464
9465     $cat > try.c <<END
9466 #include <sys/types.h>
9467 #include <sys/ipc.h>
9468 #include <sys/sem.h>
9469 #include <sys/stat.h>
9470 #include <stdio.h>
9471 #include <errno.h>
9472 #include "try.h"
9473 #ifndef errno
9474 extern int errno;
9475 #endif
9476 #$d_union_semun HAS_UNION_SEMUN
9477 int main() {
9478     union semun
9479 #ifndef HAS_UNION_SEMUN
9480     {
9481         int val;
9482         struct semid_ds *buf;
9483         unsigned short *array;
9484     }
9485 #endif
9486     arg;
9487     int sem, st;
9488
9489 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9490     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9491     if (sem > -1) {
9492         struct semid_ds argbuf;
9493         arg.buf = &argbuf;
9494 #       ifdef IPC_STAT
9495         st = semctl(sem, 0, IPC_STAT, arg);
9496         if (st == 0)
9497             printf("semun\n");
9498         else
9499 #       endif /* IPC_STAT */
9500             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9501 #       ifdef IPC_RMID
9502         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9503 #       endif /* IPC_RMID */
9504             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9505     } else
9506 #endif /* IPC_PRIVATE && ... */
9507         printf("semget failed: errno = %d\n", errno);
9508   return 0;
9509 }
9510 END
9511     val="$undef"
9512     set try
9513     if eval $compile; then
9514         xxx=`./try`
9515         case "$xxx" in
9516         semun) val="$define" ;;
9517         esac
9518     fi
9519     $rm -f try try.c
9520     set d_semctl_semun
9521     eval $setvar
9522     case "$d_semctl_semun" in
9523     $define)
9524         echo "You can use union semun for semctl IPC_STAT." >&4
9525         also='also'
9526         ;;
9527     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9528         also=''
9529         ;;
9530     esac
9531
9532     : see whether semctl IPC_STAT can use struct semid_ds pointer
9533     $cat > try.c <<'END'
9534 #include <sys/types.h>
9535 #include <sys/ipc.h>
9536 #include <sys/sem.h>
9537 #include <sys/stat.h>
9538 #include "try.h"
9539 #include <stdio.h>
9540 #include <errno.h>
9541 #ifndef errno
9542 extern int errno;
9543 #endif
9544 int main() {
9545     struct semid_ds arg;
9546     int sem, st;
9547
9548 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9549     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9550     if (sem > -1) {
9551 #       ifdef IPC_STAT
9552         st = semctl(sem, 0, IPC_STAT, &arg);
9553         if (st == 0)
9554             printf("semid_ds\n");
9555         else
9556 #       endif /* IPC_STAT */
9557             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9558 #       ifdef IPC_RMID
9559         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9560 #       endif /* IPC_RMID */
9561             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9562     } else
9563 #endif /* IPC_PRIVATE && ... */
9564         printf("semget failed: errno = %d\n", errno);
9565
9566     return 0;
9567 }
9568 END
9569     val="$undef"
9570     set try
9571     if eval $compile; then
9572         xxx=`./try`
9573         case "$xxx" in
9574         semid_ds) val="$define" ;;
9575         esac
9576     fi
9577     $rm -f try try.c
9578     set d_semctl_semid_ds
9579     eval $setvar
9580     case "$d_semctl_semid_ds" in
9581     $define)
9582         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9583         ;;
9584     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9585         ;;
9586     esac
9587     $rm -f try.h
9588     ;;
9589 *)  val="$undef"
9590
9591     # We do not have the full sem*(2) library, so assume we can not
9592     # use either.
9593
9594     set d_semctl_semun
9595     eval $setvar
9596
9597     set d_semctl_semid_ds
9598     eval $setvar
9599     ;;
9600 esac
9601
9602 : see if setegid exists
9603 set setegid d_setegid
9604 eval $inlibc
9605
9606 : see if seteuid exists
9607 set seteuid d_seteuid
9608 eval $inlibc
9609
9610 : see if setgrent exists
9611 set setgrent d_setgrent
9612 eval $inlibc
9613
9614 : see if sethostent exists
9615 set sethostent d_sethent
9616 eval $inlibc
9617
9618 : see if setlinebuf exists
9619 set setlinebuf d_setlinebuf
9620 eval $inlibc
9621
9622 : see if setlocale exists
9623 set setlocale d_setlocale
9624 eval $inlibc
9625
9626 : see if setnetent exists
9627 set setnetent d_setnent
9628 eval $inlibc
9629
9630 : see if setprotoent exists
9631 set setprotoent d_setpent
9632 eval $inlibc
9633
9634 : see if setpgid exists
9635 set setpgid d_setpgid
9636 eval $inlibc
9637
9638 : see if setpgrp2 exists
9639 set setpgrp2 d_setpgrp2
9640 eval $inlibc
9641
9642 : see if setpriority exists
9643 set setpriority d_setprior
9644 eval $inlibc
9645
9646 : see if setpwent exists
9647 set setpwent d_setpwent
9648 eval $inlibc
9649
9650 : see if setregid exists
9651 set setregid d_setregid
9652 eval $inlibc
9653 set setresgid d_setresgid
9654 eval $inlibc
9655
9656 : see if setreuid exists
9657 set setreuid d_setreuid
9658 eval $inlibc
9659 set setresuid d_setresuid
9660 eval $inlibc
9661
9662 : see if setrgid exists
9663 set setrgid d_setrgid
9664 eval $inlibc
9665
9666 : see if setruid exists
9667 set setruid d_setruid
9668 eval $inlibc
9669
9670 : see if setservent exists
9671 set setservent d_setsent
9672 eval $inlibc
9673
9674 : see if setsid exists
9675 set setsid d_setsid
9676 eval $inlibc
9677
9678 : see if setspent exists
9679 set setspent d_setspent
9680 eval $inlibc
9681
9682 : see if setvbuf exists
9683 set setvbuf d_setvbuf
9684 eval $inlibc
9685
9686 : see if sfio.h is available
9687 set sfio.h i_sfio
9688 eval $inhdr
9689
9690
9691 : see if sfio library is available
9692 case "$i_sfio" in
9693 $define)
9694         val=''
9695         set sfreserve val
9696         eval $inlibc
9697         ;;
9698 *)
9699         val="$undef"
9700         ;;
9701 esac
9702 : Ok, but do we want to use it.
9703 case "$val" in
9704 $define)
9705         case "$usesfio" in
9706         true|$define|[yY]*) dflt='y';;
9707         *) dflt='n';;
9708         esac
9709         echo "$package can use the sfio library, but it is experimental."
9710         rp="You seem to have sfio available, do you want to try using it?"
9711         . ./myread
9712         case "$ans" in
9713         y|Y) ;;
9714         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9715                 val="$undef"
9716                 : Remove sfio from list of libraries to use
9717                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9718                 shift
9719                 libs="$*"
9720                 echo "libs = $libs" >&4
9721                 ;;
9722         esac
9723         ;;
9724 *)      case "$usesfio" in
9725         true|$define|[yY]*)
9726                 echo "Sorry, cannot find sfio on this machine" >&4
9727                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9728                 ;;
9729         esac
9730         ;;
9731 esac
9732 set d_sfio
9733 eval $setvar
9734 case "$d_sfio" in
9735 $define) usesfio='true';;
9736 *) usesfio='false';;
9737 esac
9738
9739 : see if shmctl exists
9740 set shmctl d_shmctl
9741 eval $inlibc
9742
9743 : see if shmget exists
9744 set shmget d_shmget
9745 eval $inlibc
9746
9747 : see if shmat exists
9748 set shmat d_shmat
9749 eval $inlibc
9750 : see what shmat returns
9751 case "$d_shmat" in
9752 "$define")
9753         $cat >shmat.c <<'END'
9754 #include <sys/shm.h>
9755 void *shmat();
9756 END
9757         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9758                 shmattype='void *'
9759         else
9760                 shmattype='char *'
9761         fi
9762         echo "and it returns ($shmattype)." >&4
9763         : see if a prototype for shmat is available
9764         xxx=`./findhdr sys/shm.h`
9765         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9766         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9767                 val="$define"
9768         else
9769                 val="$undef"
9770         fi
9771         $rm -f shmat.[co]
9772         ;;
9773 *)
9774         val="$undef"
9775         ;;
9776 esac
9777 set d_shmatprototype
9778 eval $setvar
9779
9780 : see if shmdt exists
9781 set shmdt d_shmdt
9782 eval $inlibc
9783
9784 : see how much of the 'shm*(2)' library is present.
9785 h_shm=true
9786 echo " "
9787 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9788 *"$undef"*) h_shm=false;;
9789 esac
9790 case "$osname" in
9791 freebsd)
9792     case "`ipcs 2>&1`" in
9793     "SVID shared memory"*"not configured"*)
9794         echo "Your $osname does not have the shm*(2) configured." >&4
9795         h_shm=false
9796         val="$undef"
9797         set shmctl d_shmctl
9798         evat $setvar
9799         set shmget d_shmget
9800         evat $setvar
9801         set shmat d_shmat
9802         evat $setvar
9803         set shmdt d_shmdt
9804         evat $setvar
9805         ;;
9806     esac
9807     ;;
9808 esac
9809 : we could also check for sys/ipc.h ...
9810 if $h_shm && $test `./findhdr sys/shm.h`; then
9811         echo "You have the full shm*(2) library." >&4
9812         val="$define"
9813 else
9814         echo "You don't have the full shm*(2) library." >&4
9815         val="$undef"
9816 fi
9817 set d_shm
9818 eval $setvar
9819
9820 echo " "
9821 : see if we have sigaction
9822 if set sigaction val -f d_sigaction; eval $csym; $val; then
9823         echo 'sigaction() found.' >&4
9824         $cat > try.c <<'EOP'
9825 #include <stdio.h>
9826 #include <sys/types.h>
9827 #include <signal.h>
9828 int main()
9829 {
9830     struct sigaction act, oact;
9831 }
9832 EOP
9833         set try
9834         if eval $compile_ok; then
9835                 val="$define"
9836         else
9837                 echo "But you don't seem to have a useable struct sigaction." >&4
9838                 val="$undef"
9839         fi
9840 else
9841         echo 'sigaction NOT found.' >&4
9842         val="$undef"
9843 fi
9844 set d_sigaction; eval $setvar
9845 $rm -f try try$_o try.c
9846
9847 : see if sigsetjmp exists
9848 echo " "
9849 case "$d_sigsetjmp" in
9850 '')
9851         $cat >try.c <<'EOP'
9852 #include <setjmp.h>
9853 sigjmp_buf env;
9854 int set = 1;
9855 int main()
9856 {
9857         if (sigsetjmp(env,1))
9858                 exit(set);
9859         set = 0;
9860         siglongjmp(env, 1);
9861         exit(1);
9862 }
9863 EOP
9864         set try
9865         if eval $compile; then
9866                 if ./try >/dev/null 2>&1; then
9867                         echo "POSIX sigsetjmp found." >&4
9868                         val="$define"
9869                 else
9870                         $cat >&4 <<EOM
9871 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9872 I'll ignore them.
9873 EOM
9874                         val="$undef"
9875                 fi
9876         else
9877                 echo "sigsetjmp not found." >&4
9878                 val="$undef"
9879         fi
9880         ;;
9881 *) val="$d_sigsetjmp"
9882         case "$d_sigsetjmp" in
9883         $define) echo "POSIX sigsetjmp found." >&4;;
9884         $undef) echo "sigsetjmp not found." >&4;;
9885         esac
9886         ;;
9887 esac
9888 set d_sigsetjmp
9889 eval $setvar
9890 $rm -f try.c try
9891
9892 : see if stat knows about block sizes
9893 echo " "
9894 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9895 eval $hasfield
9896
9897 : see if _ptr and _cnt from stdio act std
9898 echo " "
9899 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9900         echo "(Looks like you have stdio.h from Linux.)"
9901         case "$stdio_ptr" in
9902         '') stdio_ptr='((fp)->_IO_read_ptr)'
9903                 ptr_lval=$define
9904                 ;;
9905         *)      ptr_lval=$d_stdio_ptr_lval;;
9906         esac
9907         case "$stdio_cnt" in
9908         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9909                 cnt_lval=$undef
9910                 ;;
9911         *)      cnt_lval=$d_stdio_cnt_lval;;
9912         esac
9913         case "$stdio_base" in
9914         '') stdio_base='((fp)->_IO_read_base)';;
9915         esac
9916         case "$stdio_bufsiz" in
9917         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9918         esac
9919 else
9920         case "$stdio_ptr" in
9921         '') stdio_ptr='((fp)->_ptr)'
9922                 ptr_lval=$define
9923                 ;;
9924         *)      ptr_lval=$d_stdio_ptr_lval;;
9925         esac
9926         case "$stdio_cnt" in
9927         '') stdio_cnt='((fp)->_cnt)'
9928                 cnt_lval=$define
9929                 ;;
9930         *)      cnt_lval=$d_stdio_cnt_lval;;
9931         esac
9932         case "$stdio_base" in
9933         '') stdio_base='((fp)->_base)';;
9934         esac
9935         case "$stdio_bufsiz" in
9936         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9937         esac
9938 fi
9939 : test whether _ptr and _cnt really work
9940 echo "Checking how std your stdio is..." >&4
9941 $cat >try.c <<EOP
9942 #include <stdio.h>
9943 #define FILE_ptr(fp)    $stdio_ptr
9944 #define FILE_cnt(fp)    $stdio_cnt
9945 int main() {
9946         FILE *fp = fopen("try.c", "r");
9947         char c = getc(fp);
9948         if (
9949                 18 <= FILE_cnt(fp) &&
9950                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9951         )
9952                 exit(0);
9953         exit(1);
9954 }
9955 EOP
9956 val="$undef"
9957 set try
9958 if eval $compile; then
9959         if ./try; then
9960                 echo "Your stdio acts pretty std."
9961                 val="$define"
9962         else
9963                 echo "Your stdio isn't very std."
9964         fi
9965 else
9966         echo "Your stdio doesn't appear very std."
9967 fi
9968 $rm -f try.c try
9969 set d_stdstdio
9970 eval $setvar
9971
9972 : Can _ptr be used as an lvalue?
9973 case "$d_stdstdio$ptr_lval" in
9974 $define$define) val=$define ;;
9975 *) val=$undef ;;
9976 esac
9977 set d_stdio_ptr_lval
9978 eval $setvar
9979
9980 : Can _cnt be used as an lvalue?
9981 case "$d_stdstdio$cnt_lval" in
9982 $define$define) val=$define ;;
9983 *) val=$undef ;;
9984 esac
9985 set d_stdio_cnt_lval
9986 eval $setvar
9987
9988 : see if _base is also standard
9989 val="$undef"
9990 case "$d_stdstdio" in
9991 $define)
9992         $cat >try.c <<EOP
9993 #include <stdio.h>
9994 #define FILE_base(fp)   $stdio_base
9995 #define FILE_bufsiz(fp) $stdio_bufsiz
9996 int main() {
9997         FILE *fp = fopen("try.c", "r");
9998         char c = getc(fp);
9999         if (
10000                 19 <= FILE_bufsiz(fp) &&
10001                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10002         )
10003                 exit(0);
10004         exit(1);
10005 }
10006 EOP
10007         set try
10008         if eval $compile; then
10009                 if ./try; then
10010                         echo "And its _base field acts std."
10011                         val="$define"
10012                 else
10013                         echo "But its _base field isn't std."
10014                 fi
10015         else
10016                 echo "However, it seems to be lacking the _base field."
10017         fi
10018         $rm -f try.c try
10019         ;;
10020 esac
10021 set d_stdiobase
10022 eval $setvar
10023
10024 $cat >&4 <<EOM
10025 Checking how to access stdio streams by file descriptor number...
10026 EOM
10027 case "$stdio_stream_array" in
10028 '')     $cat >try.c <<EOCP
10029 #include <stdio.h>
10030 int main() {
10031   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10032     printf("yes\n");
10033 }
10034 EOCP
10035         for s in _iob __iob __sF
10036         do
10037                 set try -DSTDIO_STREAM_ARRAY=$s
10038                 if eval $compile; then
10039                         case "`./try$exe_ext`" in
10040                         yes)    stdio_stream_array=$s; break ;;
10041                         esac
10042                 fi
10043         done
10044         $rm -f try.* try$exe_ext
10045 esac
10046 case "$stdio_stream_array" in
10047 '')     $cat >&4 <<EOM
10048 I can't figure out how to access stdio streams by file descriptor number.
10049 EOM
10050         d_stdio_stream_array="$undef"
10051         ;;
10052 *)      $cat >&4 <<EOM
10053 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10054 EOM
10055         d_stdio_stream_array="$define"
10056         ;;
10057 esac
10058
10059 : see if strcoll exists
10060 set strcoll d_strcoll
10061 eval $inlibc
10062
10063 : check for structure copying
10064 echo " "
10065 echo "Checking to see if your C compiler can copy structs..." >&4
10066 $cat >try.c <<'EOCP'
10067 int main()
10068 {
10069         struct blurfl {
10070                 int dyick;
10071         } foo, bar;
10072
10073         foo = bar;
10074 }
10075 EOCP
10076 if $cc -c try.c >/dev/null 2>&1 ; then
10077         val="$define"
10078         echo "Yup, it can."
10079 else
10080         val="$undef"
10081         echo "Nope, it can't."
10082 fi
10083 set d_strctcpy
10084 eval $setvar
10085 $rm -f try.*
10086
10087 : see if strerror and/or sys_errlist[] exist
10088 echo " "
10089 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10090     if set strerror val -f d_strerror; eval $csym; $val; then
10091                 echo 'strerror() found.' >&4
10092                 d_strerror="$define"
10093                 d_strerrm='strerror(e)'
10094                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10095                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10096                         d_syserrlst="$define"
10097                 else
10098                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10099                         d_syserrlst="$undef"
10100                 fi
10101     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10102                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10103                 echo 'strerror() found in string header.' >&4
10104                 d_strerror="$define"
10105                 d_strerrm='strerror(e)'
10106                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10107                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10108                                 d_syserrlst="$define"
10109                 else
10110                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10111                         d_syserrlst="$undef"
10112                 fi
10113     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10114                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10115                 d_strerror="$undef"
10116                 d_syserrlst="$define"
10117                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10118     else
10119                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10120                 d_strerror="$undef"
10121                 d_syserrlst="$undef"
10122                 d_strerrm='"unknown"'
10123     fi
10124 fi
10125
10126 : see if strtod exists
10127 set strtod d_strtod
10128 eval $inlibc
10129
10130 : see if strtol exists
10131 set strtol d_strtol
10132 eval $inlibc
10133
10134 : see if strtoul exists
10135 set strtoul d_strtoul
10136 eval $inlibc
10137
10138 : see if strxfrm exists
10139 set strxfrm d_strxfrm
10140 eval $inlibc
10141
10142 : see if symlink exists
10143 set symlink d_symlink
10144 eval $inlibc
10145
10146 : see if syscall exists
10147 set syscall d_syscall
10148 eval $inlibc
10149
10150 : see if sysconf exists
10151 set sysconf d_sysconf
10152 eval $inlibc
10153
10154 : see if system exists
10155 set system d_system
10156 eval $inlibc
10157
10158 : see if tcgetpgrp exists
10159 set tcgetpgrp d_tcgetpgrp
10160 eval $inlibc
10161
10162 : see if tcsetpgrp exists
10163 set tcsetpgrp d_tcsetpgrp
10164 eval $inlibc
10165
10166 : see if sys/types.h has to be included
10167 set sys/types.h i_systypes
10168 eval $inhdr
10169
10170 : see if prototype for telldir is available
10171 echo " "
10172 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10173 eval $hasproto
10174
10175 : define an is-a-typedef? function
10176 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10177 case "$inclist" in
10178 "") inclist="sys/types.h";;
10179 esac;
10180 eval "varval=\$$var";
10181 case "$varval" in
10182 "")
10183         $rm -f temp.c;
10184         for inc in $inclist; do
10185                 echo "#include <$inc>" >>temp.c;
10186         done;
10187         echo "#ifdef $type" >> temp.c;
10188         echo "printf(\"We have $type\");" >> temp.c;
10189         echo "#endif" >> temp.c;
10190         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10191         if $contains $type temp.E >/dev/null 2>&1; then
10192                 eval "$var=\$type";
10193         else
10194                 eval "$var=\$def";
10195         fi;
10196         $rm -f temp.?;;
10197 *) eval "$var=\$varval";;
10198 esac'
10199
10200 : define an is-a-typedef? function that prompts if the type is not available.
10201 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10202 case "$inclist" in
10203 "") inclist="sys/types.h";;
10204 esac;
10205 eval "varval=\$$var";
10206 case "$varval" in
10207 "")
10208         $rm -f temp.c;
10209         for inc in $inclist; do
10210                 echo "#include <$inc>" >>temp.c;
10211         done;
10212         echo "#ifdef $type" >> temp.c;
10213         echo "printf(\"We have $type\");" >> temp.c;
10214         echo "#endif" >> temp.c;
10215         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10216         echo " " ;
10217         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10218         if $contains $type temp.E >/dev/null 2>&1; then
10219                 echo "$type found." >&4;
10220                 eval "$var=\$type";
10221         else
10222                 echo "$type NOT found." >&4;
10223                 dflt="$def";
10224                 . ./myread ;
10225                 eval "$var=\$ans";
10226         fi;
10227         $rm -f temp.?;;
10228 *) eval "$var=\$varval";;
10229 esac'
10230
10231 : see if this is a sys/times.h system
10232 set sys/times.h i_systimes
10233 eval $inhdr
10234
10235 : see if times exists
10236 echo " "
10237 if set times val -f d_times; eval $csym; $val; then
10238         echo 'times() found.' >&4
10239         d_times="$define"
10240         inc=''
10241         case "$i_systimes" in
10242         "$define") inc='sys/times.h';;
10243         esac
10244         rp="What is the type returned by times() on this system?"
10245         set clock_t clocktype long stdio.h sys/types.h $inc
10246         eval $typedef_ask
10247 else
10248         echo 'times() NOT found, hope that will do.' >&4
10249         d_times="$undef"
10250         clocktype='int'
10251 fi
10252
10253 : see if truncate exists
10254 set truncate d_truncate
10255 eval $inlibc
10256
10257 : see if tzname[] exists
10258 echo " "
10259 if set tzname val -a d_tzname; eval $csym; $val; then
10260         val="$define"
10261         echo 'tzname[] found.' >&4
10262 else
10263         val="$undef"
10264         echo 'tzname[] NOT found.' >&4
10265 fi
10266 set d_tzname
10267 eval $setvar
10268
10269 : see if umask exists
10270 set umask d_umask
10271 eval $inlibc
10272
10273 : backward compatibility for d_hvfork
10274 if test X$d_hvfork != X; then
10275         d_vfork="$d_hvfork"
10276         d_hvfork=''
10277 fi
10278 : see if there is a vfork
10279 val=''
10280 set vfork val
10281 eval $inlibc
10282
10283 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10284 : perl on Solaris 2.x, and probably elsewhere.
10285 case "$val" in
10286 $define)
10287         echo " "
10288         case "$usevfork" in
10289         false) dflt='n';;
10290         *) dflt='y';;
10291         esac
10292         cat <<'EOM'
10293  
10294 Perl can only use a vfork() that doesn't suffer from strict
10295 restrictions on calling functions or modifying global data in
10296 the child.  For example, glibc-2.1 contains such a vfork()
10297 that is unsuitable.  If your system provides a proper fork()
10298 call, chances are that you do NOT want perl to use vfork().
10299
10300 EOM
10301         rp="Do you still want to use vfork()?"
10302         . ./myread
10303         case "$ans" in
10304         y|Y) ;;
10305         *)
10306                 echo "Ok, we won't use vfork()."
10307                 val="$undef"
10308                 ;;
10309         esac
10310         ;;
10311 esac
10312 set d_vfork
10313 eval $setvar
10314 case "$d_vfork" in
10315 $define) usevfork='true';;
10316 *) usevfork='false';;
10317 esac
10318
10319 : see if this is an sysdir system
10320 set sys/dir.h i_sysdir
10321 eval $inhdr
10322
10323 : see if this is an sysndir system
10324 set sys/ndir.h i_sysndir
10325 eval $inhdr
10326
10327 : see if closedir exists
10328 set closedir d_closedir
10329 eval $inlibc
10330
10331 case "$d_closedir" in
10332 "$define")
10333         echo " "
10334         echo "Checking whether closedir() returns a status..." >&4
10335         cat > closedir.c <<EOM
10336 #$i_dirent I_DIRENT             /**/
10337 #$i_sysdir I_SYS_DIR            /**/
10338 #$i_sysndir I_SYS_NDIR          /**/
10339 #$i_systypes I_SYS_TYPES        /**/
10340
10341 #if defined(I_SYS_TYPES)
10342 #include <sys/types.h>
10343 #endif
10344 #if defined(I_DIRENT)
10345 #include <dirent.h>
10346 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10347 #include <sys/dir.h>
10348 #endif
10349 #else
10350 #ifdef I_SYS_NDIR
10351 #include <sys/ndir.h>
10352 #else
10353 #ifdef I_SYS_DIR
10354 #ifdef hp9000s500
10355 #include <ndir.h>       /* may be wrong in the future */
10356 #else
10357 #include <sys/dir.h>
10358 #endif
10359 #endif
10360 #endif
10361 #endif 
10362 int main() { return closedir(opendir(".")); }
10363 EOM
10364         set closedir
10365         if eval $compile_ok; then
10366                 if ./closedir > /dev/null 2>&1 ; then
10367                         echo "Yes, it does."
10368                         val="$undef"
10369                 else
10370                         echo "No, it doesn't."
10371                         val="$define"
10372                 fi
10373         else
10374                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10375                 val="$define"
10376         fi
10377         ;;
10378 *)
10379         val="$undef";
10380         ;;
10381 esac
10382 set d_void_closedir
10383 eval $setvar
10384 $rm -f closedir*
10385 : check for volatile keyword
10386 echo " "
10387 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10388 $cat >try.c <<'EOCP'
10389 int main()
10390 {
10391         typedef struct _goo_struct goo_struct;
10392         goo_struct * volatile goo = ((goo_struct *)0);
10393         struct _goo_struct {
10394                 long long_int;
10395                 int reg_int;
10396                 char char_var;
10397         };
10398         typedef unsigned short foo_t;
10399         char *volatile foo;
10400         volatile int bar;
10401         volatile foo_t blech;
10402         foo = foo;
10403 }
10404 EOCP
10405 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10406         val="$define"
10407         echo "Yup, it does."
10408 else
10409         val="$undef"
10410         echo "Nope, it doesn't."
10411 fi
10412 set d_volatile
10413 eval $setvar
10414 $rm -f try.*
10415
10416 : see if there is a wait4
10417 set wait4 d_wait4
10418 eval $inlibc
10419
10420 : see if waitpid exists
10421 set waitpid d_waitpid
10422 eval $inlibc
10423
10424 : see if wcstombs exists
10425 set wcstombs d_wcstombs
10426 eval $inlibc
10427
10428 : see if wctomb exists
10429 set wctomb d_wctomb
10430 eval $inlibc
10431
10432 : see if writev exists
10433 set writev d_writev
10434 eval $inlibc
10435
10436 : preserve RCS keywords in files with variable substitution, grrr
10437 Date='$Date'
10438 Id='$Id'
10439 Log='$Log'
10440 RCSfile='$RCSfile'
10441 Revision='$Revision'
10442
10443 case "$crosscompile" in
10444 ''|[nN]*) crosscompile="$undef" ;;
10445 esac
10446
10447 case "$osname" in
10448 next|rhapsody) multiarch="$define" ;;
10449 esac
10450 case "$multiarch" in
10451 ''|[nN]*) multiarch="$undef" ;;
10452 esac
10453
10454 : check for alignment requirements
10455 echo " "
10456 case "$crosscompile$multiarch" in
10457 *$define*)
10458         $cat <<EOM
10459 You seem to be either cross-compiling or doing a multiarchitecture build,
10460 skipping the memory alignment check.
10461
10462 EOM
10463         case "$alignbytes" in
10464         '') alignbytes=8 ;;
10465         esac
10466         ;;
10467 *)
10468         case "$alignbytes" in
10469         '') echo "Checking alignment constraints..." >&4
10470                 $cat >try.c <<'EOCP'
10471 struct foobar {
10472         char foo;
10473         double bar;
10474 } try_algn;
10475 int main()
10476 {
10477         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10478 }
10479 EOCP
10480                 set try
10481                 if eval $compile_ok; then
10482                         dflt=`./try`
10483                 else
10484                         dflt='8'
10485                         echo "(I can't seem to compile the test program...)"
10486                 fi
10487                 ;;
10488         *) dflt="$alignbytes"
10489                 ;;
10490         esac
10491         rp="Doubles must be aligned on a how-many-byte boundary?"
10492         . ./myread
10493         alignbytes="$ans"
10494         $rm -f try.c try
10495         ;;
10496 esac
10497
10498
10499 : check for ordering of bytes in a long
10500 echo " "
10501 case "$crosscompile$multiarch" in
10502 *$define*)
10503         $cat <<EOM
10504 You seem to be either cross-compiling or doing a multiarchitecture build,
10505 skipping the byteorder check.
10506
10507 EOM
10508         byteorder=''
10509         ;;
10510 *)
10511         case "$byteorder" in
10512         '')
10513                 $cat <<'EOM'
10514 In the following, larger digits indicate more significance.  A big-endian
10515 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10516 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10517 machines may have weird orders like 3412.  A Cray will report 87654321. If
10518 the test program works the default is probably right.
10519 I'm now running the test program...
10520 EOM
10521                 $cat >try.c <<'EOCP'
10522 #include <stdio.h>
10523 int main()
10524 {
10525         int i;
10526         union {
10527                 unsigned long l;
10528                 char c[sizeof(long)];
10529         } u;
10530
10531         if (sizeof(long) > 4)
10532                 u.l = (0x08070605L << 32) | 0x04030201L;
10533         else
10534                 u.l = 0x04030201L;
10535         for (i = 0; i < sizeof(long); i++)
10536                 printf("%c", u.c[i]+'0');
10537         printf("\n");
10538         exit(0);
10539 }
10540 EOCP
10541                 xxx_prompt=y
10542                 set try
10543                 if eval $compile && ./try > /dev/null; then
10544                         dflt=`./try`
10545                         case "$dflt" in
10546                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10547                                 echo "(The test program ran ok.)"
10548                                 echo "byteorder=$dflt"
10549                                 xxx_prompt=n
10550                         ;;
10551                         ????|????????) echo "(The test program ran ok.)" ;;
10552                         *) echo "(The test program didn't run right for some reason.)" ;;
10553                         esac
10554                 else
10555                         dflt='4321'
10556                         cat <<'EOM'
10557 (I can't seem to compile the test program.  Guessing big-endian...)
10558 EOM
10559                 fi
10560                 case "$xxx_prompt" in
10561                 y)
10562                         rp="What is the order of bytes in a long?"
10563                         . ./myread
10564                         byteorder="$ans"
10565                         ;;
10566                 *)      byteorder=$dflt
10567                         ;;
10568                 esac
10569                 ;;
10570         esac
10571         $rm -f try.c try
10572         ;;
10573 esac
10574
10575
10576 : how do we catenate cpp tokens here?
10577 echo " "
10578 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10579 $cat >cpp_stuff.c <<'EOCP'
10580 #define RCAT(a,b)a/**/b
10581 #define ACAT(a,b)a ## b
10582 RCAT(Rei,ser)
10583 ACAT(Cir,cus)
10584 EOCP
10585 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10586 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10587         echo "Oh!  Smells like ANSI's been here." >&4
10588         echo "We can catify or stringify, separately or together!"
10589         cpp_stuff=42
10590 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10591         echo "Ah, yes!  The good old days!" >&4
10592         echo "However, in the good old days we don't know how to stringify and"
10593         echo "catify at the same time."
10594         cpp_stuff=1
10595 else
10596         $cat >&4 <<EOM
10597 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10598 to have to edit the values of CAT[2-5] in config.h...
10599 EOM
10600         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10601 fi
10602 $rm -f cpp_stuff.*
10603
10604 : see if this is a db.h system
10605 set db.h i_db
10606 eval $inhdr
10607
10608 case "$i_db" in
10609 $define)
10610         : Check db version.
10611         echo " "
10612         echo "Checking Berkeley DB version ..." >&4
10613         $cat >try.c <<EOCP
10614 #$d_const HASCONST
10615 #ifndef HASCONST
10616 #define const
10617 #endif
10618 #include <sys/types.h>
10619 #include <stdio.h>
10620 #include <db.h>
10621 int main()
10622 {
10623 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10624     int Major, Minor, Patch ;
10625     unsigned long Version ;
10626     (void)db_version(&Major, &Minor, &Patch) ;
10627     printf("You have Berkeley DB Version 2 or greater\n");
10628
10629     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10630                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10631     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10632                 Major, Minor, Patch) ;
10633
10634     /* check that db.h & libdb are compatible */
10635     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10636         printf("db.h and libdb are incompatible\n") ;
10637         exit(3);        
10638     }
10639
10640     printf("db.h and libdb are compatible\n") ;
10641
10642     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10643                 + DB_VERSION_PATCH ;
10644
10645     /* needs to be >= 2.3.4 */
10646     if (Version < 2003004) {
10647     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10648         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10649         exit(2);        
10650     }
10651
10652     exit(0);
10653 #else
10654 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10655     printf("You have Berkeley DB Version 1\n");
10656     exit(0);    /* DB version < 2: the coast is clear. */
10657 #else
10658     exit(1);    /* <db.h> not Berkeley DB? */
10659 #endif
10660 #endif
10661 }
10662 EOCP
10663         set try
10664         if eval $compile && ./try; then
10665                 echo 'Looks OK.' >&4
10666         else
10667                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10668                 i_db=$undef
10669                 case " $libs " in
10670                 *"-ldb "*)
10671                         : Remove db from list of libraries to use
10672                         echo "Removing unusable -ldb from library list" >&4
10673                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10674                         shift
10675                         libs="$*"
10676                         echo "libs = $libs" >&4
10677                         ;;
10678                 esac
10679         fi
10680         $rm -f try.*
10681         ;;
10682 esac
10683
10684 case "$i_db" in
10685 define)
10686         : Check the return type needed for hash 
10687         echo " "
10688         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10689         $cat >try.c <<EOCP
10690 #$d_const HASCONST
10691 #ifndef HASCONST
10692 #define const
10693 #endif
10694 #include <sys/types.h>
10695 #include <db.h>
10696
10697 #ifndef DB_VERSION_MAJOR
10698 u_int32_t hash_cb (ptr, size)
10699 const void *ptr;
10700 size_t size;
10701 {
10702 }
10703 HASHINFO info;
10704 int main()
10705 {
10706         info.hash = hash_cb;
10707 }
10708 #endif
10709 EOCP
10710         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10711                 if $contains warning try.out >>/dev/null 2>&1 ; then
10712                         db_hashtype='int'
10713                 else
10714                         db_hashtype='u_int32_t'
10715                 fi
10716         else
10717                 : XXX Maybe we should just give up here.
10718                 db_hashtype=u_int32_t
10719                 $cat try.out >&4
10720                 echo "Help:  I can't seem to compile the db test program." >&4
10721                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10722         fi
10723         $rm -f try.*
10724         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10725         ;;
10726 *)      db_hashtype=u_int32_t
10727         ;;
10728 esac
10729 case "$i_db" in
10730 define)
10731         : Check the return type needed for prefix 
10732         echo " "
10733         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10734         cat >try.c <<EOCP
10735 #$d_const HASCONST
10736 #ifndef HASCONST
10737 #define const
10738 #endif
10739 #include <sys/types.h>
10740 #include <db.h>
10741
10742 #ifndef DB_VERSION_MAJOR
10743 size_t prefix_cb (key1, key2)
10744 const DBT *key1;
10745 const DBT *key2;
10746 {
10747 }
10748 BTREEINFO info;
10749 int main()
10750 {
10751         info.prefix = prefix_cb;
10752 }
10753 #endif
10754 EOCP
10755         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10756                 if $contains warning try.out >>/dev/null 2>&1 ; then
10757                         db_prefixtype='int'
10758                 else
10759                         db_prefixtype='size_t'
10760                 fi
10761         else
10762                 db_prefixtype='size_t'
10763                 : XXX Maybe we should just give up here.
10764                 $cat try.out >&4
10765                 echo "Help:  I can't seem to compile the db test program." >&4
10766                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10767         fi
10768         $rm -f try.*
10769         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10770         ;;
10771 *)      db_prefixtype='size_t'
10772         ;;
10773 esac
10774
10775 : check for void type
10776 echo " "
10777 echo "Checking to see how well your C compiler groks the void type..." >&4
10778 case "$voidflags" in
10779 '')
10780         $cat >try.c <<'EOCP'
10781 #if TRY & 1
10782 void sub() {
10783 #else
10784 sub() {
10785 #endif
10786         extern void moo();      /* function returning void */
10787         void (*goo)();          /* ptr to func returning void */
10788 #if TRY & 8
10789         void *hue;              /* generic ptr */
10790 #endif
10791 #if TRY & 2
10792         void (*foo[10])();
10793 #endif
10794
10795 #if TRY & 4
10796         if(goo == moo) {
10797                 exit(0);
10798         }
10799 #endif
10800         exit(0);
10801 }
10802 int main() { sub(); }
10803 EOCP
10804         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10805                 voidflags=$defvoidused
10806         echo "Good.  It appears to support void to the level $package wants.">&4
10807                 if $contains warning .out >/dev/null 2>&1; then
10808                         echo "However, you might get some warnings that look like this:"
10809                         $cat .out
10810                 fi
10811         else
10812 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10813                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10814                         echo "It supports 1..."
10815                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10816                                 echo "It also supports 2..."
10817                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10818                                         voidflags=7
10819                                         echo "And it supports 4 but not 8 definitely."
10820                                 else
10821                                         echo "It doesn't support 4..."
10822                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10823                                                 voidflags=11
10824                                                 echo "But it supports 8."
10825                                         else
10826                                                 voidflags=3
10827                                                 echo "Neither does it support 8."
10828                                         fi
10829                                 fi
10830                         else
10831                                 echo "It does not support 2..."
10832                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10833                                         voidflags=13
10834                                         echo "But it supports 4 and 8."
10835                                 else
10836                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10837                                                 voidflags=5
10838                                                 echo "And it supports 4 but has not heard about 8."
10839                                         else
10840                                                 echo "However it supports 8 but not 4."
10841                                         fi
10842                                 fi
10843                         fi
10844                 else
10845                         echo "There is no support at all for void."
10846                         voidflags=0
10847                 fi
10848         fi
10849 esac
10850 case "$voidflags" in
10851 "$defvoidused") ;;
10852 *)      $cat >&4 <<'EOM'
10853   Support flag bits are:
10854     1: basic void declarations.
10855     2: arrays of pointers to functions returning void.
10856     4: operations between pointers to and addresses of void functions.
10857     8: generic void pointers.
10858 EOM
10859         dflt="$voidflags";
10860         rp="Your void support flags add up to what?"
10861         . ./myread
10862         voidflags="$ans"
10863         ;;
10864 esac
10865 $rm -f try.* .out
10866
10867
10868 : How can we generate normalized random numbers ?
10869 echo " "
10870 echo "Looking for a random number function..." >&4
10871 case "$randfunc" in
10872 '')
10873         if set drand48 val -f; eval $csym; $val; then
10874                 dflt="drand48"
10875                 echo "Good, found drand48()." >&4
10876         elif set random val -f; eval $csym; $val; then
10877                 dflt="random"
10878                 echo "OK, found random()." >&4
10879         else
10880                 dflt="rand"
10881                 echo "Yick, looks like I have to use rand()." >&4
10882         fi
10883         echo " "
10884         ;;
10885 *)
10886         dflt="$randfunc"
10887         ;;
10888 esac
10889 cont=true
10890
10891 case "$ccflags" in
10892 *-Dmy_rand=*|*-Dmy_srand=*)
10893         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10894         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10895         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10896         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10897         ;;
10898 esac
10899
10900 while $test "$cont"; do
10901         rp="Use which function to generate random numbers?"
10902         . ./myread
10903         if $test "$ans" = "$dflt"; then
10904                 : null
10905         else
10906                 randbits=''
10907         fi
10908         randfunc="$ans"
10909         if set $ans val -f; eval $csym; $val; then
10910                 cont=''
10911         else
10912                 dflt=y
10913                 rp="I cannot find function $ans. Use that name anyway?"
10914                 . ./myread
10915                 dflt=rand
10916                 case "$ans" in
10917                         [yY]*) cont='';;
10918                 esac
10919         fi
10920         case "$cont" in
10921         '')
10922                 case "$randfunc" in
10923                 drand48)
10924                         drand01="drand48()"
10925                         seedfunc="srand48"
10926                         randbits=48
10927                         randseedtype=long
10928                         ;;
10929                 rand|random)
10930                         case "$randbits" in
10931                         '')
10932 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10933                                 $cat >try.c <<EOCP
10934 #$i_unistd I_UNISTD
10935 #$i_stdlib I_STDLIB
10936 #include <stdio.h>
10937 #ifdef I_UNISTD
10938 #  include <unistd.h>
10939 #endif
10940 #ifdef I_STDLIB
10941 #  include <stdlib.h>
10942 #endif
10943 int main()
10944 {
10945         register int i;
10946         register unsigned long tmp;
10947         register unsigned long max = 0L;
10948
10949         for (i = 1000; i; i--) {
10950                 tmp = (unsigned long) $randfunc();
10951                 if (tmp > max) max = tmp;
10952         }
10953         for (i = 0; max; i++)
10954                 max /= 2;
10955         printf("%d\n",i);
10956 }
10957 EOCP
10958                                 set try
10959                                 if eval $compile_ok; then
10960                                         dflt=`try`
10961                                 else
10962                                         dflt='?'
10963                                         echo "(I can't seem to compile the test program...)"
10964                                 fi
10965                                 ;;
10966                         *)
10967                                 dflt="$randbits"
10968                                 ;;
10969                         esac
10970                         rp="How many bits does your $randfunc() function produce?"
10971                         . ./myread
10972                         randbits="$ans"
10973                         $rm -f try.c try
10974                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10975                         seedfunc="s$randfunc"
10976                         randseedtype=unsigned
10977                         ;;
10978                 *)
10979                         dflt="31"
10980                         rp="How many bits does your $randfunc() function produce?"
10981                         . ./myread
10982                         randbits="$ans"
10983                         seedfunc="s$randfunc"
10984                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10985                         if set $seedfunc val -f; eval $csym; $val; then
10986                                 echo "(Using $seedfunc() to seed random generator)"
10987                         else
10988                                 echo "(Warning: no $seedfunc() to seed random generator)"
10989                                 seedfunc=rand
10990                         fi
10991                         randseedtype=unsigned
10992                         ;;
10993                 esac
10994                 ;;
10995         esac
10996 done
10997
10998 echo " "
10999 echo "Determining whether or not we are on an EBCDIC system..." >&4
11000 $cat >tebcdic.c <<'EOM'
11001 int main()
11002 {
11003   if ('M'==0xd4) return 0;
11004   return 1;
11005 }
11006 EOM
11007
11008 val=$undef
11009 set tebcdic
11010 if eval $compile_ok; then
11011         if ./tebcdic; then
11012                 echo "You have EBCDIC." >&4
11013                 val="$define"
11014         else
11015                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
11016         fi
11017 else
11018         echo "I'm unable to compile the test program." >&4
11019         echo "I'll assume ASCII or some ISO Latin." >&4
11020 fi
11021 $rm -f tebcdic.c tebcdic
11022 set ebcdic
11023 eval $setvar
11024
11025 echo " "
11026 $cat >&4 <<EOM
11027 Checking how to flush all pending stdio output...
11028 EOM
11029 # I only know how to find the first 32 possibly open files on SunOS.
11030 # See also hints/sunos_4_1.sh and util.c  --AD
11031 case "$osname" in
11032 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11033 esac
11034 $cat >>try.c <<EOCP
11035 #include <stdio.h>
11036 #$i_unistd I_UNISTD
11037 #ifdef I_UNISTD
11038 # include <unistd.h>
11039 #endif
11040 #$d_sysconf HAS_SYSCONF
11041 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11042 #ifdef HAS_STDIO_STREAM_ARRAY
11043 # define STDIO_STREAM_ARRAY $stdio_stream_array
11044 #endif
11045 int main() {
11046   FILE* p = fopen("try.out", "w");
11047 #ifdef TRY_FPUTC
11048   fputc('x', p);
11049 #else
11050 # ifdef TRY_FPRINTF
11051   fprintf(p, "x");
11052 # endif
11053 #endif
11054 #ifdef TRY_FFLUSH_NULL
11055   fflush(NULL);
11056 #endif
11057 #ifdef TRY_FFLUSH_ALL
11058   {
11059     long open_max = -1;
11060 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11061     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11062 # else
11063 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11064     open_max = sysconf(_SC_OPEN_MAX);
11065 #  else
11066 #   ifdef FOPEN_MAX
11067     open_max = FOPEN_MAX;
11068 #   else
11069 #    ifdef OPEN_MAX
11070     open_max = OPEN_MAX;
11071 #    else
11072 #     ifdef _NFILE
11073     open_max = _NFILE;
11074 #     endif
11075 #    endif
11076 #   endif
11077 #  endif
11078 # endif 
11079 # ifdef HAS_STDIO_STREAM_ARRAY
11080     if (open_max > 0) {
11081       long i;
11082       for (i = 0; i < open_max; i++)
11083             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11084                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11085                 STDIO_STREAM_ARRAY[i]._flag)
11086                 fflush(&STDIO_STREAM_ARRAY[i]);
11087     }   
11088   }
11089 # endif
11090 #endif
11091   _exit(42);
11092 }
11093 EOCP
11094 : first we have to find out how _not_ to flush
11095 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11096     output=''
11097     set try -DTRY_FPUTC
11098     if eval $compile; then
11099             $rm -f try.out
11100             ./try$exe_ext 2>/dev/null
11101             if $test ! -s try.out -a "X$?" = X42; then
11102                 output=-DTRY_FPUTC
11103             fi
11104     fi
11105     case "$output" in
11106     '')
11107             set try -DTRY_FPRINTF
11108             $rm -f try.out
11109             if eval $compile; then
11110                     $rm -f try.out
11111                     ./try$exe_ext 2>/dev/null
11112                     if $test ! -s try.out -a "X$?" = X42; then
11113                         output=-DTRY_FPRINTF
11114                     fi
11115             fi
11116         ;;
11117     esac
11118 fi
11119 : check for fflush NULL behaviour
11120 case "$fflushNULL" in
11121 '')     set try -DTRY_FFLUSH_NULL $output
11122         if eval $compile; then
11123                 $rm -f try.out
11124                 ./try$exe_ext 2>/dev/null
11125                 code="$?"
11126                 if $test -s try.out -a "X$code" = X42; then
11127                         fflushNULL="`$cat try.out`"
11128                 else
11129                         if $test "X$code" != X42; then
11130                                 $cat >&4 <<EOM
11131 (If this test failed, don't worry, we'll try another method shortly.)
11132 EOM
11133                         fi
11134                 fi
11135         fi
11136         $rm -f core try.core core.try.*
11137         case "$fflushNULL" in
11138         x)      $cat >&4 <<EOM
11139 Your fflush(NULL) works okay.
11140 EOM
11141                 fflushNULL="$define"
11142                 ;;
11143         '')     $cat >&4 <<EOM
11144 Your fflush(NULL) isn't working (contrary to ANSI C).
11145 EOM
11146                 fflushNULL="$undef"
11147                 ;;
11148         *)      $cat >&4 <<EOM
11149 Cannot figure out whether your fflush(NULL) works or not.
11150 I'm assuming it doesn't (contrary to ANSI C).
11151 EOM
11152                 fflushNULL="$undef"
11153                 ;;
11154         esac
11155         ;;
11156 $define|true|[yY]*)
11157         fflushNULL="$define"
11158         ;;
11159 *)
11160         fflushNULL="$undef"
11161         ;;
11162 esac
11163 : check explicit looping only if NULL did not work
11164 case "$fflushNULL" in
11165 "$undef")
11166         : check for fflush all behaviour
11167         case "$fflushall" in
11168         '')     set try -DTRY_FFLUSH_ALL $output
11169                 if eval $compile; then
11170                         $cat >&4 <<EOM
11171 (Now testing the other method--but note that also this may fail.)
11172 EOM
11173                         $rm -f try.out
11174                         ./try$exe_ext 2>/dev/null
11175                         if $test -s try.out -a "X$?" = X42; then
11176                                 fflushall="`$cat try.out`"
11177                         fi
11178                 fi
11179                 $rm -f core try.core core.try.*
11180                 case "$fflushall" in
11181                 x)      $cat >&4 <<EOM
11182 Whew. Flushing explicitly all the stdio streams works.
11183 EOM
11184                         fflushall="$define"
11185                         ;;
11186                 '')     $cat >&4 <<EOM
11187 Sigh. Flushing explicitly all the stdio streams doesn't work.
11188 EOM
11189                         fflushall="$undef"
11190                         ;;
11191                 *)      $cat >&4 <<EOM
11192 Cannot figure out whether flushing stdio streams explicitly works or not.
11193 I'm assuming it doesn't.
11194 EOM
11195                         fflushall="$undef"
11196                         ;;
11197                 esac
11198                 ;;
11199         "$define"|true|[yY]*)
11200                 fflushall="$define"
11201                 ;;
11202         *)
11203                 fflushall="$undef"
11204                 ;;
11205         esac
11206         ;;
11207 *)      fflushall="$undef"      
11208         ;;
11209 esac
11210 case "$fflushNULL$fflushall" in
11211 undefundef)
11212         $cat <<EOM
11213 I cannot figure out how to flush pending stdio output.
11214 EOM
11215         ;;
11216 esac
11217 $rm -f try.* try$exe_ext
11218
11219 : see what type file positions are declared as in the library
11220 rp="What is the type for file position used by fsetpos()?"
11221 set fpos_t fpostype long stdio.h sys/types.h
11222 eval $typedef_ask
11223
11224 : Store the full pathname to the ar program for use in the C program
11225 : Respect a hint or command line value for full_ar.
11226 case "$full_ar" in
11227 '') full_ar=$ar ;;
11228 esac
11229
11230 : Store the full pathname to the sed program for use in the C program
11231 full_sed=$sed
11232
11233 : see what type gids are declared as in the kernel
11234 echo " "
11235 echo "Looking for the type for group ids returned by getgid()."
11236 set gid_t gidtype xxx stdio.h sys/types.h
11237 eval $typedef
11238 case "$gidtype" in
11239 xxx)
11240         xxx=`./findhdr sys/user.h`
11241         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11242         case $1 in
11243         unsigned) dflt="$1 $2" ;;
11244         *) dflt="$1" ;;
11245         esac
11246         ;;
11247 *) dflt="$gidtype";;
11248 esac
11249 case "$gidtype" in
11250 gid_t) echo "gid_t found." ;;
11251 *)      rp="What is the type for group ids returned by getgid()?"
11252         . ./myread
11253         gidtype="$ans"
11254         ;;
11255 esac
11256
11257 : see if getgroups exists
11258 set getgroups d_getgrps
11259 eval $inlibc
11260
11261 : see if setgroups exists
11262 set setgroups d_setgrps
11263 eval $inlibc
11264
11265
11266 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11267 echo " "
11268 case "$d_getgrps$d_setgrps" in
11269 *define*)
11270         case "$groupstype" in
11271         '') dflt="$gidtype" ;;
11272         *)  dflt="$groupstype" ;;
11273         esac
11274         $cat <<EOM
11275 What type of pointer is the second argument to getgroups() and setgroups()?
11276 Usually this is the same as group ids, $gidtype, but not always.
11277
11278 EOM
11279         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11280         . ./myread
11281         groupstype="$ans"
11282         ;;
11283 *)  groupstype="$gidtype";;
11284 esac
11285
11286 : see what type lseek is declared as in the kernel
11287 rp="What is the type used for lseek's offset on this system?"
11288 set off_t lseektype long stdio.h sys/types.h
11289 eval $typedef_ask
11290
11291 echo " "
11292 $echo $n "Checking to see how big your file offsets are...$c" >&4
11293 $cat >try.c <<EOCP
11294 #include <sys/types.h>
11295 #include <stdio.h>
11296 int main()
11297 {
11298         printf("%d\n", sizeof($lseektype));
11299 }
11300 EOCP
11301 set try
11302 if eval $compile_ok; then
11303         lseeksize=`./try`
11304         $echo " $lseeksize bytes." >&4
11305 else
11306         dflt='4'
11307         echo " "
11308         echo "(I can't seem to compile the test program.  Guessing...)"
11309         rp="What is the size of your file offsets (in bytes)?"
11310         . ./myread
11311         lseeksize="$ans"
11312 fi
11313 $rm -f try.c try
11314
11315 echo " "
11316 echo "Checking if your $make program sets \$(MAKE)..." >&4
11317 case "$make_set_make" in
11318 '')
11319         $sed 's/^X //' > testmake.mak << 'EOF'
11320 Xall:
11321 X       @echo 'maketemp="$(MAKE)"'
11322 EOF
11323         case "`$make -f testmake.mak 2>/dev/null`" in
11324         *maketemp=*) make_set_make='#' ;;
11325         *)      make_set_make="MAKE=$make" ;;
11326         esac
11327         $rm -f testmake.mak
11328         ;;
11329 esac
11330 case "$make_set_make" in
11331 '#') echo "Yup, it does.";;
11332 *) echo "Nope, it doesn't.";;
11333 esac
11334
11335 : see what type is used for mode_t
11336 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11337 set mode_t modetype int stdio.h sys/types.h
11338 eval $typedef_ask
11339
11340 : define a fucntion to check prototypes
11341 $cat > protochk <<EOSH
11342 $startsh
11343 cc="$cc"
11344 optimize="$optimize"
11345 ccflags="$ccflags"
11346 prototype="$prototype"
11347 define="$define"
11348 rm=$rm
11349 EOSH
11350
11351 $cat >> protochk <<'EOSH'
11352
11353 $rm -f try.c
11354 foo="$1"
11355 shift
11356 while test $# -ge 2; do
11357         case "$1" in
11358                 $define) echo "#include <$2>" >> try.c ;;
11359                 literal) echo "$2" >> try.c ;;
11360         esac
11361     shift 2
11362 done
11363 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11364 cat >> try.c <<'EOCP'
11365 #ifdef CAN_PROTOTYPE
11366 #define _(args) args
11367 #else
11368 #define _(args) ()
11369 #endif
11370 EOCP
11371 echo "$foo" >> try.c
11372 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11373 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11374 status=$?
11375 $rm -f try.[co]
11376 exit $status
11377 EOSH
11378 chmod +x protochk
11379 $eunicefix protochk
11380
11381 : see what type is used for size_t
11382 rp="What is the type used for the length parameter for string functions?"
11383 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11384 eval $typedef_ask
11385
11386 : check for type of arguments to gethostbyaddr. 
11387 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11388         case "$d_gethbyaddr" in
11389         $define)
11390                 $cat <<EOM
11391
11392 Checking to see what type of arguments are accepted by gethostbyaddr().
11393 EOM
11394                 hdrs="$define sys/types.h
11395                         $d_socket sys/socket.h 
11396                         $i_niin netinet/in.h 
11397                         $i_netdb netdb.h
11398                         $i_unistd unistd.h"
11399                 : The first arg can 'char *' or 'void *'
11400                 : The second arg is some of integral type
11401                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11402                         for yyy in size_t long int; do
11403                                 case "$netdb_host_type" in
11404                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11405                                         if ./protochk "$try" $hdrs; then
11406                                                 echo "Your system accepts $xxx for the first arg."
11407                                                 echo "...and $yyy for the second arg."
11408                                                 netdb_host_type="$xxx"
11409                                                 netdb_hlen_type="$yyy"
11410                                         fi
11411                                         ;;
11412                                 esac
11413                         done
11414                 done
11415                 : In case none of those worked, prompt the user.
11416                 case "$netdb_host_type" in
11417                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11418                         dflt='char *'
11419                         . ./myread
11420                         netdb_host_type=$ans
11421                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11422                         dflt="$sizetype"
11423                         . ./myread
11424                         netdb_hlen_type=$ans
11425                         ;;
11426                 esac
11427                 ;;
11428         *)      : no gethostbyaddr, so pick harmless defaults
11429                 netdb_host_type='char *'
11430                 netdb_hlen_type="$sizetype"
11431                 ;;
11432         esac
11433         # Remove the "const" if needed. -- but then we'll have a 
11434         # prototype clash!
11435         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11436 fi
11437
11438 : check for type of argument to gethostbyname. 
11439 if test "X$netdb_name_type" = X ; then
11440         case "$d_gethbyname" in
11441         $define)
11442                 $cat <<EOM
11443
11444 Checking to see what type of argument is accepted by gethostbyname().
11445 EOM
11446                 hdrs="$define sys/types.h
11447                         $d_socket sys/socket.h 
11448                         $i_niin netinet/in.h 
11449                         $i_netdb netdb.h
11450                         $i_unistd unistd.h"
11451                 for xxx in "const char *" "char *"; do
11452                         case "$netdb_name_type" in
11453                         '')     try="extern struct hostent *gethostbyname($xxx);"
11454                                 if ./protochk "$try" $hdrs; then
11455                                         echo "Your system accepts $xxx."
11456                                         netdb_name_type="$xxx"
11457                                 fi
11458                                 ;;
11459                         esac
11460                 done
11461                 : In case none of those worked, prompt the user.
11462                 case "$netdb_name_type" in
11463                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11464                         dflt='char *'
11465                         . ./myread
11466                         netdb_name_type=$ans
11467                         ;;
11468                 esac
11469                 ;;
11470         *)      : no gethostbyname, so pick harmless default
11471                 netdb_name_type='char *'
11472                 ;;
11473         esac
11474 fi
11475
11476 : check for type of 1st argument to getnetbyaddr. 
11477 if test "X$netdb_net_type" = X ; then
11478         case "$d_getnbyaddr" in
11479         $define)
11480                 $cat <<EOM
11481
11482 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11483 EOM
11484                 hdrs="$define sys/types.h
11485                         $d_socket sys/socket.h 
11486                         $i_niin netinet/in.h 
11487                         $i_netdb netdb.h
11488                         $i_unistd unistd.h"
11489                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11490                         case "$netdb_net_type" in
11491                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11492                                 if ./protochk "$try" $hdrs; then
11493                                         echo "Your system accepts $xxx."
11494                                         netdb_net_type="$xxx"
11495                                 fi
11496                                 ;;
11497                         esac
11498                 done
11499                 : In case none of those worked, prompt the user.
11500                 case "$netdb_net_type" in
11501                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11502                         dflt='long'
11503                         . ./myread
11504                         netdb_net_type=$ans
11505                         ;;
11506                 esac
11507                 ;;
11508         *)      : no getnetbyaddr, so pick harmless default
11509                 netdb_net_type='long'
11510                 ;;
11511         esac
11512 fi
11513 : locate the preferred pager for this system
11514 case "$pager" in
11515 '')
11516         dflt=''
11517         case "$pg" in
11518         /*) dflt=$pg;;
11519         esac
11520         case "$more" in
11521         /*) dflt=$more;;
11522         esac
11523         case "$less" in
11524         /*) dflt=$less;;
11525         esac
11526         case "$dflt" in
11527         '') dflt=/usr/ucb/more;;
11528         esac
11529         ;;
11530 *) dflt="$pager";;
11531 esac
11532 echo " "
11533 fn=f/
11534 rp='What pager is used on your system?'
11535 . ./getfile
11536 pager="$ans"
11537
11538 : see what type pids are declared as in the kernel
11539 rp="What is the type of process ids on this system?"
11540 set pid_t pidtype int stdio.h sys/types.h
11541 eval $typedef_ask
11542
11543 : check for length of pointer
11544 echo " "
11545 case "$ptrsize" in
11546 '')
11547         $echo $n "Checking to see how big your pointers are...$c" >&4
11548         if test "$voidflags" -gt 7; then
11549                 echo '#define VOID_PTR char *' > try.c
11550         else
11551                 echo '#define VOID_PTR void *' > try.c
11552         fi
11553         $cat >>try.c <<'EOCP'
11554 #include <stdio.h>
11555 int main()
11556 {
11557         printf("%d\n", sizeof(VOID_PTR));
11558         exit(0);
11559 }
11560 EOCP
11561         set try
11562         if eval $compile_ok; then
11563                 ptrsize=`./try`
11564                 $echo " $ptrsize bytes." >&4
11565         else
11566                 dflt='4'
11567                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11568                 rp="What is the size of a pointer (in bytes)?"
11569                 . ./myread
11570                 ptrsize="$ans"
11571         fi
11572         ;;
11573 esac
11574 $rm -f try.c try
11575
11576 : see if ar generates random libraries by itself
11577 echo " "
11578 echo "Checking how to generate random libraries on your machine..." >&4
11579 echo 'int bar1() { return bar2(); }' > bar1.c
11580 echo 'int bar2() { return 2; }' > bar2.c
11581 $cat > foo.c <<'EOP'
11582 int main() { printf("%d\n", bar1()); exit(0); }
11583 EOP
11584 $cc $ccflags -c bar1.c >/dev/null 2>&1
11585 $cc $ccflags -c bar2.c >/dev/null 2>&1
11586 $cc $ccflags -c foo.c >/dev/null 2>&1
11587 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11588 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11589         ./foobar >/dev/null 2>&1; then
11590         echo "$ar appears to generate random libraries itself."
11591         orderlib=false
11592         ranlib=":"
11593 elif $ar ts bar$_a >/dev/null 2>&1 &&
11594         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11595         ./foobar >/dev/null 2>&1; then
11596                 echo "a table of contents needs to be added with '$ar ts'."
11597                 orderlib=false
11598                 ranlib="$ar ts"
11599 else
11600         case "$ranlib" in
11601         :) ranlib='';;
11602         '')
11603                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11604                 $test -f $ranlib || ranlib=''
11605                 ;;
11606         esac
11607         if $test -n "$ranlib"; then
11608                 echo "your system has '$ranlib'; we'll use that."
11609                 orderlib=false
11610         else
11611                 echo "your system doesn't seem to support random libraries"
11612                 echo "so we'll use lorder and tsort to order the libraries."
11613                 orderlib=true
11614                 ranlib=":"
11615         fi
11616 fi
11617 $rm -f foo* bar* 
11618
11619 : check for type of arguments to select. 
11620 case "$selecttype" in
11621 '') case "$d_select" in
11622         $define)
11623                 $cat <<EOM
11624 Checking to see what type of arguments are accepted by select().
11625 EOM
11626                 hdrs="$define sys/types.h
11627                         $i_systime sys/time.h 
11628                         $i_sysselct sys/select.h
11629                         $d_socket sys/socket.h"
11630                 : The first arg can be int, unsigned, or size_t
11631                 : The last arg may or may not be 'const'
11632                 val=''
11633                 : void pointer has been seen but using that
11634                 : breaks the selectminbits test
11635                 for xxx in 'fd_set *' 'int *'; do
11636                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11637                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11638                                         case "$val" in
11639                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11640                                                 if ./protochk "$try" $hdrs; then
11641                                                         echo "Your system accepts $xxx."
11642                                                         val="$xxx"
11643                                                 fi
11644                                                 ;;
11645                                         esac
11646                                 done
11647                         done
11648                 done
11649                 case "$val" in
11650                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11651                         case "$d_fd_set" in
11652                                 $define) dflt="fd_set *" ;;
11653                                 *)              dflt="int *" ;;
11654                         esac
11655                         . ./myread
11656                         val=$ans
11657                         ;;
11658                 esac
11659                 selecttype="$val"
11660                 ;;
11661         *)      : no select, so pick a harmless default
11662                 selecttype='int *'
11663                 ;;
11664         esac
11665         ;;
11666 esac
11667
11668 : check for the select 'width'
11669 case "$selectminbits" in
11670 '') case "$d_select" in
11671         $define)
11672                 $cat <<EOM
11673
11674 Checking to see on how many bits at a time your select() operates...
11675 EOM
11676                 $cat >try.c <<EOCP
11677 #include <sys/types.h>
11678 #$i_time I_TIME
11679 #$i_systime I_SYS_TIME
11680 #$i_systimek I_SYS_TIME_KERNEL
11681 #ifdef I_TIME
11682 #   include <time.h>
11683 #endif
11684 #ifdef I_SYS_TIME
11685 #   ifdef I_SYS_TIME_KERNEL
11686 #       define KERNEL
11687 #   endif
11688 #   include <sys/time.h>
11689 #   ifdef I_SYS_TIME_KERNEL
11690 #       undef KERNEL
11691 #   endif
11692 #endif
11693 #$i_sysselct I_SYS_SELECT
11694 #ifdef I_SYS_SELECT
11695 #include <sys/select.h>
11696 #endif
11697 #$d_socket HAS_SOCKET
11698 #ifdef HAS_SOCKET
11699 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11700 #endif
11701 #include <stdio.h>
11702 $selecttype b;
11703 #define S sizeof(*(b))
11704 #define MINBITS 64
11705 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11706 #define NBITS  (NBYTES * 8)
11707 int main() {
11708     char s[NBYTES];
11709     struct timeval t;
11710     int i;
11711     FILE* fp;
11712     int fd;
11713
11714     fclose(stdin);
11715     fp = fopen("try.c", "r");
11716     if (fp == 0)
11717       exit(1);
11718     fd = fileno(fp);
11719     if (fd < 0)
11720       exit(2);
11721     b = ($selecttype)s;
11722     for (i = 0; i < NBITS; i++)
11723         FD_SET(i, b);
11724     t.tv_sec  = 0;
11725     t.tv_usec = 0;
11726     select(fd + 1, b, 0, 0, &t);
11727     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11728     printf("%d\n", i + 1);
11729     return 0;
11730 }
11731 EOCP
11732                 set try
11733                 if eval $compile_ok; then
11734                         selectminbits=`./try`
11735                         case "$selectminbits" in
11736                         '')     cat >&4 <<EOM
11737 Cannot figure out on how many bits at a time your select() operates.
11738 I'll play safe and guess it is 32 bits.
11739 EOM
11740                                 selectminbits=32
11741                                 bits="32 bits"
11742                                 ;;
11743                         1)      bits="1 bit" ;;
11744                         *)      bits="$selectminbits bits" ;;
11745                         esac
11746                         echo "Your select() operates on $bits at a time." >&4
11747                 else
11748                         rp='What is the minimum number of bits your select() operates on?'
11749                         case "$byteorder" in
11750                         1234|12345678)  dflt=32 ;;
11751                         *)              dflt=1  ;;
11752                         esac
11753                         . ./myread
11754                         val=$ans
11755                         selectminbits="$val"
11756                 fi
11757                 $rm -f try.* try
11758                 ;;
11759         *)      : no select, so pick a harmless default
11760                 selectminbits='32'
11761                 ;;
11762         esac
11763         ;;
11764 esac
11765
11766 : Trace out the files included by signal.h, then look for SIGxxx names.
11767 : Remove SIGARRAYSIZE used by HPUX.
11768 : Remove SIGSTKSIZE used by Linux.
11769 : Remove SIGSTKSZ used by Posix.
11770 : Remove SIGTYP void lines used by OS2.
11771 xxx=`echo '#include <signal.h>' |
11772         $cppstdin $cppminus $cppflags 2>/dev/null |
11773         $grep '^[       ]*#.*include' | 
11774         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11775 : Check this list of files to be sure we have parsed the cpp output ok.
11776 : This will also avoid potentially non-existent files, such 
11777 : as ../foo/bar.h
11778 xxxfiles=''
11779 for xx in $xxx /dev/null ; do
11780         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11781 done
11782 : If we have found no files, at least try signal.h
11783 case "$xxxfiles" in
11784 '')     xxxfiles=`./findhdr signal.h` ;;
11785 esac
11786 xxx=`awk '
11787 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11788         print substr($2, 4, 20)
11789 }
11790 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11791         print substr($3, 4, 20)
11792 }' $xxxfiles`
11793 : Append some common names just in case the awk scan failed.
11794 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11795 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11796 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11797 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11798 : generate a few handy files for later
11799 $cat > signal.c <<'EOCP'
11800 #include <sys/types.h>
11801 #include <signal.h>
11802 #include <stdio.h>
11803 int main() {
11804
11805 /* Strange style to avoid deeply-nested #if/#else/#endif */
11806 #ifndef NSIG
11807 #  ifdef _NSIG
11808 #    define NSIG (_NSIG)
11809 #  endif
11810 #endif
11811
11812 #ifndef NSIG
11813 #  ifdef SIGMAX
11814 #    define NSIG (SIGMAX+1)
11815 #  endif
11816 #endif
11817
11818 #ifndef NSIG
11819 #  ifdef SIG_MAX
11820 #    define NSIG (SIG_MAX+1)
11821 #  endif
11822 #endif
11823
11824 #ifndef NSIG
11825 #  ifdef MAXSIG
11826 #    define NSIG (MAXSIG+1)
11827 #  endif
11828 #endif
11829
11830 #ifndef NSIG
11831 #  ifdef MAX_SIG
11832 #    define NSIG (MAX_SIG+1)
11833 #  endif
11834 #endif
11835
11836 #ifndef NSIG
11837 #  ifdef SIGARRAYSIZE
11838 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11839 #  endif
11840 #endif
11841
11842 #ifndef NSIG
11843 #  ifdef _sys_nsig
11844 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11845 #  endif
11846 #endif
11847
11848 /* Default to some arbitrary number that's big enough to get most
11849    of the common signals.
11850 */
11851 #ifndef NSIG
11852 #    define NSIG 50
11853 #endif
11854
11855 printf("NSIG %d\n", NSIG);
11856
11857 #ifndef JUST_NSIG
11858
11859 EOCP
11860
11861 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11862 {
11863         printf "#ifdef SIG"; printf $1; printf "\n"
11864         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11865         printf $1; printf ");\n"
11866         printf "#endif\n"
11867 }
11868 END {
11869         printf "#endif /* JUST_NSIG */\n";
11870         printf "}\n";
11871 }
11872 ' >>signal.c
11873 $cat >signal.awk <<'EOP'
11874 BEGIN { ndups = 0 }
11875 $1 ~ /^NSIG$/ { nsig = $2 }
11876 ($1 !~ /^NSIG$/) && (NF == 2) {
11877     if ($2 > maxsig) { maxsig = $2 }
11878     if (sig_name[$2]) {
11879         dup_name[ndups] = $1
11880         dup_num[ndups] = $2
11881         ndups++ 
11882     }
11883     else {
11884         sig_name[$2] = $1
11885         sig_num[$2] = $2
11886     }
11887 }
11888 END { 
11889     if (nsig == 0) {
11890         nsig = maxsig + 1
11891     }
11892     printf("NSIG %d\n", nsig);
11893     for (n = 1; n < nsig; n++) {
11894         if (sig_name[n]) {
11895             printf("%s %d\n", sig_name[n], sig_num[n])
11896         }
11897         else {
11898             printf("NUM%d %d\n", n, n) 
11899         }
11900     }
11901     for (n = 0; n < ndups; n++) {
11902         printf("%s %d\n", dup_name[n], dup_num[n])
11903     }
11904 }
11905 EOP
11906 $cat >signal_cmd <<EOS
11907 $startsh
11908 if $test -s signal.lst; then
11909     echo "Using your existing signal.lst file"
11910         exit 0
11911 fi
11912 xxx="$xxx"
11913 EOS
11914 $cat >>signal_cmd <<'EOS'
11915
11916 set signal
11917 if eval $compile_ok; then
11918         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11919 else
11920         echo "(I can't seem be able to compile the whole test program)" >&4
11921         echo "(I'll try it in little pieces.)" >&4
11922         set signal -DJUST_NSIG
11923         if eval $compile_ok; then
11924                 ./signal$_exe > signal.nsg
11925                 $cat signal.nsg
11926         else
11927                 echo "I can't seem to figure out how many signals you have." >&4
11928                 echo "Guessing 50." >&4
11929                 echo 'NSIG 50' > signal.nsg
11930         fi
11931         : Now look at all the signal names, one at a time.
11932         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11933                 $cat > signal.c <<EOCP
11934 #include <sys/types.h>
11935 #include <signal.h>
11936 #include <stdio.h>
11937 int main() {
11938 printf("$xx %d\n", SIG${xx});
11939 return 0;
11940 }
11941 EOCP
11942                 set signal
11943                 if eval $compile; then
11944                         echo "SIG${xx} found."
11945                         ./signal$_exe  >> signal.ls1
11946                 else
11947                         echo "SIG${xx} NOT found."
11948                 fi
11949         done
11950         if $test -s signal.ls1; then
11951                 $cat signal.nsg signal.ls1 |
11952                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11953         fi
11954
11955 fi
11956 if $test -s signal.lst; then
11957         :
11958 else
11959         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11960         echo 'kill -l' >signal
11961         set X `csh -f <signal`
11962         $rm -f signal
11963         shift
11964         case $# in
11965         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11966         esac
11967         echo $@ | $tr ' ' $trnl | \
11968             $awk '{ printf "%s %d\n", $1, ++s; }
11969                   END { printf "NSIG %d\n", ++s }' >signal.lst
11970 fi
11971 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11972 EOS
11973 chmod a+x signal_cmd
11974 $eunicefix signal_cmd
11975
11976 : generate list of signal names
11977 echo " "
11978 case "$sig_name_init" in
11979 '') doinit=yes ;;
11980 *)  case "$sig_num_init" in
11981     ''|*,*) doinit=yes ;;
11982     esac ;;
11983 esac
11984 case "$doinit" in
11985 yes)
11986         echo "Generating a list of signal names and numbers..." >&4
11987         . ./signal_cmd
11988         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11989         sig_name=`$awk 'BEGIN { printf "ZERO " }
11990                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11991         sig_num=`$awk  'BEGIN { printf "0 " }
11992                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11993         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11994                              !/^NSIG/   { printf "\"%s\", ", $1 }
11995                              END        { printf "0\n" }' signal.lst`
11996         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11997                              !/^NSIG/   { printf "%d, ", $2}
11998                              END        { printf "0\n"}' signal.lst`
11999         ;;
12000 esac
12001 echo "The following $sig_count signals are available:"
12002 echo " "
12003 echo $sig_name | $awk \
12004 'BEGIN { linelen = 0 }
12005 {
12006         for (i = 1; i <= NF; i++) {
12007                 name = "SIG" $i " "
12008                 linelen = linelen + length(name)
12009                 if (linelen > 70) {
12010                         printf "\n"
12011                         linelen = length(name)
12012                 }
12013                 printf "%s", name
12014         }
12015         printf "\n"
12016 }'
12017 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12018
12019 : see what type is used for signed size_t
12020 set ssize_t ssizetype int stdio.h sys/types.h
12021 eval $typedef
12022 dflt="$ssizetype"
12023 $cat > ssize.c <<EOM
12024 #include <stdio.h>
12025 #include <sys/types.h>
12026 #define Size_t $sizetype
12027 #define SSize_t $dflt
12028 int main()
12029 {
12030         if (sizeof(Size_t) == sizeof(SSize_t))
12031                 printf("$dflt\n");
12032         else if (sizeof(Size_t) == sizeof(int))
12033                 printf("int\n");
12034         else 
12035                 printf("long\n");
12036         exit(0);
12037 }
12038 EOM
12039 echo " "
12040 set ssize
12041 if eval $compile_ok && ./ssize > /dev/null; then
12042         ssizetype=`./ssize`
12043         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12044 else
12045         $cat >&4 <<EOM
12046 Help! I can't compile and run the ssize_t test program: please enlighten me!
12047 (This is probably a misconfiguration in your system or libraries, and
12048 you really ought to fix it.  Still, I'll try anyway.)
12049
12050 I need a type that is the same size as $sizetype, but is guaranteed to
12051 be signed.  Common values are ssize_t, int and long.
12052
12053 EOM
12054         rp="What signed type is the same size as $sizetype?"
12055         . ./myread
12056         ssizetype="$ans"
12057 fi
12058 $rm -f ssize ssize.*
12059
12060 : see what type of char stdio uses.
12061 echo " "
12062 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12063         echo "Your stdio uses unsigned chars." >&4
12064         stdchar="unsigned char"
12065 else
12066         echo "Your stdio uses signed chars." >&4
12067         stdchar="char"
12068 fi
12069
12070 : see if time exists
12071 echo " "
12072 if test "X$d_time" = X -o X"$timetype" = X; then
12073     if set time val -f d_time; eval $csym; $val; then
12074                 echo 'time() found.' >&4
12075                 val="$define"
12076                 rp="What is the type returned by time() on this system?"
12077                 set time_t timetype long stdio.h sys/types.h
12078                 eval $typedef_ask
12079     else
12080                 echo 'time() not found, hope that will do.' >&4
12081                 val="$undef"
12082                 timetype='int';
12083     fi
12084     set d_time
12085     eval $setvar
12086 fi
12087
12088 : see what type uids are declared as in the kernel
12089 echo " "
12090 echo "Looking for the type for user ids returned by getuid()."
12091 set uid_t uidtype xxx stdio.h sys/types.h
12092 eval $typedef
12093 case "$uidtype" in
12094 xxx)
12095         xxx=`./findhdr sys/user.h`
12096         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12097         case $1 in
12098         unsigned) dflt="$1 $2" ;;
12099         *) dflt="$1" ;;
12100         esac
12101         ;;
12102 *) dflt="$uidtype";;
12103 esac
12104 case "$uidtype" in
12105 uid_t)  echo "uid_t found." ;;
12106 *)      rp="What is the type for user ids returned by getuid()?"
12107         . ./myread
12108         uidtype="$ans"
12109         ;;
12110 esac
12111
12112 : see if dbm.h is available
12113 : see if dbmclose exists
12114 set dbmclose d_dbmclose
12115 eval $inlibc
12116
12117 case "$d_dbmclose" in
12118 $define)
12119         set dbm.h i_dbm
12120         eval $inhdr
12121         case "$i_dbm" in
12122         $define)
12123                 val="$undef"
12124                 set i_rpcsvcdbm
12125                 eval $setvar
12126                 ;;
12127         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12128                 eval $inhdr
12129                 ;;
12130         esac
12131         ;;
12132 *)      echo "We won't be including <dbm.h>"
12133         val="$undef"
12134         set i_dbm
12135         eval $setvar
12136         val="$undef"
12137         set i_rpcsvcdbm
12138         eval $setvar
12139         ;;
12140 esac
12141
12142 : see if this is a sys/file.h system
12143 val=''
12144 set sys/file.h val
12145 eval $inhdr
12146
12147 : do we need to include sys/file.h ?
12148 case "$val" in
12149 "$define")
12150         echo " "
12151         if $h_sysfile; then
12152                 val="$define"
12153                 echo "We'll be including <sys/file.h>." >&4
12154         else
12155                 val="$undef"
12156                 echo "We won't be including <sys/file.h>." >&4
12157         fi
12158         ;;
12159 *)
12160         h_sysfile=false
12161         ;;
12162 esac
12163 set i_sysfile
12164 eval $setvar
12165
12166 : see if fcntl.h is there
12167 val=''
12168 set fcntl.h val
12169 eval $inhdr
12170
12171 : see if we can include fcntl.h
12172 case "$val" in
12173 "$define")
12174         echo " "
12175         if $h_fcntl; then
12176                 val="$define"
12177                 echo "We'll be including <fcntl.h>." >&4
12178         else
12179                 val="$undef"
12180                 if $h_sysfile; then
12181         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12182                 else
12183                         echo "We won't be including <fcntl.h>." >&4
12184                 fi
12185         fi
12186         ;;
12187 *)
12188         h_fcntl=false
12189         val="$undef"
12190         ;;
12191 esac
12192 set i_fcntl
12193 eval $setvar
12194
12195 : see if locale.h is available
12196 set locale.h i_locale
12197 eval $inhdr
12198
12199 : see if mach cthreads are available
12200 if test "X$usethreads" = "X$define"; then
12201         set mach/cthreads.h i_machcthr
12202         eval $inhdr
12203 else
12204         i_machcthr="$undef"
12205 fi
12206
12207
12208
12209 : see if this is a math.h system
12210 set math.h i_math
12211 eval $inhdr
12212
12213 : see if this is a mntent.h system
12214 set mntent.h i_mntent
12215 eval $inhdr
12216
12217 : see if ndbm.h is available
12218 set ndbm.h t_ndbm
12219 eval $inhdr
12220 case "$t_ndbm" in
12221 $define)
12222         : see if dbm_open exists
12223         set dbm_open d_dbm_open
12224         eval $inlibc
12225         case "$d_dbm_open" in
12226         $undef)
12227                 t_ndbm="$undef"
12228                 echo "We won't be including <ndbm.h>"
12229                 ;;
12230         esac
12231         ;;
12232 esac
12233 val="$t_ndbm"
12234 set i_ndbm
12235 eval $setvar
12236
12237 : see if net/errno.h is available
12238 val=''
12239 set net/errno.h val
12240 eval $inhdr
12241
12242 : Unfortunately, it causes problems on some systems.  Arrgh.
12243 case "$val" in
12244 $define)
12245         cat > try.c <<'EOM'
12246 #include <stdio.h>
12247 #include <errno.h>
12248 #include <net/errno.h>
12249 int func()
12250 {
12251         return ENOTSOCK;
12252 }
12253 EOM
12254         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12255                 echo "We'll be including <net/errno.h>." >&4
12256         else
12257                 echo "We won't be including <net/errno.h>." >&4
12258                 val="$undef"
12259         fi
12260         $rm -f try.* try
12261         ;;
12262 esac
12263 set i_neterrno
12264 eval $setvar
12265
12266 : see if netinet/tcp.h is available
12267 set netinet/tcp.h i_netinettcp
12268 eval $inhdr
12269
12270 : see if this is a poll.h system
12271 set poll.h i_poll
12272 eval $inhdr
12273
12274 : get C preprocessor symbols handy
12275 echo " "
12276 $echo $n "Hmm... $c"
12277 echo $al | $tr ' ' $trnl >Cppsym.know
12278 $cat <<EOSS >Cppsym
12279 $startsh
12280 case "\$1" in
12281 -l) list=true
12282         shift
12283         ;;
12284 esac
12285 unknown=''
12286 case "\$list\$#" in
12287 1|2)
12288         for sym do
12289                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12290                         exit 0
12291                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12292                         :
12293                 else
12294                         unknown="\$unknown \$sym"
12295                 fi
12296         done
12297         set X \$unknown
12298         shift
12299         ;;
12300 esac
12301 case \$# in
12302 0) exit 1;;
12303 esac
12304 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12305 #ifdef \1\\
12306 exit 0; _ _ _ _\1\\      \1\\
12307 #endif\\
12308 /' >Cppsym\$\$
12309 echo "exit 1; _ _ _" >>Cppsym\$\$
12310 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12311 case "\$list" in
12312 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12313 *)
12314         sh Cppsym2\$\$
12315         status=\$?
12316         ;;
12317 esac
12318 $rm -f Cppsym\$\$ Cppsym2\$\$
12319 exit \$status
12320 EOSS
12321 chmod +x Cppsym
12322 $eunicefix Cppsym
12323 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12324
12325 : now check the C compiler for additional symbols
12326 postprocess_cc_v=''
12327 case "$osname" in
12328 aix) postprocess_cc_v="|$tr , ' '" ;;
12329 esac
12330 $cat >ccsym <<EOS
12331 $startsh
12332 $cat >tmp.c <<EOF
12333 extern int foo;
12334 EOF
12335 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12336 do
12337         case "\$i" in
12338         -D*) echo "\$i" | $sed 's/^-D//';;
12339         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12340         esac
12341 done
12342 $rm -f try.c
12343 EOS
12344 postprocess_cc_v=''
12345 chmod +x ccsym
12346 $eunicefix ccsym
12347 ./ccsym > ccsym1.raw
12348 if $test -s ccsym1.raw; then
12349        $sort ccsym1.raw | $uniq >ccsym.raw
12350 else
12351        mv ccsym1.raw ccsym.raw
12352 fi
12353
12354 $awk '/\=/ { print $0; next }
12355         { print $0"=1" }' ccsym.raw >ccsym.list
12356 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12357 $comm -13 ccsym.true ccsym.list >ccsym.own
12358 $comm -12 ccsym.true ccsym.list >ccsym.com
12359 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12360 also=''
12361 if $test -z ccsym.raw; then
12362         echo "Your C compiler doesn't seem to define any symbols!" >&4
12363         echo " "
12364         echo "However, your C preprocessor defines the following symbols:"
12365         $cat Cppsym.true
12366         ccsymbols=''
12367         cppsymbols=`$cat Cppsym.true`
12368         cppsymbols=`echo $cppsymbols`
12369         cppccsymbols="$cppsymbols"
12370 else
12371         if $test -s ccsym.com; then
12372                 echo "Your C compiler and pre-processor define these symbols:"
12373                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12374                 also='also '
12375                 symbols='ones'
12376                 cppccsymbols=`$cat ccsym.com`
12377                 cppccsymbols=`echo $cppccsymbols`
12378                 $test "$silent" || sleep 1
12379         fi
12380         if $test -s ccsym.cpp; then
12381                 $test "$also" && echo " "
12382                 echo "Your C pre-processor ${also}defines the following symbols:"
12383                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12384                 also='further '
12385                 cppsymbols=`$cat ccsym.cpp`
12386                 cppsymbols=`echo $cppsymbols`
12387                 $test "$silent" || sleep 1
12388         fi
12389         if $test -s ccsym.own; then
12390                 $test "$also" && echo " "
12391                 echo "Your C compiler ${also}defines the following cpp symbols:"
12392                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12393                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12394                 ccsymbols=`$cat ccsym.own`
12395                 ccsymbols=`echo $ccsymbols`
12396                 $test "$silent" || sleep 1
12397         fi
12398 fi
12399 $rm -f ccsym*
12400
12401 : see if this is a termio system
12402 val="$undef"
12403 val2="$undef"
12404 val3="$undef"
12405 if $test `./findhdr termios.h`; then
12406         set tcsetattr i_termios
12407         eval $inlibc
12408         val3="$i_termios"
12409 fi
12410 echo " "
12411 case "$val3" in
12412 "$define") echo "You have POSIX termios.h... good!" >&4;;
12413 *) if ./Cppsym pyr; then
12414                 case "`/bin/universe`" in
12415                 ucb) if $test `./findhdr sgtty.h`; then
12416                                 val2="$define"
12417                                 echo "<sgtty.h> found." >&4
12418                         else
12419                                 echo "System is pyramid with BSD universe."
12420                                 echo "<sgtty.h> not found--you could have problems." >&4
12421                         fi;;
12422                 *) if $test `./findhdr termio.h`; then
12423                                 val="$define"
12424                                 echo "<termio.h> found." >&4
12425                         else
12426                                 echo "System is pyramid with USG universe."
12427                                 echo "<termio.h> not found--you could have problems." >&4
12428                         fi;;
12429                 esac
12430         elif ./usg; then
12431                 if $test `./findhdr termio.h`; then
12432                         echo "<termio.h> found." >&4
12433                         val="$define"
12434                 elif $test `./findhdr sgtty.h`; then
12435                         echo "<sgtty.h> found." >&4
12436                         val2="$define"
12437                 else
12438 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12439                 fi
12440         else
12441                 if $test `./findhdr sgtty.h`; then
12442                         echo "<sgtty.h> found." >&4
12443                         val2="$define"
12444                 elif $test `./findhdr termio.h`; then
12445                         echo "<termio.h> found." >&4
12446                         val="$define"
12447                 else
12448 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12449                 fi
12450         fi;;
12451 esac
12452 set i_termio; eval $setvar
12453 val=$val2; set i_sgtty; eval $setvar
12454 val=$val3; set i_termios; eval $setvar
12455
12456 : see if this is a shadow.h system
12457 set shadow.h i_shadow
12458 eval $inhdr
12459
12460 : see if this is a socks.h system
12461 set socks.h i_socks
12462 eval $inhdr
12463
12464 : see if stdarg is available
12465 echo " "
12466 if $test `./findhdr stdarg.h`; then
12467         echo "<stdarg.h> found." >&4
12468         valstd="$define"
12469 else
12470         echo "<stdarg.h> NOT found." >&4
12471         valstd="$undef"
12472 fi
12473
12474 : see if varags is available
12475 echo " "
12476 if $test `./findhdr varargs.h`; then
12477         echo "<varargs.h> found." >&4
12478 else
12479         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12480 fi
12481
12482 : set up the varargs testing programs
12483 $cat > varargs.c <<EOP
12484 #ifdef I_STDARG
12485 #include <stdarg.h>
12486 #endif
12487 #ifdef I_VARARGS
12488 #include <varargs.h>
12489 #endif
12490
12491 #ifdef I_STDARG
12492 int f(char *p, ...)
12493 #else
12494 int f(va_alist)
12495 va_dcl
12496 #endif
12497 {
12498         va_list ap;
12499 #ifndef I_STDARG
12500         char *p;
12501 #endif
12502 #ifdef I_STDARG
12503         va_start(ap,p);
12504 #else
12505         va_start(ap);
12506         p = va_arg(ap, char *);
12507 #endif
12508         va_end(ap);
12509 }
12510 EOP
12511 $cat > varargs <<EOP
12512 $startsh
12513 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12514         echo "true"
12515 else
12516         echo "false"
12517 fi
12518 $rm -f varargs$_o
12519 EOP
12520 chmod +x varargs
12521
12522 : now check which varargs header should be included
12523 echo " "
12524 i_varhdr=''
12525 case "$valstd" in
12526 "$define")
12527         if `./varargs I_STDARG`; then
12528                 val='stdarg.h'
12529         elif `./varargs I_VARARGS`; then
12530                 val='varargs.h'
12531         fi
12532         ;;
12533 *)
12534         if `./varargs I_VARARGS`; then
12535                 val='varargs.h'
12536         fi
12537         ;;
12538 esac
12539 case "$val" in
12540 '')
12541 echo "I could not find the definition for va_dcl... You have problems..." >&4
12542         val="$undef"; set i_stdarg; eval $setvar
12543         val="$undef"; set i_varargs; eval $setvar
12544         ;;
12545 *) 
12546         set i_varhdr
12547         eval $setvar
12548         case "$i_varhdr" in
12549         stdarg.h)
12550                 val="$define"; set i_stdarg; eval $setvar
12551                 val="$undef"; set i_varargs; eval $setvar
12552                 ;;
12553         varargs.h)
12554                 val="$undef"; set i_stdarg; eval $setvar
12555                 val="$define"; set i_varargs; eval $setvar
12556                 ;;
12557         esac
12558         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12559 esac
12560 $rm -f varargs*
12561
12562 : see if stddef is available
12563 set stddef.h i_stddef
12564 eval $inhdr
12565
12566 : see if sys/access.h is available
12567 set sys/access.h i_sysaccess
12568 eval $inhdr
12569
12570 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12571 set sys/filio.h i_sysfilio
12572 eval $inhdr
12573 echo " "
12574 if $test `./findhdr sys/ioctl.h`; then
12575         val="$define"
12576         echo '<sys/ioctl.h> found.' >&4
12577 else
12578         val="$undef"
12579         if $test $i_sysfilio = "$define"; then
12580             echo '<sys/ioctl.h> NOT found.' >&4
12581         else
12582                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12583                 $test $i_termio = "$define" && xxx="termio.h"
12584                 $test $i_termios = "$define" && xxx="termios.h"
12585 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12586         fi
12587 fi
12588 set i_sysioctl
12589 eval $setvar
12590
12591 : see if sys/resource.h has to be included
12592 set sys/resource.h i_sysresrc
12593 eval $inhdr
12594
12595 : see if sys/security.h is available
12596 set sys/security.h i_syssecrt
12597 eval $inhdr
12598
12599 : see if this is a sys/statvfs.h system
12600 set sys/statvfs.h i_sysstatvfs
12601 eval $inhdr
12602
12603 : see if this is a sys/un.h system
12604 set sys/un.h i_sysun
12605 eval $inhdr
12606
12607 : see if this is a syswait system
12608 set sys/wait.h i_syswait
12609 eval $inhdr
12610
12611 : see if this is an utime system
12612 set utime.h i_utime
12613 eval $inhdr
12614
12615 : see if this is a values.h system
12616 set values.h i_values
12617 eval $inhdr
12618
12619 : see if this is a vfork system
12620 case "$d_vfork" in
12621 "$define")
12622         set vfork.h i_vfork
12623         eval $inhdr
12624         ;;
12625 *)
12626         i_vfork="$undef"
12627         ;;
12628 esac
12629
12630 : see if gdbm.h is available
12631 set gdbm.h t_gdbm
12632 eval $inhdr
12633 case "$t_gdbm" in
12634 $define)
12635         : see if gdbm_open exists
12636         set gdbm_open d_gdbm_open
12637         eval $inlibc
12638         case "$d_gdbm_open" in
12639         $undef)
12640                 t_gdbm="$undef"
12641                 echo "We won't be including <gdbm.h>"
12642                 ;;
12643         esac
12644         ;;
12645 esac
12646 val="$t_gdbm"
12647 set i_gdbm
12648 eval $setvar
12649
12650 echo " "
12651 echo "Looking for extensions..." >&4
12652 : If we are using the old config.sh, known_extensions may contain
12653 : old or inaccurate or duplicate values.
12654 known_extensions=''
12655 nonxs_extensions=''
12656 : We do not use find because it might not be available.
12657 : We do not just use MANIFEST because the user may have dropped
12658 : some additional extensions into the source tree and expect them
12659 : to be built.
12660
12661 : Function to recursively find available extensions, ignoring DynaLoader
12662 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12663 find_extensions='
12664     for xxx in *; do
12665        case "$xxx" in
12666            DynaLoader|dynaload) ;;
12667            *)
12668            if $test -f $xxx/$xxx.xs; then
12669                known_extensions="$known_extensions $1$xxx";
12670            elif $test -f $xxx/Makefile.PL; then
12671                nonxs_extensions="$nonxs_extensions $1$xxx";
12672            else
12673                if $test -d $xxx -a $# -lt 10; then
12674                    set $1$xxx/ $*;
12675                    cd $xxx;
12676                    eval $find_extensions;
12677                    cd ..;
12678                    shift;
12679                fi
12680            fi
12681            ;;
12682        esac
12683     done'
12684 tdir=`pwd`
12685 cd $rsrc/ext
12686 set
12687 shift
12688 eval $find_extensions
12689 set X $nonxs_extensions
12690 shift
12691 nonxs_extensions="$*"
12692 set X $known_extensions
12693 shift
12694 known_extensions="$*"
12695 cd $tdir
12696
12697 : Now see which are supported on this system.
12698 avail_ext=''
12699 for xxx in $known_extensions ; do
12700         case "$xxx" in
12701         DB_File|db_file)
12702                 case "$i_db" in
12703                 $define) avail_ext="$avail_ext $xxx" ;;
12704                 esac
12705                 ;;
12706         GDBM_File|gdbm_fil)
12707                 case "$i_gdbm" in 
12708                 $define) avail_ext="$avail_ext $xxx" ;;
12709                 esac
12710                 ;;
12711         NDBM_File|ndbm_fil)
12712                 case "$i_ndbm" in
12713                 $define) avail_ext="$avail_ext $xxx" ;;
12714                 esac
12715                 ;;
12716         ODBM_File|odbm_fil) 
12717                 case "${i_dbm}${i_rpcsvcdbm}" in
12718                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12719                 esac
12720                 ;;
12721         POSIX|posix)
12722                 case "$useposix" in
12723                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12724                 esac
12725                 ;;
12726         Opcode|opcode)
12727                 case "$useopcode" in
12728                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12729                 esac
12730                 ;;
12731         Socket|socket)
12732                 case "$d_socket" in 
12733                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12734                 esac
12735                 ;;
12736         Thread|thread)
12737                 case "$usethreads" in 
12738                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12739                 esac
12740                 ;;
12741         IPC/SysV|ipc/sysv)
12742                 : XXX Do we need a useipcsysv variable here
12743                 case "${d_msg}${d_sem}${d_shm}" in 
12744                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12745                 esac
12746                 ;;
12747         *)      avail_ext="$avail_ext $xxx"
12748                 ;;
12749         esac
12750 done
12751
12752 set X $avail_ext
12753 shift
12754 avail_ext="$*"
12755
12756 : Now see which nonxs extensions are supported on this system.
12757 : For now assume all are.
12758 nonxs_ext=''
12759 for xxx in $nonxs_extensions ; do
12760         case "$xxx" in
12761         *)      nonxs_ext="$nonxs_ext $xxx"
12762                 ;;
12763         esac
12764 done
12765
12766 set X $nonxs_ext
12767 shift
12768 nonxs_ext="$*"
12769
12770 case $usedl in
12771 $define)
12772         $cat <<EOM
12773 A number of extensions are supplied with $package.  You may choose to
12774 compile these extensions for dynamic loading (the default), compile
12775 them into the $package executable (static loading), or not include
12776 them at all.  Answer "none" to include no extensions.
12777 Note that DynaLoader is always built and need not be mentioned here.
12778
12779 EOM
12780         case "$dynamic_ext" in
12781         '') dflt="$avail_ext" ;;
12782         *)      dflt="$dynamic_ext"
12783                 # Perhaps we are reusing an old out-of-date config.sh.
12784                 case "$hint" in
12785                 previous)
12786                         if test X"$dynamic_ext" != X"$avail_ext"; then
12787                                 $cat <<EOM
12788 NOTICE:  Your previous config.sh list may be incorrect. 
12789 The extensions now available to you are 
12790         ${avail_ext}
12791 but the default list from your previous config.sh is
12792         ${dynamic_ext} 
12793
12794 EOM
12795                         fi
12796                         ;;
12797                 esac
12798                 ;;
12799         esac
12800         case "$dflt" in
12801         '')     dflt=none;;
12802         esac
12803         rp="What extensions do you wish to load dynamically?"
12804         . ./myread
12805         case "$ans" in
12806         none) dynamic_ext=' ' ;;
12807         *) dynamic_ext="$ans" ;;
12808         esac
12809
12810         case "$static_ext" in
12811         '')
12812                 : Exclude those already listed in dynamic linking
12813                 dflt=''
12814                 for xxx in $avail_ext; do
12815                         case " $dynamic_ext " in
12816                         *" $xxx "*) ;;
12817                         *) dflt="$dflt $xxx" ;;
12818                         esac
12819                 done
12820                 set X $dflt
12821                 shift
12822                 dflt="$*"
12823                 ;;
12824         *)  dflt="$static_ext" 
12825                 ;;
12826         esac
12827
12828         case "$dflt" in
12829         '')     dflt=none;;
12830         esac
12831         rp="What extensions do you wish to load statically?"
12832         . ./myread
12833         case "$ans" in
12834         none) static_ext=' ' ;;
12835         *) static_ext="$ans" ;;
12836         esac
12837         ;;
12838 *)
12839         $cat <<EOM
12840 A number of extensions are supplied with $package.  Answer "none" 
12841 to include no extensions. 
12842 Note that DynaLoader is always built and need not be mentioned here.
12843
12844 EOM
12845         case "$static_ext" in
12846         '') dflt="$avail_ext" ;;
12847         *)      dflt="$static_ext"
12848                 # Perhaps we are reusing an old out-of-date config.sh.
12849                 case "$hint" in
12850                 previous)
12851                         if test X"$static_ext" != X"$avail_ext"; then
12852                                 $cat <<EOM
12853 NOTICE:  Your previous config.sh list may be incorrect. 
12854 The extensions now available to you are 
12855         ${avail_ext}
12856 but the default list from your previous config.sh is
12857         ${static_ext} 
12858
12859 EOM
12860                         fi
12861                         ;;
12862                 esac
12863                 ;;
12864         esac
12865         : Exclude those that are not xs extensions
12866         case "$dflt" in
12867         '')     dflt=none;;
12868         esac
12869         rp="What extensions do you wish to include?"
12870         . ./myread
12871         case "$ans" in
12872         none) static_ext=' ' ;;
12873         *) static_ext="$ans" ;;
12874         esac
12875         ;;
12876 esac
12877
12878 set X $dynamic_ext $static_ext $nonxs_ext
12879 shift
12880 extensions="$*"
12881
12882 : Remove build directory name from cppstdin so it can be used from
12883 : either the present location or the final installed location.
12884 echo " "
12885 : Get out of the UU directory to get correct path name.
12886 cd ..
12887 case "$cppstdin" in
12888 `pwd`/cppstdin)
12889         echo "Stripping down cppstdin path name"
12890         cppstdin=cppstdin
12891         ;;
12892 esac
12893 cd UU
12894
12895 : end of configuration questions
12896 echo " "
12897 echo "End of configuration questions."
12898 echo " "
12899
12900 : back to where it started
12901 if test -d ../UU; then
12902         cd ..
12903 fi
12904
12905 : configuration may be patched via a 'config.over' file
12906 if $test -f config.over; then
12907         echo " "
12908         dflt=y
12909         rp='I see a config.over file.  Do you wish to load it?'
12910         . UU/myread
12911         case "$ans" in
12912         n*) echo "OK, I'll ignore it.";;
12913         *)      . ./config.over
12914                 echo "Configuration override changes have been loaded."
12915                 ;;
12916         esac
12917 fi
12918
12919 : in case they want portability, strip down executable paths
12920 case "$d_portable" in
12921 "$define")
12922         echo " "
12923         echo "Stripping down executable paths..." >&4
12924         for file in $loclist $trylist; do
12925                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12926                         eval $file="\$file"
12927                 fi
12928         done
12929         ;;
12930 esac
12931
12932 : create config.sh file
12933 echo " "
12934 echo "Creating config.sh..." >&4
12935 $spitshell <<EOT >config.sh
12936 $startsh
12937 #
12938 # This file was produced by running the Configure script. It holds all the
12939 # definitions figured out by Configure. Should you modify one of these values,
12940 # do not forget to propagate your changes by running "Configure -der". You may
12941 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12942 #
12943
12944 # Package name      : $package
12945 # Source directory  : $src
12946 # Configuration time: $cf_time
12947 # Configured by     : $cf_by
12948 # Target system     : $myuname
12949
12950 Author='$Author'
12951 Date='$Date'
12952 Header='$Header'
12953 Id='$Id'
12954 Locker='$Locker'
12955 Log='$Log'
12956 Mcc='$Mcc'
12957 RCSfile='$RCSfile'
12958 Revision='$Revision'
12959 Source='$Source'
12960 State='$State'
12961 _a='$_a'
12962 _exe='$_exe'
12963 _o='$_o'
12964 afs='$afs'
12965 alignbytes='$alignbytes'
12966 ansi2knr='$ansi2knr'
12967 aphostname='$aphostname'
12968 apiversion='$apiversion'
12969 ar='$ar'
12970 archlib='$archlib'
12971 archlibexp='$archlibexp'
12972 archname64='$archname64'
12973 archname='$archname'
12974 archobjs='$archobjs'
12975 awk='$awk'
12976 baserev='$baserev'
12977 bash='$bash'
12978 bin='$bin'
12979 binexp='$binexp'
12980 bison='$bison'
12981 byacc='$byacc'
12982 byteorder='$byteorder'
12983 c='$c'
12984 castflags='$castflags'
12985 cat='$cat'
12986 cc='$cc'
12987 cccdlflags='$cccdlflags'
12988 ccdlflags='$ccdlflags'
12989 ccflags='$ccflags'
12990 ccsymbols='$ccsymbols'
12991 cf_by='$cf_by'
12992 cf_email='$cf_email'
12993 cf_time='$cf_time'
12994 chgrp='$chgrp'
12995 chmod='$chmod'
12996 chown='$chown'
12997 clocktype='$clocktype'
12998 comm='$comm'
12999 compress='$compress'
13000 contains='$contains'
13001 cp='$cp'
13002 cpio='$cpio'
13003 cpp='$cpp'
13004 cpp_stuff='$cpp_stuff'
13005 cppccsymbols='$cppccsymbols'
13006 cppflags='$cppflags'
13007 cpplast='$cpplast'
13008 cppminus='$cppminus'
13009 cpprun='$cpprun'
13010 cppstdin='$cppstdin'
13011 cppsymbols='$cppsymbols'
13012 crosscompile='$crosscompile'
13013 cryptlib='$cryptlib'
13014 csh='$csh'
13015 d_Gconvert='$d_Gconvert'
13016 d_access='$d_access'
13017 d_accessx='$d_accessx'
13018 d_alarm='$d_alarm'
13019 d_archlib='$d_archlib'
13020 d_attribut='$d_attribut'
13021 d_bcmp='$d_bcmp'
13022 d_bcopy='$d_bcopy'
13023 d_bsd='$d_bsd'
13024 d_bsdgetpgrp='$d_bsdgetpgrp'
13025 d_bsdsetpgrp='$d_bsdsetpgrp'
13026 d_bzero='$d_bzero'
13027 d_casti32='$d_casti32'
13028 d_castneg='$d_castneg'
13029 d_charvspr='$d_charvspr'
13030 d_chown='$d_chown'
13031 d_chroot='$d_chroot'
13032 d_chsize='$d_chsize'
13033 d_closedir='$d_closedir'
13034 d_cmsghdr_s='$d_cmsghdr_s'
13035 d_const='$d_const'
13036 d_crypt='$d_crypt'
13037 d_csh='$d_csh'
13038 d_cuserid='$d_cuserid'
13039 d_dbl_dig='$d_dbl_dig'
13040 d_dbmclose64='$d_dbmclose64'
13041 d_dbminit64='$d_dbminit64'
13042 d_delete64='$d_delete64'
13043 d_difftime='$d_difftime'
13044 d_dirent64_s='$d_dirent64_s'
13045 d_dirnamlen='$d_dirnamlen'
13046 d_dlerror='$d_dlerror'
13047 d_dlopen='$d_dlopen'
13048 d_dlsymun='$d_dlsymun'
13049 d_dosuid='$d_dosuid'
13050 d_drand48proto='$d_drand48proto'
13051 d_dup2='$d_dup2'
13052 d_eaccess='$d_eaccess'
13053 d_endgrent='$d_endgrent'
13054 d_endhent='$d_endhent'
13055 d_endnent='$d_endnent'
13056 d_endpent='$d_endpent'
13057 d_endpwent='$d_endpwent'
13058 d_endsent='$d_endsent'
13059 d_endspent='$d_endspent'
13060 d_eofnblk='$d_eofnblk'
13061 d_eunice='$d_eunice'
13062 d_fchmod='$d_fchmod'
13063 d_fchown='$d_fchown'
13064 d_fcntl='$d_fcntl'
13065 d_fd_macros='$d_fd_macros'
13066 d_fd_set='$d_fd_set'
13067 d_fds_bits='$d_fds_bits'
13068 d_fetch64='$d_fetch64'
13069 d_fgetpos64='$d_fgetpos64'
13070 d_fgetpos='$d_fgetpos'
13071 d_firstkey64='$d_firstkey64'
13072 d_flexfnam='$d_flexfnam'
13073 d_flock64_s='$d_flock64_s'
13074 d_flock='$d_flock'
13075 d_fopen64='$d_fopen64'
13076 d_fork='$d_fork'
13077 d_fpathconf='$d_fpathconf'
13078 d_freopen64='$d_freopen64'
13079 d_fseek64='$d_fseek64'
13080 d_fseeko64='$d_fseeko64'
13081 d_fseeko='$d_fseeko'
13082 d_fsetpos64='$d_fsetpos64'
13083 d_fsetpos='$d_fsetpos'
13084 d_fstat64='$d_fstat64'
13085 d_fstatfs='$d_fstatfs'
13086 d_fstatvfs='$d_fstatvfs'
13087 d_ftell64='$d_ftell64'
13088 d_ftello64='$d_ftello64'
13089 d_ftello='$d_ftello'
13090 d_ftime='$d_ftime'
13091 d_ftruncate64='$d_ftruncate64'
13092 d_getgrent='$d_getgrent'
13093 d_getgrps='$d_getgrps'
13094 d_gethbyaddr='$d_gethbyaddr'
13095 d_gethbyname='$d_gethbyname'
13096 d_gethent='$d_gethent'
13097 d_gethname='$d_gethname'
13098 d_gethostprotos='$d_gethostprotos'
13099 d_getlogin='$d_getlogin'
13100 d_getmntent='$d_getmntent'
13101 d_getnbyaddr='$d_getnbyaddr'
13102 d_getnbyname='$d_getnbyname'
13103 d_getnent='$d_getnent'
13104 d_getnetprotos='$d_getnetprotos'
13105 d_getpbyname='$d_getpbyname'
13106 d_getpbynumber='$d_getpbynumber'
13107 d_getpent='$d_getpent'
13108 d_getpgid='$d_getpgid'
13109 d_getpgrp2='$d_getpgrp2'
13110 d_getpgrp='$d_getpgrp'
13111 d_getppid='$d_getppid'
13112 d_getprior='$d_getprior'
13113 d_getprotoprotos='$d_getprotoprotos'
13114 d_getpwent='$d_getpwent'
13115 d_getsbyname='$d_getsbyname'
13116 d_getsbyport='$d_getsbyport'
13117 d_getsent='$d_getsent'
13118 d_getservprotos='$d_getservprotos'
13119 d_getspent='$d_getspent'
13120 d_getspnam='$d_getspnam'
13121 d_gettimeod='$d_gettimeod'
13122 d_gnulibc='$d_gnulibc'
13123 d_grpasswd='$d_grpasswd'
13124 d_hasmntopt='$d_hasmntopt'
13125 d_htonl='$d_htonl'
13126 d_index='$d_index'
13127 d_inetaton='$d_inetaton'
13128 d_ino64_t='$d_ino64_t'
13129 d_int64t='$d_int64t'
13130 d_iovec_s='$d_iovec_s'
13131 d_isascii='$d_isascii'
13132 d_killpg='$d_killpg'
13133 d_lchown='$d_lchown'
13134 d_link='$d_link'
13135 d_llseek='$d_llseek'
13136 d_locconv='$d_locconv'
13137 d_lockf64='$d_lockf64'
13138 d_lockf='$d_lockf'
13139 d_longdbl='$d_longdbl'
13140 d_longlong='$d_longlong'
13141 d_lseek64='$d_lseek64'
13142 d_lstat64='$d_lstat64'
13143 d_lstat='$d_lstat'
13144 d_madvise='$d_madvise'
13145 d_mblen='$d_mblen'
13146 d_mbstowcs='$d_mbstowcs'
13147 d_mbtowc='$d_mbtowc'
13148 d_memchr='$d_memchr'
13149 d_memcmp='$d_memcmp'
13150 d_memcpy='$d_memcpy'
13151 d_memmove='$d_memmove'
13152 d_memset='$d_memset'
13153 d_mkdir='$d_mkdir'
13154 d_mkfifo='$d_mkfifo'
13155 d_mktime='$d_mktime'
13156 d_mmap='$d_mmap'
13157 d_mprotect='$d_mprotect'
13158 d_msg='$d_msg'
13159 d_msg_ctrunc='$d_msg_ctrunc'
13160 d_msg_dontroute='$d_msg_dontroute'
13161 d_msg_oob='$d_msg_oob'
13162 d_msg_peek='$d_msg_peek'
13163 d_msg_proxy='$d_msg_proxy'
13164 d_msgctl='$d_msgctl'
13165 d_msgget='$d_msgget'
13166 d_msghdr_s='$d_msghdr_s'
13167 d_msgrcv='$d_msgrcv'
13168 d_msgsnd='$d_msgsnd'
13169 d_msync='$d_msync'
13170 d_munmap='$d_munmap'
13171 d_mymalloc='$d_mymalloc'
13172 d_nextkey64='$d_nextkey64'
13173 d_nice='$d_nice'
13174 d_off64_t='$d_off64_t'
13175 d_offset_t='$d_offset_t'
13176 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13177 d_oldpthreads='$d_oldpthreads'
13178 d_oldsock='$d_oldsock'
13179 d_open3='$d_open3'
13180 d_open64='$d_open64'
13181 d_opendir64='$d_opendir64'
13182 d_pathconf='$d_pathconf'
13183 d_pause='$d_pause'
13184 d_phostname='$d_phostname'
13185 d_pipe='$d_pipe'
13186 d_poll='$d_poll'
13187 d_portable='$d_portable'
13188 d_pthread_yield='$d_pthread_yield'
13189 d_pwage='$d_pwage'
13190 d_pwchange='$d_pwchange'
13191 d_pwclass='$d_pwclass'
13192 d_pwcomment='$d_pwcomment'
13193 d_pwexpire='$d_pwexpire'
13194 d_pwgecos='$d_pwgecos'
13195 d_pwpasswd='$d_pwpasswd'
13196 d_pwquota='$d_pwquota'
13197 d_readdir64='$d_readdir64'
13198 d_readdir='$d_readdir'
13199 d_readlink='$d_readlink'
13200 d_readv='$d_readv'
13201 d_recvmsg='$d_recvmsg'
13202 d_rename='$d_rename'
13203 d_rewinddir='$d_rewinddir'
13204 d_rmdir='$d_rmdir'
13205 d_safebcpy='$d_safebcpy'
13206 d_safemcpy='$d_safemcpy'
13207 d_sanemcmp='$d_sanemcmp'
13208 d_sched_yield='$d_sched_yield'
13209 d_scm_rights='$d_scm_rights'
13210 d_seekdir64='$d_seekdir64'
13211 d_seekdir='$d_seekdir'
13212 d_select='$d_select'
13213 d_sem='$d_sem'
13214 d_semctl='$d_semctl'
13215 d_semctl_semid_ds='$d_semctl_semid_ds'
13216 d_semctl_semun='$d_semctl_semun'
13217 d_semget='$d_semget'
13218 d_semop='$d_semop'
13219 d_sendmsg='$d_sendmsg'
13220 d_setegid='$d_setegid'
13221 d_seteuid='$d_seteuid'
13222 d_setgrent='$d_setgrent'
13223 d_setgrps='$d_setgrps'
13224 d_sethent='$d_sethent'
13225 d_setlinebuf='$d_setlinebuf'
13226 d_setlocale='$d_setlocale'
13227 d_setnent='$d_setnent'
13228 d_setpent='$d_setpent'
13229 d_setpgid='$d_setpgid'
13230 d_setpgrp2='$d_setpgrp2'
13231 d_setpgrp='$d_setpgrp'
13232 d_setprior='$d_setprior'
13233 d_setpwent='$d_setpwent'
13234 d_setregid='$d_setregid'
13235 d_setresgid='$d_setresgid'
13236 d_setresuid='$d_setresuid'
13237 d_setreuid='$d_setreuid'
13238 d_setrgid='$d_setrgid'
13239 d_setruid='$d_setruid'
13240 d_setsent='$d_setsent'
13241 d_setsid='$d_setsid'
13242 d_setspent='$d_setspent'
13243 d_setvbuf='$d_setvbuf'
13244 d_sfio='$d_sfio'
13245 d_shm='$d_shm'
13246 d_shmat='$d_shmat'
13247 d_shmatprototype='$d_shmatprototype'
13248 d_shmctl='$d_shmctl'
13249 d_shmdt='$d_shmdt'
13250 d_shmget='$d_shmget'
13251 d_sigaction='$d_sigaction'
13252 d_sigsetjmp='$d_sigsetjmp'
13253 d_socket='$d_socket'
13254 d_sockpair='$d_sockpair'
13255 d_stat64='$d_stat64'
13256 d_statblks='$d_statblks'
13257 d_statfs='$d_statfs'
13258 d_statfsflags='$d_statfsflags'
13259 d_statvfs='$d_statvfs'
13260 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13261 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13262 d_stdio_stream_array='$d_stdio_stream_array'
13263 d_stdiobase='$d_stdiobase'
13264 d_stdstdio='$d_stdstdio'
13265 d_store64='$d_store64'
13266 d_strchr='$d_strchr'
13267 d_strcoll='$d_strcoll'
13268 d_strctcpy='$d_strctcpy'
13269 d_strerrm='$d_strerrm'
13270 d_strerror='$d_strerror'
13271 d_strtod='$d_strtod'
13272 d_strtol='$d_strtol'
13273 d_strtoul='$d_strtoul'
13274 d_strxfrm='$d_strxfrm'
13275 d_suidsafe='$d_suidsafe'
13276 d_symlink='$d_symlink'
13277 d_syscall='$d_syscall'
13278 d_sysconf='$d_sysconf'
13279 d_sysernlst='$d_sysernlst'
13280 d_syserrlst='$d_syserrlst'
13281 d_system='$d_system'
13282 d_tcgetpgrp='$d_tcgetpgrp'
13283 d_tcsetpgrp='$d_tcsetpgrp'
13284 d_telldir64='$d_telldir64'
13285 d_telldir='$d_telldir'
13286 d_telldirproto='$d_telldirproto'
13287 d_time='$d_time'
13288 d_times='$d_times'
13289 d_tmpfile64='$d_tmpfile64'
13290 d_truncate64='$d_truncate64'
13291 d_truncate='$d_truncate'
13292 d_tzname='$d_tzname'
13293 d_umask='$d_umask'
13294 d_uname='$d_uname'
13295 d_union_semun='$d_union_semun'
13296 d_vfork='$d_vfork'
13297 d_void_closedir='$d_void_closedir'
13298 d_voidsig='$d_voidsig'
13299 d_voidtty='$d_voidtty'
13300 d_volatile='$d_volatile'
13301 d_vprintf='$d_vprintf'
13302 d_wait4='$d_wait4'
13303 d_waitpid='$d_waitpid'
13304 d_wcstombs='$d_wcstombs'
13305 d_wctomb='$d_wctomb'
13306 d_writev='$d_writev'
13307 d_xenix='$d_xenix'
13308 date='$date'
13309 db_hashtype='$db_hashtype'
13310 db_prefixtype='$db_prefixtype'
13311 defvoidused='$defvoidused'
13312 direntrytype='$direntrytype'
13313 dlext='$dlext'
13314 dlsrc='$dlsrc'
13315 doublesize='$doublesize'
13316 drand01='$drand01'
13317 dynamic_ext='$dynamic_ext'
13318 eagain='$eagain'
13319 ebcdic='$ebcdic'
13320 echo='$echo'
13321 egrep='$egrep'
13322 emacs='$emacs'
13323 eunicefix='$eunicefix'
13324 exe_ext='$exe_ext'
13325 expr='$expr'
13326 extensions='$extensions'
13327 fflushNULL='$fflushNULL'
13328 fflushall='$fflushall'
13329 find='$find'
13330 firstmakefile='$firstmakefile'
13331 flex='$flex'
13332 fpostype='$fpostype'
13333 freetype='$freetype'
13334 full_ar='$full_ar'
13335 full_csh='$full_csh'
13336 full_sed='$full_sed'
13337 gccversion='$gccversion'
13338 gidtype='$gidtype'
13339 glibpth='$glibpth'
13340 grep='$grep'
13341 groupcat='$groupcat'
13342 groupstype='$groupstype'
13343 gzip='$gzip'
13344 h_fcntl='$h_fcntl'
13345 h_sysfile='$h_sysfile'
13346 hint='$hint'
13347 hostcat='$hostcat'
13348 huge='$huge'
13349 i_arpainet='$i_arpainet'
13350 i_bsdioctl='$i_bsdioctl'
13351 i_db='$i_db'
13352 i_dbm='$i_dbm'
13353 i_dirent='$i_dirent'
13354 i_dld='$i_dld'
13355 i_dlfcn='$i_dlfcn'
13356 i_fcntl='$i_fcntl'
13357 i_float='$i_float'
13358 i_gdbm='$i_gdbm'
13359 i_grp='$i_grp'
13360 i_inttypes='$i_inttypes'
13361 i_limits='$i_limits'
13362 i_locale='$i_locale'
13363 i_machcthr='$i_machcthr'
13364 i_malloc='$i_malloc'
13365 i_math='$i_math'
13366 i_memory='$i_memory'
13367 i_mntent='$i_mntent'
13368 i_ndbm='$i_ndbm'
13369 i_netdb='$i_netdb'
13370 i_neterrno='$i_neterrno'
13371 i_netinettcp='$i_netinettcp'
13372 i_niin='$i_niin'
13373 i_poll='$i_poll'
13374 i_pthread='$i_pthread'
13375 i_pwd='$i_pwd'
13376 i_rpcsvcdbm='$i_rpcsvcdbm'
13377 i_sfio='$i_sfio'
13378 i_sgtty='$i_sgtty'
13379 i_shadow='$i_shadow'
13380 i_socks='$i_socks'
13381 i_stdarg='$i_stdarg'
13382 i_stddef='$i_stddef'
13383 i_stdlib='$i_stdlib'
13384 i_string='$i_string'
13385 i_sysaccess='$i_sysaccess'
13386 i_sysdir='$i_sysdir'
13387 i_sysfile='$i_sysfile'
13388 i_sysfilio='$i_sysfilio'
13389 i_sysin='$i_sysin'
13390 i_sysioctl='$i_sysioctl'
13391 i_sysmman='$i_sysmman'
13392 i_sysmount='$i_sysmount'
13393 i_sysndir='$i_sysndir'
13394 i_sysparam='$i_sysparam'
13395 i_sysresrc='$i_sysresrc'
13396 i_syssecrt='$i_syssecrt'
13397 i_sysselct='$i_sysselct'
13398 i_syssockio='$i_syssockio'
13399 i_sysstat='$i_sysstat'
13400 i_sysstatvfs='$i_sysstatvfs'
13401 i_systime='$i_systime'
13402 i_systimek='$i_systimek'
13403 i_systimes='$i_systimes'
13404 i_systypes='$i_systypes'
13405 i_sysuio='$i_sysuio'
13406 i_sysun='$i_sysun'
13407 i_syswait='$i_syswait'
13408 i_termio='$i_termio'
13409 i_termios='$i_termios'
13410 i_time='$i_time'
13411 i_unistd='$i_unistd'
13412 i_utime='$i_utime'
13413 i_values='$i_values'
13414 i_varargs='$i_varargs'
13415 i_varhdr='$i_varhdr'
13416 i_vfork='$i_vfork'
13417 ignore_versioned_solibs='$ignore_versioned_solibs'
13418 incpath='$incpath'
13419 inews='$inews'
13420 installarchlib='$installarchlib'
13421 installbin='$installbin'
13422 installman1dir='$installman1dir'
13423 installman3dir='$installman3dir'
13424 installprivlib='$installprivlib'
13425 installscript='$installscript'
13426 installsitearch='$installsitearch'
13427 installsitelib='$installsitelib'
13428 installusrbinperl='$installusrbinperl'
13429 intsize='$intsize'
13430 known_extensions='$known_extensions'
13431 ksh='$ksh'
13432 large='$large'
13433 ld='$ld'
13434 lddlflags='$lddlflags'
13435 ldflags='$ldflags'
13436 less='$less'
13437 lib_ext='$lib_ext'
13438 libc='$libc'
13439 libperl='$libperl'
13440 libpth='$libpth'
13441 libs='$libs'
13442 libswanted='$libswanted'
13443 line='$line'
13444 lint='$lint'
13445 lkflags='$lkflags'
13446 ln='$ln'
13447 lns='$lns'
13448 locincpth='$locincpth'
13449 loclibpth='$loclibpth'
13450 longdblsize='$longdblsize'
13451 longlongsize='$longlongsize'
13452 longsize='$longsize'
13453 lp='$lp'
13454 lpr='$lpr'
13455 ls='$ls'
13456 lseeksize='$lseeksize'
13457 lseektype='$lseektype'
13458 mail='$mail'
13459 mailx='$mailx'
13460 make='$make'
13461 make_set_make='$make_set_make'
13462 mallocobj='$mallocobj'
13463 mallocsrc='$mallocsrc'
13464 malloctype='$malloctype'
13465 man1dir='$man1dir'
13466 man1direxp='$man1direxp'
13467 man1ext='$man1ext'
13468 man3dir='$man3dir'
13469 man3direxp='$man3direxp'
13470 man3ext='$man3ext'
13471 medium='$medium'
13472 mips='$mips'
13473 mips_type='$mips_type'
13474 mkdir='$mkdir'
13475 mmaptype='$mmaptype'
13476 models='$models'
13477 modetype='$modetype'
13478 more='$more'
13479 multiarch='$multiarch'
13480 mv='$mv'
13481 myarchname='$myarchname'
13482 mydomain='$mydomain'
13483 myhostname='$myhostname'
13484 myuname='$myuname'
13485 n='$n'
13486 netdb_hlen_type='$netdb_hlen_type'
13487 netdb_host_type='$netdb_host_type'
13488 netdb_name_type='$netdb_name_type'
13489 netdb_net_type='$netdb_net_type'
13490 nm='$nm'
13491 nm_opt='$nm_opt'
13492 nm_so_opt='$nm_so_opt'
13493 nonxs_ext='$nonxs_ext'
13494 nroff='$nroff'
13495 o_nonblock='$o_nonblock'
13496 obj_ext='$obj_ext'
13497 old_pthread_create_joinable='$old_pthread_create_joinable'
13498 optimize='$optimize'
13499 orderlib='$orderlib'
13500 osname='$osname'
13501 osvers='$osvers'
13502 package='$package'
13503 pager='$pager'
13504 passcat='$passcat'
13505 patchlevel='$patchlevel'
13506 path_sep='$path_sep'
13507 perl='$perl'
13508 perladmin='$perladmin'
13509 perlpath='$perlpath'
13510 pg='$pg'
13511 phostname='$phostname'
13512 pidtype='$pidtype'
13513 plibpth='$plibpth'
13514 pmake='$pmake'
13515 pr='$pr'
13516 prefix='$prefix'
13517 prefixexp='$prefixexp'
13518 privlib='$privlib'
13519 privlibexp='$privlibexp'
13520 prototype='$prototype'
13521 ptrsize='$ptrsize'
13522 randbits='$randbits'
13523 randfunc='$randfunc'
13524 randseedtype='$randseedtype'
13525 ranlib='$ranlib'
13526 rd_nodata='$rd_nodata'
13527 rm='$rm'
13528 rmail='$rmail'
13529 runnm='$runnm'
13530 sched_yield='$sched_yield'
13531 scriptdir='$scriptdir'
13532 scriptdirexp='$scriptdirexp'
13533 sed='$sed'
13534 seedfunc='$seedfunc'
13535 selectminbits='$selectminbits'
13536 selecttype='$selecttype'
13537 sendmail='$sendmail'
13538 sh='$sh'
13539 shar='$shar'
13540 sharpbang='$sharpbang'
13541 shmattype='$shmattype'
13542 shortsize='$shortsize'
13543 shrpenv='$shrpenv'
13544 shsharp='$shsharp'
13545 sig_count='$sig_count'
13546 sig_name='$sig_name'
13547 sig_name_init='$sig_name_init'
13548 sig_num='$sig_num'
13549 sig_num_init='$sig_num_init'
13550 signal_t='$signal_t'
13551 sitearch='$sitearch'
13552 sitearchexp='$sitearchexp'
13553 sitelib='$sitelib'
13554 sitelibexp='$sitelibexp'
13555 sizetype='$sizetype'
13556 sleep='$sleep'
13557 smail='$smail'
13558 small='$small'
13559 so='$so'
13560 sockethdr='$sockethdr'
13561 socketlib='$socketlib'
13562 sort='$sort'
13563 spackage='$spackage'
13564 spitshell='$spitshell'
13565 split='$split'
13566 src='$src'
13567 ssizetype='$ssizetype'
13568 startperl='$startperl'
13569 startsh='$startsh'
13570 static_ext='$static_ext'
13571 stdchar='$stdchar'
13572 stdio_base='$stdio_base'
13573 stdio_bufsiz='$stdio_bufsiz'
13574 stdio_cnt='$stdio_cnt'
13575 stdio_filbuf='$stdio_filbuf'
13576 stdio_ptr='$stdio_ptr'
13577 stdio_stream_array='$stdio_stream_array'
13578 strings='$strings'
13579 submit='$submit'
13580 subversion='$subversion'
13581 sysman='$sysman'
13582 tail='$tail'
13583 tar='$tar'
13584 tbl='$tbl'
13585 tee='$tee'
13586 test='$test'
13587 timeincl='$timeincl'
13588 timetype='$timetype'
13589 touch='$touch'
13590 tr='$tr'
13591 trnl='$trnl'
13592 troff='$troff'
13593 uidtype='$uidtype'
13594 uname='$uname'
13595 uniq='$uniq'
13596 use64bits='$use64bits'
13597 usedl='$usedl'
13598 usemultiplicity='$usemultiplicity'
13599 usemymalloc='$usemymalloc'
13600 usenm='$usenm'
13601 useopcode='$useopcode'
13602 useperlio='$useperlio'
13603 useposix='$useposix'
13604 usesfio='$usesfio'
13605 useshrplib='$useshrplib'
13606 usesocks='$usesocks'
13607 usethreads='$usethreads'
13608 usevfork='$usevfork'
13609 usrinc='$usrinc'
13610 uuname='$uuname'
13611 version='$version'
13612 vi='$vi'
13613 voidflags='$voidflags'
13614 xlibpth='$xlibpth'
13615 zcat='$zcat'
13616 zip='$zip'
13617 EOT
13618
13619 : Add in command line options if available
13620 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13621
13622 : add special variables
13623 $test -f $src/patchlevel.h && \
13624 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13625 echo "CONFIGDOTSH=true" >>config.sh
13626
13627 : propagate old symbols
13628 if $test -f UU/config.sh; then
13629         <UU/config.sh sort | uniq >UU/oldconfig.sh
13630         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13631         sort | uniq -u >UU/oldsyms
13632         set X `cat UU/oldsyms`
13633         shift
13634         case $# in
13635         0) ;;
13636         *)
13637                 cat <<EOM
13638 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13639 EOM
13640                 echo "# Variables propagated from previous config.sh file." >>config.sh
13641                 for sym in `cat UU/oldsyms`; do
13642                         echo "    Propagating $hint variable "'$'"$sym..."
13643                         eval 'tmp="$'"${sym}"'"'
13644                         echo "$tmp" | \
13645                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13646                 done
13647                 ;;
13648         esac
13649 fi
13650
13651 : Finish up by extracting the .SH files
13652 case "$alldone" in
13653 exit)
13654         $rm -rf UU
13655         echo "Done."
13656         exit 0
13657         ;;
13658 cont)
13659         ;;
13660 '')
13661         dflt=''
13662         nostick=true
13663         $cat <<EOM
13664
13665 If you'd like to make any changes to the config.sh file before I begin
13666 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13667
13668 EOM
13669         rp="Press return or use a shell escape to edit config.sh:"
13670         . UU/myread
13671         nostick=''
13672         case "$ans" in
13673         '') ;;
13674         *) : in case they cannot read
13675                 sh 1>&4 -c "$ans";;
13676         esac
13677         ;;
13678 esac
13679
13680 : if this fails, just run all the .SH files by hand
13681 . ./config.sh
13682
13683 echo " "
13684 exec 1>&4
13685 . ./UU/extract
13686
13687 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13688         dflt=y
13689         case "$silent" in
13690         true) ;;
13691         *)
13692                 $cat <<EOM
13693
13694 Now you need to generate make dependencies by running "$make depend".
13695 You might prefer to run it in background: "$make depend > makedepend.out &"
13696 It can take a while, so you might not want to run it right now.
13697
13698 EOM
13699                 ;;
13700         esac
13701         rp="Run $make depend now?"
13702         . UU/myread
13703         case "$ans" in
13704         y*)
13705                 $make depend && echo "Now you must run a $make."
13706                 ;;
13707         *)
13708                 echo "You must run '$make depend' then '$make'."
13709                 ;;
13710         esac
13711 elif test -f [Mm]akefile; then
13712         echo " "
13713         echo "Now you must run a $make."
13714 else
13715         echo "Done."
13716 fi
13717
13718 if $test -f Policy.sh; then
13719     $cat <<EOM
13720
13721 If you compile $package on a different machine or from a different object
13722 directory, copy the Policy.sh file from this object directory to the
13723 new one before you run Configure -- this will help you with most of
13724 the policy defaults.
13725
13726 EOM
13727 fi
13728 if $test -f config.msg; then
13729     echo "Hmm.  I also noted the following information while running:"
13730     echo " "
13731     $cat config.msg >&4
13732     $rm -f config.msg
13733 fi
13734 $rm -f kit*isdone ark*isdone
13735 $rm -rf UU
13736
13737 : End of Configure
13738