1fca209354d39cebf8d686a203281d077d1e9d84
[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 Sun May 30 15:51:19 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_stddef=''
632 i_stdlib=''
633 i_string=''
634 strings=''
635 i_sysaccess=''
636 i_sysdir=''
637 i_sysfile=''
638 d_voidtty=''
639 i_bsdioctl=''
640 i_sysfilio=''
641 i_sysioctl=''
642 i_syssockio=''
643 i_sysmman=''
644 i_sysmount=''
645 i_sysndir=''
646 i_sysparam=''
647 i_sysresrc=''
648 i_syssecrt=''
649 i_sysselct=''
650 i_sysstat=''
651 i_sysstatvfs=''
652 i_systimes=''
653 i_systypes=''
654 d_iovec_s=''
655 i_sysuio=''
656 i_sysun=''
657 i_syswait=''
658 i_sgtty=''
659 i_termio=''
660 i_termios=''
661 i_systime=''
662 i_systimek=''
663 i_time=''
664 timeincl=''
665 i_unistd=''
666 i_utime=''
667 i_values=''
668 i_stdarg=''
669 i_varargs=''
670 i_varhdr=''
671 i_vfork=''
672 installusrbinperl=''
673 intsize=''
674 longsize=''
675 shortsize=''
676 d_dirent64_s=''
677 d_flock64_s=''
678 d_fstat64=''
679 d_ftruncate64=''
680 d_ino64_t=''
681 d_llseek=''
682 d_lockf64=''
683 d_lseek64=''
684 d_lstat64=''
685 d_off64_t=''
686 d_offset_t=''
687 d_open64=''
688 d_opendir64=''
689 d_readdir64=''
690 d_seekdir64=''
691 d_stat64=''
692 d_telldir64=''
693 d_truncate64=''
694 libc=''
695 libperl=''
696 shrpenv=''
697 useshrplib=''
698 glibpth=''
699 libpth=''
700 loclibpth=''
701 plibpth=''
702 xlibpth=''
703 ignore_versioned_solibs=''
704 libs=''
705 lns=''
706 lseeksize=''
707 lseektype=''
708 make_set_make=''
709 d_mymalloc=''
710 freetype=''
711 mallocobj=''
712 mallocsrc=''
713 malloctype=''
714 usemymalloc=''
715 installman1dir=''
716 man1dir=''
717 man1direxp=''
718 man1ext=''
719 installman3dir=''
720 man3dir=''
721 man3direxp=''
722 man3ext=''
723 huge=''
724 large=''
725 medium=''
726 models=''
727 small=''
728 split=''
729 modetype=''
730 multiarch=''
731 mydomain=''
732 myhostname=''
733 phostname=''
734 c=''
735 n=''
736 d_eofnblk=''
737 eagain=''
738 o_nonblock=''
739 rd_nodata=''
740 netdb_hlen_type=''
741 netdb_host_type=''
742 netdb_name_type=''
743 netdb_net_type=''
744 groupcat=''
745 hostcat=''
746 passcat=''
747 orderlib=''
748 ranlib=''
749 package=''
750 spackage=''
751 pager=''
752 apiversion=''
753 patchlevel=''
754 subversion=''
755 version=''
756 perladmin=''
757 perlpath=''
758 pidtype=''
759 prefix=''
760 prefixexp=''
761 installprivlib=''
762 privlib=''
763 privlibexp=''
764 prototype=''
765 ptrsize=''
766 drand01=''
767 randbits=''
768 randfunc=''
769 randseedtype=''
770 seedfunc=''
771 installscript=''
772 scriptdir=''
773 scriptdirexp=''
774 selectminbits=''
775 selecttype=''
776 sh=''
777 sig_count=''
778 sig_name=''
779 sig_name_init=''
780 sig_num=''
781 sig_num_init=''
782 installsitearch=''
783 sitearch=''
784 sitearchexp=''
785 installsitelib=''
786 sitelib=''
787 sitelibexp=''
788 sizetype=''
789 so=''
790 sharpbang=''
791 shsharp=''
792 spitshell=''
793 src=''
794 ssizetype=''
795 startperl=''
796 startsh=''
797 stdchar=''
798 d_fgetpos64=''
799 d_fopen64=''
800 d_freopen64=''
801 d_fseek64=''
802 d_fseeko64=''
803 d_fsetpos64=''
804 d_ftell64=''
805 d_ftello64=''
806 d_tmpfile64=''
807 d_stdio_stream_array=''
808 stdio_stream_array=''
809 sysman=''
810 trnl=''
811 uidtype=''
812 archname64=''
813 use64bits=''
814 usemultiplicity=''
815 nm_opt=''
816 nm_so_opt=''
817 runnm=''
818 usenm=''
819 useperlio=''
820 d_oldpthreads=''
821 usethreads=''
822 incpath=''
823 mips=''
824 mips_type=''
825 usrinc=''
826 defvoidused=''
827 voidflags=''
828 CONFIG=''
829
830 define='define'
831 undef='undef'
832 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
833 rmlist=''
834
835 : We must find out about Eunice early
836 eunicefix=':'
837 if test -f /etc/unixtovms; then
838         eunicefix=/etc/unixtovms
839 fi
840 if test -f /etc/unixtovms.exe; then
841         eunicefix=/etc/unixtovms.exe
842 fi
843
844 i_whoami=''
845 : Possible local include directories to search.
846 : Set locincpth to "" in a hint file to defeat local include searches.
847 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
848 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
849 :
850 : no include file wanted by default
851 inclwanted=''
852
853 : list of known cpp symbols, sorted alphabetically
854 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
855 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
856 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
857 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
858 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
859 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
860 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
861 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
862 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
863 al="$al VMS Xenix286"
864 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
865 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
866 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
867 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
868 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
869 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
870 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
871 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
872 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
873 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
874 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
875 al="$al __SVR4_2__ __UMAXV__"
876 al="$al ____386BSD____ __alpha __alpha__ __amiga"
877 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
878 al="$al __host_mips__"
879 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
880 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
881 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
882 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
883 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
884 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
885 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
886 al="$al __mc88100 __mc88100__ __mips __mips__"
887 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
888 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
889 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
890 al="$al _host_mips _mips _unix"
891 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
892 al="$al apollo ardent att386 att3b"
893 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
894 al="$al cadmus clipper concurrent convex cray ctix"
895 al="$al dmert encore gcos gcx gimpel gould"
896 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
897 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
898 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
899 al="$al i186 i286 i386 i486 i8086"
900 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
901 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
902 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
903 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
904 al="$al mc88000 mc88100 merlin mert mips mvs n16"
905 al="$al ncl_el ncl_mr"
906 al="$al news1500 news1700 news1800 news1900 news3700"
907 al="$al news700 news800 news900 ns16000 ns32000"
908 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
909 al="$al parisc pc532 pdp11 plexus posix pyr"
910 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
911 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
912 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
913 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
914 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
915 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
916 al="$al xenix z8000"
917
918 : Trailing extension.  Override this in a hint file, if needed.
919 _exe=''
920 : Extra object files, if any, needed on this platform.
921 archobjs=''
922 groupstype=''
923 : change the next line if compiling for Xenix/286 on Xenix/386
924 xlibpth='/usr/lib/386 /lib/386'
925
926 : Possible local library directories to search.
927 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
928 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
929
930 : general looking path for locating libraries
931 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
932 glibpth="$glibpth /lib /usr/lib $xlibpth"
933 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
934 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
935
936 : Private path used by Configure to find libraries.  Its value
937 : is prepended to libpth. This variable takes care of special
938 : machines, like the mips.  Usually, it should be empty.
939 plibpth=''
940
941 : default library list
942 libswanted=''
943 : some systems want to use only the non-versioned libso:s
944 ignore_versioned_solibs=''
945 : full support for void wanted by default
946 defvoidused=15
947
948 : set useposix=false in your hint file to disable the POSIX extension.
949 useposix=true
950 : set useopcode=false in your hint file to disable the Opcode extension.
951 useopcode=true
952 : set usemultiplicity on the Configure command line to enable multiplicity.
953 : set usethreads on the Configure command line to enable threads.
954 : List of libraries we want.
955 : If anyone needs -lnet, put it in a hint file.
956 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
957 libswanted="$libswanted dld ld sun m rt c cposix posix"
958 libswanted="$libswanted ndir dir crypt sec"
959 libswanted="$libswanted ucb bsd BSD PW x"
960 : We probably want to search /usr/shlib before most other libraries.
961 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
962 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
963 glibpth="/usr/shlib $glibpth"
964 : Do not use vfork unless overridden by a hint file.
965 usevfork=false
966
967 : Find the basic shell for Bourne shell scripts
968 case "$sh" in
969 '')
970         case "$SYSTYPE" in
971         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
972         *) xxx='/bin/sh';;
973         esac
974         if test -f "$xxx"; then
975                 sh="$xxx"
976         else
977                 : Build up a list and do a single loop so we can 'break' out.
978                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
979                 for xxx in sh bash ksh pdksh ash; do
980                         for p in $pth; do
981                                 try="$try ${p}/${xxx}"
982                         done
983                 done
984                 for xxx in $try; do
985                         if test -f "$xxx"; then
986                                 sh="$xxx";
987                                 break
988                         elif test -f "$xxx.exe"; then
989                                 sh="$xxx";
990                                 break
991                         fi
992                 done
993         fi
994         ;;
995 esac
996
997 case "$sh" in
998 '')     cat <<EOM >&2
999 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1000
1001 Usually it's in /bin/sh.  How did you even get this far?
1002 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1003 we'll try to straighten this all out.
1004 EOM
1005         exit 1
1006         ;;
1007 esac
1008
1009 : see if sh knows # comments
1010 if `$sh -c '#' >/dev/null 2>&1`; then
1011         shsharp=true
1012         spitshell=cat
1013         xcat=/bin/cat
1014         test -f $xcat || xcat=/usr/bin/cat
1015         echo "#!$xcat" >try
1016         $eunicefix try
1017         chmod +x try
1018         ./try > today
1019         if test -s today; then
1020                 sharpbang='#!'
1021         else
1022                 echo "#! $xcat" > try
1023                 $eunicefix try
1024                 chmod +x try
1025                 ./try > today
1026                 if test -s today; then
1027                         sharpbang='#! '
1028                 else
1029                         sharpbang=': use '
1030                 fi
1031         fi
1032 else
1033         echo " "
1034         echo "Your $sh doesn't grok # comments--I will strip them later on."
1035         shsharp=false
1036         cd ..
1037         echo "exec grep -v '^[  ]*#'" >spitshell
1038         chmod +x spitshell
1039         $eunicefix spitshell
1040         spitshell=`pwd`/spitshell
1041         cd UU
1042         echo "I presume that if # doesn't work, #! won't work either!"
1043         sharpbang=': use '
1044 fi
1045 rm -f try today
1046
1047 : figure out how to guarantee sh startup
1048 case "$startsh" in
1049 '') startsh=${sharpbang}${sh} ;;
1050 *)
1051 esac
1052 cat >try <<EOSS
1053 $startsh
1054 set abc
1055 test "$?abc" != 1
1056 EOSS
1057
1058 chmod +x try
1059 $eunicefix try
1060 if ./try; then
1061         : echo "Yup, it does."
1062 else
1063         echo "Hmm... '$startsh' does not guarantee sh startup..."
1064         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1065 fi
1066 rm -f try
1067
1068
1069 : Save command line options in file UU/cmdline.opt for later use in
1070 : generating config.sh.
1071 cat > cmdline.opt <<EOSH
1072 # Configure command line arguments.
1073 config_arg0='$0'
1074 config_args='$*'
1075 config_argc=$#
1076 EOSH
1077 argn=1
1078 for arg in "$@"; do
1079         cat >>cmdline.opt <<EOSH
1080 config_arg$argn='$arg'
1081 EOSH
1082         argn=`expr $argn + 1`
1083 done
1084
1085 : produce awk script to parse command line options
1086 cat >options.awk <<'EOF'
1087 BEGIN {
1088         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1089
1090         len = length(optstr);
1091         for (i = 1; i <= len; i++) {
1092                 c = substr(optstr, i, 1);
1093                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1094                 if (a == ":") {
1095                         arg[c] = 1;
1096                         i++;
1097                 }
1098                 opt[c] = 1;
1099         }
1100 }
1101 {
1102         expect = 0;
1103         str = $0;
1104         if (substr(str, 1, 1) != "-") {
1105                 printf("'%s'\n", str);
1106                 next;
1107         }
1108         len = length($0);
1109         for (i = 2; i <= len; i++) {
1110                 c = substr(str, i, 1);
1111                 if (!opt[c]) {
1112                         printf("-%s\n", substr(str, i));
1113                         next;
1114                 }
1115                 printf("-%s\n", c);
1116                 if (arg[c]) {
1117                         if (i < len)
1118                                 printf("'%s'\n", substr(str, i + 1));
1119                         else
1120                                 expect = 1;
1121                         next;
1122                 }
1123         }
1124 }
1125 END {
1126         if (expect)
1127                 print "?";
1128 }
1129 EOF
1130
1131 : process the command line options
1132 set X `for arg in "$@"; do echo "X$arg"; done |
1133         sed -e s/X// | awk -f options.awk`
1134 eval "set $*"
1135 shift
1136 rm -f options.awk
1137
1138 : set up default values
1139 fastread=''
1140 reuseval=false
1141 config_sh=''
1142 alldone=''
1143 error=''
1144 silent=''
1145 extractsh=''
1146 override=''
1147 knowitall=''
1148 rm -f optdef.sh
1149 cat >optdef.sh <<EOS
1150 $startsh
1151 EOS
1152
1153
1154 : option parsing
1155 while test $# -gt 0; do
1156         case "$1" in
1157         -d) shift; fastread=yes;;
1158         -e) shift; alldone=cont;;
1159         -f)
1160                 shift
1161                 cd ..
1162                 if test -r "$1"; then
1163                         config_sh="$1"
1164                 else
1165                         echo "$me: cannot read config file $1." >&2
1166                         error=true
1167                 fi
1168                 cd UU
1169                 shift;;
1170         -h) shift; error=true;;
1171         -r) shift; reuseval=true;;
1172         -s) shift; silent=true; realsilent=true;;
1173         -E) shift; alldone=exit;;
1174         -K) shift; knowitall=true;;
1175         -O) shift; override=true;;
1176         -S) shift; silent=true; extractsh=true;;
1177         -D)
1178                 shift
1179                 case "$1" in
1180                 *=)
1181                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1182                         echo "$me: ignoring -D $1" >&2
1183                         ;;
1184                 *=*) echo "$1" | \
1185                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1186                 *) echo "$1='define'" >> optdef.sh;;
1187                 esac
1188                 shift
1189                 ;;
1190         -U)
1191                 shift
1192                 case "$1" in
1193                 *=) echo "$1" >> optdef.sh;;
1194                 *=*)
1195                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1196                         echo "$me: ignoring -U $1" >&2
1197                         ;;
1198                 *) echo "$1='undef'" >> optdef.sh;;
1199                 esac
1200                 shift
1201                 ;;
1202         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1203                 exit 0;;
1204         --) break;;
1205         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1206         *) break;;
1207         esac
1208 done
1209
1210 case "$error" in
1211 true)
1212         cat >&2 <<EOM
1213 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1214                  [-U symbol] [-U symbol=]
1215   -d : use defaults for all answers.
1216   -e : go on without questioning past the production of config.sh.
1217   -f : specify an alternate default configuration file.
1218   -h : print this help message and exit (with an error status).
1219   -r : reuse C symbols value if possible (skips costly nm extraction).
1220   -s : silent mode, only echoes questions and essential information.
1221   -D : define symbol to have some value:
1222          -D symbol         symbol gets the value 'define'
1223          -D symbol=value   symbol gets the value 'value'
1224   -E : stop at the end of questions, after having produced config.sh.
1225   -K : do not use unless you know what you are doing.
1226   -O : let -D and -U override definitions from loaded configuration file.
1227   -S : perform variable substitutions on all .SH files (can mix with -f)
1228   -U : undefine symbol:
1229          -U symbol    symbol gets the value 'undef'
1230          -U symbol=   symbol gets completely empty
1231   -V : print version number and exit (with a zero status).
1232 EOM
1233         exit 1
1234         ;;
1235 esac
1236
1237 : Sanity checks
1238 case "$fastread$alldone" in
1239 yescont|yesexit) ;;
1240 *)
1241         if test ! -t 0; then
1242                 echo "Say 'sh Configure', not 'sh <Configure'"
1243                 exit 1
1244         fi
1245         ;;
1246 esac
1247
1248 exec 4>&1
1249 case "$silent" in
1250 true) exec 1>/dev/null;;
1251 esac
1252
1253 : run the defines and the undefines, if any, but leave the file out there...
1254 touch optdef.sh
1255 . ./optdef.sh
1256
1257 : set package name
1258 package=perl5
1259 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1260 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1261 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1262 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1263 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1264 esac
1265
1266 : Some greps do not return status, grrr.
1267 echo "grimblepritz" >grimble
1268 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1269         contains=contains
1270 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1271         contains=grep
1272 else
1273         contains=contains
1274 fi
1275 rm -f grimble
1276 : the following should work in any shell
1277 case "$contains" in
1278 contains*)
1279         echo " "
1280         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1281         cat >contains <<'EOSS'
1282 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1283 EOSS
1284 chmod +x contains
1285 esac
1286
1287 : Find the path to the source tree
1288 case "$src" in
1289 '') case "$0" in
1290     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1291     *)   src='.';;
1292     esac;;
1293 esac
1294 case "$src" in
1295 '')     src=/
1296         rsrc=/
1297         ;;
1298 /*) rsrc="$src";;
1299 *) rsrc="../$src";;
1300 esac
1301 if test -f $rsrc/Configure && \
1302         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1303 then
1304    : found it, so we are ok.
1305 else
1306         rsrc=''
1307         for src in . .. ../.. ../../.. ../../../..; do
1308                 if test -f ../$src/Configure && \
1309                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1310                 then
1311                         rsrc=../$src
1312                         break
1313                 fi
1314         done
1315 fi
1316 case "$rsrc" in
1317 '')
1318         cat <<EOM >&4
1319
1320 Sorry, I can't seem to locate the source dir for $package.  Please start
1321 Configure with an explicit path -- i.e. /some/path/Configure.
1322
1323 EOM
1324         exit 1
1325         ;;
1326 ../.)   rsrc='..';;
1327 *)
1328         echo " "
1329         echo "Sources for $package found in \"$src\"." >&4
1330         ;;
1331 esac
1332
1333 : script used to extract .SH files with variable substitutions
1334 cat >extract <<'EOS'
1335 CONFIGDOTSH=true
1336 echo "Doing variable substitutions on .SH files..."
1337 if test -f $src/MANIFEST; then
1338         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1339 else
1340         echo "(Looking for .SH files under the source directory.)"
1341         set x `(cd $src; find . -name "*.SH" -print)`
1342 fi
1343 shift
1344 case $# in
1345 0) set x `(cd $src; echo *.SH)`; shift;;
1346 esac
1347 if test ! -f $src/$1; then
1348         shift
1349 fi
1350 mkdir_p='
1351 name=$1;
1352 create="";
1353 while test $name; do
1354         if test ! -d "$name"; then
1355                 create="$name $create";
1356                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1357                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1358         else
1359                 name="";
1360         fi;
1361 done;
1362 for file in $create; do
1363         mkdir $file;
1364 done
1365 '
1366 for file in $*; do
1367         case "$src" in
1368         ".")
1369                 case "$file" in
1370                 */*)
1371                         dir=`expr X$file : 'X\(.*\)/'`
1372                         file=`expr X$file : 'X.*/\(.*\)'`
1373                         (cd $dir && . ./$file)
1374                         ;;
1375                 *)
1376                         . ./$file
1377                         ;;
1378                 esac
1379                 ;;
1380         *)
1381                 case "$file" in
1382                 */*)
1383                         dir=`expr X$file : 'X\(.*\)/'`
1384                         file=`expr X$file : 'X.*/\(.*\)'`
1385                         (set x $dir; shift; eval $mkdir_p)
1386                         sh <$src/$dir/$file
1387                         ;;
1388                 *)
1389                         sh <$src/$file
1390                         ;;
1391                 esac
1392                 ;;
1393         esac
1394 done
1395 if test -f $src/config_h.SH; then
1396         if test ! -f config.h; then
1397         : oops, they left it out of MANIFEST, probably, so do it anyway.
1398         . $src/config_h.SH
1399         fi
1400 fi
1401 EOS
1402
1403 : extract files and exit if asked to do so
1404 case "$extractsh" in
1405 true)
1406         case "$realsilent" in
1407         true) ;;
1408         *) exec 1>&4;;
1409         esac
1410         case "$config_sh" in
1411         '') config_sh='config.sh';;
1412         esac
1413         echo " "
1414         echo "Fetching answers from $config_sh..."
1415         cd ..
1416         . $config_sh
1417         test "$override" && . ./optdef.sh
1418         echo " "
1419         . UU/extract
1420         rm -rf UU
1421         echo "Done."
1422         exit 0
1423         ;;
1424 esac
1425
1426 : Eunice requires " " instead of "", can you believe it
1427 echo " "
1428 : Here we go...
1429 echo "Beginning of configuration questions for $package."
1430
1431 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1432
1433 : first determine how to suppress newline on echo command
1434 echo " "
1435 echo "Checking echo to see how to suppress newlines..."
1436 (echo "hi there\c" ; echo " ") >.echotmp
1437 if $contains c .echotmp >/dev/null 2>&1 ; then
1438         echo "...using -n."
1439         n='-n'
1440         c=''
1441 else
1442         cat <<'EOM'
1443 ...using \c
1444 EOM
1445         n=''
1446         c='\c'
1447 fi
1448 echo $n "The star should be here-->$c"
1449 echo '*'
1450 rm -f .echotmp
1451
1452 : Now test for existence of everything in MANIFEST
1453 echo " "
1454 if test -f $rsrc/MANIFEST; then
1455         echo "First let's make sure your kit is complete.  Checking..." >&4
1456         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1457         rm -f missing
1458         tmppwd=`pwd`
1459         for filelist in x??; do
1460                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1461         done
1462         if test -s missing; then
1463                 cat missing >&4
1464                 cat >&4 <<'EOM'
1465
1466 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1467
1468 You have the option of continuing the configuration process, despite the
1469 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1470 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1471 and contact the author (perlbug@perl.com).
1472
1473 EOM
1474                 echo $n "Continue? [n] $c" >&4
1475                 read ans
1476                 case "$ans" in
1477                 y*)
1478                         echo "Continuing..." >&4
1479                         rm -f missing
1480                         ;;
1481                 *)
1482                         echo "ABORTING..." >&4
1483                         kill $$
1484                         ;;
1485                 esac
1486         else
1487                 echo "Looks good..."
1488         fi
1489 else
1490         echo "There is no MANIFEST file.  I hope your kit is complete !"
1491 fi
1492 rm -f missing x??
1493
1494 echo " "
1495 : Find the appropriate value for a newline for tr
1496 if test -n "$DJGPP"; then
1497        trnl='\012'
1498 fi
1499 if test X"$trnl" = X; then
1500         case "`echo foo|tr '\n' x 2>/dev/null`" in
1501         foox) trnl='\n' ;;
1502         esac
1503 fi
1504 if test X"$trnl" = X; then
1505         case "`echo foo|tr '\012' x 2>/dev/null`" in
1506         foox) trnl='\012' ;;
1507         esac
1508 fi
1509 if test X"$trnl" = X; then
1510         cat <<EOM >&2
1511
1512 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1513
1514 EOM
1515         exit 1
1516 fi
1517
1518 : compute the number of columns on the terminal for proper question formatting
1519 case "$COLUMNS" in
1520 '') COLUMNS='80';;
1521 esac
1522
1523 : set up the echo used in my read
1524 myecho="case \"\$xxxm\" in
1525 '') echo $n \"\$rp $c\" >&4;;
1526 *) case \"\$rp\" in
1527         '') echo $n \"[\$xxxm] $c\";;
1528         *)
1529                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1530                         echo \"\$rp\" >&4
1531                         echo $n \"[\$xxxm] $c\" >&4
1532                 else
1533                         echo $n \"\$rp [\$xxxm] $c\" >&4
1534                 fi
1535                 ;;
1536         esac;;
1537 esac"
1538
1539 : now set up to do reads with possible shell escape and default assignment
1540 cat <<EOSC >myread
1541 $startsh
1542 xxxm=\$dflt
1543 $myecho
1544 ans='!'
1545 case "\$fastread" in
1546 yes) case "\$dflt" in
1547         '') ;;
1548         *) ans='';
1549                 case "\$silent-\$rp" in
1550                 true-) ;;
1551                 *) echo " " >&4;;
1552                 esac;;
1553         esac;;
1554 *) case "\$silent" in
1555         true) case "\$rp" in
1556                 '') ans='';;
1557                 esac;;
1558         esac;;
1559 esac
1560 while expr "X\$ans" : "X!" >/dev/null; do
1561         read answ
1562         set x \$xxxm
1563         shift
1564         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1565         case  "\$answ" in
1566         "!")
1567                 sh 1>&4
1568                 echo " "
1569                 $myecho
1570                 ;;
1571         !*)
1572                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1573                 shift
1574                 sh 1>&4 -c "\$*"
1575                 echo " "
1576                 $myecho
1577                 ;;
1578         "\$ans")
1579                 case "\$ans" in
1580                 \\&*)
1581                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1582                         shift
1583                         case "\$1" in
1584                         -d)
1585                                 fastread=yes
1586                                 echo "(OK, I'll run with -d after this question.)" >&4
1587                                 ;;
1588                         -*)
1589                                 echo "*** Sorry, \$1 not supported yet." >&4
1590                                 ;;
1591                         esac
1592                         $myecho
1593                         ans=!
1594                         ;;
1595                 esac;;
1596         *)
1597                 case "\$aok" in
1598                 y)
1599                         echo "*** Substitution done -- please confirm."
1600                         xxxm="\$ans"
1601                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1602                         xxxm="\$ans"
1603                         ans=!
1604                         ;;
1605                 *)
1606                         echo "*** Error -- try again."
1607                         ans=!
1608                         ;;
1609                 esac
1610                 $myecho
1611                 ;;
1612         esac
1613         case "\$ans\$xxxm\$nostick" in
1614         '')
1615                 ans=!
1616                 $myecho
1617                 ;;
1618         esac
1619 done
1620 case "\$ans" in
1621 '') ans="\$xxxm";;
1622 esac
1623 EOSC
1624
1625 : create .config dir to save info across Configure sessions
1626 test -d ../.config || mkdir ../.config
1627 cat >../.config/README <<EOF
1628 This directory created by Configure to save information that should
1629 persist across sessions for $package.
1630
1631 You may safely delete it if you wish.
1632 EOF
1633
1634 : general instructions
1635 needman=true
1636 firsttime=true
1637 user=`(logname) 2>/dev/null`
1638 case "$user" in
1639 '') user=`whoami 2>&1`;;
1640 esac
1641 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1642         firsttime=false
1643         echo " "
1644         rp='Would you like to see the instructions?'
1645         dflt=n
1646         . ./myread
1647         case "$ans" in
1648         [yY]*) ;;
1649         *) needman=false;;
1650         esac
1651 fi
1652 if $needman; then
1653         cat <<EOH
1654
1655 This installation shell script will examine your system and ask you questions
1656 to determine how the perl5 package should be installed. If you get
1657 stuck on a question, you may use a ! shell escape to start a subshell or
1658 execute a command.  Many of the questions will have default answers in square
1659 brackets; typing carriage return will give you the default.
1660
1661 On some of the questions which ask for file or directory names you are allowed
1662 to use the ~name construct to specify the login directory belonging to "name",
1663 even if you don't have a shell which knows about that.  Questions where this is
1664 allowed will be marked "(~name ok)".
1665
1666 EOH
1667         rp=''
1668         dflt='Type carriage return to continue'
1669         . ./myread
1670         cat <<'EOH'
1671
1672 The prompter used in this script allows you to use shell variables and
1673 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1674 in the default answer, as if the default line was a set of arguments given to a
1675 script shell.  This means you may also use $* to repeat the whole default line,
1676 so you do not have to re-type everything to add something to the default.
1677
1678 Everytime there is a substitution, you will have to confirm.  If there is an
1679 error (e.g. an unmatched backtick), the default answer will remain unchanged
1680 and you will be prompted again.
1681
1682 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1683 the questions and use the computed defaults (or the previous answers if there
1684 was already a config.sh file). Type 'Configure -h' for a list of options.
1685 You may also start interactively and then answer '& -d' at any prompt to turn
1686 on the non-interactive behaviour for the remainder of the execution.
1687
1688 EOH
1689         . ./myread
1690         cat <<EOH
1691
1692 Much effort has been expended to ensure that this shell script will run on any
1693 Unix system.  If despite that it blows up on yours, your best bet is to edit
1694 Configure and run it again.  If you can't run Configure for some reason,
1695 you'll have to generate a config.sh file by hand.  Whatever problems you
1696 have, let me (perlbug@perl.com) know how I blew it.
1697
1698 This installation script affects things in two ways:
1699
1700 1) it may do direct variable substitutions on some of the files included
1701    in this kit.
1702 2) it builds a config.h file for inclusion in C programs.  You may edit
1703    any of these files as the need arises after running this script.
1704
1705 If you make a mistake on a question, there is no easy way to back up to it
1706 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1707 files.  Configure will offer to let you do this before it runs the SH files.
1708
1709 EOH
1710         dflt='Type carriage return to continue'
1711         . ./myread
1712         case "$firsttime" in
1713         true) echo $user >>../.config/instruct;;
1714         esac
1715 fi
1716
1717 : find out where common programs are
1718 echo " "
1719 echo "Locating common programs..." >&4
1720 cat <<EOSC >loc
1721 $startsh
1722 case \$# in
1723 0) exit 1;;
1724 esac
1725 thing=\$1
1726 shift
1727 dflt=\$1
1728 shift
1729 for dir in \$*; do
1730         case "\$thing" in
1731         .)
1732         if test -d \$dir/\$thing; then
1733                 echo \$dir
1734                 exit 0
1735         fi
1736         ;;
1737         *)
1738         for thisthing in \$dir/\$thing; do
1739                 : just loop through to pick last item
1740         done
1741         if test -f \$thisthing; then
1742                 echo \$thisthing
1743                 exit 0
1744         elif test -f \$dir/\$thing.exe; then
1745                 if test -n "$DJGPP"; then
1746                         echo \$dir/\$thing.exe
1747                 else
1748                         : on Eunice apparently
1749                         echo \$dir/\$thing
1750                 fi
1751                 exit 0
1752         fi
1753         ;;
1754         esac
1755 done
1756 echo \$dflt
1757 exit 1
1758 EOSC
1759 chmod +x loc
1760 $eunicefix loc
1761 loclist="
1762 awk
1763 cat
1764 comm
1765 cp
1766 echo
1767 expr
1768 grep
1769 ls
1770 make
1771 mkdir
1772 rm
1773 sed
1774 sort
1775 touch
1776 tr
1777 uniq
1778 "
1779 trylist="
1780 Mcc
1781 ar
1782 byacc
1783 cpp
1784 csh
1785 date
1786 egrep
1787 gzip
1788 less
1789 ln
1790 more
1791 nm
1792 nroff
1793 pg
1794 test
1795 uname
1796 zip
1797 "
1798 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1799 pth="$pth /lib /usr/lib"
1800 for file in $loclist; do
1801         eval xxx=\$$file
1802         case "$xxx" in
1803         /*|?:[\\/]*)
1804                 if test -f "$xxx"; then
1805                         : ok
1806                 else
1807                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1808                         xxx=`./loc $file $file $pth`
1809                 fi
1810                 ;;
1811         '') xxx=`./loc $file $file $pth`;;
1812         *) xxx=`./loc $xxx $xxx $pth`;;
1813         esac
1814         eval $file=$xxx
1815         eval _$file=$xxx
1816         case "$xxx" in
1817         /*)
1818                 echo $file is in $xxx.
1819                 ;;
1820         ?:[\\/]*)
1821                 echo $file is in $xxx.
1822                 ;;
1823         *)
1824                 echo "I don't know where '$file' is, and my life depends on it." >&4
1825                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1826                 exit 1
1827                 ;;
1828         esac
1829 done
1830 echo " "
1831 echo "Don't worry if any of the following aren't found..."
1832 say=offhand
1833 for file in $trylist; do
1834         eval xxx=\$$file
1835         case "$xxx" in
1836         /*|?:[\\/]*)
1837                 if test -f "$xxx"; then
1838                         : ok
1839                 else
1840                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1841                         xxx=`./loc $file $file $pth`
1842                 fi
1843                 ;;
1844         '') xxx=`./loc $file $file $pth`;;
1845         *) xxx=`./loc $xxx $xxx $pth`;;
1846         esac
1847         eval $file=$xxx
1848         eval _$file=$xxx
1849         case "$xxx" in
1850         /*)
1851                 echo $file is in $xxx.
1852                 ;;
1853         ?:[\\/]*)
1854                 echo $file is in $xxx.
1855                 ;;
1856         *)
1857                 echo "I don't see $file out there, $say."
1858                 say=either
1859                 ;;
1860         esac
1861 done
1862 case "$egrep" in
1863 egrep)
1864         echo "Substituting grep for egrep."
1865         egrep=$grep
1866         ;;
1867 esac
1868 case "$ln" in
1869 ln)
1870         echo "Substituting cp for ln."
1871         ln=$cp
1872         ;;
1873 esac
1874 case "$test" in
1875 test)
1876         echo "Hopefully test is built into your sh."
1877         ;;
1878 *)
1879         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1880                 echo "Using the test built into your sh."
1881                 test=test
1882                 _test=test
1883         fi
1884         ;;
1885 esac
1886 case "$echo" in
1887 echo)
1888         echo "Hopefully echo is built into your sh."
1889         ;;
1890 '') ;;
1891 *)
1892         echo " "
1893 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1894         $echo $n "hi there$c" >foo1
1895         echo $n "hi there$c" >foo2
1896         if cmp foo1 foo2 >/dev/null 2>&1; then
1897                 echo "They are compatible.  In fact, they may be identical."
1898         else
1899                 case "$n" in
1900                 '-n') n='' c='\c';;
1901                 *) n='-n' c='';;
1902                 esac
1903                 cat <<FOO
1904 They are not compatible!  You are probably running ksh on a non-USG system.
1905 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1906 have echo built in and we may have to run some Bourne shell scripts.  That
1907 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1908
1909 FOO
1910                 $echo $n "The star should be here-->$c"
1911                 $echo "*"
1912         fi
1913         $rm -f foo1 foo2
1914         ;;
1915 esac
1916
1917 : determine whether symbolic links are supported
1918 echo " "
1919 $touch blurfl
1920 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1921         echo "Symbolic links are supported." >&4
1922         lns="$ln -s"
1923 else
1924         echo "Symbolic links are NOT supported." >&4
1925         lns="$ln"
1926 fi
1927 $rm -f blurfl sym
1928
1929 : see whether [:lower:] and [:upper:] are supported character classes
1930 echo " "
1931 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1932 ABYZ)
1933         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1934         up='[:upper:]'
1935         low='[:lower:]'
1936         ;;
1937 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1938         # (0xc9 and 0xd1), therefore that is a nice testing point.
1939         if test "X$up" = X -o "X$low" = X; then
1940             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1941             ij) up='[A-Z]'
1942                 low='[a-z]'
1943                 ;;
1944             esac
1945         fi
1946         if test "X$up" = X -o "X$low" = X; then
1947             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1948             ij) up='A-Z'
1949                 low='a-z'
1950                 ;;
1951             esac
1952         fi
1953         if test "X$up" = X -o "X$low" = X; then
1954             case "`echo IJ | od -x 2>/dev/null`" in
1955             *C9D1*|*c9d1*)
1956                 echo "Hey, this might be EBCDIC." >&4
1957                 if test "X$up" = X -o "X$low" = X; then
1958                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1959                     ij) up='[A-IJ-RS-Z]'
1960                         low='[a-ij-rs-z]'
1961                         ;;
1962                     esac
1963                 fi
1964                 if test "X$up" = X -o "X$low" = X; then
1965                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1966                     ij) up='A-IJ-RS-Z'
1967                         low='a-ij-rs-z'
1968                         ;;
1969                     esac
1970                 fi
1971                 ;;
1972             esac
1973         fi
1974 esac
1975 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1976 ij)
1977     echo "Using $up and $low to convert case." >&4
1978     ;;
1979 *)
1980     echo "I don't know how to translate letters from upper to lower case." >&4
1981     echo "Your tr is not acting any way I know of." >&4
1982     exit 1
1983     ;;
1984 esac
1985 : set up the translation script tr, must be called with ./tr of course
1986 cat >tr <<EOSC
1987 $startsh
1988 case "\$1\$2" in
1989 '[A-Z][a-z]') exec $tr '$up' '$low';;
1990 '[a-z][A-Z]') exec $tr '$low' '$up';;
1991 esac
1992 exec $tr "\$@"
1993 EOSC
1994 chmod +x tr
1995 $eunicefix tr
1996
1997 : Try to determine whether config.sh was made on this system
1998 case "$config_sh" in
1999 '')
2000 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2001 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2002 # because the A-Z/a-z are not consecutive.
2003 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2004         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2005 newmyuname="$myuname"
2006 dflt=n
2007 case "$knowitall" in
2008 '')
2009         if test -f ../config.sh; then
2010                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2011                         eval "`grep myuname= ../config.sh`"
2012                 fi
2013                 if test "X$myuname" = "X$newmyuname"; then
2014                         dflt=y
2015                 fi
2016         fi
2017         ;;
2018 *) dflt=y;;
2019 esac
2020
2021 : Get old answers from old config file if Configure was run on the
2022 : same system, otherwise use the hints.
2023 hint=default
2024 cd ..
2025 if test -f config.sh; then
2026         echo " "
2027         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2028         . UU/myread
2029         case "$ans" in
2030         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2031         *)  echo "Fetching default answers from your old config.sh file..." >&4
2032                 tmp_n="$n"
2033                 tmp_c="$c"
2034                 tmp_sh="$sh"
2035                 . ./config.sh
2036                 cp config.sh UU
2037                 n="$tmp_n"
2038                 c="$tmp_c"
2039                 : Older versions did not always set $sh.  Catch re-use of such
2040                 : an old config.sh.
2041                 case "$sh" in
2042                 '') sh="$tmp_sh" ;;
2043                 esac
2044                 hint=previous
2045                 ;;
2046         esac
2047 fi
2048 if test ! -f config.sh; then
2049         $cat <<EOM
2050
2051 First time through, eh?  I have some defaults handy for some systems
2052 that need some extra help getting the Configure answers right:
2053
2054 EOM
2055         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2056         dflt=''
2057         : Half the following guesses are probably wrong... If you have better
2058         : tests or hints, please send them to perlbug@perl.com
2059         : The metaconfig authors would also appreciate a copy...
2060         $test -f /irix && osname=irix
2061         $test -f /xenix && osname=sco_xenix
2062         $test -f /dynix && osname=dynix
2063         $test -f /dnix && osname=dnix
2064         $test -f /lynx.os && osname=lynxos
2065         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2066         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2067         $test -f /bin/mips && /bin/mips && osname=mips
2068         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2069                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2070         $test -d /usr/apollo/bin && osname=apollo
2071         $test -f /etc/saf/_sactab && osname=svr4
2072         $test -d /usr/include/minix && osname=minix
2073         if $test -d /MachTen -o -d /MachTen_Folder; then
2074                 osname=machten
2075                 if $test -x /sbin/version; then
2076                         osvers=`/sbin/version | $awk '{print $2}' |
2077                         $sed -e 's/[A-Za-z]$//'`
2078                 elif $test -x /usr/etc/version; then
2079                         osvers=`/usr/etc/version | $awk '{print $2}' |
2080                         $sed -e 's/[A-Za-z]$//'`
2081                 else
2082                         osvers="$2.$3"
2083                 fi
2084         fi
2085        $test -f /sys/posix.dll &&
2086                $test -f /usr/bin/what &&
2087                set X `/usr/bin/what /sys/posix.dll` &&
2088                $test "$3" = UWIN &&
2089                osname=uwin &&
2090                osvers="$5"
2091         if $test -f $uname; then
2092                 set X $myuname
2093                 shift
2094
2095                 case "$5" in
2096                 fps*) osname=fps ;;
2097                 mips*)
2098                         case "$4" in
2099                         umips) osname=umips ;;
2100                         *) osname=mips ;;
2101                         esac;;
2102                 [23]100) osname=mips ;;
2103                 next*) osname=next ;;
2104                 i386*)
2105                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2106                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2107                                 osname='sco'
2108                                 osvers=$tmp
2109                         elif $test -f /etc/kconfig; then
2110                                 osname=isc
2111                                 if test "$lns" = "$ln -s"; then
2112                                         osvers=4
2113                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2114                                         osvers=3
2115                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2116                                         osvers=2
2117                                 fi
2118                         fi
2119                         tmp=''
2120                         ;;
2121                 pc*)
2122                         if test -n "$DJGPP"; then
2123                                 osname=dos
2124                                 osvers=djgpp
2125                         fi
2126                         ;;
2127                 esac
2128
2129                 case "$1" in
2130                 aix) osname=aix
2131                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2132                         case "$tmp" in
2133                         'not found') osvers="$4"."$3" ;;
2134                         '<3240'|'<>3240') osvers=3.2.0 ;;
2135                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2136                         '=3250'|'>3250') osvers=3.2.5 ;;
2137                         *) osvers=$tmp;;
2138                         esac
2139                         ;;
2140                 *dc.osx) osname=dcosx
2141                         osvers="$3"
2142                         ;;
2143                 dnix) osname=dnix
2144                         osvers="$3"
2145                         ;;
2146                 domainos) osname=apollo
2147                         osvers="$3"
2148                         ;;
2149                 dgux) osname=dgux 
2150                         osvers="$3"
2151                         ;;
2152                 dynixptx*) osname=dynixptx
2153                         osvers=`echo "$4"|sed 's/^v//'`
2154                         ;;
2155                 freebsd) osname=freebsd 
2156                         osvers="$3" ;;
2157                 genix) osname=genix ;;
2158                 hp*) osname=hpux 
2159                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2160                         ;;
2161                 irix*) osname=irix
2162                         case "$3" in
2163                         4*) osvers=4 ;;
2164                         5*) osvers=5 ;;
2165                         *)      osvers="$3" ;;
2166                         esac
2167                         ;;
2168                 linux) osname=linux
2169                         case "$3" in
2170                         *)      osvers="$3" ;;
2171                         esac
2172                         ;;
2173                 MiNT) osname=mint
2174                         ;;
2175                 netbsd*) osname=netbsd
2176                         osvers="$3"
2177                         ;;
2178                 news-os) osvers="$3"
2179                         case "$3" in
2180                         4*) osname=newsos4 ;;
2181                         *) osname=newsos ;;
2182                         esac
2183                         ;;
2184                 bsd386) osname=bsd386
2185                         osvers=`$uname -r`
2186                         ;;
2187                 POSIX-BC | posix-bc ) osname=posix-bc
2188                         osvers="$3"
2189                         ;;
2190                 powerux | power_ux | powermax_os | powermaxos | \
2191                 powerunix | power_unix) osname=powerux
2192                         osvers="$3"
2193                         ;;
2194                 next*) osname=next ;;
2195                 solaris) osname=solaris
2196                         case "$3" in
2197                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2198                         *)      osvers="$3" ;;
2199                         esac
2200                         ;;
2201                 sunos) osname=sunos
2202                         case "$3" in
2203                         5*) osname=solaris
2204                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2205                         *)      osvers="$3" ;;
2206                         esac
2207                         ;;
2208                 titanos) osname=titanos
2209                         case "$3" in
2210                         1*) osvers=1 ;;
2211                         2*) osvers=2 ;;
2212                         3*) osvers=3 ;;
2213                         4*) osvers=4 ;;
2214                         *)      osvers="$3" ;;
2215                         esac
2216                         ;;
2217                 ultrix) osname=ultrix
2218                         osvers="$3"
2219                         ;;
2220                 osf1|mls+)      case "$5" in
2221                                 alpha)
2222                                         osname=dec_osf
2223                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2224                                         ;;
2225                         hp*)    osname=hp_osf1  ;;
2226                         mips)   osname=mips_osf1 ;;
2227                         esac
2228                         ;;
2229                 uts) osname=uts 
2230                         osvers="$3"
2231                         ;;
2232                 qnx) osname=qnx
2233                         osvers="$4"
2234                         ;;
2235                 $2) case "$osname" in
2236                         *isc*) ;;
2237                         *freebsd*) ;;
2238                         svr*)
2239                                 : svr4.x or possibly later
2240                                 case "svr$3" in 
2241                                 ${osname}*)
2242                                         osname=svr$3
2243                                         osvers=$4
2244                                         ;;
2245                                 esac
2246                                 case "$osname" in
2247                                 svr4.0)
2248                                         : Check for ESIX
2249                                         if test -f /stand/boot ; then
2250                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2251                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2252                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2253                                                         if test -n "$isesix"; then
2254                                                                 osname=esix4
2255                                                         fi
2256                                                 fi
2257                                         fi
2258                                         ;;
2259                                 esac
2260                                 ;;
2261                         *)      if test -f /etc/systemid; then
2262                                         osname=sco
2263                                         set `echo $3 | $sed 's/\./ /g'` $4
2264                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2265                                                 osvers=$1.$2.$3
2266                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2267                                                 osvers=$1.$2
2268                                         elif $test -f $src/hints/sco_$1.sh; then
2269                                                 osvers=$1
2270                                         fi
2271                                 else
2272                                         case "$osname" in
2273                                         '') : Still unknown.  Probably a generic Sys V.
2274                                                 osname="sysv"
2275                                                 osvers="$3"
2276                                                 ;;
2277                                         esac
2278                                 fi
2279                                 ;;
2280                         esac
2281                         ;;
2282                 *)      case "$osname" in
2283                         '') : Still unknown.  Probably a generic BSD.
2284                                 osname="$1"
2285                                 osvers="$3"
2286                                 ;;
2287                         esac
2288                         ;;
2289                 esac
2290         else
2291                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2292                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2293                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2294                                 osname=news_os
2295                         fi
2296                         $rm -f UU/kernel.what
2297                 elif test -d c:/.; then
2298                         set X $myuname
2299                         osname=os2
2300                         osvers="$5"
2301                 fi
2302         fi
2303         
2304         : Now look for a hint file osname_osvers, unless one has been
2305         : specified already.
2306         case "$hintfile" in
2307         ''|' ')
2308                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2309                 : Also try without trailing minor version numbers.
2310                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2311                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2312                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2313                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2314                 case "$file" in
2315                 '') dflt=none ;;
2316                 *)  case "$osvers" in
2317                         '') dflt=$file
2318                                 ;;
2319                         *)  if $test -f $src/hints/$file.sh ; then
2320                                         dflt=$file
2321                                 elif $test -f $src/hints/$xfile.sh ; then
2322                                         dflt=$xfile
2323                                 elif $test -f $src/hints/$xxfile.sh ; then
2324                                         dflt=$xxfile
2325                                 elif $test -f $src/hints/$xxxfile.sh ; then
2326                                         dflt=$xxxfile
2327                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2328                                         dflt=$xxxxfile
2329                                 elif $test -f "$src/hints/${osname}.sh" ; then
2330                                         dflt="${osname}"
2331                                 else
2332                                         dflt=none
2333                                 fi
2334                                 ;;
2335                         esac
2336                         ;;
2337                 esac
2338                 if $test -f Policy.sh ; then
2339                         case "$dflt" in
2340                         *Policy*) ;;
2341                         none) dflt="Policy" ;;
2342                         *) dflt="Policy $dflt" ;;
2343                         esac
2344                 fi
2345                 ;;
2346         *)
2347                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2348                 ;;
2349         esac
2350
2351         if $test -f Policy.sh ; then
2352                 $cat <<EOM
2353
2354 There's also a Policy hint file available, which should make the
2355 site-specific (policy) questions easier to answer.
2356 EOM
2357
2358         fi
2359
2360         $cat <<EOM
2361
2362 You may give one or more space-separated answers, or "none" if appropriate.
2363 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2364 is a good thing.  DO NOT give a wrong version.
2365
2366 EOM
2367
2368         rp="Which of these apply, if any?"
2369         . UU/myread
2370         tans=$ans
2371         for file in $tans; do
2372                 if $test X$file = XPolicy -a -f Policy.sh; then
2373                         . Policy.sh
2374                         $cat Policy.sh >> UU/config.sh
2375                 elif $test -f $src/hints/$file.sh; then
2376                         . $src/hints/$file.sh
2377                         $cat $src/hints/$file.sh >> UU/config.sh
2378                 elif $test X$tans = X -o X$tans = Xnone ; then
2379                         : nothing
2380                 else
2381                         : Give one chance to correct a possible typo.
2382                         echo "$file.sh does not exist"
2383                         dflt=$file
2384                         rp="hint to use instead?"
2385                         . UU/myread
2386                         for file in $ans; do
2387                                 if $test -f "$src/hints/$file.sh"; then
2388                                         . $src/hints/$file.sh
2389                                         $cat $src/hints/$file.sh >> UU/config.sh
2390                                 elif $test X$ans = X -o X$ans = Xnone ; then
2391                                         : nothing
2392                                 else
2393                                         echo "$file.sh does not exist -- ignored."
2394                                 fi
2395                         done
2396                 fi
2397         done
2398
2399         hint=recommended
2400         : Remember our hint file for later.
2401         if $test -f "$src/hints/$file.sh" ; then
2402                 hintfile="$file"
2403         else
2404                 hintfile=''
2405         fi
2406 fi
2407 cd UU
2408 ;;
2409 *)
2410         echo " "
2411         echo "Fetching default answers from $config_sh..." >&4
2412         tmp_n="$n"
2413         tmp_c="$c"
2414         cd ..
2415         cp $config_sh config.sh 2>/dev/null
2416         chmod +w config.sh
2417         . ./config.sh
2418         cd UU
2419         cp ../config.sh .
2420         n="$tmp_n"
2421         c="$tmp_c"
2422         hint=previous
2423         ;;
2424 esac
2425 test "$override" && . ./optdef.sh
2426 myuname="$newmyuname"
2427
2428 : Restore computed paths
2429 for file in $loclist $trylist; do
2430         eval $file="\$_$file"
2431 done
2432
2433 cat << EOM
2434
2435 Configure uses the operating system name and version to set some defaults.
2436 The default value is probably right if the name rings a bell. Otherwise,
2437 since spelling matters for me, either accept the default or answer "none"
2438 to leave it blank.
2439
2440 EOM
2441 case "$osname" in
2442         ''|' ')
2443                 case "$hintfile" in
2444                 ''|' '|none) dflt=none ;;
2445                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2446                 esac
2447                 ;;
2448         *) dflt="$osname" ;;
2449 esac
2450 rp="Operating system name?"
2451 . ./myread
2452 case "$ans" in
2453 none)  osname='' ;;
2454 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2455 esac
2456 echo " "
2457 case "$osvers" in
2458         ''|' ')
2459                 case "$hintfile" in
2460                 ''|' '|none) dflt=none ;;
2461                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2462                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2463                         case "$dflt" in
2464                         ''|' ') dflt=none ;;
2465                         esac
2466                         ;;
2467                 esac
2468                 ;;
2469         *) dflt="$osvers" ;;
2470 esac
2471 rp="Operating system version?"
2472 . ./myread
2473 case "$ans" in
2474 none)  osvers='' ;;
2475 *) osvers="$ans" ;;
2476 esac
2477
2478 : who configured the system
2479 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2480 cf_by=`(logname) 2>/dev/null`
2481 case "$cf_by" in
2482 "")
2483         cf_by=`(whoami) 2>/dev/null`
2484         case "$cf_by" in
2485         "") cf_by=unknown ;;
2486         esac ;;
2487 esac
2488
2489 : set up the script used to warn in case of inconsistency
2490 cat <<EOS >whoa
2491 $startsh
2492 EOS
2493 cat <<'EOSC' >>whoa
2494 dflt=y
2495 echo " "
2496 echo "*** WHOA THERE!!! ***" >&4
2497 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2498 rp="    Keep the $hint value?"
2499 . ./myread
2500 case "$ans" in
2501 y) td=$was; tu=$was;;
2502 esac
2503 EOSC
2504
2505 : function used to set $1 to $val
2506 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2507 case "$val$was" in
2508 $define$undef) . ./whoa; eval "$var=\$td";;
2509 $undef$define) . ./whoa; eval "$var=\$tu";;
2510 *) eval "$var=$val";;
2511 esac'
2512
2513 cat <<EOM
2514
2515 Perl can be built to take advantage of threads, on some systems.
2516 To do so, Configure must be run with -Dusethreads.
2517
2518 Note that threading is a highly experimental feature, and
2519 some known race conditions still remain.  If you choose to try
2520 it, be very sure to not actually deploy it for production
2521 purposes.  README.threads has more details, and is required
2522 reading if you enable threads.
2523 EOM
2524 case "$usethreads" in
2525 $define|true|[yY]*)     dflt='y';;
2526 *) dflt='n';;
2527 esac
2528 rp='Build a threading Perl?'
2529 . ./myread
2530 case "$ans" in
2531 y|Y)    val="$define" ;;     
2532 *)      val="$undef" ;;
2533 esac
2534 set usethreads
2535 eval $setvar 
2536
2537 case "$d_oldpthreads" in
2538 '')     : Configure tests would be welcome here.  For now, assume undef.
2539         val="$undef" ;;
2540 *)      val="$d_oldpthreads" ;;
2541 esac
2542 set d_oldpthreads
2543 eval $setvar
2544
2545
2546 case "$usethreads" in
2547 "$define"|true|[yY]*)
2548 : Look for a hint-file generated 'call-back-unit'.  If the
2549 : user has specified that a threading perl is to be built,
2550 : we may need to set or change some other defaults.
2551         if $test -f usethreads.cbu; then
2552                 . ./usethreads.cbu
2553         fi
2554         case "$osname" in
2555         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2556                 # Known thread-capable platforms.
2557                 ;;
2558         *)
2559                 cat >&4 <<EOM
2560 $osname is not known to support threads.
2561 Please let perlbug@perl.com know how to do that.
2562
2563 Cannot continue, aborting.
2564 EOM
2565                 exit 1
2566         ;;
2567         esac # $osname
2568     ;;
2569 esac # $usethreads
2570
2571 cat <<EOM
2572
2573 Perl can be built so that multiple Perl interpreters can coexist
2574 within the same Perl executable.  To do so, Configure must be run with
2575 -Dusemultiplicity.
2576
2577 Normally you do not need this and you should answer no.
2578
2579 EOM
2580 case "$usemultiplicity" in
2581 $define|true|[yY]*)     dflt='y';;
2582 *) dflt='n';;
2583 esac
2584 rp='Build Perl for multiplicity?'
2585 . ./myread
2586 case "$ans" in
2587 y|Y)    val="$define" ;;     
2588 *)      val="$undef" ;;
2589 esac
2590 set usemultiplicity
2591 eval $setvar 
2592
2593 cat <<EOM
2594
2595 Perl can be built to take advantage of explicit 64-bit interfaces,
2596 on some systems.  To do so, Configure must be run with -Duse64bits.
2597
2598 If this doesn't make any sense to you, just accept the default 'n'.
2599 EOM
2600 case "$use64bits" in
2601 $define|true|[yY]*)     dflt='y';;
2602 *) dflt='n';;
2603 esac
2604 rp='Try to use explicit 64-bit interfaces, if available?'
2605 . ./myread
2606 case "$ans" in
2607 y|Y) 
2608         val="$define"
2609         ;;     
2610 *)      
2611         val="$undef"
2612         ;;
2613 esac
2614 set use64bits
2615 eval $setvar
2616
2617 case "$archname64" in
2618 '') archname64='' ;;    # not a typo
2619 esac
2620
2621 case "$use64bits" in
2622 "$define"|true|[yY]*)
2623 : Look for a hint-file generated 'call-back-unit'.  If the
2624 : user has specified that a threading perl is to be built,
2625 : we may need to set or change some other defaults.
2626         if $test -f use64bits.cbu; then
2627                 . ./use64bits.cbu
2628         fi
2629         case "$osname" in
2630         dec_osf|hpux|irix|solaris|unicos)
2631                 # Known 64-bit capable platforms.
2632                 ;;
2633         *)
2634                 cat >&4 <<EOM
2635 $osname is not known to support 64-bit interfaces.
2636 Please let perlbug@perl.com know how to do that.
2637
2638 Cannot continue, aborting.
2639 EOM
2640                 exit 1
2641                 ;;
2642         esac
2643         ;;
2644 esac
2645
2646 : determine the architecture name
2647 echo " "
2648 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2649         tarch=`arch`"-$osname"
2650 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2651         if uname -m > tmparch 2>&1 ; then
2652                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2653                         -e 's/$/'"-$osname/" tmparch`
2654         else
2655                 tarch="$osname"
2656         fi
2657         $rm -f tmparch
2658 else
2659         tarch="$osname"
2660 fi
2661 case "$myarchname" in
2662 ''|"$tarch") ;;
2663 *)
2664         echo "(Your architecture name used to be $myarchname.)"
2665         archname=''
2666         ;;
2667 esac
2668 myarchname="$tarch"
2669 case "$archname" in
2670 '') dflt="$tarch";;
2671 *) dflt="$archname";;
2672 esac
2673 rp='What is your architecture name'
2674 . ./myread
2675 archname="$ans"
2676 case "$usethreads" in
2677 $define)
2678         echo "Threads selected." >&4
2679         case "$archname" in
2680         *-thread*) echo "...and architecture name already has -thread." >&4
2681                 ;;
2682         *)      archname="$archname-thread"
2683                 echo "...setting architecture name to $archname." >&4
2684                 ;;
2685         esac
2686         ;;
2687 esac
2688 case "$usemultiplicity" in
2689 $define)
2690         echo "Multiplicity selected." >&4
2691         case "$archname" in
2692         *-multi*) echo "...and architecture name already has -multi." >&4
2693                 ;;
2694         *)      archname="$archname-multi"
2695                 echo "...setting architecture name to $archname." >&4
2696                 ;;
2697         esac
2698         ;;
2699 esac
2700 case "$use64bits" in
2701 $define)
2702         echo "Explicit 64-bitness selected." >&4
2703         case "$archname64" in
2704         '')
2705                 ;;
2706         *)
2707                 case "$archname" in
2708                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2709                         ;;
2710                 *)      archname="$archname-$archname64"
2711                         echo "...setting architecture name to $archname." >&4
2712                         ;;
2713                 esac
2714                 ;;
2715         esac
2716 esac
2717
2718 : is AFS running?
2719 echo " "
2720 case "$afs" in
2721 $define|true)   afs=true ;;
2722 $undef|false)   afs=false ;;
2723 *)      if test -d /afs; then
2724                 afs=true
2725         else
2726                 afs=false
2727         fi
2728         ;;
2729 esac
2730 if $afs; then
2731         echo "AFS may be running... I'll be extra cautious then..." >&4
2732 else
2733         echo "AFS does not seem to be running..." >&4
2734 fi
2735
2736 : decide how portable to be.  Allow command line overrides.
2737 case "$d_portable" in
2738 "$undef") ;;
2739 *)      d_portable="$define" ;;
2740 esac
2741
2742 : set up shell script to do ~ expansion
2743 cat >filexp <<EOSS
2744 $startsh
2745 : expand filename
2746 case "\$1" in
2747  ~/*|~)
2748         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2749         ;;
2750  ~*)
2751         if $test -f /bin/csh; then
2752                 /bin/csh -f -c "glob \$1"
2753                 failed=\$?
2754                 echo ""
2755                 exit \$failed
2756         else
2757                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2758                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2759                 if $test ! -d "\$dir"; then
2760                         me=\`basename \$0\`
2761                         echo "\$me: can't locate home directory for: \$name" >&2
2762                         exit 1
2763                 fi
2764                 case "\$1" in
2765                 */*)
2766                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2767                         ;;
2768                 *)
2769                         echo \$dir
2770                         ;;
2771                 esac
2772         fi
2773         ;;
2774 *)
2775         echo \$1
2776         ;;
2777 esac
2778 EOSS
2779 chmod +x filexp
2780 $eunicefix filexp
2781
2782 : now set up to get a file name
2783 cat <<EOS >getfile
2784 $startsh
2785 EOS
2786 cat <<'EOSC' >>getfile
2787 tilde=''
2788 fullpath=''
2789 already=''
2790 skip=''
2791 none_ok=''
2792 exp_file=''
2793 nopath_ok=''
2794 orig_rp="$rp"
2795 orig_dflt="$dflt"
2796
2797 case "$fn" in
2798 *\(*)
2799         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2800         fn=`echo $fn | sed 's/(.*)//'`
2801         ;;
2802 esac
2803
2804 case "$fn" in
2805 *:*)
2806         loc_file=`expr $fn : '.*:\(.*\)'`
2807         fn=`expr $fn : '\(.*\):.*'`
2808         ;;
2809 esac
2810
2811 case "$fn" in
2812 *~*) tilde=true;;
2813 esac
2814 case "$fn" in
2815 */*) fullpath=true;;
2816 esac
2817 case "$fn" in
2818 *+*) skip=true;;
2819 esac
2820 case "$fn" in
2821 *n*) none_ok=true;;
2822 esac
2823 case "$fn" in
2824 *e*) exp_file=true;;
2825 esac
2826 case "$fn" in
2827 *p*) nopath_ok=true;;
2828 esac
2829
2830 case "$fn" in
2831 *f*) type='File';;
2832 *d*) type='Directory';;
2833 *l*) type='Locate';;
2834 esac
2835
2836 what="$type"
2837 case "$what" in
2838 Locate) what='File';;
2839 esac
2840
2841 case "$exp_file" in
2842 '')
2843         case "$d_portable" in
2844         "$define") ;;
2845         *) exp_file=true;;
2846         esac
2847         ;;
2848 esac
2849
2850 cd ..
2851 while test "$type"; do
2852         redo=''
2853         rp="$orig_rp"
2854         dflt="$orig_dflt"
2855         case "$tilde" in
2856         true) rp="$rp (~name ok)";;
2857         esac
2858         . UU/myread
2859         if test -f UU/getfile.ok && \
2860                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2861         then
2862                 value="$ans"
2863                 ansexp="$ans"
2864                 break
2865         fi
2866         case "$ans" in
2867         none)
2868                 value=''
2869                 ansexp=''
2870                 case "$none_ok" in
2871                 true) type='';;
2872                 esac
2873                 ;;
2874         *)
2875                 case "$tilde" in
2876                 '') value="$ans"
2877                         ansexp="$ans";;
2878                 *)
2879                         value=`UU/filexp $ans`
2880                         case $? in
2881                         0)
2882                                 if test "$ans" != "$value"; then
2883                                         echo "(That expands to $value on this system.)"
2884                                 fi
2885                                 ;;
2886                         *) value="$ans";;
2887                         esac
2888                         ansexp="$value"
2889                         case "$exp_file" in
2890                         '') value="$ans";;
2891                         esac
2892                         ;;
2893                 esac
2894                 case "$fullpath" in
2895                 true)
2896                         case "$ansexp" in
2897                         /*) value="$ansexp" ;;
2898                         *)
2899                                 redo=true
2900                                 case "$already" in
2901                                 true)
2902                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2903                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2904                                         ;;
2905                                 *)
2906                                 echo "Please give a full path name, starting with slash." >&4
2907                                         case "$tilde" in
2908                                         true)
2909                                 echo "Note that using ~name is ok provided it expands well." >&4
2910                                                 already=true
2911                                                 ;;
2912                                         esac
2913                                 esac
2914                                 ;;
2915                         esac
2916                         ;;
2917                 esac
2918                 case "$redo" in
2919                 '')
2920                         case "$type" in
2921                         File)
2922                                 if test -f "$ansexp"; then
2923                                         type=''
2924                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2925                                 then
2926                                         echo "($value is not a plain file, but that's ok.)"
2927                                         type=''
2928                                 fi
2929                                 ;;
2930                         Directory)
2931                                 if test -d "$ansexp"; then
2932                                         type=''
2933                                 fi
2934                                 ;;
2935                         Locate)
2936                                 if test -d "$ansexp"; then
2937                                         echo "(Looking for $loc_file in directory $value.)"
2938                                         value="$value/$loc_file"
2939                                         ansexp="$ansexp/$loc_file"
2940                                 fi
2941                                 if test -f "$ansexp"; then
2942                                         type=''
2943                                 fi
2944                                 case "$nopath_ok" in
2945                                 true)   case "$value" in
2946                                         */*) ;;
2947                                         *)      echo "Assuming $value will be in people's path."
2948                                                 type=''
2949                                                 ;;
2950                                         esac
2951                                         ;;
2952                                 esac
2953                                 ;;
2954                         esac
2955
2956                         case "$skip" in
2957                         true) type='';
2958                         esac
2959
2960                         case "$type" in
2961                         '') ;;
2962                         *)
2963                                 if test "$fastread" = yes; then
2964                                         dflt=y
2965                                 else
2966                                         dflt=n
2967                                 fi
2968                                 rp="$what $value doesn't exist.  Use that name anyway?"
2969                                 . UU/myread
2970                                 dflt=''
2971                                 case "$ans" in
2972                                 y*) type='';;
2973                                 *) echo " ";;
2974                                 esac
2975                                 ;;
2976                         esac
2977                         ;;
2978                 esac
2979                 ;;
2980         esac
2981 done
2982 cd UU
2983 ans="$value"
2984 rp="$orig_rp"
2985 dflt="$orig_dflt"
2986 rm -f getfile.ok
2987 EOSC
2988
2989 : determine root of directory hierarchy where package will be installed.
2990 case "$prefix" in
2991 '')
2992         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2993         ;;
2994 *)
2995         dflt="$prefix"
2996         ;;
2997 esac
2998 $cat <<EOM
2999
3000 By default, $package will be installed in $dflt/bin, manual
3001 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3002 all installation directories. Typically set to /usr/local, but you
3003 may choose /usr if you wish to install $package among your system
3004 binaries. If you wish to have binaries under /bin but manual pages
3005 under /usr/local/man, that's ok: you will be prompted separately
3006 for each of the installation directories, the prefix being only used
3007 to set the defaults.
3008
3009 EOM
3010 fn=d~
3011 rp='Installation prefix to use?'
3012 . ./getfile
3013 oldprefix=''
3014 case "$prefix" in
3015 '') ;;
3016 *)
3017         case "$ans" in
3018         "$prefix") ;;
3019         *) oldprefix="$prefix";;
3020         esac
3021         ;;
3022 esac
3023 prefix="$ans"
3024 prefixexp="$ansexp"
3025
3026 : set the prefixit variable, to compute a suitable default value
3027 prefixit='case "$3" in
3028 ""|none)
3029         case "$oldprefix" in
3030         "") eval "$1=\"\$$2\"";;
3031         *)
3032                 case "$3" in
3033                 "") eval "$1=";;
3034                 none)
3035                         eval "tp=\"\$$2\"";
3036                         case "$tp" in
3037                         ""|" ") eval "$1=\"\$$2\"";;
3038                         *) eval "$1=";;
3039                         esac;;
3040                 esac;;
3041         esac;;
3042 *)
3043         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3044         case "$tp" in
3045         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3046         /*-$oldprefix/*|\~*-$oldprefix/*)
3047                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3048         *) eval "$1=\"\$$2\"";;
3049         esac;;
3050 esac'
3051
3052 : set the base revision
3053 baserev=5.0
3054
3055 : get the patchlevel
3056 echo " "
3057 echo "Getting the current patchlevel..." >&4
3058 if $test -r $rsrc/patchlevel.h;then
3059         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3060         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3061 else
3062         patchlevel=0
3063         subversion=0
3064 fi
3065 $echo $n "(You have $package" $c
3066 case "$package" in
3067 "*$baserev")    ;;
3068 *)              $echo $n " $baserev" $c ;;
3069 esac
3070 $echo $n " patchlevel $patchlevel" $c
3071 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3072 echo ".)"
3073
3074 if test 0 -eq "$subversion"; then
3075         version=`LC_ALL=C; export LC_ALL; \
3076                  echo $baserev $patchlevel | \
3077                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3078 else
3079         version=`LC_ALL=C; export LC_ALL; \
3080                  echo $baserev $patchlevel $subversion | \
3081                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3082 fi
3083 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3084 if test "$subversion" -lt 50; then
3085         apiversion=`LC_ALL=C; export LC_ALL; \
3086                  LANGUAGE=C; export LANGUAGE; \
3087                  echo $baserev $patchlevel | \
3088                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3089 else
3090         apiversion="$version"
3091 fi
3092
3093 : determine where private library files go
3094 : Usual default is /usr/local/lib/perl5/$version.
3095 : Also allow things like /opt/perl/lib/$version, since 
3096 : /opt/perl/lib/perl5... would be redundant.
3097 case "$prefix" in
3098 *perl*) set dflt privlib lib/$version ;;
3099 *)       set dflt privlib lib/$package/$version ;;
3100 esac
3101 eval $prefixit
3102 $cat <<EOM
3103
3104 There are some auxiliary files for $package that need to be put into a
3105 private library directory that is accessible by everyone.
3106
3107 EOM
3108 fn=d~+
3109 rp='Pathname where the private library files will reside?'
3110 . ./getfile
3111 if $test "X$privlibexp" != "X$ansexp"; then
3112         installprivlib=''
3113 fi
3114 privlib="$ans"
3115 privlibexp="$ansexp"
3116 if $afs; then
3117         $cat <<EOM
3118
3119 Since you are running AFS, I need to distinguish the directory in which
3120 private files reside from the directory in which they are installed (and from
3121 which they are presumably copied to the former directory by occult means).
3122
3123 EOM
3124         case "$installprivlib" in
3125         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3126         *) dflt="$installprivlib";;
3127         esac
3128         fn=de~
3129         rp='Where will private files be installed?'
3130         . ./getfile
3131         installprivlib="$ans"
3132 else
3133         installprivlib="$privlibexp"
3134 fi
3135
3136 : set the prefixup variable, to restore leading tilda escape
3137 prefixup='case "$prefixexp" in
3138 "$prefix") ;;
3139 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3140 esac'
3141
3142 : determine where public architecture dependent libraries go
3143 set archlib archlib
3144 eval $prefixit
3145 : privlib default is /usr/local/lib/$package/$version
3146 : archlib default is /usr/local/lib/$package/$version/$archname
3147 : privlib may have an optional trailing /share.
3148 tdflt=`echo $privlib | $sed 's,/share$,,'`
3149 tdflt=$tdflt/$archname
3150 case "$archlib" in
3151 '')     dflt=$tdflt
3152         ;;
3153 *)      dflt="$archlib"
3154     ;;
3155 esac
3156 cat <<EOM
3157
3158 $spackage contains architecture-dependent library files.  If you are
3159 sharing libraries in a heterogeneous environment, you might store
3160 these files in a separate location.  Otherwise, you can just include
3161 them with the rest of the public library files.
3162
3163 EOM
3164 fn=d+~
3165 rp='Where do you want to put the public architecture-dependent libraries?'
3166 . ./getfile
3167 archlib="$ans"
3168 archlibexp="$ansexp"
3169
3170 if $afs; then
3171         $cat <<EOM
3172
3173 Since you are running AFS, I need to distinguish the directory in
3174 which architecture-dependent library files reside from the directory
3175 in which they are installed (and from which they are presumably copied
3176 to the former directory by occult means).
3177
3178 EOM
3179         case "$installarchlib" in
3180         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3181         *) dflt="$installarchlib";;
3182         esac
3183         fn=de~
3184         rp='Where will architecture-dependent library files be installed?'
3185         . ./getfile
3186         installarchlib="$ans"
3187 else
3188         installarchlib="$archlibexp"
3189 fi
3190 if $test X"$archlib" = X"$privlib"; then
3191         d_archlib="$undef"
3192 else
3193         d_archlib="$define"
3194 fi
3195
3196 : make some quick guesses about what we are up against
3197 echo " "
3198 $echo $n "Hmm...  $c"
3199 echo exit 1 >bsd
3200 echo exit 1 >usg
3201 echo exit 1 >v7
3202 echo exit 1 >osf1
3203 echo exit 1 >eunice
3204 echo exit 1 >xenix
3205 echo exit 1 >venix
3206 echo exit 1 >os2
3207 d_bsd="$undef"
3208 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3209 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3210 then
3211         echo "Looks kind of like an OSF/1 system, but we'll see..."
3212         echo exit 0 >osf1
3213 elif test `echo abc | tr a-z A-Z` = Abc ; then
3214         xxx=`./loc addbib blurfl $pth`
3215         if $test -f $xxx; then
3216         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3217                 echo exit 0 >bsd
3218                 echo exit 0 >usg
3219         else
3220                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3221                         echo "Looks kind of like an extended USG system, but we'll see..."
3222                 else
3223                         echo "Looks kind of like a USG system, but we'll see..."
3224                 fi
3225                 echo exit 0 >usg
3226         fi
3227 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3228         echo "Looks kind of like a BSD system, but we'll see..."
3229         d_bsd="$define"
3230         echo exit 0 >bsd
3231 else
3232         echo "Looks kind of like a Version 7 system, but we'll see..."
3233         echo exit 0 >v7
3234 fi
3235 case "$eunicefix" in
3236 *unixtovms*)
3237         $cat <<'EOI'
3238 There is, however, a strange, musty smell in the air that reminds me of
3239 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3240 EOI
3241         echo exit 0 >eunice
3242         d_eunice="$define"
3243 : it so happens the Eunice I know will not run shell scripts in Unix format
3244         ;;
3245 *)
3246         echo " "
3247         echo "Congratulations.  You aren't running Eunice."
3248         d_eunice="$undef"
3249         ;;
3250 esac
3251 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3252 case "$p_" in
3253 :) ;;
3254 *)
3255         $cat <<'EOI'
3256 I have the feeling something is not exactly right, however...don't tell me...
3257 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3258 EOI
3259         echo exit 0 >os2
3260         ;;
3261 esac
3262 if test -f /xenix; then
3263         echo "Actually, this looks more like a XENIX system..."
3264         echo exit 0 >xenix
3265         d_xenix="$define"
3266 else
3267         echo " "
3268         echo "It's not Xenix..."
3269         d_xenix="$undef"
3270 fi
3271 chmod +x xenix
3272 $eunicefix xenix
3273 if test -f /venix; then
3274         echo "Actually, this looks more like a VENIX system..."
3275         echo exit 0 >venix
3276 else
3277         echo " "
3278         if ./xenix; then
3279                 : null
3280         else
3281                 echo "Nor is it Venix..."
3282         fi
3283 fi
3284 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3285 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3286 $rm -f foo
3287
3288 : see if setuid scripts can be secure
3289 $cat <<EOM
3290
3291 Some kernels have a bug that prevents setuid #! scripts from being
3292 secure.  Some sites have disabled setuid #! scripts because of this.
3293
3294 First let's decide if your kernel supports secure setuid #! scripts.
3295 (If setuid #! scripts would be secure but have been disabled anyway,
3296 don't say that they are secure if asked.)
3297
3298 EOM
3299
3300 val="$undef"
3301 if $test -d /dev/fd; then
3302         echo "#!$ls" >reflect
3303         chmod +x,u+s reflect
3304         ./reflect >flect 2>&1
3305         if $contains "/dev/fd" flect >/dev/null; then
3306                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3307                 val="$define"
3308         else
3309                 $cat <<EOM
3310 If you are not sure if they are secure, I can check but I'll need a
3311 username and password different from the one you are using right now.
3312 If you don't have such a username or don't want me to test, simply
3313 enter 'none'.
3314
3315 EOM
3316                 rp='Other username to test security of setuid scripts with?'
3317                 dflt='none'
3318                 . ./myread
3319                 case "$ans" in
3320                 n|none)
3321                         case "$d_suidsafe" in
3322                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3323                                 dflt=n;;
3324                         "$undef")
3325                                 echo "Well, the $hint value is *not* secure." >&4
3326                                 dflt=n;;
3327                         *)      echo "Well, the $hint value *is* secure." >&4
3328                                 dflt=y;;
3329                         esac
3330                         ;;
3331                 *)
3332                         $rm -f reflect flect
3333                         echo "#!$ls" >reflect
3334                         chmod +x,u+s reflect
3335                         echo >flect
3336                         chmod a+w flect
3337                         echo '"su" will (probably) prompt you for '"$ans's password."
3338                         su $ans -c './reflect >flect'
3339                         if $contains "/dev/fd" flect >/dev/null; then
3340                                 echo "Okay, it looks like setuid scripts are secure." >&4
3341                                 dflt=y
3342                         else
3343                                 echo "I don't think setuid scripts are secure." >&4
3344                                 dflt=n
3345                         fi
3346                         ;;
3347                 esac
3348                 rp='Does your kernel have *secure* setuid scripts?'
3349                 . ./myread
3350                 case "$ans" in
3351                 [yY]*)  val="$define";;
3352                 *)      val="$undef";;
3353                 esac
3354         fi
3355 else
3356         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3357         echo "(That's for file descriptors, not floppy disks.)"
3358         val="$undef"
3359 fi
3360 set d_suidsafe
3361 eval $setvar
3362
3363 $rm -f reflect flect
3364
3365 : now see if they want to do setuid emulation
3366 echo " "
3367 val="$undef"
3368 case "$d_suidsafe" in
3369 "$define")
3370         val="$undef"
3371         echo "No need to emulate SUID scripts since they are secure here." >& 4
3372         ;;
3373 *)
3374         $cat <<EOM
3375 Some systems have disabled setuid scripts, especially systems where
3376 setuid scripts cannot be secure.  On systems where setuid scripts have
3377 been disabled, the setuid/setgid bits on scripts are currently
3378 useless.  It is possible for $package to detect those bits and emulate
3379 setuid/setgid in a secure fashion.  This emulation will only work if
3380 setuid scripts have been disabled in your kernel.
3381
3382 EOM
3383         case "$d_dosuid" in
3384         "$define") dflt=y ;;
3385         *) dflt=n ;;
3386         esac
3387         rp="Do you want to do setuid/setgid emulation?"
3388         . ./myread
3389         case "$ans" in
3390         [yY]*)  val="$define";;
3391         *)      val="$undef";;
3392         esac
3393         ;;
3394 esac
3395 set d_dosuid
3396 eval $setvar
3397
3398 : determine where manual pages are on this system
3399 echo " "
3400 case "$sysman" in
3401 '') 
3402         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3403         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3404         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3405         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3406         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3407         sysman=`./loc . /usr/man/man1 $syspath`
3408         ;;
3409 esac
3410 if $test -d "$sysman"; then
3411         echo "System manual is in $sysman." >&4
3412 else
3413         echo "Could not find manual pages in source form." >&4
3414 fi
3415
3416 : see what memory models we can support
3417 case "$models" in
3418 '')
3419         $cat >pdp11.c <<'EOP'
3420 int main() {
3421 #ifdef pdp11
3422         exit(0);
3423 #else
3424         exit(1);
3425 #endif
3426 }
3427 EOP
3428         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3429         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3430                 dflt='unsplit split'
3431         else
3432                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3433                 case "$tans" in
3434                 X) dflt='none';;
3435                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3436                                 dflt='small'
3437                         else
3438                                 dflt=''
3439                         fi
3440                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3441                                 dflt="$dflt medium"
3442                         fi
3443                         if $test -d /lib/large || $test -d /usr/lib/large; then
3444                                 dflt="$dflt large"
3445                         fi
3446                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3447                                 dflt="$dflt huge"
3448                         fi
3449                 esac
3450         fi;;
3451 *) dflt="$models";;
3452 esac
3453 $cat <<EOM
3454  
3455 Some systems have different model sizes.  On most systems they are called
3456 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3457 split.  If your system doesn't support different memory models, say "none".
3458 If you wish to force everything to one memory model, say "none" here and
3459 put the appropriate flags later when it asks you for other cc and ld flags.
3460 Venix systems may wish to put "none" and let the compiler figure things out.
3461 (In the following question multiple model names should be space separated.)
3462
3463 The default for most systems is "none".
3464
3465 EOM
3466 rp="Which memory models are supported?"
3467 . ./myread
3468 models="$ans"
3469
3470 case "$models" in
3471 none)
3472         small=''
3473         medium=''
3474         large=''
3475         huge=''
3476         unsplit=''
3477         split=''
3478         ;;
3479 *split)
3480         case "$split" in
3481         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3482                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3483                         dflt='-i'
3484                 else
3485                         dflt='none'
3486                 fi;;
3487         *) dflt="$split";;
3488         esac
3489         rp="What flag indicates separate I and D space?"
3490         . ./myread
3491         tans="$ans"
3492         case "$tans" in
3493         none) tans='';;
3494         esac
3495         split="$tans"
3496         unsplit='';;
3497 *large*|*small*|*medium*|*huge*)
3498         case "$models" in
3499         *large*)
3500                 case "$large" in
3501                 '') dflt='-Ml';;
3502                 *) dflt="$large";;
3503                 esac
3504         rp="What flag indicates large model?"
3505         . ./myread
3506         tans="$ans"
3507         case "$tans" in
3508         none) tans='';
3509         esac
3510         large="$tans";;
3511         *) large='';;
3512         esac
3513         case "$models" in
3514         *huge*) case "$huge" in
3515                 '') dflt='-Mh';;
3516                 *) dflt="$huge";;
3517                 esac
3518                 rp="What flag indicates huge model?"
3519                 . ./myread
3520                 tans="$ans"
3521                 case "$tans" in
3522                 none) tans='';
3523                 esac
3524                 huge="$tans";;
3525         *) huge="$large";;
3526         esac
3527         case "$models" in
3528         *medium*) case "$medium" in
3529                 '') dflt='-Mm';;
3530                 *) dflt="$medium";;
3531                 esac
3532                 rp="What flag indicates medium model?"
3533                 . ./myread
3534                 tans="$ans"
3535                 case "$tans" in
3536                 none) tans='';
3537                 esac
3538                 medium="$tans";;
3539         *) medium="$large";;
3540         esac
3541         case "$models" in
3542         *small*) case "$small" in
3543                 '') dflt='none';;
3544                 *) dflt="$small";;
3545                 esac
3546                 rp="What flag indicates small model?"
3547                 . ./myread
3548                 tans="$ans"
3549                 case "$tans" in
3550                 none) tans='';
3551                 esac
3552                 small="$tans";;
3553         *) small='';;
3554         esac
3555         ;;
3556 *)
3557         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3558         ;;
3559 esac
3560 $rm -f pdp11.* pdp11
3561
3562 : see if we need a special compiler
3563 echo " "
3564 if ./usg; then
3565         case "$cc" in
3566         '') case "$Mcc" in
3567                 /*) dflt='Mcc';;
3568                 *) case "$large" in
3569                         -M*) dflt='cc';;
3570                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3571                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3572                                                 dflt='cc'
3573                                         else
3574                                                 dflt='cc -M'
3575                                         fi
3576                                 else
3577                                         dflt='cc'
3578                                 fi;;
3579                         esac;;
3580                 esac;;
3581         *)  dflt="$cc";;
3582         esac
3583         case "$dflt" in
3584         *M*)    $cat <<'EOM'
3585 On some older systems the default C compiler will not resolve multiple global
3586 references that happen to have the same name.  On some such systems the "Mcc"
3587 command may be used to force these to be resolved.  On other systems a "cc -M"
3588 command is required.  (Note that the -M flag on other systems indicates a
3589 memory model to use!) If you have the Gnu C compiler, you might wish to use
3590 that instead.
3591
3592 EOM
3593         ;;
3594         esac
3595         rp="Use which C compiler?"
3596         . ./myread
3597         cc="$ans"
3598 else
3599         case "$cc" in
3600         '') dflt=cc;;
3601         *) dflt="$cc";;
3602         esac
3603         rp="Use which C compiler?"
3604         . ./myread
3605         cc="$ans"
3606 fi
3607 : Look for a hint-file generated 'call-back-unit'.  Now that the
3608 : user has specified the compiler, we may need to set or change some
3609 : other defaults.
3610 if $test -f cc.cbu; then
3611     . ./cc.cbu
3612 fi
3613 echo " "
3614 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3615 $cat >gccvers.c <<EOM
3616 #include <stdio.h>
3617 int main() {
3618 #ifdef __GNUC__
3619 #ifdef __VERSION__
3620         printf("%s\n", __VERSION__);
3621 #else
3622         printf("%s\n", "1");
3623 #endif
3624 #endif
3625         exit(0);
3626 }
3627 EOM
3628 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3629         gccversion=`./gccvers`
3630         case "$gccversion" in
3631         '') echo "You are not using GNU cc." ;;
3632         *)  echo "You are using GNU cc $gccversion." ;;
3633         esac
3634 else
3635         echo " "
3636         echo "*** WHOA THERE!!! ***" >&4
3637         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3638         case "$knowitall" in
3639         '')
3640         echo "    You'd better start hunting for one and let me know about it." >&4
3641                 exit 1
3642                 ;;
3643         esac
3644 fi
3645 $rm -f gccvers*
3646 case "$gccversion" in
3647 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3648 esac
3649
3650 : What should the include directory be ?
3651 echo " "
3652 $echo $n "Hmm...  $c"
3653 dflt='/usr/include'
3654 incpath=''
3655 mips_type=''
3656 if $test -f /bin/mips && /bin/mips; then
3657         echo "Looks like a MIPS system..."
3658         $cat >usr.c <<'EOCP'
3659 #ifdef SYSTYPE_BSD43
3660 /bsd43
3661 #endif
3662 EOCP
3663         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3664                 dflt='/bsd43/usr/include'
3665                 incpath='/bsd43'
3666                 mips_type='BSD 4.3'
3667         else
3668                 mips_type='System V'
3669         fi
3670         $rm -f usr.c usr.out
3671         echo "and you're compiling with the $mips_type compiler and libraries."
3672         xxx_prompt=y
3673         echo "exit 0" >mips
3674 else
3675         echo "Doesn't look like a MIPS system."
3676         xxx_prompt=n
3677         echo "exit 1" >mips
3678 fi
3679 chmod +x mips
3680 $eunicefix mips
3681 case "$usrinc" in
3682 '') ;;
3683 *) dflt="$usrinc";;
3684 esac
3685 case "$xxx_prompt" in
3686 y)      fn=d/
3687         echo " "
3688         rp='Where are the include files you want to use?'
3689         . ./getfile
3690         usrinc="$ans"
3691         ;;
3692 *)      usrinc="$dflt"
3693         ;;
3694 esac
3695
3696 : see how we invoke the C preprocessor
3697 echo " "
3698 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3699 cat <<'EOT' >testcpp.c
3700 #define ABC abc
3701 #define XYZ xyz
3702 ABC.XYZ
3703 EOT
3704 cd ..
3705 if test ! -f cppstdin; then
3706         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3707 else
3708         echo "Keeping your $hint cppstdin wrapper."
3709 fi
3710 chmod 755 cppstdin
3711 wrapper=`pwd`/cppstdin
3712 ok='false'
3713 cd UU
3714
3715 if $test "X$cppstdin" != "X" && \
3716         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3717         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3718 then
3719         echo "You used to use $cppstdin $cppminus so we'll use that again."
3720         case "$cpprun" in
3721         '') echo "But let's see if we can live without a wrapper..." ;;
3722         *)
3723                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3724                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3725                 then
3726                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3727                         ok='true'
3728                 else
3729                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3730                 fi
3731                 ;;
3732         esac
3733 else
3734         case "$cppstdin" in
3735         '') ;;
3736         *)
3737                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3738                 ;;
3739         esac
3740 fi
3741
3742 if $ok; then
3743         : nothing
3744 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3745         $cc -E <testcpp.c >testcpp.out 2>&1; \
3746         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3747         echo "Yup, it does."
3748         x_cpp="$cc -E"
3749         x_minus='';
3750 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3751         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3752         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3753         echo "Yup, it does."
3754         x_cpp="$cc -E"
3755         x_minus='-';
3756 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3757         $cc -P <testcpp.c >testcpp.out 2>&1; \
3758         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3759         echo "Yipee, that works!"
3760         x_cpp="$cc -P"
3761         x_minus='';
3762 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3763         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3764         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3765         echo "At long last!"
3766         x_cpp="$cc -P"
3767         x_minus='-';
3768 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3769         $cpp <testcpp.c >testcpp.out 2>&1; \
3770         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3771         echo "It works!"
3772         x_cpp="$cpp"
3773         x_minus='';
3774 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3775         $cpp - <testcpp.c >testcpp.out 2>&1; \
3776         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3777         echo "Hooray, it works!  I was beginning to wonder."
3778         x_cpp="$cpp"
3779         x_minus='-';
3780 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3781         $wrapper <testcpp.c >testcpp.out 2>&1; \
3782         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3783         x_cpp="$wrapper"
3784         x_minus=''
3785         echo "Eureka!"
3786 else
3787         dflt=''
3788         rp="No dice.  I can't find a C preprocessor.  Name one:"
3789         . ./myread
3790         x_cpp="$ans"
3791         x_minus=''
3792         $x_cpp <testcpp.c >testcpp.out 2>&1
3793         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3794                 echo "OK, that will do." >&4
3795         else
3796 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3797                 exit 1
3798         fi
3799 fi
3800
3801 case "$ok" in
3802 false)
3803         cppstdin="$x_cpp"
3804         cppminus="$x_minus"
3805         cpprun="$x_cpp"
3806         cpplast="$x_minus"
3807         set X $x_cpp
3808         shift
3809         case "$1" in
3810         "$cpp")
3811                 echo "Perhaps can we force $cc -E using a wrapper..."
3812                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3813                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3814                 then
3815                         echo "Yup, we can."
3816                         cppstdin="$wrapper"
3817                         cppminus='';
3818                 else
3819                         echo "Nope, we'll have to live without it..."
3820                 fi
3821                 ;;
3822         esac
3823         case "$cpprun" in
3824         "$wrapper")
3825                 cpprun=''
3826                 cpplast=''
3827                 ;;
3828         esac
3829         ;;
3830 esac
3831
3832 case "$cppstdin" in
3833 "$wrapper"|'cppstdin') ;;
3834 *) $rm -f $wrapper;;
3835 esac
3836 $rm -f testcpp.c testcpp.out
3837
3838 : Set private lib path
3839 case "$plibpth" in
3840 '') if ./mips; then
3841                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3842         fi;;
3843 esac
3844 case "$libpth" in
3845 ' ') dlist='';;
3846 '') dlist="$loclibpth $plibpth $glibpth";;
3847 *) dlist="$libpth";;
3848 esac
3849
3850 : Now check and see which directories actually exist, avoiding duplicates
3851 libpth=''
3852 for xxx in $dlist
3853 do
3854     if $test -d $xxx; then
3855                 case " $libpth " in
3856                 *" $xxx "*) ;;
3857                 *) libpth="$libpth $xxx";;
3858                 esac
3859     fi
3860 done
3861 $cat <<'EOM'
3862
3863 Some systems have incompatible or broken versions of libraries.  Among
3864 the directories listed in the question below, please remove any you
3865 know not to be holding relevant libraries, and add any that are needed.
3866 Say "none" for none.
3867
3868 EOM
3869 case "$libpth" in
3870 '') dflt='none';;
3871 *)
3872         set X $libpth
3873         shift
3874         dflt=${1+"$@"}
3875         ;;
3876 esac
3877 rp="Directories to use for library searches?"
3878 . ./myread
3879 case "$ans" in
3880 none) libpth=' ';;
3881 *) libpth="$ans";;
3882 esac
3883
3884 : compute shared library extension
3885 case "$so" in
3886 '')
3887         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3888                 dflt='sl'
3889         else
3890                 dflt='so'
3891         fi
3892         ;;
3893 *) dflt="$so";;
3894 esac
3895 $cat <<EOM
3896
3897 On some systems, shared libraries may be available.  Answer 'none' if
3898 you want to suppress searching of shared libraries for the remaining
3899 of this configuration.
3900
3901 EOM
3902 rp='What is the file extension used for shared libraries?'
3903 . ./myread
3904 so="$ans"
3905
3906 : Define several unixisms.
3907 : Hints files or command line option can be used to override them.
3908 : The convoluted testing is in case hints files set either the old
3909 : or the new name.
3910 case "$_exe" in
3911 '')     case "$exe_ext" in
3912     '') ;;
3913         *)      _exe="$exe_ext" ;;
3914         esac
3915         ;;
3916 esac
3917 case "$_a" in
3918 '')     case "$lib_ext" in
3919     '') _a='.a';;
3920         *)      _a="$lib_ext" ;;
3921         esac
3922         ;;
3923 esac
3924 case "$_o" in
3925 '') case "$obj_ext" in
3926         '')     _o='.o';;
3927         *)      _o="$obj_ext";;
3928         esac
3929         ;;
3930 esac
3931 case "$p_" in
3932 '') case "$path_sep" in
3933         '')     p_=':';;
3934         *)      p_="$path_sep";;
3935         esac
3936         ;;
3937 esac
3938 exe_ext=$_exe
3939 lib_ext=$_a
3940 obj_ext=$_o
3941 path_sep=$p_
3942
3943 : Which makefile gets called first.  This is used by make depend.
3944 case "$firstmakefile" in
3945 '') firstmakefile='makefile';;
3946 esac
3947
3948 : Looking for optional libraries
3949 echo " "
3950 echo "Checking for optional libraries..." >&4
3951 case "$libs" in
3952 ' '|'') dflt='';;
3953 *) dflt="$libs";;
3954 esac
3955 case "$libswanted" in
3956 '') libswanted='c_s';;
3957 esac
3958 for thislib in $libswanted; do
3959         
3960         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3961                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3962                 echo "Found -l$thislib (shared)."
3963                 case " $dflt " in
3964                 *"-l$thislib "*);;
3965                 *) dflt="$dflt -l$thislib";;
3966                 esac
3967         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3968                 echo "Found -l$thislib (shared)."
3969                 case " $dflt " in
3970                 *"-l$thislib "*);;
3971                 *) dflt="$dflt -l$thislib";;
3972                 esac
3973         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3974                 echo "Found -l$thislib."
3975                 case " $dflt " in
3976                 *"-l$thislib "*);;
3977                 *) dflt="$dflt -l$thislib";;
3978                 esac
3979         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3980                 echo "Found -l$thislib."
3981                 case " $dflt " in
3982                 *"-l$thislib "*);;
3983                 *) dflt="$dflt -l$thislib";;
3984                 esac
3985         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3986                 echo "Found -l${thislib}_s."
3987                 case " $dflt " in
3988                 *"-l$thislib "*);;
3989                 *) dflt="$dflt -l${thislib}_s";;
3990                 esac
3991         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3992                 echo "Found -l$thislib."
3993                 case " $dflt " in
3994                 *"-l$thislib "*);;
3995                 *) dflt="$dflt -l$thislib";;
3996                 esac
3997         else
3998                 echo "No -l$thislib."
3999         fi
4000 done
4001 set X $dflt
4002 shift
4003 dflt="$*"
4004 case "$libs" in
4005 '') dflt="$dflt";;
4006 *) dflt="$libs";;
4007 esac
4008 case "$dflt" in
4009 ' '|'') dflt='none';;
4010 esac
4011
4012 $cat <<EOM
4013  
4014 Some versions of Unix support shared libraries, which make executables smaller
4015 but make load time slightly longer.
4016
4017 On some systems, mostly System V Release 3's, the shared library is included
4018 by putting the option "-lc_s" as the last thing on the cc command line when
4019 linking.  Other systems use shared libraries by default.  There may be other
4020 libraries needed to compile $package on your machine as well.  If your system
4021 needs the "-lc_s" option, include it here.  Include any other special libraries
4022 here as well.  Say "none" for none.
4023 EOM
4024
4025 echo " "
4026 rp="Any additional libraries?"
4027 . ./myread
4028 case "$ans" in
4029 none) libs=' ';;
4030 *) libs="$ans";;
4031 esac
4032
4033 : determine optimize, if desired, or use for debug flag also
4034 case "$optimize" in
4035 ' '|$undef) dflt='none';;
4036 '') dflt='-O';;
4037 *) dflt="$optimize";;
4038 esac
4039 $cat <<EOH
4040
4041 Some C compilers have problems with their optimizers.  By default, $package
4042 compiles with the -O flag to use the optimizer.  Alternately, you might want
4043 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4044 systems).  Either flag can be specified here.  To use neither flag, specify
4045 the word "none".
4046
4047 EOH
4048 rp="What optimizer/debugger flag should be used?"
4049 . ./myread
4050 optimize="$ans"
4051 case "$optimize" in
4052 'none') optimize=" ";;
4053 esac
4054
4055 dflt=''
4056 : We will not override a previous value, but we might want to
4057 : augment a hint file
4058 case "$hint" in
4059 none|recommended)
4060         case "$gccversion" in
4061         1*) dflt='-fpcc-struct-return' ;;
4062         esac
4063         case "$optimize" in
4064         *-g*) dflt="$dflt -DDEBUGGING";;
4065         esac
4066         case "$gccversion" in
4067         2*) if test -d /etc/conf/kconfig.d &&
4068                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4069                 then
4070                         dflt="$dflt -posix"
4071                 fi
4072                 ;;
4073         esac
4074         ;;
4075 esac
4076
4077 case "$mips_type" in
4078 *BSD*|'') inclwanted="$locincpth $usrinc";;
4079 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4080 esac
4081 for thisincl in $inclwanted; do
4082         if $test -d $thisincl; then
4083                 if $test x$thisincl != x$usrinc; then
4084                         case "$dflt" in
4085                         *$thisincl*);;
4086                         *) dflt="$dflt -I$thisincl";;
4087                         esac
4088                 fi
4089         fi
4090 done
4091
4092 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4093         xxx=true;
4094 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4095         xxx=true;
4096 else
4097         xxx=false;
4098 fi;
4099 if $xxx; then
4100         case "$dflt" in
4101         *$2*);;
4102         *) dflt="$dflt -D$2";;
4103         esac;
4104 fi'
4105
4106 set signal.h LANGUAGE_C; eval $inctest
4107
4108 case "$hint" in
4109 none|recommended) dflt="$ccflags $dflt" ;;
4110 *) dflt="$ccflags";;
4111 esac
4112
4113 case "$dflt" in
4114 ''|' ') dflt=none;;
4115 esac
4116 $cat <<EOH
4117
4118 Your C compiler may want other flags.  For this question you should include
4119 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4120 but you should NOT include libraries or ld flags like -lwhatever.  If you
4121 want $package to honor its debug switch, you should include -DDEBUGGING here.
4122 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4123
4124 To use no flags, specify the word "none".
4125
4126 EOH
4127 set X $dflt
4128 shift
4129 dflt=${1+"$@"}
4130 rp="Any additional cc flags?"
4131 . ./myread
4132 case "$ans" in
4133 none) ccflags='';;
4134 *) ccflags="$ans";;
4135 esac
4136
4137 : the following weeds options from ccflags that are of no interest to cpp
4138 cppflags="$ccflags"
4139 case "$gccversion" in
4140 1*) cppflags="$cppflags -D__GNUC__"
4141 esac
4142 case "$mips_type" in
4143 '');;
4144 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4145 esac
4146 case "$cppflags" in
4147 '');;
4148 *)
4149         echo " "
4150         echo "Let me guess what the preprocessor flags are..." >&4
4151         set X $cppflags
4152         shift
4153         cppflags=''
4154         $cat >cpp.c <<'EOM'
4155 #define BLURFL foo
4156
4157 BLURFL xx LFRULB
4158 EOM
4159         previous=''
4160         for flag in $*
4161         do
4162                 case "$flag" in
4163                 -*) ftry="$flag";;
4164                 *) ftry="$previous $flag";;
4165                 esac
4166                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4167                         >cpp1.out 2>/dev/null && \
4168                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4169                         >cpp2.out 2>/dev/null && \
4170                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4171                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4172                 then
4173                         cppflags="$cppflags $ftry"
4174                         previous=''
4175                 else
4176                         previous="$flag"
4177                 fi
4178         done
4179         set X $cppflags
4180         shift
4181         cppflags=${1+"$@"}
4182         case "$cppflags" in
4183         *-*)  echo "They appear to be: $cppflags";;
4184         esac
4185         $rm -f cpp.c cpp?.out
4186         ;;
4187 esac
4188
4189 : flags used in final linking phase
4190 case "$ldflags" in
4191 '') if ./venix; then
4192                 dflt='-i -z'
4193         else
4194                 dflt=''
4195         fi
4196         case "$ccflags" in
4197         *-posix*) dflt="$dflt -posix" ;;
4198         esac
4199         ;;
4200 *) dflt="$ldflags";;
4201 esac
4202
4203 : Try to guess additional flags to pick up local libraries.
4204 for thislibdir in $libpth; do
4205         case " $loclibpth " in
4206         *" $thislibdir "*)
4207                 case "$dflt " in 
4208                 *"-L$thislibdir "*) ;;
4209                 *)  dflt="$dflt -L$thislibdir" ;;
4210                 esac
4211                 ;;
4212         esac
4213 done
4214
4215 case "$dflt" in
4216 '') dflt='none' ;;
4217 esac
4218
4219 $cat <<EOH
4220
4221 Your C linker may need flags.  For this question you should
4222 include -L/whatever and any other flags used by the C linker, but you
4223 should NOT include libraries like -lwhatever.
4224
4225 Make sure you include the appropriate -L/path flags if your C linker
4226 does not normally search all of the directories you specified above,
4227 namely
4228         $libpth
4229 To use no flags, specify the word "none".
4230
4231 EOH
4232
4233 rp="Any additional ld flags (NOT including libraries)?"
4234 . ./myread
4235 case "$ans" in
4236 none) ldflags='';;
4237 *) ldflags="$ans";;
4238 esac
4239 rmlist="$rmlist pdp11"
4240
4241 : coherency check
4242 echo " "
4243 echo "Checking your choice of C compiler and flags for coherency..." >&4
4244 $cat > try.c <<'EOF'
4245 #include <stdio.h>
4246 int main() { printf("Ok\n"); exit(0); }
4247 EOF
4248 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4249 shift
4250 $cat >try.msg <<'EOM'
4251 I've tried to compile and run the following simple program:
4252
4253 EOM
4254 $cat try.c >> try.msg
4255
4256 $cat >> try.msg <<EOM
4257
4258 I used the command:
4259
4260         $*
4261         ./try
4262
4263 and I got the following output:
4264
4265 EOM
4266 dflt=y
4267 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4268         if sh -c './try' >>try.msg 2>&1; then
4269                 xxx=`./try`
4270                 case "$xxx" in
4271                 "Ok") dflt=n ;;
4272                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4273                         case " $libs " in
4274                         *" -lsfio "*)
4275                                 cat >> try.msg <<'EOQS'
4276 If $libs contains -lsfio, and sfio is mis-configured, then it
4277 sometimes (apparently) runs and exits with a 0 status, but with no
4278 output!  It may have to do with sfio's use of _exit vs. exit.
4279
4280 EOQS
4281                                 rp="You have a big problem.  Shall I abort Configure"
4282                                 dflt=y
4283                                 ;;
4284                         esac
4285                         ;;
4286                 esac
4287         else
4288                 echo "The program compiled OK, but exited with status $?." >>try.msg
4289                 rp="You have a problem.  Shall I abort Configure"
4290                 dflt=y
4291         fi
4292 else
4293         echo "I can't compile the test program." >>try.msg
4294         rp="You have a BIG problem.  Shall I abort Configure"
4295         dflt=y
4296 fi
4297 case "$dflt" in
4298 y)
4299         $cat try.msg >&4
4300         case "$knowitall" in
4301         '')
4302                 echo "(The supplied flags or libraries might be incorrect.)"
4303                 ;;
4304         *) dflt=n;;
4305         esac
4306         echo " "
4307         . ./myread
4308         case "$ans" in
4309         n*|N*) ;;
4310         *)      echo "Ok.  Stopping Configure." >&4
4311                 exit 1
4312                 ;;
4313         esac
4314         ;;
4315 n) echo "OK, that should do.";;
4316 esac
4317 $rm -f try try.* core
4318
4319 : determine filename position in cpp output
4320 echo " "
4321 echo "Computing filename position in cpp output for #include directives..." >&4
4322 echo '#include <stdio.h>' > foo.c
4323 $cat >fieldn <<EOF
4324 $startsh
4325 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4326 $grep '^[       ]*#.*stdio\.h' | \
4327 while read cline; do
4328         pos=1
4329         set \$cline
4330         while $test \$# -gt 0; do
4331                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4332                         echo "\$pos"
4333                         exit 0
4334                 fi
4335                 shift
4336                 pos=\`expr \$pos + 1\`
4337         done
4338 done
4339 EOF
4340 chmod +x fieldn
4341 fieldn=`./fieldn`
4342 $rm -f foo.c fieldn
4343 case $fieldn in
4344 '') pos='???';;
4345 1) pos=first;;
4346 2) pos=second;;
4347 3) pos=third;;
4348 *) pos="${fieldn}th";;
4349 esac
4350 echo "Your cpp writes the filename in the $pos field of the line."
4351
4352 : locate header file
4353 $cat >findhdr <<EOF
4354 $startsh
4355 wanted=\$1
4356 name=''
4357 for usrincdir in $usrinc
4358 do
4359         if test -f \$usrincdir/\$wanted; then
4360                 echo "\$usrincdir/\$wanted"
4361                 exit 0
4362         fi
4363 done
4364 awkprg='{ print \$$fieldn }'
4365 echo "#include <\$wanted>" > foo\$\$.c
4366 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4367 $grep "^[       ]*#.*\$wanted" | \
4368 while read cline; do
4369         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4370         case "\$name" in
4371         *[/\\\\]\$wanted) echo "\$name"; exit 0;;
4372         *[\\\\/]\$wanted) echo "\$name"; exit 0;;
4373         *) name='';;
4374         esac;
4375 done;
4376 $rm -f foo\$\$.c;
4377 case "\$name" in
4378 '') exit 1;;
4379 esac
4380 EOF
4381 chmod +x findhdr
4382
4383 : define an alternate in-header-list? function
4384 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4385 cont=true; xxf="echo \"<\$1> found.\" >&4";
4386 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4387 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4388 esac;
4389 case $# in 4) instead=instead;; *) instead="at last";; esac;
4390 while $test "$cont"; do
4391         xxx=`./findhdr $1`
4392         var=$2; eval "was=\$$2";
4393         if $test "$xxx" && $test -r "$xxx";
4394         then eval $xxf;
4395         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4396                 cont="";
4397         else eval $xxnf;
4398         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4399         set $yyy; shift; shift; yyy=$@;
4400         case $# in 0) cont="";;
4401         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4402                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4403         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4404                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4405         esac;
4406 done;
4407 while $test "$yyy";
4408 do set $yyy; var=$2; eval "was=\$$2";
4409         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4410         set $yyy; shift; shift; yyy=$@;
4411 done'
4412
4413 : see if this is a malloc.h system
4414 set malloc.h i_malloc
4415 eval $inhdr
4416
4417 : see if stdlib is available
4418 set stdlib.h i_stdlib
4419 eval $inhdr
4420
4421 : determine which malloc to compile in
4422 echo " "
4423 case "$usemymalloc" in
4424 ''|[yY]*|true|$define)  dflt='y' ;;
4425 *)      dflt='n' ;;
4426 esac
4427 rp="Do you wish to attempt to use the malloc that comes with $package?"
4428 . ./myread
4429 usemymalloc="$ans"
4430 case "$ans" in
4431 y*|true)
4432         usemymalloc='y'
4433         mallocsrc='malloc.c'
4434         mallocobj="malloc$_o"
4435         d_mymalloc="$define"
4436         case "$libs" in
4437         *-lmalloc*)
4438                 : Remove malloc from list of libraries to use
4439                 echo "Removing unneeded -lmalloc from library list" >&4
4440                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4441                 shift
4442                 libs="$*"
4443                 echo "libs = $libs" >&4
4444                 ;;
4445         esac
4446         ;;
4447 *)
4448         usemymalloc='n'
4449         mallocsrc=''
4450         mallocobj=''
4451         d_mymalloc="$undef"
4452         ;;
4453 esac
4454
4455 : compute the return types of malloc and free
4456 echo " "
4457 $cat >malloc.c <<END
4458 #$i_malloc I_MALLOC
4459 #$i_stdlib I_STDLIB
4460 #include <stdio.h>
4461 #include <sys/types.h>
4462 #ifdef I_MALLOC
4463 #include <malloc.h>
4464 #endif
4465 #ifdef I_STDLIB
4466 #include <stdlib.h>
4467 #endif
4468 #ifdef TRY_MALLOC
4469 void *malloc();
4470 #endif
4471 #ifdef TRY_FREE
4472 void free();
4473 #endif
4474 END
4475 case "$malloctype" in
4476 '')
4477         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4478                 malloctype='void *'
4479         else
4480                 malloctype='char *'
4481         fi
4482         ;;
4483 esac
4484 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4485
4486 case "$freetype" in
4487 '')
4488         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4489                 freetype='void'
4490         else
4491                 freetype='int'
4492         fi
4493         ;;
4494 esac
4495 echo "Your system uses $freetype free(), it would seem." >&4
4496 $rm -f malloc.[co]
4497 : Cruising for prototypes
4498 echo " "
4499 echo "Checking out function prototypes..." >&4
4500 $cat >prototype.c <<'EOCP'
4501 int main(int argc, char *argv[]) {
4502         exit(0);}
4503 EOCP
4504 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4505         echo "Your C compiler appears to support function prototypes."
4506         val="$define"
4507 else
4508         echo "Your C compiler doesn't seem to understand function prototypes."
4509         val="$undef"
4510 fi
4511 set prototype
4512 eval $setvar
4513 $rm -f prototype*
4514
4515 case "$prototype" in
4516 "$define") ;;
4517 *)      ansi2knr='ansi2knr'
4518         echo " "
4519         cat <<EOM >&4
4520
4521 $me:  FATAL ERROR:
4522 This version of $package can only be compiled by a compiler that 
4523 understands function prototypes.  Unfortunately, your C compiler 
4524         $cc $ccflags
4525 doesn't seem to understand them.  Sorry about that.
4526
4527 If GNU cc is available for your system, perhaps you could try that instead.  
4528
4529 Eventually, we hope to support building Perl with pre-ANSI compilers.
4530 If you would like to help in that effort, please contact <perlbug@perl.org>.
4531
4532 Aborting Configure now.
4533 EOM
4534         exit 2
4535         ;;
4536 esac
4537
4538 : determine where public executables go
4539 echo " "
4540 set dflt bin bin
4541 eval $prefixit
4542 fn=d~
4543 rp='Pathname where the public executables will reside?'
4544 . ./getfile
4545 if $test "X$ansexp" != "X$binexp"; then
4546         installbin=''
4547 fi
4548 bin="$ans"
4549 binexp="$ansexp"
4550 if $afs; then
4551         $cat <<EOM
4552
4553 Since you are running AFS, I need to distinguish the directory in which
4554 executables reside from the directory in which they are installed (and from
4555 which they are presumably copied to the former directory by occult means).
4556
4557 EOM
4558         case "$installbin" in
4559         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4560         *) dflt="$installbin";;
4561         esac
4562         fn=de~
4563         rp='Where will public executables be installed?'
4564         . ./getfile
4565         installbin="$ans"
4566 else
4567         installbin="$binexp"
4568 fi
4569
4570 : determine whether to install perl also as /usr/bin/perl
4571
4572 echo " "
4573 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4574         $cat <<EOM
4575 Many scripts expect to perl to be installed as /usr/bin/perl.
4576 I can install the perl you are about to compile also as /usr/bin/perl
4577 (in addition to $installbin/perl).
4578 EOM
4579         case "$installusrbinperl" in
4580         "$undef"|[nN]*) dflt='n';;
4581         *)              dflt='y';;
4582         esac
4583         rp="Do you want to install perl as /usr/bin/perl?"
4584         . ./myread
4585         case "$ans" in
4586         [yY]*)  val="$define";;
4587         *)      val="$undef" ;;
4588         esac
4589 else
4590         val="$undef"
4591 fi
4592 set installusrbinperl
4593 eval $setvar
4594
4595 : define a shorthand compile call
4596 compile='
4597 mc_file=$1;
4598 shift;
4599 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4600 : define a shorthand compile call for compilations that should be ok.
4601 compile_ok='
4602 mc_file=$1;
4603 shift;
4604 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4605
4606 echo " "
4607 echo "Checking for GNU C Library..." >&4
4608 cat >gnulibc.c <<EOM
4609 #include <stdio.h>
4610 int main()
4611 {
4612 #ifdef __GLIBC__
4613     exit(0);
4614 #else
4615     exit(1);
4616 #endif
4617 }
4618 EOM
4619 set gnulibc
4620 if eval $compile_ok && ./gnulibc; then
4621         val="$define"
4622         echo "You are using the GNU C Library"
4623 else
4624         val="$undef"
4625         echo "You are not using the GNU C Library"
4626 fi
4627 $rm -f gnulibc*
4628 set d_gnulibc
4629 eval $setvar
4630
4631 : see if nm is to be used to determine whether a symbol is defined or not
4632 case "$usenm" in
4633 '')
4634         dflt=''
4635         case "$d_gnulibc" in
4636         "$define")
4637                 echo " "
4638                 echo "nm probably won't work on the GNU C Library." >&4
4639                 dflt=n
4640                 ;;
4641         esac
4642         case "$dflt" in
4643         '') 
4644                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4645                         echo " "
4646                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4647                         echo "'nm' won't be sufficient on this sytem." >&4
4648                         dflt=n
4649                 fi
4650                 ;;
4651         esac
4652         case "$dflt" in
4653         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4654                 if $test $dflt -gt 20; then
4655                         dflt=y
4656                 else
4657                         dflt=n
4658                 fi
4659                 ;;
4660         esac
4661         ;;
4662 *)
4663         case "$usenm" in
4664         true|$define) dflt=y;;
4665         *) dflt=n;;
4666         esac
4667         ;;
4668 esac
4669 $cat <<EOM
4670
4671 I can use $nm to extract the symbols from your C libraries. This
4672 is a time consuming task which may generate huge output on the disk (up
4673 to 3 megabytes) but that should make the symbols extraction faster. The
4674 alternative is to skip the 'nm' extraction part and to compile a small
4675 test program instead to determine whether each symbol is present. If
4676 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4677 this may be the best solution.
4678
4679 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4680
4681 EOM
4682 rp="Shall I use $nm to extract C symbols from the libraries?"
4683 . ./myread
4684 case "$ans" in
4685 [Nn]*) usenm=false;;
4686 *) usenm=true;;
4687 esac
4688
4689 runnm=$usenm
4690 case "$reuseval" in
4691 true) runnm=false;;
4692 esac
4693
4694 : nm options which may be necessary
4695 case "$nm_opt" in
4696 '') if $test -f /mach_boot; then
4697                 nm_opt=''       # Mach
4698         elif $test -d /usr/ccs/lib; then
4699                 nm_opt='-p'     # Solaris (and SunOS?)
4700         elif $test -f /dgux; then
4701                 nm_opt='-p'     # DG-UX
4702         elif $test -f /lib64/rld; then
4703                 nm_opt='-p'     # 64-bit Irix
4704         else
4705                 nm_opt=''
4706         fi;;
4707 esac
4708
4709 : nm options which may be necessary for shared libraries but illegal
4710 : for archive libraries.  Thank you, Linux.
4711 case "$nm_so_opt" in
4712 '')     case "$myuname" in
4713         *linux*)
4714                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4715                         nm_so_opt='--dynamic'
4716                 fi
4717                 ;;
4718         esac
4719         ;;
4720 esac
4721
4722 case "$runnm" in
4723 true)
4724 : get list of predefined functions in a handy place
4725 echo " "
4726 case "$libc" in
4727 '') libc=unknown
4728         case "$libs" in
4729         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4730         esac
4731         ;;
4732 esac
4733 libnames='';
4734 case "$libs" in
4735 '') ;;
4736 *)  for thislib in $libs; do
4737         case "$thislib" in
4738         -lc|-lc_s)
4739                 : Handle C library specially below.
4740                 ;;
4741         -l*)
4742                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4743                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4744                         :
4745                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4746                         :
4747                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4748                         :
4749                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4750                         :
4751                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4752                         :
4753                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4754                         :
4755                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4756                         :
4757                 else
4758                         try=''
4759                 fi
4760                 libnames="$libnames $try"
4761                 ;;
4762         *) libnames="$libnames $thislib" ;;
4763         esac
4764         done
4765         ;;
4766 esac
4767 xxx=normal
4768 case "$libc" in
4769 unknown)
4770         set /lib/libc.$so
4771         for xxx in $libpth; do
4772                 $test -r $1 || set $xxx/libc.$so
4773                 : The messy sed command sorts on library version numbers.
4774                 $test -r $1 || \
4775                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4776                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4777                                 h
4778                                 s/[0-9][0-9]*/0000&/g
4779                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4780                                 G
4781                                 s/\n/ /' | \
4782                          sort | $sed -e 's/^.* //'`
4783                 eval set \$$#
4784         done
4785         $test -r $1 || set /usr/ccs/lib/libc.$so
4786         $test -r $1 || set /lib/libsys_s$_a
4787         ;;
4788 *)
4789         set blurfl
4790         ;;
4791 esac
4792 if $test -r "$1"; then
4793         echo "Your (shared) C library seems to be in $1."
4794         libc="$1"
4795 elif $test -r /lib/libc && $test -r /lib/clib; then
4796         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4797         xxx=apollo
4798         libc='/lib/clib /lib/libc'
4799         if $test -r /lib/syslib; then
4800                 echo "(Your math library is in /lib/syslib.)"
4801                 libc="$libc /lib/syslib"
4802         fi
4803 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4804         echo "Your C library seems to be in $libc, as you said before."
4805 elif $test -r $incpath/usr/lib/libc$_a; then
4806         libc=$incpath/usr/lib/libc$_a;
4807         echo "Your C library seems to be in $libc.  That's fine."
4808 elif $test -r /lib/libc$_a; then
4809         libc=/lib/libc$_a;
4810         echo "Your C library seems to be in $libc.  You're normal."
4811 else
4812         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4813                 :
4814         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4815                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4816         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4817                 :
4818         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4819                 :
4820         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4821                 :
4822         else
4823                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4824         fi
4825         if $test -r "$tans"; then
4826                 echo "Your C library seems to be in $tans, of all places."
4827                 libc=$tans
4828         else
4829                 libc='blurfl'
4830         fi
4831 fi
4832 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4833         dflt="$libc"
4834         cat <<EOM
4835
4836 If the guess above is wrong (which it might be if you're using a strange
4837 compiler, or your machine supports multiple models), you can override it here.
4838
4839 EOM
4840 else
4841         dflt=''
4842         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4843         cat >&4 <<EOM
4844 I can't seem to find your C library.  I've looked in the following places:
4845
4846 EOM
4847         $sed 's/^/      /' libpath
4848         cat <<EOM
4849
4850 None of these seems to contain your C library. I need to get its name...
4851
4852 EOM
4853 fi
4854 fn=f
4855 rp='Where is your C library?'
4856 . ./getfile
4857 libc="$ans"
4858
4859 echo " "
4860 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4861 set X `cat libnames`
4862 shift
4863 xxx=files
4864 case $# in 1) xxx=file; esac
4865 echo "Extracting names from the following $xxx for later perusal:" >&4
4866 echo " "
4867 $sed 's/^/      /' libnames >&4
4868 echo " "
4869 $echo $n "This may take a while...$c" >&4
4870
4871 for file in $*; do
4872         case $file in
4873         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4874         *) $nm $nm_opt $file 2>/dev/null;;
4875         esac
4876 done >libc.tmp
4877
4878 $echo $n ".$c"
4879 $grep fprintf libc.tmp > libc.ptf
4880 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4881 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4882 xxx='[ADTSIW]'
4883 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4884         eval $xscan;\
4885         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4886                 eval $xrun
4887 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4888         eval $xscan;\
4889         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4890                 eval $xrun
4891 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4892         eval $xscan;\
4893         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4894                 eval $xrun
4895 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4896         eval $xscan;\
4897         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4898                 eval $xrun
4899 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4900         eval $xscan;\
4901         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4902                 eval $xrun
4903 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4904         eval $xscan;\
4905         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4906                 eval $xrun
4907 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4908                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4909         eval $xscan;\
4910         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4911                 eval $xrun
4912 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4913         eval $xscan;\
4914         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4915                 eval $xrun
4916 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4917         eval $xscan;\
4918         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4919                 eval $xrun
4920 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4921         eval $xscan;\
4922         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4923                 eval $xrun
4924 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4925         eval $xscan;\
4926         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4927                 eval $xrun
4928 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4929         eval $xscan;\
4930         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4931                 eval $xrun
4932 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4933         eval $xscan;\
4934         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4935                 eval $xrun
4936 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4937         eval $xscan;\
4938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4939                 eval $xrun
4940 else
4941         $nm -p $* 2>/dev/null >libc.tmp
4942         $grep fprintf libc.tmp > libc.ptf
4943         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4944                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4945         then
4946                 nm_opt='-p'
4947                 eval $xrun
4948         else
4949                 echo " "
4950                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4951                 com=''
4952                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4953                         for thisname in $libnames $libc; do
4954                                 $ar t $thisname >>libc.tmp
4955                         done
4956                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4957                         echo "Ok." >&4
4958                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4959                         # Repeat libc to extract forwarders to DLL entries too
4960                         for thisname in $libnames $libc; do
4961                                 $ar tv $thisname >>libc.tmp
4962                                 # Revision 50 of EMX has bug in $ar.
4963                                 # it will not extract forwarders to DLL entries
4964                                 # Use emximp which will extract exactly them.
4965                                 emximp -o tmp.imp $thisname \
4966                                     2>/dev/null && \
4967                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4968                                     < tmp.imp >>libc.tmp
4969                                 $rm tmp.imp
4970                         done
4971                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4972                         echo "Ok." >&4
4973                 else
4974                         echo "$ar didn't seem to work right." >&4
4975                         echo "Maybe this is a Cray...trying bld instead..." >&4
4976                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4977                         then
4978                                 for thisname in $libnames; do
4979                                         bld t $libnames | \
4980                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4981                                         $ar t $thisname >>libc.tmp
4982                                 done
4983                                 echo "Ok." >&4
4984                         else
4985                                 echo "That didn't work either.  Giving up." >&4
4986                                 exit 1
4987                         fi
4988                 fi
4989         fi
4990 fi
4991 nm_extract="$com"
4992 if $test -f /lib/syscalls.exp; then
4993         echo " "
4994         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4995         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4996 fi
4997 ;;
4998 esac
4999 $rm -f libnames libpath
5000
5001 : see if dld is available
5002 set dld.h i_dld
5003 eval $inhdr
5004
5005 : is a C symbol defined?
5006 csym='tlook=$1;
5007 case "$3" in
5008 -v) tf=libc.tmp; tc=""; tdc="";;
5009 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5010 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5011 esac;
5012 tx=yes;
5013 case "$reuseval-$4" in
5014 true-) ;;
5015 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5016 esac;
5017 case "$tx" in
5018 yes)
5019         case "$runnm" in
5020         true)
5021                 if $contains $tlook $tf >/dev/null 2>&1;
5022                 then tval=true;
5023                 else tval=false;
5024                 fi;;
5025         *)
5026                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5027                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5028                 then tval=true;
5029                 else tval=false;
5030                 fi;
5031                 $rm -f t t.c;;
5032         esac;;
5033 *)
5034         case "$tval" in
5035         $define) tval=true;;
5036         *) tval=false;;
5037         esac;;
5038 esac;
5039 eval "$2=$tval"'
5040
5041 : define an is-in-libc? function
5042 inlibc='echo " "; td=$define; tu=$undef;
5043 sym=$1; var=$2; eval "was=\$$2";
5044 tx=yes;
5045 case "$reuseval$was" in
5046 true) ;;
5047 true*) tx=no;;
5048 esac;
5049 case "$tx" in
5050 yes)
5051         set $sym tres -f;
5052         eval $csym;
5053         case "$tres" in
5054         true)
5055                 echo "$sym() found." >&4;
5056                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5057         *)
5058                 echo "$sym() NOT found." >&4;
5059                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5060         esac;;
5061 *)
5062         case "$was" in
5063         $define) echo "$sym() found." >&4;;
5064         *) echo "$sym() NOT found." >&4;;
5065         esac;;
5066 esac'
5067
5068 : see if dlopen exists
5069 xxx_runnm="$runnm"
5070 runnm=false
5071 set dlopen d_dlopen
5072 eval $inlibc
5073 runnm="$xxx_runnm"
5074
5075 : determine which dynamic loading, if any, to compile in
5076 echo " "
5077 dldir="ext/DynaLoader"
5078 case "$usedl" in
5079 $define|y|true)
5080         dflt='y'
5081         usedl="$define"
5082         ;;
5083 $undef|n|false)
5084         dflt='n'
5085         usedl="$undef"
5086         ;;
5087 *) 
5088         dflt='n'
5089         case "$d_dlopen" in
5090             $define) dflt='y' ;;
5091         esac
5092         case "$i_dld" in
5093             $define) dflt='y' ;;
5094         esac
5095         : Does a dl_xxx.xs file exist for this operating system
5096         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5097         ;;
5098 esac
5099 rp="Do you wish to use dynamic loading?"
5100 . ./myread
5101 usedl="$ans"
5102 case "$ans" in
5103 y*) usedl="$define"
5104         case "$dlsrc" in
5105         '')
5106                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5107                         dflt="$dldir/dl_${osname}.xs"
5108                 elif $test "$d_dlopen" = "$define" ; then
5109                         dflt="$dldir/dl_dlopen.xs"
5110                 elif $test "$i_dld" = "$define" ; then
5111                         dflt="$dldir/dl_dld.xs"
5112                 else
5113                         dflt=''
5114                 fi
5115                 ;;
5116         *)      dflt="$dldir/$dlsrc"
5117                 ;;
5118         esac
5119     echo "The following dynamic loading files are available:"
5120         : Can not go over to $dldir because getfile has path hard-coded in.
5121         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5122         rp="Source file to use for dynamic loading"
5123         fn="fne"
5124         # XXX This getfile call will fail the existence check if you try 
5125         # building away from $src (this is not supported yet).
5126         . ./getfile
5127         usedl="$define"
5128         : emulate basename
5129         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5130
5131         $cat << EOM
5132
5133 Some systems may require passing special flags to $cc -c to
5134 compile modules that will be used to create a shared library.
5135 To use no flags, say "none".
5136
5137 EOM
5138     case "$cccdlflags" in
5139     '') case "$gccversion" in
5140                 '') case "$osname" in
5141                         hpux)   dflt='+z' ;;
5142                         next)   dflt='none' ;;
5143                         irix*)  dflt='-KPIC' ;;
5144                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5145                         sunos)  dflt='-pic' ;;
5146                         *)      dflt='none' ;;
5147                     esac
5148                         ;;
5149                 *)  case "$osname" in
5150                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5151                         *)      dflt='-fpic' ;;
5152                     esac ;;
5153             esac ;;
5154         ' ') dflt='none' ;;
5155     *)  dflt="$cccdlflags" ;;
5156     esac
5157     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5158     . ./myread
5159     case "$ans" in
5160     none) cccdlflags=' ' ;;
5161     *) cccdlflags="$ans" ;;
5162     esac
5163
5164     cat << EOM
5165
5166 Some systems use ld to create libraries that can be dynamically loaded,
5167 while other systems (such as those using ELF) use $cc.
5168
5169 EOM
5170         case "$ld" in
5171         '')     $cat >try.c <<'EOM'
5172 /* Test for whether ELF binaries are produced */
5173 #include <fcntl.h>
5174 #include <stdlib.h>
5175 int main() {
5176         char b[4];
5177         int i = open("a.out",O_RDONLY);
5178         if(i == -1) 
5179                 exit(1); /* fail */
5180         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5181                 exit(0); /* succeed (yes, it's ELF) */
5182         else
5183                 exit(1); /* fail */
5184 }
5185 EOM
5186                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5187                         cat <<EOM
5188 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5189 EOM
5190                         dflt="$cc"
5191                 else
5192                         echo "I'll use ld to build dynamic libraries."
5193                         dflt='ld'
5194                 fi
5195                 rm -f try.c a.out
5196                 ;;
5197         *)      dflt="$ld"
5198                 ;;
5199         esac
5200
5201     rp="What command should be used to create dynamic libraries?"
5202     . ./myread
5203         ld="$ans"
5204
5205     cat << EOM
5206
5207 Some systems may require passing special flags to $ld to create a
5208 library that can be dynamically loaded.  If your ld flags include
5209 -L/other/path options to locate libraries outside your loader's normal
5210 search path, you may need to specify those -L options here as well.  To
5211 use no flags, say "none".
5212
5213 EOM
5214     case "$lddlflags" in
5215     '') case "$osname" in
5216                         beos) dflt='-nostart' ;;
5217                         hpux)  dflt='-b' ;;
5218                         linux|irix*)    dflt='-shared' ;;
5219                         next)  dflt='none' ;;
5220                         solaris) dflt='-G' ;;
5221                         sunos) dflt='-assert nodefinitions' ;;
5222                         svr4*|esix*) dflt="-G $ldflags" ;;
5223                 *)     dflt='none' ;;
5224                         esac
5225                         ;;
5226     *) dflt="$lddlflags" ;;
5227     esac
5228
5229         : Try to guess additional flags to pick up local libraries.
5230         : Be careful not to append to a plain 'none'
5231         case "$dflt" in
5232         none) dflt='' ;;
5233         esac
5234         for thisflag in $ldflags; do
5235                 case "$thisflag" in
5236                 -L*)
5237                         case " $dflt " in
5238                         *" $thisflag "*) ;;
5239                         *) dflt="$dflt $thisflag" ;;
5240                         esac
5241                         ;;
5242                 esac
5243         done
5244
5245         case "$dflt" in
5246         ''|' ') dflt='none' ;;
5247         esac
5248
5249     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5250     . ./myread
5251     case "$ans" in
5252     none) lddlflags=' ' ;;
5253     *) lddlflags="$ans" ;;
5254     esac
5255
5256         cat <<EOM
5257
5258 Some systems may require passing special flags to $cc to indicate that
5259 the resulting executable will use dynamic linking.  To use no flags,
5260 say "none".
5261
5262 EOM
5263     case "$ccdlflags" in
5264     '') case "$osname" in
5265                 hpux)   dflt='-Wl,-E' ;;
5266                 linux)  dflt='-rdynamic' ;;
5267                 next)   dflt='none' ;;
5268                 sunos)  dflt='none' ;;
5269                 *)      dflt='none' ;;
5270             esac ;;
5271     ' ')  dflt='none' ;;
5272     *)  dflt="$ccdlflags" ;;
5273     esac
5274     rp="Any special flags to pass to $cc to use dynamic loading?"
5275     . ./myread
5276     case "$ans" in
5277     none) ccdlflags=' ' ;;
5278     *) ccdlflags="$ans" ;;
5279     esac
5280     ;;
5281 *)  usedl="$undef"
5282         ld='ld'
5283     dlsrc='dl_none.xs'
5284     lddlflags=''
5285     ccdlflags=''
5286     ;;
5287 esac
5288
5289 also=''
5290 case "$usedl" in
5291 $undef)
5292         # No dynamic loading being used, so don't bother even to prompt.
5293         useshrplib='false'
5294         ;;
5295 *)      case "$useshrplib" in
5296         '')     case "$osname" in
5297                 svr4*|dgux|dynixptx|esix|powerux|beos)
5298                         dflt=y
5299                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5300                         ;;
5301                 next*)
5302                         case "$osvers" in
5303                         4*)     dflt=y
5304                                 also='Building a shared libperl is needed for MAB support.'
5305                                 ;;
5306                         *)      dflt=n
5307                                 ;;
5308                         esac
5309                         ;;
5310                 *)      dflt=n
5311                         ;;
5312                 esac
5313                 ;;
5314         $define|true|[Yy]*)
5315                 dflt=y
5316                 ;;
5317         *)      dflt=n
5318                 ;;
5319         esac
5320         $cat << EOM
5321
5322 The perl executable is normally obtained by linking perlmain.c with
5323 libperl${_a}, any static extensions (usually just DynaLoader), and
5324 any other libraries needed on this system (such as -lm, etc.).  Since
5325 your system supports dynamic loading, it is probably possible to build
5326 a shared libperl.$so.  If you will have more than one executable linked
5327 to libperl.$so, this will significantly reduce the size of each
5328 executable, but it may have a noticeable affect on performance.  The
5329 default is probably sensible for your system.
5330 $also
5331
5332 EOM
5333         rp="Build a shared libperl.$so (y/n)"
5334         . ./myread
5335         case "$ans" in
5336         true|$define|[Yy]*)
5337                 useshrplib='true'
5338                 # Why does next4 have to be so different?
5339                 case "${osname}${osvers}" in
5340                 next4*|rhapsody*)
5341                         xxx='DYLD_LIBRARY_PATH' ;;
5342                 os2*)   xxx='' ;; # Nothing special needed.
5343                 beos*)  xxx='' ;;
5344                 *)              xxx='LD_LIBRARY_PATH' ;;
5345                 esac
5346                 ;;
5347         *)      useshrplib='false' ;;
5348         esac
5349         ;;
5350 esac
5351
5352 case "$useshrplib" in
5353 true)
5354         case "$libperl" in
5355         '')
5356                 # Figure out a good name for libperl.so.  Since it gets stored in
5357                 # a version-specific architecture-dependent library, the version
5358                 # number isn't really that important, except for making cc/ld happy.
5359                 #
5360                 # A name such as libperl.so.3.1
5361                 majmin="libperl.$so.$patchlevel.$subversion"
5362                 # A name such as libperl.so.301
5363                 majonly=`echo $patchlevel $subversion |
5364                         $awk '{printf "%d%02d", $1, $2}'`
5365                 majonly=libperl.$so.$majonly
5366                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5367                 # rely on figuring it out from the naming of libc.
5368                 case "${osname}${osvers}" in
5369                 next4*)
5370                         dflt=libperl.5.$so
5371                         # XXX How handle the --version stuff for MAB?
5372                         ;;
5373                 linux*)  # ld won't link with a bare -lperl otherwise.
5374                         dflt=libperl.$so
5375                         ;;
5376                 *)      # Try to guess based on whether libc has major.minor.
5377                         case "$libc" in
5378                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5379                         *libc.$so.[0-9]*) dflt=$majonly ;;
5380                         *)      dflt=libperl.$so ;;
5381                         esac
5382                         ;;
5383                 esac
5384                 ;;
5385         *)      dflt=$libperl
5386                 ;;
5387         esac
5388         cat << EOM
5389
5390 I need to select a good name for the shared libperl.  If your system uses
5391 library names with major and minor numbers, then you might want something
5392 like $majmin.  Alternatively, if your system uses a single version
5393 number for shared libraries, then you might want to use $majonly.
5394 Or, your system might be quite happy with a simple libperl.$so.
5395
5396 Since the shared libperl will get installed into a version-specific
5397 architecture-dependent directory, the version number of the shared perl
5398 library probably isn't important, so the default should be o.k.
5399
5400 EOM
5401         rp='What name do you want to give to the shared libperl?'
5402         . ./myread
5403         libperl=$ans
5404         echo "Ok, I'll use $libperl"
5405         ;;
5406 *)
5407         libperl="libperl${_a}"
5408         ;;
5409 esac
5410
5411 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5412 case "$shrpdir" in
5413 '') ;;
5414 *)      $cat >&4 <<EOM
5415 WARNING:  Use of the shrpdir variable for the installation location of
5416 the shared $libperl is not supported.  It was never documented and
5417 will not work in this version.  Let me (perlbug@perl.com)
5418 know of any problems this may cause.
5419
5420 EOM
5421         case "$shrpdir" in
5422         "$archlibexp/CORE")
5423                 $cat >&4 <<EOM
5424 But your current setting of $shrpdir is
5425 the default anyway, so it's harmless.
5426 EOM
5427                 ;;
5428         *)
5429                 $cat >&4 <<EOM
5430 Further, your current attempted setting of $shrpdir
5431 conflicts with the value of $archlibexp/CORE
5432 that installperl will use.
5433 EOM
5434                 ;;
5435         esac
5436         ;;
5437 esac
5438
5439 # How will the perl executable find the installed shared $libperl?
5440 # Add $xxx to ccdlflags.
5441 # If we can't figure out a command-line option, use $shrpenv to
5442 # set env LD_RUN_PATH.  The main perl makefile uses this.
5443 shrpdir=$archlibexp/CORE
5444 xxx=''
5445 tmp_shrpenv=''
5446 if "$useshrplib"; then
5447     case "$osname" in 
5448         aix)
5449                 # We'll set it in Makefile.SH...
5450                 ;;
5451         solaris|netbsd)
5452                 xxx="-R $shrpdir"
5453                 ;;
5454         freebsd)
5455                 xxx="-Wl,-R$shrpdir"
5456                 ;;
5457         linux|irix*|dec_osf)
5458                 xxx="-Wl,-rpath,$shrpdir"
5459                 ;;
5460         next)
5461                 # next doesn't like the default...
5462                 ;;
5463         beos)
5464                 # beos doesn't like the default, either.
5465                 ;;
5466         hpux*)
5467                 # hpux doesn't like the default, either.
5468                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5469                 ;;
5470         *)
5471                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5472                 ;;
5473         esac
5474         case "$xxx" in
5475         '') ;;
5476         *)      
5477                 # Only add $xxx if it isn't already in ccdlflags.
5478                 case " $ccdlflags " in
5479                 *" $xxx "*)     ;;
5480                 *)      ccdlflags="$ccdlflags $xxx"
5481                         cat <<EOM >&4
5482
5483 Adding $xxx to the flags
5484 passed to $ld so that the perl executable will find the 
5485 installed shared $libperl.
5486
5487 EOM
5488                         ;;
5489                 esac
5490                 ;;
5491         esac
5492 fi
5493 # Respect a hint or command-line value.
5494 case "$shrpenv" in
5495 '') shrpenv="$tmp_shrpenv" ;;
5496 esac
5497
5498 : determine where manual pages go
5499 set man1dir man1dir none
5500 eval $prefixit
5501 $cat <<EOM
5502
5503 $spackage has manual pages available in source form.
5504 EOM
5505 case "$nroff" in
5506 nroff)
5507         echo "However, you don't have nroff, so they're probably useless to you."
5508         case "$man1dir" in
5509         '') man1dir="none";;
5510         esac;;
5511 esac
5512 echo "If you don't want the manual sources installed, answer 'none'."
5513 case "$man1dir" in
5514 ' ') dflt=none
5515         ;;
5516 '')
5517         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5518         lookpath="$lookpath $prefixexp/man/p_man/man1"
5519         lookpath="$lookpath $prefixexp/man/u_man/man1"
5520         lookpath="$lookpath $prefixexp/man/man.1"
5521         case "$sysman" in
5522         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5523         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5524         esac
5525         set dflt
5526         eval $prefixup
5527         ;;
5528 *)  dflt="$man1dir"
5529         ;;
5530 esac
5531 echo " "
5532 fn=dn+~
5533 rp="Where do the main $spackage manual pages (source) go?"
5534 . ./getfile
5535 if $test "X$man1direxp" != "X$ansexp"; then
5536         installman1dir=''
5537 fi
5538 man1dir="$ans"
5539 man1direxp="$ansexp"
5540 case "$man1dir" in
5541 '') man1dir=' '
5542         installman1dir='';;
5543 esac
5544 if $afs; then
5545         $cat <<EOM
5546
5547 Since you are running AFS, I need to distinguish the directory in which
5548 manual pages reside from the directory in which they are installed (and from
5549 which they are presumably copied to the former directory by occult means).
5550
5551 EOM
5552         case "$installman1dir" in
5553         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5554         *) dflt="$installman1dir";;
5555         esac
5556         fn=de~
5557         rp='Where will man pages be installed?'
5558         . ./getfile
5559         installman1dir="$ans"
5560 else
5561         installman1dir="$man1direxp"
5562 fi
5563
5564 : What suffix to use on installed man pages
5565
5566 case "$man1dir" in
5567 ' ')
5568         man1ext='0'
5569         ;;
5570 *)
5571         rp="What suffix should be used for the main $spackage man pages?"
5572         case "$man1ext" in
5573         '')     case "$man1dir" in
5574                 *1)  dflt=1 ;;
5575                 *1p) dflt=1p ;;
5576                 *1pm) dflt=1pm ;;
5577                 *l) dflt=l;;
5578                 *n) dflt=n;;
5579                 *o) dflt=o;;
5580                 *p) dflt=p;;
5581                 *C) dflt=C;;
5582                 *L) dflt=L;;
5583                 *L1) dflt=L1;;
5584                 *) dflt=1;;
5585                 esac
5586                 ;;
5587         *)      dflt="$man1ext";;
5588         esac
5589         . ./myread
5590         man1ext="$ans"
5591         ;;
5592 esac
5593
5594 : see if we can have long filenames
5595 echo " "
5596 rmlist="$rmlist /tmp/cf$$"
5597 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5598 first=123456789abcdef
5599 second=/tmp/cf$$/$first
5600 $rm -f $first $second
5601 if (echo hi >$first) 2>/dev/null; then
5602         if $test -f 123456789abcde; then
5603                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5604                 val="$undef"
5605         else
5606                 if (echo hi >$second) 2>/dev/null; then
5607                         if $test -f /tmp/cf$$/123456789abcde; then
5608                                 $cat <<'EOM'
5609 That's peculiar... You can have filenames longer than 14 characters, but only
5610 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5611 I shall consider your system cannot support long filenames at all.
5612 EOM
5613                                 val="$undef"
5614                         else
5615                                 echo 'You can have filenames longer than 14 characters.' >&4
5616                                 val="$define"
5617                         fi
5618                 else
5619                         $cat <<'EOM'
5620 How confusing! Some of your filesystems are sane enough to allow filenames
5621 longer than 14 characters but some others like /tmp can't even think about them.
5622 So, for now on, I shall assume your kernel does not allow them at all.
5623 EOM
5624                         val="$undef"
5625                 fi
5626         fi
5627 else
5628         $cat <<'EOM'
5629 You can't have filenames longer than 14 chars.  You can't even think about them!
5630 EOM
5631         val="$undef"
5632 fi 
5633 set d_flexfnam
5634 eval $setvar
5635 $rm -rf /tmp/cf$$ 123456789abcde*
5636
5637 : determine where library module manual pages go
5638 set man3dir man3dir none
5639 eval $prefixit
5640 $cat <<EOM
5641
5642 $spackage has manual pages for many of the library modules.
5643 EOM
5644
5645 case "$nroff" in
5646 nroff)
5647         $cat <<'EOM'
5648 However, you don't have nroff, so they're probably useless to you.
5649 EOM
5650         case "$man3dir" in
5651         '') man3dir="none";;
5652         esac;;
5653 esac
5654
5655 case "$d_flexfnam" in
5656 undef)
5657         $cat <<'EOM'
5658 However, your system can't handle the long file names like File::Basename.3. 
5659 EOM
5660         case "$man3dir" in
5661         '') man3dir="none";;
5662         esac;;
5663 esac
5664
5665 echo "If you don't want the manual sources installed, answer 'none'."
5666 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5667 case "$man3dir" in
5668 '')     case "$prefix" in 
5669         *$prog*) dflt=`echo $man1dir | 
5670                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5671         *)      dflt="$privlib/man/man3" ;;
5672         esac
5673         ;;
5674 ' ') dflt=none;;
5675 *)      dflt="$man3dir" ;;
5676 esac
5677 echo " "
5678
5679 fn=dn+~
5680 rp="Where do the $package library man pages (source) go?"
5681 . ./getfile
5682 if test "X$man3direxp" != "X$ansexp"; then
5683         installman3dir=''
5684 fi
5685
5686 man3dir="$ans"
5687 man3direxp="$ansexp"
5688 case "$man3dir" in
5689 '') man3dir=' '
5690         installman3dir='';;
5691 esac
5692 if $afs; then
5693         $cat <<EOM
5694
5695 Since you are running AFS, I need to distinguish the directory in which
5696 manual pages reside from the directory in which they are installed (and from
5697 which they are presumably copied to the former directory by occult means).
5698
5699 EOM
5700         case "$installman3dir" in
5701         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5702         *) dflt="$installman3dir";;
5703         esac
5704         fn=de~
5705         rp='Where will man pages be installed?'
5706         . ./getfile
5707         installman3dir="$ans"
5708 else
5709         installman3dir="$man3direxp"
5710 fi
5711
5712 : What suffix to use on installed man pages
5713
5714 case "$man3dir" in
5715 ' ')
5716         man3ext='0'
5717         ;;
5718 *)
5719         rp="What suffix should be used for the $package library man pages?"
5720         case "$man3ext" in
5721         '')     case "$man3dir" in
5722                 *3)  dflt=3 ;;
5723                 *3p) dflt=3p ;;
5724                 *3pm) dflt=3pm ;;
5725                 *l) dflt=l;;
5726                 *n) dflt=n;;
5727                 *o) dflt=o;;
5728                 *p) dflt=p;;
5729                 *C) dflt=C;;
5730                 *L) dflt=L;;
5731                 *L3) dflt=L3;;
5732                 *) dflt=3;;
5733                 esac
5734                 ;;
5735         *)      dflt="$man3ext";;
5736         esac
5737         . ./myread
5738         man3ext="$ans"
5739         ;;
5740 esac
5741
5742 : see if we have to deal with yellow pages, now NIS.
5743 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5744         if $test -f /usr/etc/nibindd; then
5745                 echo " "
5746                 echo "I'm fairly confident you're on a NeXT."
5747                 echo " "
5748                 rp='Do you get the hosts file via NetInfo?'
5749                 dflt=y
5750                 case "$hostcat" in
5751                 nidump*) ;;
5752                 '') ;;
5753                 *) dflt=n;;
5754                 esac
5755                 . ./myread
5756                 case "$ans" in
5757                 y*) hostcat='nidump hosts .';;
5758                 *)      case "$hostcat" in
5759                         nidump*) hostcat='';;
5760                         esac
5761                         ;;
5762                 esac
5763         fi
5764         case "$hostcat" in
5765         nidump*) ;;
5766         *)
5767                 case "$hostcat" in
5768                 *ypcat*) dflt=y;;
5769                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5770                                 dflt=y
5771                         else
5772                                 dflt=n
5773                         fi;;
5774                 *) dflt=n;;
5775                 esac
5776                 echo " "
5777                 rp='Are you getting the hosts file via yellow pages?'
5778                 . ./myread
5779                 case "$ans" in
5780                 y*) hostcat='ypcat hosts';;
5781                 *) hostcat='cat /etc/hosts';;
5782                 esac
5783                 ;;
5784         esac
5785 fi
5786 case "$hostcat" in
5787 '') hostcat='cat /etc/hosts';;
5788 esac
5789 case "$groupcat" in
5790 '') groupcat='cat /etc/group';;
5791 esac
5792 case "$passcat" in
5793 '') passcat='cat /etc/passwd';;
5794 esac
5795
5796 : now get the host name
5797 echo " "
5798 echo "Figuring out host name..." >&4
5799 case "$myhostname" in
5800 '') cont=true
5801         echo 'Maybe "hostname" will work...'
5802         if tans=`sh -c hostname 2>&1` ; then
5803                 myhostname=$tans
5804                 phostname=hostname
5805                 cont=''
5806         fi
5807         ;;
5808 *) cont='';;
5809 esac
5810 if $test "$cont"; then
5811         if ./xenix; then
5812                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5813                 if tans=`cat /etc/systemid 2>&1` ; then
5814                         myhostname=$tans
5815                         phostname='cat /etc/systemid'
5816                         echo "Whadyaknow.  Xenix always was a bit strange..."
5817                         cont=''
5818                 fi
5819         elif $test -r /etc/systemid; then
5820                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5821         fi
5822 fi
5823 if $test "$cont"; then
5824         echo 'No, maybe "uuname -l" will work...'
5825         if tans=`sh -c 'uuname -l' 2>&1` ; then
5826                 myhostname=$tans
5827                 phostname='uuname -l'
5828         else
5829                 echo 'Strange.  Maybe "uname -n" will work...'
5830                 if tans=`sh -c 'uname -n' 2>&1` ; then
5831                         myhostname=$tans
5832                         phostname='uname -n'
5833                 else
5834                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5835                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5836                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5837                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5838                         else
5839                                 case "$myhostname" in
5840                                 '') echo "Does this machine have an identity crisis or something?"
5841                                         phostname='';;
5842                                 *)
5843                                         echo "Well, you said $myhostname before..."
5844                                         phostname='echo $myhostname';;
5845                                 esac
5846                         fi
5847                 fi
5848         fi
5849 fi
5850 : you do not want to know about this
5851 set $myhostname
5852 myhostname=$1
5853
5854 : verify guess
5855 if $test "$myhostname" ; then
5856         dflt=y
5857         rp='Your host name appears to be "'$myhostname'".'" Right?"
5858         . ./myread
5859         case "$ans" in
5860         y*) ;;
5861         *) myhostname='';;
5862         esac
5863 fi
5864
5865 : bad guess or no guess
5866 while $test "X$myhostname" = X ; do
5867         dflt=''
5868         rp="Please type the (one word) name of your host:"
5869         . ./myread
5870         myhostname="$ans"
5871 done
5872
5873 : translate upper to lower if necessary
5874 case "$myhostname" in
5875 *[A-Z]*)
5876         echo "(Normalizing case in your host name)"
5877         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5878         ;;
5879 esac
5880
5881 case "$myhostname" in
5882 *.*)
5883         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5884         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5885         echo "(Trimming domain name from host name--host name is now $myhostname)"
5886         ;;
5887 *) case "$mydomain" in
5888         '')
5889                 {
5890                         test "X$hostcat" = "Xypcat hosts" &&
5891                         ypmatch "$myhostname" hosts 2>/dev/null |\
5892                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5893                         $test -s hosts
5894                 } || {
5895                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5896                                         /[       ]$myhostname[  . ]/p" > hosts
5897                 }
5898                 tmp_re="[       . ]"
5899                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5900                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5901                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5902                         hosts | $sort | $uniq | \
5903                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5904                 case `$echo X$dflt` in
5905                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5906                         dflt=.
5907                         ;;
5908                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5909                         ;;
5910                 esac
5911                 case "$dflt" in
5912                 .)
5913                         tans=`./loc resolv.conf X /etc /usr/etc`
5914                         if $test -f "$tans"; then
5915                                 echo "(Attempting domain name extraction from $tans)"
5916                                 dflt=.`$sed -n -e 's/   / /g' \
5917                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5918                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5919                                 case "$dflt" in
5920                                 .) dflt=.`$sed -n -e 's/        / /g' \
5921                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5922                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5923                                         ;;
5924                                 esac
5925                         fi
5926                         ;;
5927                 esac
5928                 case "$dflt" in
5929                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5930                         dflt=.`sh -c domainname 2>/dev/null`
5931                         case "$dflt" in
5932                         '') dflt='.';;
5933                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5934                         esac
5935                         ;;
5936                 esac
5937                 case "$dflt" in
5938                 .) echo "(Lost all hope -- silly guess then)"
5939                         dflt='.uucp'
5940                         ;;
5941                 esac
5942                 $rm -f hosts
5943                 ;;
5944         *) dflt="$mydomain";;
5945         esac;;
5946 esac
5947 echo " "
5948 rp="What is your domain name?"
5949 . ./myread
5950 tans="$ans"
5951 case "$ans" in
5952 '') ;;
5953 .*) ;;
5954 *) tans=".$tans";;
5955 esac
5956 mydomain="$tans"
5957
5958 : translate upper to lower if necessary
5959 case "$mydomain" in
5960 *[A-Z]*)
5961         echo "(Normalizing case in your domain name)"
5962         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5963         ;;
5964 esac
5965
5966 : a little sanity check here
5967 case "$phostname" in
5968 '') ;;
5969 *)
5970         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5971         $myhostname$mydomain|$myhostname) ;;
5972         *)
5973                 case "$phostname" in
5974                 sed*)
5975                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5976                         ;;
5977                 *)
5978                         echo "(That doesn't agree with your $phostname command, by the way.)"
5979                         ;;
5980                 esac
5981         ;;
5982         esac
5983         ;;
5984 esac
5985
5986 $cat <<EOM
5987
5988 I need to get your e-mail address in Internet format if possible, i.e.
5989 something like user@host.domain. Please answer accurately since I have
5990 no easy means to double check it. The default value provided below
5991 is most probably close to the reality but may not be valid from outside
5992 your organization...
5993
5994 EOM
5995 cont=x
5996 while test "$cont"; do
5997         case "$cf_email" in
5998         '') dflt="$cf_by@$myhostname$mydomain";;
5999         *) dflt="$cf_email";;
6000         esac
6001         rp='What is your e-mail address?'
6002         . ./myread
6003         cf_email="$ans"
6004         case "$cf_email" in
6005         *@*.*) cont='' ;;
6006         *)
6007                 rp='Address does not look like an Internet one.  Use it anyway?'
6008                 case "$fastread" in
6009                 yes) dflt=y ;;
6010                 *) dflt=n ;;
6011                 esac
6012                 . ./myread
6013                 case "$ans" in
6014                 y*) cont='' ;;
6015                 *) echo " " ;;
6016                 esac
6017                 ;;
6018         esac
6019 done
6020
6021 $cat <<EOM
6022
6023 If you or somebody else will be maintaining perl at your site, please
6024 fill in the correct e-mail address here so that they may be contacted
6025 if necessary. Currently, the "perlbug" program included with perl
6026 will send mail to this address in addition to perlbug@perl.com. You may
6027 enter "none" for no administrator.
6028
6029 EOM
6030 case "$perladmin" in
6031 '') dflt="$cf_email";;
6032 *) dflt="$perladmin";;
6033 esac
6034 rp='Perl administrator e-mail address'
6035 . ./myread
6036 perladmin="$ans"
6037
6038 : figure out how to guarantee perl startup
6039 case "$startperl" in
6040 '')
6041         case "$sharpbang" in
6042         *!)
6043                 $cat <<EOH
6044
6045 I can use the #! construct to start perl on your system. This will
6046 make startup of perl scripts faster, but may cause problems if you
6047 want to share those scripts and perl is not in a standard place
6048 ($binexp/perl) on all your platforms. The alternative is to force
6049 a shell by starting the script with a single ':' character.
6050
6051 EOH
6052                 dflt="$binexp/perl"
6053                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6054                 . ./myread
6055                 case "$ans" in
6056                 none)   startperl=": # use perl";;
6057                 *)      startperl="#!$ans"
6058                         if $test 30 -lt `echo "$ans" | wc -c`; then
6059                                 $cat >&4 <<EOM
6060
6061 WARNING:  Some systems limit the #! command to 32 characters.
6062 If you experience difficulty running Perl scripts with #!, try
6063 installing Perl in a directory with a shorter pathname.
6064
6065 EOM
6066                         fi ;;
6067                 esac
6068                 ;;
6069         *) startperl=": # use perl"
6070                 ;;
6071         esac
6072         ;;
6073 esac
6074 echo "I'll use $startperl to start perl scripts."
6075
6076 : figure best path for perl in scripts
6077 case "$perlpath" in
6078 '')
6079         perlpath="$binexp/perl"
6080         case "$startperl" in
6081         *!*) ;;
6082         *)
6083                 $cat <<EOH
6084
6085 I will use the "eval 'exec'" idiom to start Perl on your system.
6086 I can use the full path of your Perl binary for this purpose, but
6087 doing so may cause problems if you want to share those scripts and
6088 Perl is not always in a standard place ($binexp/perl).
6089
6090 EOH
6091                 dflt="$binexp/perl"
6092                 rp="What path shall I use in \"eval 'exec'\"?"
6093                 . ./myread
6094                 perlpath="$ans"
6095                 ;;
6096         esac
6097         ;;
6098 esac
6099 case "$startperl" in
6100 *!*)    ;;
6101 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6102 esac
6103
6104 : determine where public executable scripts go
6105 set scriptdir scriptdir
6106 eval $prefixit
6107 case "$scriptdir" in
6108 '')
6109         dflt="$bin"
6110         : guess some guesses
6111         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6112         $test -d /usr/share/bin && dflt=/usr/share/bin
6113         $test -d /usr/local/script && dflt=/usr/local/script
6114         $test -d $prefixexp/script && dflt=$prefixexp/script
6115         set dflt
6116         eval $prefixup
6117         ;;
6118 *)  dflt="$scriptdir"
6119         ;;
6120 esac
6121 $cat <<EOM
6122  
6123 Some installations have a separate directory just for executable scripts so
6124 that they can mount it across multiple architectures but keep the scripts in
6125 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6126 Or you might just lump your scripts in with all your other executables.
6127  
6128 EOM
6129 fn=d~
6130 rp='Where do you keep publicly executable scripts?'
6131 . ./getfile
6132 if $test "X$ansexp" != "X$scriptdirexp"; then
6133         installscript=''
6134 fi
6135 scriptdir="$ans"
6136 scriptdirexp="$ansexp"
6137 if $afs; then
6138         $cat <<EOM
6139
6140 Since you are running AFS, I need to distinguish the directory in which
6141 scripts reside from the directory in which they are installed (and from
6142 which they are presumably copied to the former directory by occult means).
6143
6144 EOM
6145         case "$installscript" in
6146         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6147         *) dflt="$installscript";;
6148         esac
6149         fn=de~
6150         rp='Where will public scripts be installed?'
6151         . ./getfile
6152         installscript="$ans"
6153 else
6154         installscript="$scriptdirexp"
6155 fi
6156
6157 : determine where site specific libraries go.
6158 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6159 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6160 case "$prefix" in
6161 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6162 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6163 esac
6164 eval $prefixit
6165 $cat <<EOM
6166
6167 The installation process will also create a directory for
6168 site-specific extensions and modules.  Some users find it convenient
6169 to place all site-specific files in this directory rather than in the
6170 main distribution directory.
6171
6172 EOM
6173 fn=d~+
6174 rp='Pathname for the site-specific library files?'
6175 . ./getfile
6176 if $test "X$sitelibexp" != "X$ansexp"; then
6177         installsitelib=''
6178 fi
6179 sitelib="$ans"
6180 sitelibexp="$ansexp"
6181 if $afs; then
6182         $cat <<EOM
6183
6184 Since you are running AFS, I need to distinguish the directory in
6185 which site-specific files reside from the directory in which they are
6186 installed (and from which they are presumably copied to the former
6187 directory by occult means).
6188
6189 EOM
6190         case "$installsitelib" in
6191         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6192         *) dflt="$installsitelib";;
6193         esac
6194         fn=de~
6195         rp='Where will site-specific files be installed?'
6196         . ./getfile
6197         installsitelib="$ans"
6198 else
6199         installsitelib="$sitelibexp"
6200 fi
6201
6202 : determine where site specific architecture-dependent libraries go.
6203 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6204 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6205 : sitelib may have an optional trailing /share.
6206 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6207 tdflt="$tdflt/$archname"
6208 set sitearch sitearch none
6209 eval $prefixit
6210 case "$sitearch" in
6211 '')     dflt="$tdflt" ;;
6212 *)      dflt="$sitearch" ;;
6213 esac
6214 $cat <<EOM
6215
6216 The installation process will also create a directory for
6217 architecture-dependent site-specific extensions and modules.
6218
6219 EOM
6220 fn=nd~+
6221 rp='Pathname for the site-specific architecture-dependent library files?'
6222 . ./getfile
6223 if $test "X$sitearchexp" != "X$ansexp"; then
6224         installsitearch=''
6225 fi
6226 sitearch="$ans"
6227 sitearchexp="$ansexp"
6228 if $afs; then
6229         $cat <<EOM
6230
6231 Since you are running AFS, I need to distinguish the directory in
6232 which site-specific architecture-dependent library files reside from
6233 the directory in which they are installed (and from which they are
6234 presumably copied to the former directory by occult means).
6235
6236 EOM
6237         case "$installsitearch" in
6238         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6239         *) dflt="$installsitearch";;
6240         esac
6241         fn=de~
6242         rp='Where will site-specific architecture-dependent files be installed?'
6243         . ./getfile
6244         installsitearch="$ans"
6245 else
6246         installsitearch="$sitearchexp"
6247 fi
6248
6249 cat <<EOM
6250
6251 Previous version of $package used the standard IO mechanisms as defined
6252 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6253 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6254 the default.  This abstraction layer can use AT&T's sfio (if you already
6255 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6256 problems with some extension modules.  Using PerlIO with stdio is safe,
6257 but it is slower than plain stdio and therefore is not the default.
6258
6259 If this doesn't make any sense to you, just accept the default 'n'.
6260 EOM
6261 case "$useperlio" in
6262 $define|true|[yY]*)     dflt='y';;
6263 *) dflt='n';;
6264 esac
6265 rp='Use the experimental PerlIO abstraction layer?'
6266 . ./myread
6267 case "$ans" in
6268 y|Y) 
6269         val="$define"
6270         ;;     
6271 *)      
6272         echo "Ok, doing things the stdio way"
6273         val="$undef"
6274         ;;
6275 esac
6276 set useperlio
6277 eval $setvar 
6278
6279 : Check how to convert floats to strings.
6280 if test "X$d_Gconvert" = X; then
6281         echo " "
6282         echo "Checking for an efficient way to convert floats to strings."
6283         $cat >try.c <<'EOP'
6284 #ifdef TRY_gconvert
6285 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6286 char *myname = "gconvert";
6287 #endif
6288 #ifdef TRY_gcvt
6289 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6290 char *myname = "gcvt";
6291 #endif
6292 #ifdef TRY_sprintf
6293 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6294 char *myname = "sprintf";
6295 #endif
6296
6297 #include <stdio.h>
6298
6299 int
6300 checkit(expect, got)
6301 char *expect;
6302 char *got;
6303 {
6304     if (strcmp(expect, got)) {
6305                 printf("%s oddity:  Expected %s, got %s\n",
6306                         myname, expect, got);
6307                 exit(1);
6308         }
6309 }
6310
6311 int main()
6312
6313         char buf[64]; 
6314         buf[63] = '\0';
6315
6316         /* This must be 1st test on (which?) platform */
6317         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6318         Gconvert(0.1, 8, 0, buf);
6319         checkit("0.1", buf);
6320
6321         Gconvert(1.0, 8, 0, buf); 
6322         checkit("1", buf);
6323
6324         Gconvert(0.0, 8, 0, buf); 
6325         checkit("0", buf);
6326
6327         Gconvert(-1.0, 8, 0, buf); 
6328         checkit("-1", buf);
6329
6330         /* Some Linux gcvt's give 1.e+5 here. */
6331         Gconvert(100000.0, 8, 0, buf); 
6332         checkit("100000", buf);
6333         
6334         /* Some Linux gcvt's give -1.e+5 here. */
6335         Gconvert(-100000.0, 8, 0, buf); 
6336         checkit("-100000", buf);
6337
6338         exit(0);
6339 }
6340 EOP
6341         case "$d_Gconvert" in
6342         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6343         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6344         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6345         *) xxx_list='gconvert gcvt sprintf' ;;
6346         esac
6347
6348         for xxx_convert in $xxx_list; do
6349                 echo "Trying $xxx_convert"
6350                 $rm -f try try$_o
6351                 set try -DTRY_$xxx_convert
6352                 if eval $compile; then
6353                         echo "$xxx_convert" found. >&4
6354                         if ./try; then
6355                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6356                                 break;
6357                         else
6358                                 echo "...But $xxx_convert didn't work as I expected."
6359                         fi
6360                 else
6361                         echo "$xxx_convert NOT found." >&4
6362                 fi
6363         done
6364                 
6365         case "$xxx_convert" in
6366         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6367         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6368         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6369         esac
6370 fi
6371
6372 : Initialize h_fcntl
6373 h_fcntl=false
6374
6375 : Initialize h_sysfile
6376 h_sysfile=false
6377
6378 : access call always available on UNIX
6379 set access d_access
6380 eval $inlibc
6381
6382 : locate the flags for 'access()'
6383 case "$d_access" in
6384 "$define")
6385         echo " "
6386         $cat >access.c <<'EOCP'
6387 #include <sys/types.h>
6388 #ifdef I_FCNTL
6389 #include <fcntl.h>
6390 #endif
6391 #ifdef I_SYS_FILE
6392 #include <sys/file.h>
6393 #endif
6394 #ifdef I_UNISTD
6395 #include <unistd.h>
6396 #endif
6397 int main() {
6398         exit(R_OK);
6399 }
6400 EOCP
6401         : check sys/file.h first, no particular reason here
6402         if $test `./findhdr sys/file.h` && \
6403                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6404                 h_sysfile=true;
6405                 echo "<sys/file.h> defines the *_OK access constants." >&4
6406         elif $test `./findhdr fcntl.h` && \
6407                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6408                 h_fcntl=true;
6409                 echo "<fcntl.h> defines the *_OK access constants." >&4
6410         elif $test `./findhdr unistd.h` && \
6411                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6412                 echo "<unistd.h> defines the *_OK access constants." >&4
6413         else
6414                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6415         fi
6416         ;;
6417 esac
6418 $rm -f access*
6419
6420 : see if accessx exists
6421 set accessx d_accessx
6422 eval $inlibc
6423
6424 : see if alarm exists
6425 set alarm d_alarm
6426 eval $inlibc
6427
6428 : Look for GNU-cc style attribute checking
6429 echo " "
6430 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6431 $cat >attrib.c <<'EOCP'
6432 #include <stdio.h>
6433 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6434 EOCP
6435 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6436         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6437                 echo "Your C compiler doesn't fully support __attribute__."
6438                 val="$undef"
6439         else
6440                 echo "Your C compiler supports __attribute__."
6441                 val="$define"
6442         fi
6443 else
6444         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6445         val="$undef"
6446 fi
6447 set d_attribut
6448 eval $setvar
6449 $rm -f attrib*
6450
6451 : see if bcmp exists
6452 set bcmp d_bcmp
6453 eval $inlibc
6454
6455 : see if bcopy exists
6456 set bcopy d_bcopy
6457 eval $inlibc
6458
6459 : see if this is a unistd.h system
6460 set unistd.h i_unistd
6461 eval $inhdr
6462
6463 : see if getpgrp exists
6464 set getpgrp d_getpgrp
6465 eval $inlibc
6466
6467 case "$d_getpgrp" in
6468 "$define")
6469         echo " "
6470         echo "Checking to see which flavor of getpgrp is in use..."
6471         $cat >set.c <<EOP
6472 #$i_unistd I_UNISTD
6473 #include <sys/types.h>
6474 #ifdef I_UNISTD
6475 #  include <unistd.h>
6476 #endif
6477 int main()
6478 {
6479         if (getuid() == 0) {
6480                 printf("(I see you are running Configure as super-user...)\n");
6481                 setuid(1);
6482         }
6483 #ifdef TRY_BSD_PGRP
6484         if (getpgrp(1) == 0)
6485                 exit(0);
6486 #else
6487         if (getpgrp() > 0)
6488                 exit(0);
6489 #endif
6490         exit(1);
6491 }
6492 EOP
6493         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6494                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6495                 val="$define"
6496         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6497                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6498                 val="$undef"
6499         else
6500                 echo "I can't seem to compile and run the test program."
6501                 if ./usg; then
6502                         xxx="a USG one, i.e. you use getpgrp()."
6503                 else
6504                         # SVR4 systems can appear rather BSD-ish.
6505                         case "$i_unistd" in
6506                         $undef)
6507                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6508                                 val="$define"
6509                                 ;;
6510                         $define)
6511                                 xxx="probably a USG one, i.e. you use getpgrp()."
6512                                 val="$undef"
6513                                 ;;
6514                         esac
6515                 fi
6516                 echo "Assuming your getpgrp is $xxx" >&4
6517         fi
6518         ;;
6519 *) val="$undef";;
6520 esac
6521 set d_bsdgetpgrp
6522 eval $setvar
6523 $rm -f set set.c
6524
6525 : see if setpgrp exists
6526 set setpgrp d_setpgrp
6527 eval $inlibc
6528
6529 case "$d_setpgrp" in
6530 "$define")
6531         echo " "
6532         echo "Checking to see which flavor of setpgrp is in use..."
6533         $cat >set.c <<EOP
6534 #$i_unistd I_UNISTD
6535 #include <sys/types.h>
6536 #ifdef I_UNISTD
6537 #  include <unistd.h>
6538 #endif
6539 int main()
6540 {
6541         if (getuid() == 0) {
6542                 printf("(I see you are running Configure as super-user...)\n");
6543                 setuid(1);
6544         }
6545 #ifdef TRY_BSD_PGRP
6546         if (-1 == setpgrp(1, 1))
6547                 exit(0);
6548 #else
6549         if (setpgrp() != -1)
6550                 exit(0);
6551 #endif
6552         exit(1);
6553 }
6554 EOP
6555         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6556                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6557                 val="$define"
6558         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6559                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6560                 val="$undef"
6561         else
6562                 echo "(I can't seem to compile and run the test program.)"
6563                 if ./usg; then
6564                         xxx="a USG one, i.e. you use setpgrp()."
6565                 else
6566                         # SVR4 systems can appear rather BSD-ish.
6567                         case "$i_unistd" in
6568                         $undef)
6569                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6570                                 val="$define"
6571                                 ;;
6572                         $define)
6573                                 xxx="probably a USG one, i.e. you use setpgrp()."
6574                                 val="$undef"
6575                                 ;;
6576                         esac
6577                 fi
6578                 echo "Assuming your setpgrp is $xxx" >&4
6579         fi
6580         ;;
6581 *) val="$undef";;
6582 esac
6583 set d_bsdsetpgrp
6584 eval $setvar
6585 $rm -f set set.c
6586 : see if bzero exists
6587 set bzero d_bzero
6588 eval $inlibc
6589
6590 : check for lengths of integral types
6591 echo " "
6592 case "$intsize" in
6593 '')
6594         echo "Checking to see how big your integers are..." >&4
6595         $cat >intsize.c <<'EOCP'
6596 #include <stdio.h>
6597 int main()
6598 {
6599         printf("intsize=%d;\n", sizeof(int));
6600         printf("longsize=%d;\n", sizeof(long));
6601         printf("shortsize=%d;\n", sizeof(short));
6602         exit(0);
6603 }
6604 EOCP
6605         set intsize
6606         if eval $compile_ok && ./intsize > /dev/null; then
6607                 eval `./intsize`
6608                 echo "Your integers are $intsize bytes long."
6609                 echo "Your long integers are $longsize bytes long."
6610                 echo "Your short integers are $shortsize bytes long."
6611         else
6612                 $cat >&4 <<EOM
6613 !
6614 Help! I can't compile and run the intsize test program: please enlighten me!
6615 (This is probably a misconfiguration in your system or libraries, and
6616 you really ought to fix it.  Still, I'll try anyway.)
6617 !
6618 EOM
6619                 dflt=4
6620                 rp="What is the size of an integer (in bytes)?"
6621                 . ./myread
6622                 intsize="$ans"
6623                 dflt=$intsize
6624                 rp="What is the size of a long integer (in bytes)?"
6625                 . ./myread
6626                 longsize="$ans"
6627                 dflt=2
6628                 rp="What is the size of a short integer (in bytes)?"
6629                 . ./myread
6630                 shortsize="$ans"
6631         fi
6632         ;;
6633 esac
6634 $rm -f intsize intsize.*
6635
6636 : see if signal is declared as pointer to function returning int or void
6637 echo " "
6638 xxx=`./findhdr signal.h`
6639 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6640 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6641         echo "You have int (*signal())() instead of void." >&4
6642         val="$undef"
6643 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6644         echo "You have void (*signal())()." >&4
6645         val="$define"
6646 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6647         echo "You have int (*signal())() instead of void." >&4
6648         val="$undef"
6649 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6650         echo "You have void (*signal())()." >&4
6651         val="$define"
6652 else
6653         case "$d_voidsig" in
6654         '')
6655         echo "I can't determine whether signal handler returns void or int..." >&4
6656                 dflt=void
6657                 rp="What type does your signal handler return?"
6658                 . ./myread
6659                 case "$ans" in
6660                 v*) val="$define";;
6661                 *) val="$undef";;
6662                 esac;;
6663         "$define")
6664                 echo "As you already told me, signal handler returns void." >&4
6665                 val="$define"
6666                 ;;
6667         *)      echo "As you already told me, signal handler returns int." >&4
6668                 val="$undef"
6669                 ;;
6670         esac
6671 fi
6672 set d_voidsig
6673 eval $setvar
6674 case "$d_voidsig" in
6675 "$define") signal_t="void";;
6676 *) signal_t="int";;
6677 esac
6678 $rm -f $$.tmp
6679
6680 : check for ability to cast large floats to 32-bit ints.
6681 echo " "
6682 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6683 if $test "$intsize" -ge 4; then
6684         xxx=int
6685 else
6686         xxx=long
6687 fi
6688 $cat >try.c <<EOCP
6689 #include <stdio.h>
6690 #include <sys/types.h>
6691 #include <signal.h>
6692 $signal_t blech(s) int s; { exit(3); }
6693 int main()
6694 {
6695         $xxx i32;
6696         double f, g;
6697         int result = 0;
6698         char str[16];
6699         signal(SIGFPE, blech);
6700
6701         /* Don't let compiler optimize the test away.  Store the number 
6702            in a writable string for gcc to pass to sscanf under HP/UX.
6703         */
6704         sprintf(str, "2147483647");
6705         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6706         g = 10 * f;
6707         i32  = ($xxx) g;
6708
6709         /* x86 processors will probably give 0x8000 0000, which is a
6710        sign change.  We don't want that.  We want to mimic SPARC
6711            behavior here, which is to preserve the sign and give
6712            back 0x7fff ffff.
6713         */
6714         if (i32 != ($xxx) f)
6715                 result |= 1;
6716         exit(result);
6717 }
6718 EOCP
6719 set try
6720 if eval $compile_ok; then
6721         ./try
6722         yyy=$?
6723 else
6724         echo "(I can't seem to compile the test program--assuming it can't)"
6725         yyy=1
6726 fi
6727 case "$yyy" in
6728 0)      val="$define"
6729         echo "Yup, it can."
6730         ;;
6731 *)      val="$undef"
6732         echo "Nope, it can't."
6733         ;;
6734 esac
6735 set d_casti32
6736 eval $setvar
6737 $rm -f try try.*
6738
6739 : check for ability to cast negative floats to unsigned
6740 echo " "
6741 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6742 $cat >try.c <<EOCP
6743 #include <stdio.h>
6744 #include <sys/types.h>
6745 #include <signal.h>
6746 $signal_t blech(s) int s; { exit(7); }
6747 $signal_t blech_in_list(s) int s; { exit(4); }
6748 unsigned long dummy_long(p) unsigned long p; { return p; }
6749 unsigned int dummy_int(p) unsigned int p; { return p; }
6750 unsigned short dummy_short(p) unsigned short p; { return p; }
6751 int main()
6752 {
6753         double f;
6754         unsigned long along;
6755         unsigned int aint;
6756         unsigned short ashort;
6757         int result = 0;
6758         char str[16];
6759         
6760         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6761            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6762            optimized the whole file away
6763         */
6764         /* Store the number in a writable string for gcc to pass to 
6765            sscanf under HP/UX.
6766         */
6767         sprintf(str, "-123");
6768         sscanf(str, "%lf", &f);  /* f = -123.; */
6769
6770         signal(SIGFPE, blech);
6771         along = (unsigned long)f;
6772         aint = (unsigned int)f;
6773         ashort = (unsigned short)f;
6774         if (along != (unsigned long)-123)
6775                 result |= 1;
6776         if (aint != (unsigned int)-123)
6777                 result |= 1;
6778         if (ashort != (unsigned short)-123)
6779                 result |= 1;
6780         sprintf(str, "1073741824.");
6781         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6782         f = f + f;
6783         along = 0;
6784         along = (unsigned long)f;
6785         if (along != 0x80000000)
6786                 result |= 2;
6787         f -= 1.;
6788         along = 0;
6789         along = (unsigned long)f;
6790         if (along != 0x7fffffff)
6791                 result |= 1;
6792         f += 2.;
6793         along = 0;
6794         along = (unsigned long)f;
6795         if (along != 0x80000001)
6796                 result |= 2;
6797         if (result)
6798                 exit(result);
6799         signal(SIGFPE, blech_in_list);
6800         sprintf(str, "123.");
6801         sscanf(str, "%lf", &f);  /* f = 123.; */
6802         along = dummy_long((unsigned long)f);
6803         aint = dummy_int((unsigned int)f);
6804         ashort = dummy_short((unsigned short)f);
6805         if (along != (unsigned long)123)
6806                 result |= 4;
6807         if (aint != (unsigned int)123)
6808                 result |= 4;
6809         if (ashort != (unsigned short)123)
6810                 result |= 4;
6811         exit(result);
6812
6813 }
6814 EOCP
6815 set try
6816 if eval $compile_ok; then
6817         ./try
6818         castflags=$?
6819 else
6820         echo "(I can't seem to compile the test program--assuming it can't)"
6821         castflags=7
6822 fi
6823 case "$castflags" in
6824 0)      val="$define"
6825         echo "Yup, it can."
6826         ;;
6827 *)      val="$undef"
6828         echo "Nope, it can't."
6829         ;;
6830 esac
6831 set d_castneg
6832 eval $setvar
6833 $rm -f try.*
6834
6835 : see if vprintf exists
6836 echo " "
6837 if set vprintf val -f d_vprintf; eval $csym; $val; then
6838         echo 'vprintf() found.' >&4
6839         val="$define"
6840         $cat >vprintf.c <<'EOF'
6841 #include <varargs.h>
6842
6843 int main() { xxx("foo"); }
6844
6845 xxx(va_alist)
6846 va_dcl
6847 {
6848         va_list args;
6849         char buf[10];
6850
6851         va_start(args);
6852         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6853 }
6854 EOF
6855         set vprintf
6856         if eval $compile && ./vprintf; then
6857                 echo "Your vsprintf() returns (int)." >&4
6858                 val2="$undef"
6859         else
6860                 echo "Your vsprintf() returns (char*)." >&4
6861                 val2="$define"
6862         fi
6863 else
6864         echo 'vprintf() NOT found.' >&4
6865                 val="$undef"
6866                 val2="$undef"
6867 fi
6868 set d_vprintf
6869 eval $setvar
6870 val=$val2
6871 set d_charvspr
6872 eval $setvar
6873
6874 : see if chown exists
6875 set chown d_chown
6876 eval $inlibc
6877
6878 : see if chroot exists
6879 set chroot d_chroot
6880 eval $inlibc
6881
6882 : see if chsize exists
6883 set chsize d_chsize
6884 eval $inlibc
6885
6886 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6887 while $test $# -ge 2; do
6888         case "$1" in
6889         $define) echo "#include <$2>";;
6890         esac ;
6891     shift 2;
6892 done > try.c;
6893 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6894 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6895         val="$define";
6896 else
6897         val="$undef";
6898 fi;
6899 set $varname;
6900 eval $setvar;
6901 $rm -f try.c try.o'
6902
6903 : see if this is a sys/uio.h system
6904 set sys/uio.h i_sysuio
6905 eval $inhdr
6906
6907 echo "Checking to see if your system supports struct iovec..." >&4
6908 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6909 eval $hasfield
6910 case "$d_iovec_s" in
6911 "$define")      echo "Yup, it does." >&4
6912                 ;;
6913 *)              echo "Nope, it doesn't." >&4
6914                 ;;
6915 esac
6916
6917 socketlib=''
6918 sockethdr=''
6919 : see whether socket exists
6920 echo " "
6921 $echo $n "Hmm... $c" >&4
6922 if set socket val -f d_socket; eval $csym; $val; then
6923         echo "Looks like you have Berkeley networking support." >&4
6924         d_socket="$define"
6925         if set setsockopt val -f; eval $csym; $val; then
6926                 d_oldsock="$undef"
6927         else
6928                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6929                 d_oldsock="$define"
6930         fi
6931 else
6932         if $contains socklib libc.list >/dev/null 2>&1; then
6933                 echo "Looks like you have Berkeley networking support." >&4
6934                 d_socket="$define"
6935                 : we will have to assume that it supports the 4.2 BSD interface
6936                 d_oldsock="$undef"
6937         else
6938                 echo "You don't have Berkeley networking in libc$_a..." >&4
6939                 if test "X$d_socket" = "X$define"; then
6940                    echo "...but you seem to believe that you have sockets." >&4
6941                 else
6942                         for net in net socket
6943                         do
6944                                 if test -f /usr/lib/lib$net$_a; then
6945                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6946                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6947                                         if $contains socket libc.list >/dev/null 2>&1; then
6948                                                 d_socket="$define"
6949                                                 socketlib="-l$net"
6950                                                 case "$net" in
6951                                                 net)
6952                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6953                                                         sockethdr="-I/usr/netinclude"
6954                                                         ;;
6955                                                 esac
6956                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6957                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6958                                                         d_oldsock="$undef"
6959                                                 else
6960                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6961                                                         d_oldsock="$define"
6962                                                 fi
6963                                                 break
6964                                         fi
6965                                 fi
6966                         done
6967                         if test "X$d_socket" != "X$define"; then
6968                            echo "or anywhere else I see." >&4
6969                            d_socket="$undef"
6970                            d_oldsock="$undef"
6971                         fi
6972                 fi
6973         fi
6974 fi
6975
6976 : see if socketpair exists
6977 set socketpair d_sockpair
6978 eval $inlibc
6979
6980
6981 echo " "
6982 echo "Checking the availability of certain socket constants..." >& 4
6983 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6984         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6985         $cat >try.c <<EOF
6986 #include <sys/types.h>
6987 #include <sys/socket.h>
6988 int main() {
6989     int i = $ENUM;
6990 }
6991 EOF
6992         val="$undef"
6993         set try; if eval $compile; then
6994                 val="$define"
6995         fi
6996         set d_${enum}; eval $setvar
6997         $rm -f try.c try
6998 done
6999
7000 set sendmsg d_sendmsg
7001 eval $inlibc
7002
7003 set recvmsg d_recvmsg
7004 eval $inlibc
7005
7006 echo " "
7007 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7008 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7009 eval $hasfield
7010 case "$d_msghdr_s" in
7011 "$define")      echo "Yup, it does." >&4
7012                 ;;
7013 *)              echo "Nope, it doesn't." >&4
7014                 ;;
7015 esac
7016
7017 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7018 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7019 eval $hasfield
7020 case "$d_cmsghdr_s" in
7021 "$define")      echo "Yup, it does." >&4
7022                 ;;
7023 *)              echo "Nope, it doesn't." >&4
7024                 ;;
7025 esac
7026
7027 : check for const keyword
7028 echo " "
7029 echo 'Checking to see if your C compiler knows about "const"...' >&4
7030 $cat >const.c <<'EOCP'
7031 typedef struct spug { int drokk; } spug;
7032 int main()
7033 {
7034         const char *foo;
7035         const spug y;
7036 }
7037 EOCP
7038 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7039         val="$define"
7040         echo "Yup, it does."
7041 else
7042         val="$undef"
7043         echo "Nope, it doesn't."
7044 fi
7045 set d_const
7046 eval $setvar
7047
7048 : see if crypt exists
7049 echo " "
7050 if set crypt val -f d_crypt; eval $csym; $val; then
7051         echo 'crypt() found.' >&4
7052         val="$define"
7053         cryptlib=''
7054 else
7055         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7056         if $test -z "$cryptlib"; then
7057                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7058         else
7059                 cryptlib=-lcrypt
7060         fi
7061         if $test -z "$cryptlib"; then
7062                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7063         else
7064                 cryptlib=-lcrypt
7065         fi
7066         if $test -z "$cryptlib"; then
7067                 cryptlib=`./loc libcrypt$_a "" $libpth`
7068         else
7069                 cryptlib=-lcrypt
7070         fi
7071         if $test -z "$cryptlib"; then
7072                 echo 'crypt() NOT found.' >&4
7073                 val="$undef"
7074         else
7075                 val="$define"
7076         fi
7077 fi
7078 set d_crypt
7079 eval $setvar
7080
7081 : get csh whereabouts
7082 case "$csh" in
7083 'csh') val="$undef" ;;
7084 *) val="$define" ;;
7085 esac
7086 set d_csh
7087 eval $setvar
7088 : Respect a hint or command line value for full_csh.
7089 case "$full_csh" in
7090 '') full_csh=$csh ;;
7091 esac
7092
7093 : see if cuserid exists
7094 set cuserid d_cuserid
7095 eval $inlibc
7096
7097 : see if this is a limits.h system
7098 set limits.h i_limits
7099 eval $inhdr
7100
7101 : see if this is a float.h system
7102 set float.h i_float
7103 eval $inhdr
7104
7105 : See if number of significant digits in a double precision number is known
7106 echo " "
7107 $cat >dbl_dig.c <<EOM
7108 #$i_limits I_LIMITS
7109 #$i_float I_FLOAT
7110 #ifdef I_LIMITS
7111 #include <limits.h>
7112 #endif
7113 #ifdef I_FLOAT
7114 #include <float.h>
7115 #endif
7116 #ifdef DBL_DIG
7117 printf("Contains DBL_DIG");
7118 #endif
7119 EOM
7120 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7121 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7122         echo "DBL_DIG found." >&4
7123         val="$define"
7124 else
7125         echo "DBL_DIG NOT found." >&4
7126         val="$undef"
7127 fi
7128 $rm -f dbl_dig.?
7129 set d_dbl_dig
7130 eval $setvar
7131
7132
7133 if $test X"$use64bits" = X"$define"; then
7134         : see if dbminit64 exists
7135         set dbminit64 d_dbminit64
7136         eval $inlibc
7137
7138         : see if dbmclose64 exists
7139         set dbmclose64 d_dbmclose64
7140         eval $inlibc
7141
7142         : see if fetch64 exists
7143         set fetch64 d_fetch64
7144         eval $inlibc
7145
7146         : see if store64 exists
7147         set store64 d_store64
7148         eval $inlibc
7149
7150         : see if delete64 exists
7151         set delete64 d_delete64
7152         eval $inlibc
7153
7154         : see if firstkey64 exists
7155         set firstkey64 d_firstkey64
7156         eval $inlibc
7157
7158         : see if nextkey64 exists
7159         set nextkey64 d_nextkey64
7160         eval $inlibc
7161 else
7162         val="$undef"
7163         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7164         do
7165                 set $xxx
7166                 eval $setvar
7167         done
7168 fi
7169
7170 : see if difftime exists
7171 set difftime d_difftime
7172 eval $inlibc
7173
7174 : see if sys/stat.h is available
7175 set sys/stat.h i_sysstat
7176 eval $inhdr
7177
7178 : see if this is a dirent system
7179 echo " "
7180 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7181         val="$define"
7182         echo "<dirent.h> found." >&4
7183 else
7184         val="$undef"
7185         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7186                 echo "<sys/dir.h> found." >&4
7187                 echo " "
7188         else
7189                 xinc=`./findhdr sys/ndir.h`
7190         fi
7191         echo "<dirent.h> NOT found." >&4
7192 fi
7193 set i_dirent
7194 eval $setvar
7195
7196 : Look for type of directory structure.
7197 echo " "
7198 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7199
7200 case "$direntrytype" in
7201 ''|' ')
7202         case "$i_dirent" in
7203         $define) guess1='struct dirent' ;;
7204         *) guess1='struct direct'  ;;
7205         esac
7206         ;;
7207 *)      guess1="$direntrytype"
7208         ;;
7209 esac
7210
7211 case "$guess1" in
7212 'struct dirent') guess2='struct direct' ;;
7213 *) guess2='struct dirent' ;;
7214 esac
7215                 
7216 if $contains "$guess1" try.c >/dev/null 2>&1; then
7217         direntrytype="$guess1"
7218         echo "Your directory entries are $direntrytype." >&4
7219 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7220         direntrytype="$guess2"
7221         echo "Your directory entries seem to be $direntrytype." >&4
7222 else
7223         echo "I don't recognize your system's directory entries." >&4
7224         rp="What type is used for directory entries on this system?"
7225         dflt="$guess1"
7226         . ./myread
7227         direntrytype="$ans"
7228 fi
7229 $rm -f try.c
7230
7231
7232 : see if the directory entry stores field length
7233 echo " "
7234 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7235 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7236         echo "Good, your directory entry keeps length information in d_namlen." >&4
7237         val="$define"
7238 else
7239         echo "Your directory entry does not know about the d_namlen field." >&4
7240         val="$undef"
7241 fi
7242 set d_dirnamlen
7243 eval $setvar
7244 $rm -f try.c
7245
7246
7247 if $test X"$use64bits" = X"$define"; then
7248         : see if fstat64 exists
7249         set fstat64 d_fstat64
7250         eval $inlibc
7251
7252         : see if ftruncate64 exists
7253         set ftruncate64 d_ftruncate64
7254         eval $inlibc
7255
7256         : see if lockf64 exists
7257         set lockf64 d_lockf64
7258         eval $inlibc
7259
7260         : see if llseek exists
7261         set llseek d_llseek
7262         eval $inlibc
7263
7264         : see if lseek64 exists
7265         set lseek64 d_lseek64
7266         eval $inlibc
7267
7268         : see if lstat64 exists
7269         set lstat64 d_lstat64
7270         eval $inlibc
7271
7272         : see if open64 exists
7273         set open64 d_open64
7274         eval $inlibc
7275
7276         : see if opendir64 exists
7277         set opendir64 d_opendir64
7278         eval $inlibc
7279
7280         : see if readdir64 exists
7281         set readdir64 d_readdir64
7282         eval $inlibc
7283
7284         : see if seekdir64 exists
7285         set seekdir64 d_seekdir64
7286         eval $inlibc
7287
7288         : see if stat64 exists
7289         set stat64 d_stat64
7290         eval $inlibc
7291
7292         : see if telldir64 exists
7293         set telldir64 d_telldir64
7294         eval $inlibc
7295
7296         : see if truncate64 exists
7297         set truncate64 d_truncate64
7298         eval $inlibc
7299
7300         : check for off64_t
7301         echo " "
7302         echo $n "Checking to see if your system supports off64_t...$c" >&4
7303         $cat >try.c <<EOCP
7304 #include <sys/types.h>
7305 #include <unistd.h>
7306 off64_t foo() { off64_t x; x = 7; return x; }'
7307 EOCP
7308         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7309                 val="$define"
7310                 echo " Yup, it does." >&4
7311         else
7312                 val="$undef"
7313                 echo " Nope, it doesn't." >&4
7314         fi
7315         $rm -f try.*
7316         set d_off64_t
7317         eval $setvar
7318
7319         : check for offset_t
7320         echo " "
7321         echo $n "Checking to see if your system supports offset_t...$c" >&4
7322         $cat >try.c <<EOCP
7323 #include <sys/types.h>
7324 #include <unistd.h>
7325 offset_t foo() { offset_t x; x = 7; return x; }'
7326 EOCP
7327         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7328                 val="$define"
7329                 echo " Yup, it does." >&4
7330         else
7331                 val="$undef"
7332                 echo " Nope, it doesn't." >&4
7333         fi
7334         $rm -f try.*
7335         set d_offset_t
7336         eval $setvar
7337
7338         : check for ino64_t
7339         echo " "
7340         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7341         val="$undef"
7342         case "$i_sysstat" in
7343         "$define" )
7344                 $cat >try.c <<EOCP
7345 #include <sys/types.h>
7346 #include <sys/stat.h>
7347 ino64_t foo() { ino64_t x; x = 7; return x; }'
7348 EOCP
7349                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7350                         val="$define"
7351                 fi
7352                 $rm -f try.*
7353                 ;;
7354         esac
7355         if $test "X$val" = X"$define"; then
7356                 echo " Yup, it does." >&4
7357         else
7358                 echo " Nope, it doesn't." >&4
7359         fi
7360         set d_ino64_t
7361         eval $setvar
7362
7363         : check for struct flock64
7364         echo " "
7365         echo "Checking to see if your system supports struct flock64..." >&4
7366         if $h_fcntl; then
7367                 set d_flock64_s flock64 l_len define fcntl.h
7368                 eval $hasfield
7369         else
7370                 val="$undef"
7371                 set d_flock64_s
7372                 eval $setvar
7373         fi
7374         case "$d_flock64_s" in
7375         "$define")      echo "Yup, it does." >&4
7376                         ;;
7377         *)              echo "Nope, it doesn't." >&4
7378                         ;;
7379         esac
7380
7381         : check for struct dirent64
7382         echo " "
7383         echo "Checking to see if your system supports struct dirent64..." >&4
7384         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7385         eval $hasfield
7386         case "$d_dirent64_s" in
7387         "$define")      echo "Yup, it does." >&4
7388                         ;;
7389         *)              echo "Nope, it doesn't." >&4
7390                         ;;
7391         esac
7392
7393 else
7394         val="$undef"
7395         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
7396         do
7397                 set $xxx
7398                 eval $setvar
7399         done
7400 fi
7401
7402 : see if dlerror exists
7403 xxx_runnm="$runnm"
7404 runnm=false
7405 set dlerror d_dlerror
7406 eval $inlibc
7407 runnm="$xxx_runnm"
7408
7409 : see if dlfcn is available
7410 set dlfcn.h i_dlfcn
7411 eval $inhdr
7412
7413 case "$usedl" in
7414 $define|y|true)
7415         $cat << EOM
7416
7417 On a few systems, the dynamically loaded modules that perl generates and uses
7418 will need a different extension than shared libs. The default will probably
7419 be appropriate.
7420
7421 EOM
7422         case "$dlext" in
7423         '')     dflt="$so" ;;
7424         *)      dflt="$dlext" ;;
7425         esac
7426         rp='What is the extension of dynamically loaded modules'
7427         . ./myread
7428         dlext="$ans"
7429         ;;
7430 *)
7431         dlext="none"
7432         ;;
7433 esac
7434
7435 : Check if dlsym need a leading underscore
7436 echo " "
7437 val="$undef"
7438
7439 case "$dlsrc" in
7440 dl_dlopen.xs)
7441         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7442         $cat >dyna.c <<'EOM'
7443 fred () { }
7444 EOM
7445
7446 $cat >fred.c<<EOM
7447
7448 #include <stdio.h>
7449 #$i_dlfcn I_DLFCN
7450 #ifdef I_DLFCN
7451 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7452 #else
7453 #include <sys/types.h>
7454 #include <nlist.h>
7455 #include <link.h>
7456 #endif
7457
7458 extern int fred() ;
7459
7460 int main()
7461 {
7462     void * handle ;
7463     void * symbol ;
7464 #ifndef RTLD_LAZY
7465     int mode = 1 ;
7466 #else
7467     int mode = RTLD_LAZY ;
7468 #endif
7469     handle = dlopen("./dyna.$dlext", mode) ;
7470     if (handle == NULL) {
7471         printf ("1\n") ;
7472         fflush (stdout) ;
7473         exit(0);
7474     }
7475     symbol = dlsym(handle, "fred") ;
7476     if (symbol == NULL) {
7477         /* try putting a leading underscore */
7478         symbol = dlsym(handle, "_fred") ;
7479         if (symbol == NULL) {
7480             printf ("2\n") ;
7481             fflush (stdout) ;
7482             exit(0);
7483         }
7484         printf ("3\n") ;
7485     }
7486     else
7487         printf ("4\n") ;
7488     fflush (stdout) ;
7489     exit(0);
7490 }
7491 EOM
7492         : Call the object file tmp-dyna.o in case dlext=o.
7493         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7494                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7495                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7496                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7497                 xxx=`./fred`
7498                 case $xxx in
7499                 1)      echo "Test program failed using dlopen." >&4
7500                         echo "Perhaps you should not use dynamic loading." >&4;;
7501                 2)      echo "Test program failed using dlsym." >&4
7502                         echo "Perhaps you should not use dynamic loading." >&4;;
7503                 3)      echo "dlsym needs a leading underscore" >&4
7504                         val="$define" ;;
7505                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7506                 esac
7507         else
7508                 echo "I can't compile and run the test program." >&4
7509         fi
7510         ;;
7511 esac
7512                 
7513 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7514
7515 set d_dlsymun
7516 eval $setvar
7517
7518 hasproto='varname=$1; func=$2; shift; shift;
7519 while $test $# -ge 2; do
7520         case "$1" in
7521         $define) echo "#include <$2>";;
7522         esac ;
7523     shift 2;
7524 done > try.c;
7525 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7526 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7527         echo "$func() prototype found.";
7528         val="$define";
7529 else
7530         echo "$func() prototype NOT found.";
7531         val="$undef";
7532 fi;
7533 set $varname;
7534 eval $setvar;
7535 $rm -f try.c tryout.c'
7536
7537 : see if prototype for drand48 is available
7538 echo " "
7539 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7540 eval $hasproto
7541
7542 : see if dup2 exists
7543 set dup2 d_dup2
7544 eval $inlibc
7545
7546 : see if eaccess exists
7547 set eaccess d_eaccess
7548 eval $inlibc
7549
7550 : see if endgrent exists
7551 set endgrent d_endgrent
7552 eval $inlibc
7553
7554 : see if endhostent exists
7555 set endhostent d_endhent
7556 eval $inlibc
7557
7558 : see if endnetent exists
7559 set endnetent d_endnent
7560 eval $inlibc
7561
7562 : see if endprotoent exists
7563 set endprotoent d_endpent
7564 eval $inlibc
7565
7566 : see if endpwent exists
7567 set endpwent d_endpwent
7568 eval $inlibc
7569
7570 : see if endservent exists
7571 set endservent d_endsent
7572 eval $inlibc
7573
7574 : see if endspent exists
7575 set endspent d_endspent
7576 eval $inlibc
7577
7578 : Locate the flags for 'open()'
7579 echo " "
7580 $cat >open3.c <<'EOCP'
7581 #include <sys/types.h>
7582 #ifdef I_FCNTL
7583 #include <fcntl.h>
7584 #endif
7585 #ifdef I_SYS_FILE
7586 #include <sys/file.h>
7587 #endif
7588 int main() {
7589         if(O_RDONLY);
7590 #ifdef O_TRUNC
7591         exit(0);
7592 #else
7593         exit(1);
7594 #endif
7595 }
7596 EOCP
7597 : check sys/file.h first to get FREAD on Sun
7598 if $test `./findhdr sys/file.h` && \
7599                 set open3 -DI_SYS_FILE && eval $compile; then
7600         h_sysfile=true;
7601         echo "<sys/file.h> defines the O_* constants..." >&4
7602         if ./open3; then
7603                 echo "and you have the 3 argument form of open()." >&4
7604                 val="$define"
7605         else
7606                 echo "but not the 3 argument form of open().  Oh, well." >&4
7607                 val="$undef"
7608         fi
7609 elif $test `./findhdr fcntl.h` && \
7610                 set open3 -DI_FCNTL && eval $compile; then
7611         h_fcntl=true;
7612         echo "<fcntl.h> defines the O_* constants..." >&4
7613         if ./open3; then
7614                 echo "and you have the 3 argument form of open()." >&4
7615                 val="$define"
7616         else
7617                 echo "but not the 3 argument form of open().  Oh, well." >&4
7618                 val="$undef"
7619         fi
7620 else
7621         val="$undef"
7622         echo "I can't find the O_* constant definitions!  You got problems." >&4
7623 fi
7624 set d_open3
7625 eval $setvar
7626 $rm -f open3*
7627
7628 : check for non-blocking I/O stuff
7629 case "$h_sysfile" in
7630 true) echo "#include <sys/file.h>" > head.c;;
7631 *)
7632         case "$h_fcntl" in
7633         true) echo "#include <fcntl.h>" > head.c;;
7634         *) echo "#include <sys/fcntl.h>" > head.c;;
7635         esac
7636         ;;
7637 esac
7638 echo " "
7639 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7640 case "$o_nonblock" in
7641 '')
7642         $cat head.c > try.c
7643         $cat >>try.c <<'EOCP'
7644 int main() {
7645 #ifdef O_NONBLOCK
7646         printf("O_NONBLOCK\n");
7647         exit(0);
7648 #endif
7649 #ifdef O_NDELAY
7650         printf("O_NDELAY\n");
7651         exit(0);
7652 #endif
7653 #ifdef FNDELAY
7654         printf("FNDELAY\n");
7655         exit(0);
7656 #endif
7657         exit(0);
7658 }
7659 EOCP
7660         set try
7661         if eval $compile_ok; then
7662                 o_nonblock=`./try`
7663                 case "$o_nonblock" in
7664                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7665                 *) echo "Seems like we can use $o_nonblock.";;
7666                 esac
7667         else
7668                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7669         fi
7670         ;;
7671 *) echo "Using $hint value $o_nonblock.";;
7672 esac
7673 $rm -f try try.* .out core
7674
7675 echo " "
7676 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7677 case "$eagain" in
7678 '')
7679         $cat head.c > try.c
7680         $cat >>try.c <<EOCP
7681 #include <errno.h>
7682 #include <sys/types.h>
7683 #include <signal.h>
7684 #define MY_O_NONBLOCK $o_nonblock
7685 #ifndef errno  /* XXX need better Configure test */
7686 extern int errno;
7687 #endif
7688 $signal_t blech(x) int x; { exit(3); }
7689 EOCP
7690         $cat >> try.c <<'EOCP'
7691 int main()
7692 {
7693         int pd[2];
7694         int pu[2];
7695         char buf[1];
7696         char string[100];
7697
7698         pipe(pd);       /* Down: child -> parent */
7699         pipe(pu);       /* Up: parent -> child */
7700         if (0 != fork()) {
7701                 int ret;
7702                 close(pd[1]);   /* Parent reads from pd[0] */
7703                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7704                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7705                         exit(1);
7706                 signal(SIGALRM, blech);
7707                 alarm(5);
7708                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7709                         exit(2);
7710                 sprintf(string, "%d\n", ret);
7711                 write(2, string, strlen(string));
7712                 alarm(0);
7713 #ifdef EAGAIN
7714                 if (errno == EAGAIN) {
7715                         printf("EAGAIN\n");
7716                         goto ok;
7717                 }
7718 #endif
7719 #ifdef EWOULDBLOCK
7720                 if (errno == EWOULDBLOCK)
7721                         printf("EWOULDBLOCK\n");
7722 #endif
7723         ok:
7724                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7725                 sleep(2);                               /* Give it time to close our pipe */
7726                 alarm(5);
7727                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7728                 alarm(0);
7729                 sprintf(string, "%d\n", ret);
7730                 write(3, string, strlen(string));
7731                 exit(0);
7732         }
7733
7734         close(pd[0]);                   /* We write to pd[1] */
7735         close(pu[1]);                   /* We read from pu[0] */
7736         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7737         close(pd[1]);                   /* Pipe pd is now fully closed! */
7738         exit(0);                                /* Bye bye, thank you for playing! */
7739 }
7740 EOCP
7741         set try
7742         if eval $compile_ok; then
7743                 echo "$startsh" >mtry
7744                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7745                 chmod +x mtry
7746                 ./mtry >/dev/null 2>&1
7747                 case $? in
7748                 0) eagain=`$cat try.out`;;
7749                 1) echo "Could not perform non-blocking setting!";;
7750                 2) echo "I did a successful read() for something that was not there!";;
7751                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7752                 *) echo "Something terribly wrong happened during testing.";;
7753                 esac
7754                 rd_nodata=`$cat try.ret`
7755                 echo "A read() system call with no data present returns $rd_nodata."
7756                 case "$rd_nodata" in
7757                 0|-1) ;;
7758                 *)
7759                         echo "(That's peculiar, fixing that to be -1.)"
7760                         rd_nodata=-1
7761                         ;;
7762                 esac
7763                 case "$eagain" in
7764                 '')
7765                         echo "Forcing errno EAGAIN on read() with no data available."
7766                         eagain=EAGAIN
7767                         ;;
7768                 *)
7769                         echo "Your read() sets errno to $eagain when no data is available."
7770                         ;;
7771                 esac
7772                 status=`$cat try.err`
7773                 case "$status" in
7774                 0) echo "And it correctly returns 0 to signal EOF.";;
7775                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7776                 *) echo "However, your read() returns '$status' on EOF??";;
7777                 esac
7778                 val="$define"
7779                 if test "$status" = "$rd_nodata"; then
7780                         echo "WARNING: you can't distinguish between EOF and no data!"
7781                         val="$undef"
7782                 fi
7783         else
7784                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7785                 eagain=EAGAIN
7786         fi
7787         set d_eofnblk
7788         eval $setvar
7789         ;;
7790 *)
7791         echo "Using $hint value $eagain."
7792         echo "Your read() returns $rd_nodata when no data is present."
7793         case "$d_eofnblk" in
7794         "$define") echo "And you can see EOF because read() returns 0.";;
7795         "$undef") echo "But you can't see EOF status from read() returned value.";;
7796         *)
7797                 echo "(Assuming you can't see EOF status from read anyway.)"
7798                 d_eofnblk=$undef
7799                 ;;
7800         esac
7801         ;;
7802 esac
7803 $rm -f try try.* .out core head.c mtry
7804
7805 : see if fchmod exists
7806 set fchmod d_fchmod
7807 eval $inlibc
7808
7809 : see if fchown exists
7810 set fchown d_fchown
7811 eval $inlibc
7812
7813 : see if this is an fcntl system
7814 set fcntl d_fcntl
7815 eval $inlibc
7816
7817 : see if sys/select.h has to be included
7818 set sys/select.h i_sysselct
7819 eval $inhdr
7820
7821 : see if we should include time.h, sys/time.h, or both
7822 echo " "
7823 if test "X$timeincl" = X; then
7824         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7825         $echo $n "I'm now running the test program...$c"
7826         $cat >try.c <<'EOCP'
7827 #include <sys/types.h>
7828 #ifdef I_TIME
7829 #include <time.h>
7830 #endif
7831 #ifdef I_SYSTIME
7832 #ifdef SYSTIMEKERNEL
7833 #define KERNEL
7834 #endif
7835 #include <sys/time.h>
7836 #endif
7837 #ifdef I_SYSSELECT
7838 #include <sys/select.h>
7839 #endif
7840 int main()
7841 {
7842         struct tm foo;
7843 #ifdef S_TIMEVAL
7844         struct timeval bar;
7845 #endif
7846 #ifdef S_TIMEZONE
7847         struct timezone tzp;
7848 #endif
7849         if (foo.tm_sec == foo.tm_sec)
7850                 exit(0);
7851 #ifdef S_TIMEVAL
7852         if (bar.tv_sec == bar.tv_sec)
7853                 exit(0);
7854 #endif
7855         exit(1);
7856 }
7857 EOCP
7858         flags=''
7859         for s_timezone in '-DS_TIMEZONE' ''; do
7860         sysselect=''
7861         for s_timeval in '-DS_TIMEVAL' ''; do
7862         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7863         for i_time in '' '-DI_TIME'; do
7864         for i_systime in '-DI_SYSTIME' ''; do
7865                 case "$flags" in
7866                 '') $echo $n ".$c"
7867                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7868                         if eval $compile; then
7869                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7870                                 shift
7871                                 flags="$*"
7872                                 echo " "
7873                                 $echo $n "Succeeded with $flags$c"
7874                         fi
7875                         ;;
7876                 esac
7877         done
7878         done
7879         done
7880         done
7881         done
7882         timeincl=''
7883         echo " "
7884         case "$flags" in
7885         *SYSTIMEKERNEL*) i_systimek="$define"
7886                 timeincl=`./findhdr sys/time.h`
7887                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7888         *) i_systimek="$undef";;
7889         esac
7890         case "$flags" in
7891         *I_TIME*) i_time="$define"
7892                 timeincl=`./findhdr time.h`" $timeincl"
7893                 echo "We'll include <time.h>." >&4;;
7894         *) i_time="$undef";;
7895         esac
7896         case "$flags" in
7897         *I_SYSTIME*) i_systime="$define"
7898                 timeincl=`./findhdr sys/time.h`" $timeincl"
7899                 echo "We'll include <sys/time.h>." >&4;;
7900         *) i_systime="$undef";;
7901         esac
7902         $rm -f try.c try
7903 fi
7904
7905 : check for fd_set items
7906 $cat <<EOM
7907
7908 Checking to see how well your C compiler handles fd_set and friends ...
7909 EOM
7910 $cat >fd_set.c <<EOCP
7911 #$i_systime I_SYS_TIME
7912 #$i_sysselct I_SYS_SELECT
7913 #$d_socket HAS_SOCKET
7914 #include <sys/types.h>
7915 #ifdef HAS_SOCKET
7916 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7917 #endif
7918 #ifdef I_SYS_TIME
7919 #include <sys/time.h>
7920 #endif
7921 #ifdef I_SYS_SELECT
7922 #include <sys/select.h>
7923 #endif
7924 int main() {
7925         fd_set fds;
7926
7927 #ifdef TRYBITS
7928         if(fds.fds_bits);
7929 #endif
7930
7931 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7932         exit(0);
7933 #else
7934         exit(1);
7935 #endif
7936 }
7937 EOCP
7938 set fd_set -DTRYBITS
7939 if eval $compile; then
7940         d_fds_bits="$define"
7941         d_fd_set="$define"
7942         echo "Well, your system knows about the normal fd_set typedef..." >&4
7943         if ./fd_set; then
7944                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7945                 d_fd_macros="$define"
7946         else
7947                 $cat >&4 <<'EOM'
7948 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7949 EOM
7950                 d_fd_macros="$undef"
7951         fi
7952 else
7953         $cat <<'EOM'
7954 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7955 EOM
7956         set fd_set
7957         if eval $compile; then
7958                 d_fds_bits="$undef"
7959                 d_fd_set="$define"
7960                 echo "Well, your system has some sort of fd_set available..." >&4
7961                 if ./fd_set; then
7962                         echo "and you have the normal fd_set macros." >&4
7963                         d_fd_macros="$define"
7964                 else
7965                         $cat <<'EOM'
7966 but not the normal fd_set macros!  Gross!  More work for me...
7967 EOM
7968                         d_fd_macros="$undef"
7969                 fi
7970         else
7971         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7972                 d_fd_set="$undef"
7973                 d_fds_bits="$undef"
7974                 d_fd_macros="$undef"
7975         fi
7976 fi
7977 $rm -f fd_set*
7978
7979 : see if fgetpos exists
7980 set fgetpos d_fgetpos
7981 eval $inlibc
7982
7983
7984 if $test X"$use64bits" = X"$define"; then
7985         : see if fgetpos64 exists
7986         set fgetpos64 d_fgetpos64
7987         eval $inlibc
7988
7989         : see if fopen64 exists
7990         set freopen64 d_fopen64
7991         eval $inlibc
7992
7993         : see if freopen64 exists
7994         set freopen64 d_freopen64
7995         eval $inlibc
7996
7997         : see if fseek64 exists
7998         set fseek64 d_fseek64
7999         eval $inlibc
8000
8001         : see if fseeko64 exists
8002         set fseeko64 d_fseeko64
8003         eval $inlibc
8004
8005         : see if fsetpos64 exists
8006         set fsetpos64 d_fsetpos64
8007         eval $inlibc
8008
8009         : see if ftell64 exists
8010         set ftell64 d_ftell64
8011         eval $inlibc
8012
8013         : see if ftello64 exists
8014         set ftello64 d_ftello64
8015         eval $inlibc
8016
8017         : see if tmpfile64 exists
8018         set tmpfile64 d_tmpfile64
8019         eval $inlibc
8020 else
8021         val="$undef"
8022         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8023         do
8024                 set $xxx
8025                 eval $setvar
8026         done
8027 fi
8028
8029 : see if flock exists
8030 set flock d_flock
8031 eval $inlibc
8032
8033 : see if fork exists
8034 set fork d_fork
8035 eval $inlibc
8036
8037 : see if pathconf exists
8038 set pathconf d_pathconf
8039 eval $inlibc
8040
8041 : see if fpathconf exists
8042 set fpathconf d_fpathconf
8043 eval $inlibc
8044
8045 : see if fseeko exists
8046 set fseeko d_fseeko
8047 eval $inlibc
8048
8049 : see if fsetpos exists
8050 set fsetpos d_fsetpos
8051 eval $inlibc
8052
8053 : see if this is a sys/param system
8054 set sys/param.h i_sysparam
8055 eval $inhdr
8056
8057 : see if this is a sys/mount.h system
8058 set sys/mount.h i_sysmount
8059 eval $inhdr
8060
8061
8062 : see if statfs exists
8063 set statfs d_statfs
8064 eval $inlibc
8065
8066 : see if fstatfs exists
8067 set fstatfs d_fstatfs
8068 eval $inlibc
8069
8070 : see if statfs knows about mount flags
8071 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8072 eval $hasfield
8073
8074
8075 : see if statvfs exists
8076 set statvfs d_statvfs
8077 eval $inlibc
8078
8079 : see if fstatvfs exists
8080 set fstatvfs d_fstatvfs
8081 eval $inlibc
8082
8083
8084 : see if ftello exists
8085 set ftello d_ftello
8086 eval $inlibc
8087
8088 : see if getgrent exists
8089 set getgrent d_getgrent
8090 eval $inlibc
8091
8092 : see if gethostbyaddr exists
8093 set gethostbyaddr d_gethbyaddr
8094 eval $inlibc
8095
8096 : see if gethostbyname exists
8097 set gethostbyname d_gethbyname
8098 eval $inlibc
8099
8100 : see if gethostent exists
8101 set gethostent d_gethent
8102 eval $inlibc
8103
8104 : see how we will look up host name
8105 echo " "
8106 call=''
8107 if set gethostname val -f d_gethname; eval $csym; $val; then
8108         echo 'gethostname() found.' >&4
8109         d_gethname="$define"
8110         call=gethostname
8111 fi
8112 if set uname val -f d_uname; eval $csym; $val; then
8113         if ./xenix; then
8114                 $cat <<'EOM'
8115 uname() was found, but you're running xenix, and older versions of xenix
8116 have a broken uname(). If you don't really know whether your xenix is old
8117 enough to have a broken system call, use the default answer.
8118
8119 EOM
8120                 dflt=y
8121                 case "$d_uname" in
8122                 "$define") dflt=n;;
8123                 esac
8124                 rp='Is your uname() broken?'
8125                 . ./myread
8126                 case "$ans" in
8127                 n*) d_uname="$define"; call=uname;;
8128                 esac
8129         else
8130                 echo 'uname() found.' >&4
8131                 d_uname="$define"
8132                 case "$call" in
8133                 '') call=uname ;;
8134                 esac
8135         fi
8136 fi
8137 case "$d_gethname" in
8138 '') d_gethname="$undef";;
8139 esac
8140 case "$d_uname" in
8141 '') d_uname="$undef";;
8142 esac
8143 case "$d_uname$d_gethname" in
8144 *define*)
8145         dflt=n
8146         cat <<EOM
8147  
8148 Every now and then someone has a $call() that lies about the hostname
8149 but can't be fixed for political or economic reasons.  If you wish, I can
8150 pretend $call() isn't there and maybe compute hostname at run-time
8151 thanks to the '$phostname' command.
8152
8153 EOM
8154         rp="Shall I ignore $call() from now on?"
8155         . ./myread
8156         case "$ans" in
8157         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8158         esac;;
8159 esac
8160 case "$phostname" in
8161 '') aphostname='';;
8162 *) case "$aphostname" in
8163         /*) ;;
8164         *) set X $phostname
8165                 shift
8166                 file=$1
8167                 shift
8168                 file=`./loc $file $file $pth`
8169                 aphostname=`echo $file $*`
8170                 ;;
8171         esac
8172         ;;
8173 esac
8174 case "$d_uname$d_gethname" in
8175 *define*) ;;
8176 *)
8177         case "$phostname" in
8178         '')
8179                 echo "There will be no way for $package to get your hostname." >&4;;
8180         *)
8181         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8182                 ;;
8183         esac;;
8184 esac
8185 case "$d_phostname" in
8186 '') d_phostname="$undef";;
8187 esac
8188
8189 : see if this is a netdb.h system
8190 set netdb.h i_netdb
8191 eval $inhdr
8192
8193 : see if prototypes for various gethostxxx netdb.h functions are available
8194 echo " "
8195 set d_gethostprotos gethostent $i_netdb netdb.h
8196 eval $hasproto
8197
8198 : see if getlogin exists
8199 set getlogin d_getlogin
8200 eval $inlibc
8201
8202 : see if getmntent exists
8203 set getmntent d_getmntent
8204 eval $inlibc
8205
8206 : see if getnetbyaddr exists
8207 set getnetbyaddr d_getnbyaddr
8208 eval $inlibc
8209
8210 : see if getnetbyname exists
8211 set getnetbyname d_getnbyname
8212 eval $inlibc
8213
8214 : see if getnetent exists
8215 set getnetent d_getnent
8216 eval $inlibc
8217
8218 : see if prototypes for various getnetxxx netdb.h functions are available
8219 echo " "
8220 set d_getnetprotos getnetent $i_netdb netdb.h
8221 eval $hasproto
8222
8223
8224 : see if getprotobyname exists
8225 set getprotobyname d_getpbyname
8226 eval $inlibc
8227
8228 : see if getprotobynumber exists
8229 set getprotobynumber d_getpbynumber
8230 eval $inlibc
8231
8232 : see if getprotoent exists
8233 set getprotoent d_getpent
8234 eval $inlibc
8235
8236 : see if getpgid exists
8237 set getpgid d_getpgid
8238 eval $inlibc
8239
8240 : see if getpgrp2 exists
8241 set getpgrp2 d_getpgrp2
8242 eval $inlibc
8243
8244 : see if getppid exists
8245 set getppid d_getppid
8246 eval $inlibc
8247
8248 : see if getpriority exists
8249 set getpriority d_getprior
8250 eval $inlibc
8251
8252 : see if prototypes for various getprotoxxx netdb.h functions are available
8253 echo " "
8254 set d_getprotoprotos getprotoent $i_netdb netdb.h
8255 eval $hasproto
8256
8257 : see if getpwent exists
8258 set getpwent d_getpwent
8259 eval $inlibc
8260
8261
8262 : see if getservbyname exists
8263 set getservbyname d_getsbyname
8264 eval $inlibc
8265
8266 : see if getservbyport exists
8267 set getservbyport d_getsbyport
8268 eval $inlibc
8269
8270 : see if getservent exists
8271 set getservent d_getsent
8272 eval $inlibc
8273
8274 : see if prototypes for various getservxxx netdb.h functions are available
8275 echo " "
8276 set d_getservprotos getservent $i_netdb netdb.h
8277 eval $hasproto
8278
8279 : see if getspent exists
8280 set getspent d_getspent
8281 eval $inlibc
8282
8283 : see if getspnam exists
8284 set getspnam d_getspnam
8285 eval $inlibc
8286
8287 : see if gettimeofday or ftime exists
8288 set gettimeofday d_gettimeod
8289 eval $inlibc
8290 case "$d_gettimeod" in
8291 "$undef")
8292         set ftime d_ftime 
8293         eval $inlibc
8294         ;;
8295 *)
8296         val="$undef"; set d_ftime; eval $setvar
8297         ;;
8298 esac
8299 case "$d_gettimeod$d_ftime" in
8300 "$undef$undef")
8301         echo " "
8302         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8303         ;;
8304 esac
8305
8306 : see if this is an grp system
8307 set grp.h i_grp
8308 eval $inhdr
8309
8310 case "$i_grp" in
8311 $define)
8312         xxx=`./findhdr grp.h`
8313         $cppstdin $cppflags $cppminus < $xxx >$$.h
8314
8315         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8316                 val="$define"
8317         else
8318                 val="$undef"
8319         fi
8320         set d_grpasswd
8321         eval $setvar
8322
8323         $rm -f $$.h
8324         ;;
8325 *)
8326         val="$undef";
8327         set d_grpasswd; eval $setvar
8328         ;;
8329 esac
8330
8331 : see if hasmntopt exists
8332 set hasmntopt d_hasmntopt
8333 eval $inlibc
8334
8335 : see if this is a netinet/in.h or sys/in.h system
8336 set netinet/in.h i_niin sys/in.h i_sysin
8337 eval $inhdr
8338
8339 : see if arpa/inet.h has to be included
8340 set arpa/inet.h i_arpainet
8341 eval $inhdr
8342
8343 : see if htonl --and friends-- exists
8344 val=''
8345 set htonl val
8346 eval $inlibc
8347
8348 : Maybe they are macros.
8349 case "$val" in
8350 $undef)
8351         $cat >htonl.c <<EOM
8352 #include <stdio.h>
8353 #include <sys/types.h>
8354 #$i_niin I_NETINET_IN
8355 #$i_sysin I_SYS_IN
8356 #$i_arpainet I_ARPA_INET
8357 #ifdef I_NETINET_IN
8358 #include <netinet/in.h>
8359 #endif
8360 #ifdef I_SYS_IN
8361 #include <sys/in.h>
8362 #endif
8363 #ifdef I_ARPA_INET
8364 #include <arpa/inet.h>
8365 #endif
8366 #ifdef htonl
8367 printf("Defined as a macro.");
8368 #endif
8369 EOM
8370         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8371         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8372                 val="$define"
8373                 echo "But it seems to be defined as a macro." >&4
8374         fi
8375         $rm -f htonl.?
8376         ;;
8377 esac
8378 set d_htonl
8379 eval $setvar
8380
8381 : see which of string.h or strings.h is needed
8382 echo " "
8383 strings=`./findhdr string.h`
8384 if $test "$strings" && $test -r "$strings"; then
8385         echo "Using <string.h> instead of <strings.h>." >&4
8386         val="$define"
8387 else
8388         val="$undef"
8389         strings=`./findhdr strings.h`
8390         if $test "$strings" && $test -r "$strings"; then
8391                 echo "Using <strings.h> instead of <string.h>." >&4
8392         else
8393                 echo "No string header found -- You'll surely have problems." >&4
8394         fi
8395 fi
8396 set i_string
8397 eval $setvar
8398 case "$i_string" in
8399 "$undef") strings=`./findhdr strings.h`;;
8400 *)        strings=`./findhdr string.h`;;
8401 esac
8402
8403 : index or strchr
8404 echo " "
8405 if set index val -f; eval $csym; $val; then
8406         if set strchr val -f d_strchr; eval $csym; $val; then
8407                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8408                         val="$define"
8409                         vali="$undef"
8410                         echo "strchr() found." >&4
8411                 else
8412                         val="$undef"
8413                         vali="$define"
8414                         echo "index() found." >&4
8415                 fi
8416         else
8417                 val="$undef"
8418                 vali="$define"
8419                 echo "index() found." >&4
8420         fi
8421 else
8422         if set strchr val -f d_strchr; eval $csym; $val; then
8423                 val="$define"
8424                 vali="$undef"
8425                 echo "strchr() found." >&4
8426         else
8427                 echo "No index() or strchr() found!" >&4
8428                 val="$undef"
8429                 vali="$undef"
8430         fi
8431 fi
8432 set d_strchr; eval $setvar
8433 val="$vali"
8434 set d_index; eval $setvar
8435
8436 : check whether inet_aton exists
8437 set inet_aton d_inetaton
8438 eval $inlibc
8439
8440 : see if inttypes.h is available
8441 : we want a real compile instead of Inhdr because some systems
8442 : have an inttypes.h which includes non-existent headers
8443 echo " "
8444 $cat >try.c <<EOCP
8445 #include <inttypes.h>
8446 int main() {
8447         static int32_t foo32 = 0x12345678;
8448 }
8449 EOCP
8450 set try
8451 if eval $compile; then
8452         echo "<inttypes.h> found." >&4
8453         val="$define"
8454 else
8455         echo "<inttypes.h> NOT found." >&4
8456         val="$undef"
8457 fi
8458 $rm -f try.c try
8459 set i_inttypes
8460 eval $setvar
8461
8462 : check for int64_t
8463 case "$use64bits" in
8464 "$define" )
8465         echo " "
8466         echo $n "Checking to see if your system supports int64_t...$c" >&4
8467         $cat >try.c <<EOCP
8468 #include <sys/types.h>
8469 #$i_inttypes I_INTTYPES
8470 #ifdef I_INTTYPES
8471 #include <inttypes.h>
8472 #endif
8473 int64_t foo() { int64_t x; x = 7; return x; }
8474 EOCP
8475         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8476                 val="$define"
8477                 echo " Yup, it does." >&4
8478         else
8479                 val="$undef"
8480                 echo " Nope, it doesn't." >&4
8481         fi
8482         $rm -f try.*
8483         ;;
8484 *)      val="$undef"
8485         ;;
8486 esac
8487 set d_int64t
8488 eval $setvar
8489
8490
8491 : Look for isascii
8492 echo " "
8493 $cat >isascii.c <<'EOCP'
8494 #include <stdio.h>
8495 #include <ctype.h>
8496 int main() {
8497         int c = 'A';
8498         if (isascii(c))
8499                 exit(0);
8500         else
8501                 exit(1);
8502 }
8503 EOCP
8504 set isascii
8505 if eval $compile; then
8506         echo "isascii() found." >&4
8507         val="$define"
8508 else
8509         echo "isascii() NOT found." >&4
8510         val="$undef"
8511 fi
8512 set d_isascii
8513 eval $setvar
8514 $rm -f isascii*
8515
8516 : see if killpg exists
8517 set killpg d_killpg
8518 eval $inlibc
8519
8520 : see if lchown exists
8521 echo " "
8522 $cat > try.c <<'EOCP'
8523 /* System header to define __stub macros and hopefully few prototypes,
8524     which can conflict with char lchown(); below.  */
8525 #include <assert.h>
8526 /* Override any gcc2 internal prototype to avoid an error.  */
8527 /* We use char because int might match the return type of a gcc2
8528    builtin and then its argument prototype would still apply.  */
8529 char lchown();
8530 int main() {
8531     /*  The GNU C library defines this for functions which it implements
8532         to always fail with ENOSYS.  Some functions are actually named
8533         something starting with __ and the normal name is an alias.  */
8534 #if defined (__stub_lchown) || defined (__stub___lchown)
8535 choke me
8536 #else
8537 lchown();
8538 #endif
8539 ; return 0; }
8540 EOCP
8541 set try
8542 if eval $compile; then
8543     $echo "lchown() found." >&4
8544     val="$define"
8545 else
8546     $echo "lchown() NOT found." >&4
8547     val="$undef"
8548 fi
8549 set d_lchown
8550 eval $setvar
8551
8552 : see if link exists
8553 set link d_link
8554 eval $inlibc
8555
8556 : see if localeconv exists
8557 set localeconv d_locconv
8558 eval $inlibc
8559
8560 : see if lockf exists
8561 set lockf d_lockf
8562 eval $inlibc
8563
8564 : check for length of double
8565 echo " "
8566 case "$doublesize" in
8567 '')
8568         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8569         $cat >try.c <<'EOCP'
8570 #include <stdio.h>
8571 int main()
8572 {
8573         printf("%d\n", sizeof(double));
8574 }
8575 EOCP
8576         set try
8577         if eval $compile_ok; then
8578                 doublesize=`./try`
8579                 $echo " $doublesize bytes." >&4
8580         else
8581                 dflt='8'
8582                 echo "(I can't seem to compile the test program.  Guessing...)"
8583                 rp="What is the size of a double precision number (in bytes)?"
8584                 . ./myread
8585                 doublesize="$ans"
8586         fi
8587         ;;
8588 esac
8589 $rm -f try.c try
8590
8591 : check for long doubles
8592 echo " "
8593 echo $n "Checking to see if your system supports long doubles...$c" >&4
8594 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8595 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8596         val="$define"
8597         echo " Yup, it does." >&4
8598 else
8599         val="$undef"
8600         echo " Nope, it doesn't." >&4
8601 fi
8602 $rm try.*
8603 set d_longdbl
8604 eval $setvar
8605
8606 : check for length of long double
8607 case "${d_longdbl}${longdblsize}" in
8608 $define)
8609         echo " "
8610         $echo $n "Checking to see how big your long doubles are...$c" >&4
8611         $cat >try.c <<'EOCP'
8612 #include <stdio.h>
8613 int main()
8614 {
8615         printf("%d\n", sizeof(long double));
8616 }
8617 EOCP
8618         set try
8619         if eval $compile; then
8620                 longdblsize=`./try`
8621                 $echo " $longdblsize bytes." >&4
8622         else
8623                 dflt='8'
8624                 echo " "
8625                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8626                 rp="What is the size of a long double (in bytes)?"
8627                 . ./myread
8628                 longdblsize="$ans"
8629         fi
8630         if $test "X$doublesize" = "X$longdblsize"; then
8631                 echo "(That isn't any different from an ordinary double.)"
8632         fi      
8633         ;;
8634 esac
8635 $rm -f try.c try
8636
8637 : check for long long
8638 echo " "
8639 echo $n "Checking to see if your system supports long long...$c" >&4
8640 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8641 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8642         val="$define"
8643         echo " Yup, it does." >&4
8644 else
8645         val="$undef"
8646         echo " Nope, it doesn't." >&4
8647 fi
8648 $rm try.*
8649 set d_longlong
8650 eval $setvar
8651
8652 : check for length of long long
8653 case "${d_longlong}${longlongsize}" in
8654 $define)
8655         echo " "
8656         $echo $n "Checking to see how big your long longs are...$c" >&4
8657         $cat >try.c <<'EOCP'
8658 #include <stdio.h>
8659 int main()
8660 {
8661         printf("%d\n", sizeof(long long));
8662 }
8663 EOCP
8664         set try
8665         if eval $compile_ok; then
8666                 longlongsize=`./try`
8667                 $echo " $longlongsize bytes." >&4
8668         else
8669                 dflt='8'
8670                 echo " "
8671                 echo "(I can't seem to compile the test program.  Guessing...)"
8672                 rp="What is the size of a long long (in bytes)?"
8673                 . ./myread
8674                 longlongsize="$ans"
8675         fi
8676         if $test "X$longsize" = "X$longlongsize"; then
8677                 echo "(That isn't any different from an ordinary long.)"
8678         fi      
8679         ;;
8680 esac
8681 $rm -f try.c try
8682
8683 : see if lstat exists
8684 set lstat d_lstat
8685 eval $inlibc
8686
8687 : see if madvise exists
8688 set madvise d_madvise
8689 eval $inlibc
8690
8691 : see if mblen exists
8692 set mblen d_mblen
8693 eval $inlibc
8694
8695 : see if mbstowcs exists
8696 set mbstowcs d_mbstowcs
8697 eval $inlibc
8698
8699 : see if mbtowc exists
8700 set mbtowc d_mbtowc
8701 eval $inlibc
8702
8703 : see if memchr exists
8704 set memchr d_memchr
8705 eval $inlibc
8706
8707 : see if memcmp exists
8708 set memcmp d_memcmp
8709 eval $inlibc
8710
8711 : see if memcpy exists
8712 set memcpy d_memcpy
8713 eval $inlibc
8714
8715 : see if memmove exists
8716 set memmove d_memmove
8717 eval $inlibc
8718
8719 : see if memset exists
8720 set memset d_memset
8721 eval $inlibc
8722
8723 : see if mkdir exists
8724 set mkdir d_mkdir
8725 eval $inlibc
8726
8727 : see if mkfifo exists
8728 set mkfifo d_mkfifo
8729 eval $inlibc
8730
8731 : see if mktime exists
8732 set mktime d_mktime
8733 eval $inlibc
8734
8735 : see if this is a sys/mman.h system
8736 set sys/mman.h i_sysmman
8737 eval $inhdr
8738
8739 : see if mmap exists
8740 set mmap d_mmap
8741 eval $inlibc
8742 : see what shmat returns
8743 : default to something harmless
8744 mmaptype='void *'
8745 case "$i_sysmman$d_mmap" in
8746 "$define$define")
8747         $cat >mmap.c <<'END'
8748 #include <sys/mman.h>
8749 void *mmap();
8750 END
8751         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8752                 mmaptype='void *'
8753         else
8754                 mmaptype='caddr_t'
8755         fi
8756         echo "and it returns ($mmaptype)." >&4
8757         ;;
8758 esac
8759
8760
8761
8762 : see if mprotect exists
8763 set mprotect d_mprotect
8764 eval $inlibc
8765
8766 : see if msgctl exists
8767 set msgctl d_msgctl
8768 eval $inlibc
8769
8770 : see if msgget exists
8771 set msgget d_msgget
8772 eval $inlibc
8773
8774 : see if msgsnd exists
8775 set msgsnd d_msgsnd
8776 eval $inlibc
8777
8778 : see if msgrcv exists
8779 set msgrcv d_msgrcv
8780 eval $inlibc
8781
8782 : see how much of the 'msg*(2)' library is present.
8783 h_msg=true
8784 echo " "
8785 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8786 *"$undef"*) h_msg=false;;
8787 esac
8788 case "$osname" in
8789 freebsd)
8790     case "`ipcs 2>&1`" in
8791     "SVID messages"*"not configured"*)
8792         echo "Your $osname does not have the msg*(2) configured." >&4
8793         h_msg=false
8794         val="$undef"
8795         set msgctl d_msgctl
8796         eval $setvar
8797         set msgget d_msgget
8798         eval $setvar
8799         set msgsnd d_msgsnd
8800         eval $setvar
8801         set msgrcv d_msgrcv
8802         eval $setvar
8803         ;;
8804     esac
8805     ;;
8806 esac
8807 : we could also check for sys/ipc.h ...
8808 if $h_msg && $test `./findhdr sys/msg.h`; then
8809         echo "You have the full msg*(2) library." >&4
8810         val="$define"
8811 else
8812         echo "You don't have the full msg*(2) library." >&4
8813         val="$undef"
8814 fi
8815 set d_msg
8816 eval $setvar
8817
8818 : see if msync exists
8819 set msync d_msync
8820 eval $inlibc
8821
8822 : see if munmap exists
8823 set munmap d_munmap
8824 eval $inlibc
8825
8826 : see if nice exists
8827 set nice d_nice
8828 eval $inlibc
8829
8830 : see if POSIX threads are available
8831 if test "X$usethreads" = "X$define"; then
8832         set pthread.h i_pthread
8833         eval $inhdr
8834 else
8835         i_pthread="$undef"
8836 fi
8837
8838
8839
8840 : how to create joinable pthreads
8841 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8842         echo " "
8843         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8844         $cat >try.c <<'EOCP'
8845 #include <pthread.h>
8846 int main() {
8847     int detachstate = JOINABLE;
8848 }
8849 EOCP
8850         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8851         if eval $compile; then
8852                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8853                 val="$undef" # Yes, undef.
8854                 set d_old_pthread_create_joinable
8855                 eval $setvar
8856                 val=""
8857                 set old_pthread_create_joinable
8858                 eval $setvar
8859         else
8860                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8861                 if eval $compile; then
8862                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8863                         val="$define"
8864                         set d_old_pthread_create_joinable
8865                         eval $setvar
8866                         val=PTHREAD_CREATE_UNDETACHED
8867                         set old_pthread_create_joinable
8868                         eval $setvar
8869                 else            
8870                         set try -DJOINABLE=__UNDETACHED
8871                         if eval $compile; then
8872                                 echo "You seem to use __UNDETACHED." >&4
8873                                 val="$define"
8874                                 set d_old_pthread_create_joinable
8875                                 eval $setvar
8876                                 val=__UNDETACHED
8877                                 set old_pthread_create_joinable
8878                                 eval $setvar
8879                         else
8880                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8881                                 val="$define"
8882                                 set d_old_pthread_create_joinable
8883                                 eval $setvar
8884                                 val=0
8885                                 set old_pthread_create_joinable
8886                                 eval $setvar
8887                         fi
8888                 fi
8889         fi
8890         $rm -f try try.*
8891 else
8892     d_old_pthread_create_joinable="$undef"
8893     old_pthread_create_joinable=""
8894 fi
8895
8896 : see if pause exists
8897 set pause d_pause
8898 eval $inlibc
8899
8900 : see if pipe exists
8901 set pipe d_pipe
8902 eval $inlibc
8903
8904 : see if poll exists
8905 set poll d_poll
8906 eval $inlibc
8907
8908
8909 : see whether the various POSIXish _yields exist
8910 $cat >try.c <<EOP
8911 #include <pthread.h>
8912 #include <stdio.h>
8913 int main() {
8914 #ifdef SCHED_YIELD
8915         sched_yield();
8916 #else
8917 #ifdef PTHREAD_YIELD
8918         pthread_yield();
8919 #else
8920 #ifdef PTHREAD_YIELD_NULL
8921         pthread_yield(NULL);
8922 #endif
8923 #endif
8924 #endif
8925 }
8926 EOP
8927 : see if sched_yield exists
8928 set try -DSCHED_YIELD
8929 if eval $compile; then
8930     val="$define"
8931     sched_yield='sched_yield()'
8932 else
8933     val="$undef"
8934 fi
8935 case "$usethreads" in
8936 $define)
8937         case "$val" in
8938         $define) echo 'sched_yield() found.' >&4        ;;
8939         *)       echo 'sched_yield() NOT found.' >&4    ;;
8940         esac
8941 esac
8942 set d_sched_yield
8943 eval $setvar
8944
8945 : see if pthread_yield exists
8946 set try -DPTHREAD_YIELD
8947 if eval $compile; then
8948     val="$define"
8949     case "$sched_yield" in
8950     '') sched_yield='pthread_yield()' ;;
8951     esac
8952 else
8953     set try -DPTHREAD_YIELD_NULL
8954     if eval $compile; then
8955         val="$define"
8956         case "$sched_yield" in
8957         '') sched_yield='pthread_yield(NULL)' ;;
8958         esac
8959     else
8960         val="$undef"
8961     fi
8962 fi
8963 case "$usethreads" in
8964 $define)
8965         case "$val" in
8966         $define) echo 'pthread_yield() found.' >&4      ;;
8967         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8968         esac
8969         ;;
8970 esac
8971 set d_pthread_yield
8972 eval $setvar
8973
8974 case "$sched_yield" in
8975 '') sched_yield=undef ;;
8976 esac
8977
8978 $rm -f try try.*
8979
8980 : see if this is a pwd.h system
8981 set pwd.h i_pwd
8982 eval $inhdr
8983
8984 case "$i_pwd" in
8985 $define)
8986         xxx=`./findhdr pwd.h`
8987         $cppstdin $cppflags $cppminus < $xxx >$$.h
8988
8989         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8990                 val="$define"
8991         else
8992                 val="$undef"
8993         fi
8994         set d_pwquota
8995         eval $setvar
8996
8997         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8998                 val="$define"
8999         else
9000                 val="$undef"
9001         fi
9002         set d_pwage
9003         eval $setvar
9004
9005         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9006                 val="$define"
9007         else
9008                 val="$undef"
9009         fi
9010         set d_pwchange
9011         eval $setvar
9012
9013         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9014                 val="$define"
9015         else
9016                 val="$undef"
9017         fi
9018         set d_pwclass
9019         eval $setvar
9020
9021         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9022                 val="$define"
9023         else
9024                 val="$undef"
9025         fi
9026         set d_pwexpire
9027         eval $setvar
9028
9029         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9030                 val="$define"
9031         else
9032                 val="$undef"
9033         fi
9034         set d_pwcomment
9035         eval $setvar
9036
9037         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9038                 val="$define"
9039         else
9040                 val="$undef"
9041         fi
9042         set d_pwgecos
9043         eval $setvar
9044
9045         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9046                 val="$define"
9047         else
9048                 val="$undef"
9049         fi
9050         set d_pwpasswd
9051         eval $setvar
9052
9053         $rm -f $$.h
9054         ;;
9055 *)
9056         val="$undef"; 
9057         set d_pwquota; eval $setvar
9058         set d_pwage; eval $setvar
9059         set d_pwchange; eval $setvar
9060         set d_pwclass; eval $setvar
9061         set d_pwexpire; eval $setvar
9062         set d_pwcomment; eval $setvar
9063         set d_pwgecos; eval $setvar
9064         set d_pwpasswd; eval $setvar
9065         ;;
9066 esac
9067
9068 : see if readdir and friends exist
9069 set readdir d_readdir
9070 eval $inlibc
9071 set seekdir d_seekdir
9072 eval $inlibc
9073 set telldir d_telldir
9074 eval $inlibc
9075 set rewinddir d_rewinddir
9076 eval $inlibc
9077
9078 : see if readlink exists
9079 set readlink d_readlink
9080 eval $inlibc
9081
9082 : see if readv exists
9083 set readv d_readv
9084 eval $inlibc
9085
9086 : see if rename exists
9087 set rename d_rename
9088 eval $inlibc
9089
9090 : see if rmdir exists
9091 set rmdir d_rmdir
9092 eval $inlibc
9093
9094 : see if memory.h is available.
9095 val=''
9096 set memory.h val
9097 eval $inhdr
9098
9099 : See if it conflicts with string.h
9100 case "$val" in
9101 $define)
9102         case "$strings" in
9103         '') ;;
9104         *)
9105                 $cppstdin $cppflags $cppminus < $strings > mem.h
9106                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9107                         echo " "
9108                         echo "We won't be including <memory.h>."
9109                         val="$undef"
9110                 fi
9111                 $rm -f mem.h
9112                 ;;
9113         esac
9114 esac
9115 set i_memory
9116 eval $setvar
9117
9118 : can bcopy handle overlapping blocks?
9119 val="$undef"
9120 case "$d_bcopy" in
9121 "$define")
9122         echo " "
9123         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9124         $cat >try.c <<EOCP
9125 #$i_memory I_MEMORY
9126 #$i_stdlib I_STDLIB
9127 #$i_string I_STRING
9128 #$i_unistd I_UNISTD
9129 EOCP
9130         $cat >>try.c <<'EOCP'
9131 #include <stdio.h>
9132 #ifdef I_MEMORY
9133 #  include <memory.h>
9134 #endif
9135 #ifdef I_STDLIB
9136 #  include <stdlib.h>
9137 #endif
9138 #ifdef I_STRING
9139 #  include <string.h>
9140 #else
9141 #  include <strings.h>
9142 #endif
9143 #ifdef I_UNISTD
9144 #  include <unistd.h>  /* Needed for NetBSD */
9145 #endif
9146 int main()
9147 {
9148 char buf[128], abc[128];
9149 char *b;
9150 int len;
9151 int off;
9152 int align;
9153
9154 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9155
9156 for (align = 7; align >= 0; align--) {
9157         for (len = 36; len; len--) {
9158                 b = buf+align;
9159                 bcopy(abc, b, len);
9160                 for (off = 1; off <= len; off++) {
9161                         bcopy(b, b+off, len);
9162                         bcopy(b+off, b, len);
9163                         if (bcmp(b, abc, len))
9164                                 exit(1);
9165                 }
9166         }
9167 }
9168 exit(0);
9169 }
9170 EOCP
9171         set try
9172         if eval $compile_ok; then
9173                 if ./try 2>/dev/null; then
9174                         echo "Yes, it can."
9175                         val="$define"
9176                 else
9177                         echo "It can't, sorry."
9178                         case "$d_memmove" in
9179                         "$define") echo "But that's Ok since you have memmove()." ;;
9180                         esac
9181                 fi
9182         else
9183                 echo "(I can't compile the test program, so we'll assume not...)"
9184                 case "$d_memmove" in
9185                 "$define") echo "But that's Ok since you have memmove()." ;;
9186                 esac
9187         fi
9188         ;;
9189 esac
9190 $rm -f try.* try core
9191 set d_safebcpy
9192 eval $setvar
9193
9194 : can memcpy handle overlapping blocks?
9195 val="$undef"
9196 case "$d_memcpy" in
9197 "$define")
9198         echo " "
9199         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9200         $cat >try.c <<EOCP
9201 #$i_memory I_MEMORY
9202 #$i_stdlib I_STDLIB
9203 #$i_string I_STRING
9204 #$i_unistd I_UNISTD
9205 EOCP
9206         $cat >>try.c <<'EOCP'
9207 #include <stdio.h>
9208 #ifdef I_MEMORY
9209 #  include <memory.h>
9210 #endif
9211 #ifdef I_STDLIB
9212 #  include <stdlib.h>
9213 #endif
9214 #ifdef I_STRING
9215 #  include <string.h>
9216 #else
9217 #  include <strings.h>
9218 #endif
9219 #ifdef I_UNISTD
9220 #  include <unistd.h>  /* Needed for NetBSD */
9221 #endif
9222 int main()
9223 {
9224 char buf[128], abc[128];
9225 char *b;
9226 int len;
9227 int off;
9228 int align;
9229
9230 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9231    try to store the string in read-only memory. */
9232 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9233
9234 for (align = 7; align >= 0; align--) {
9235         for (len = 36; len; len--) {
9236                 b = buf+align;
9237                 memcpy(b, abc, len);
9238                 for (off = 1; off <= len; off++) {
9239                         memcpy(b+off, b, len);
9240                         memcpy(b, b+off, len);
9241                         if (memcmp(b, abc, len))
9242                                 exit(1);
9243                 }
9244         }
9245 }
9246 exit(0);
9247 }
9248 EOCP
9249         set try
9250         if eval $compile_ok; then
9251                 if ./try 2>/dev/null; then
9252                         echo "Yes, it can."
9253                         val="$define"
9254                 else
9255                         echo "It can't, sorry."
9256                         case "$d_memmove" in
9257                         "$define") echo "But that's Ok since you have memmove()." ;;
9258                         esac
9259                 fi
9260         else
9261                 echo "(I can't compile the test program, so we'll assume not...)"
9262                 case "$d_memmove" in
9263                 "$define") echo "But that's Ok since you have memmove()." ;;
9264                 esac
9265         fi
9266         ;;
9267 esac
9268 $rm -f try.* try core
9269 set d_safemcpy
9270 eval $setvar
9271
9272 : can memcmp be trusted to compare relative magnitude?
9273 val="$undef"
9274 case "$d_memcmp" in
9275 "$define")
9276         echo " "
9277         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9278         $cat >try.c <<EOCP
9279 #$i_memory I_MEMORY
9280 #$i_stdlib I_STDLIB
9281 #$i_string I_STRING
9282 #$i_unistd I_UNISTD
9283 EOCP
9284         $cat >>try.c <<'EOCP'
9285 #include <stdio.h>
9286 #ifdef I_MEMORY
9287 #  include <memory.h>
9288 #endif
9289 #ifdef I_STDLIB
9290 #  include <stdlib.h>
9291 #endif
9292 #ifdef I_STRING
9293 #  include <string.h>
9294 #else
9295 #  include <strings.h>
9296 #endif
9297 #ifdef I_UNISTD
9298 #  include <unistd.h>  /* Needed for NetBSD */
9299 #endif
9300 int main()
9301 {
9302 char a = -1;
9303 char b = 0;
9304 if ((a < b) && memcmp(&a, &b, 1) < 0)
9305         exit(1);
9306 exit(0);
9307 }
9308 EOCP
9309         set try
9310         if eval $compile_ok; then
9311                 if ./try 2>/dev/null; then
9312                         echo "Yes, it can."
9313                         val="$define"
9314                 else
9315                         echo "No, it can't (it uses signed chars)."
9316                 fi
9317         else
9318                 echo "(I can't compile the test program, so we'll assume not...)"
9319         fi
9320         ;;
9321 esac
9322 $rm -f try.* try core
9323 set d_sanemcmp
9324 eval $setvar
9325
9326 : see if select exists
9327 set select d_select
9328 eval $inlibc
9329
9330 : see if semctl exists
9331 set semctl d_semctl
9332 eval $inlibc
9333
9334 : see if semget exists
9335 set semget d_semget
9336 eval $inlibc
9337
9338 : see if semop exists
9339 set semop d_semop
9340 eval $inlibc
9341
9342 : see how much of the 'sem*(2)' library is present.
9343 h_sem=true
9344 echo " "
9345 case "$d_semctl$d_semget$d_semop" in
9346 *"$undef"*) h_sem=false;;
9347 esac
9348 case "$osname" in
9349 freebsd)
9350     case "`ipcs 2>&1`" in
9351     "SVID messages"*"not configured"*)
9352         echo "Your $osname does not have the sem*(2) configured." >&4
9353         h_sem=false
9354         val="$undef"
9355         set semctl d_semctl
9356         eval $setvar
9357         set semget d_semget
9358         eval $setvar
9359         set semop d_semop
9360         eval $setvar
9361         ;;
9362     esac
9363     ;;
9364 esac
9365 : we could also check for sys/ipc.h ...
9366 if $h_sem && $test `./findhdr sys/sem.h`; then
9367         echo "You have the full sem*(2) library." >&4
9368         val="$define"
9369 else
9370         echo "You don't have the full sem*(2) library." >&4
9371         val="$undef"
9372 fi
9373 set d_sem
9374 eval $setvar
9375
9376 : see whether sys/sem.h defines union semun
9377 echo " "
9378 $cat > try.c <<'END'
9379 #include <sys/types.h>
9380 #include <sys/ipc.h>
9381 #include <sys/sem.h>
9382 int main () { union semun semun; semun.buf = 0; }
9383 END
9384 set try
9385 if eval $compile; then
9386     echo "You have union semun in <sys/sem.h>." >&4
9387     val="$define"
9388 else
9389     echo "You do not have union semun in <sys/sem.h>." >&4
9390     val="$undef"
9391 fi
9392 $rm -f try try.c try.h
9393 set d_union_semun
9394 eval $setvar
9395
9396 : see how to do semctl IPC_STAT
9397 case "$d_sem" in
9398 $define)
9399     : see whether semctl IPC_STAT can use union semun
9400     echo " "
9401     $cat > try.h <<END
9402 #ifndef S_IRUSR
9403 #   ifdef S_IREAD
9404 #       define S_IRUSR S_IREAD
9405 #       define S_IWUSR S_IWRITE
9406 #       define S_IXUSR S_IEXEC
9407 #   else
9408 #       define S_IRUSR 0400
9409 #       define S_IWUSR 0200
9410 #       define S_IXUSR 0100
9411 #   endif
9412 #   define S_IRGRP (S_IRUSR>>3)
9413 #   define S_IWGRP (S_IWUSR>>3)
9414 #   define S_IXGRP (S_IXUSR>>3)
9415 #   define S_IROTH (S_IRUSR>>6)
9416 #   define S_IWOTH (S_IWUSR>>6)
9417 #   define S_IXOTH (S_IXUSR>>6)
9418 #endif
9419 #ifndef S_IRWXU
9420 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9421 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9422 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9423 #endif
9424 END
9425
9426     $cat > try.c <<END
9427 #include <sys/types.h>
9428 #include <sys/ipc.h>
9429 #include <sys/sem.h>
9430 #include <sys/stat.h>
9431 #include <stdio.h>
9432 #include <errno.h>
9433 #include "try.h"
9434 #ifndef errno
9435 extern int errno;
9436 #endif
9437 #$d_union_semun HAS_UNION_SEMUN
9438 int main() {
9439     union semun
9440 #ifndef HAS_UNION_SEMUN
9441     {
9442         int val;
9443         struct semid_ds *buf;
9444         unsigned short *array;
9445     }
9446 #endif
9447     arg;
9448     int sem, st;
9449
9450 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9451     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9452     if (sem > -1) {
9453         struct semid_ds argbuf;
9454         arg.buf = &argbuf;
9455 #       ifdef IPC_STAT
9456         st = semctl(sem, 0, IPC_STAT, arg);
9457         if (st == 0)
9458             printf("semun\n");
9459         else
9460 #       endif /* IPC_STAT */
9461             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9462 #       ifdef IPC_RMID
9463         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9464 #       endif /* IPC_RMID */
9465             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9466     } else
9467 #endif /* IPC_PRIVATE && ... */
9468         printf("semget failed: errno = %d\n", errno);
9469   return 0;
9470 }
9471 END
9472     val="$undef"
9473     set try
9474     if eval $compile; then
9475         xxx=`./try`
9476         case "$xxx" in
9477         semun) val="$define" ;;
9478         esac
9479     fi
9480     $rm -f try try.c
9481     set d_semctl_semun
9482     eval $setvar
9483     case "$d_semctl_semun" in
9484     $define)
9485         echo "You can use union semun for semctl IPC_STAT." >&4
9486         also='also'
9487         ;;
9488     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9489         also=''
9490         ;;
9491     esac
9492
9493     : see whether semctl IPC_STAT can use struct semid_ds pointer
9494     $cat > try.c <<'END'
9495 #include <sys/types.h>
9496 #include <sys/ipc.h>
9497 #include <sys/sem.h>
9498 #include <sys/stat.h>
9499 #include "try.h"
9500 #include <stdio.h>
9501 #include <errno.h>
9502 #ifndef errno
9503 extern int errno;
9504 #endif
9505 int main() {
9506     struct semid_ds arg;
9507     int sem, st;
9508
9509 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9510     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9511     if (sem > -1) {
9512 #       ifdef IPC_STAT
9513         st = semctl(sem, 0, IPC_STAT, &arg);
9514         if (st == 0)
9515             printf("semid_ds\n");
9516         else
9517 #       endif /* IPC_STAT */
9518             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9519 #       ifdef IPC_RMID
9520         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9521 #       endif /* IPC_RMID */
9522             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9523     } else
9524 #endif /* IPC_PRIVATE && ... */
9525         printf("semget failed: errno = %d\n", errno);
9526
9527     return 0;
9528 }
9529 END
9530     val="$undef"
9531     set try
9532     if eval $compile; then
9533         xxx=`./try`
9534         case "$xxx" in
9535         semid_ds) val="$define" ;;
9536         esac
9537     fi
9538     $rm -f try try.c
9539     set d_semctl_semid_ds
9540     eval $setvar
9541     case "$d_semctl_semid_ds" in
9542     $define)
9543         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9544         ;;
9545     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9546         ;;
9547     esac
9548     $rm -f try.h
9549     ;;
9550 *)  val="$undef"
9551
9552     # We do not have the full sem*(2) library, so assume we can not
9553     # use either.
9554
9555     set d_semctl_semun
9556     eval $setvar
9557
9558     set d_semctl_semid_ds
9559     eval $setvar
9560     ;;
9561 esac
9562
9563 : see if setegid exists
9564 set setegid d_setegid
9565 eval $inlibc
9566
9567 : see if seteuid exists
9568 set seteuid d_seteuid
9569 eval $inlibc
9570
9571 : see if setgrent exists
9572 set setgrent d_setgrent
9573 eval $inlibc
9574
9575 : see if sethostent exists
9576 set sethostent d_sethent
9577 eval $inlibc
9578
9579 : see if setlinebuf exists
9580 set setlinebuf d_setlinebuf
9581 eval $inlibc
9582
9583 : see if setlocale exists
9584 set setlocale d_setlocale
9585 eval $inlibc
9586
9587 : see if setnetent exists
9588 set setnetent d_setnent
9589 eval $inlibc
9590
9591 : see if setprotoent exists
9592 set setprotoent d_setpent
9593 eval $inlibc
9594
9595 : see if setpgid exists
9596 set setpgid d_setpgid
9597 eval $inlibc
9598
9599 : see if setpgrp2 exists
9600 set setpgrp2 d_setpgrp2
9601 eval $inlibc
9602
9603 : see if setpriority exists
9604 set setpriority d_setprior
9605 eval $inlibc
9606
9607 : see if setpwent exists
9608 set setpwent d_setpwent
9609 eval $inlibc
9610
9611 : see if setregid exists
9612 set setregid d_setregid
9613 eval $inlibc
9614 set setresgid d_setresgid
9615 eval $inlibc
9616
9617 : see if setreuid exists
9618 set setreuid d_setreuid
9619 eval $inlibc
9620 set setresuid d_setresuid
9621 eval $inlibc
9622
9623 : see if setrgid exists
9624 set setrgid d_setrgid
9625 eval $inlibc
9626
9627 : see if setruid exists
9628 set setruid d_setruid
9629 eval $inlibc
9630
9631 : see if setservent exists
9632 set setservent d_setsent
9633 eval $inlibc
9634
9635 : see if setsid exists
9636 set setsid d_setsid
9637 eval $inlibc
9638
9639 : see if setspent exists
9640 set setspent d_setspent
9641 eval $inlibc
9642
9643 : see if setvbuf exists
9644 set setvbuf d_setvbuf
9645 eval $inlibc
9646
9647 : see if sfio.h is available
9648 set sfio.h i_sfio
9649 eval $inhdr
9650
9651
9652 : see if sfio library is available
9653 case "$i_sfio" in
9654 $define)
9655         val=''
9656         set sfreserve val
9657         eval $inlibc
9658         ;;
9659 *)
9660         val="$undef"
9661         ;;
9662 esac
9663 : Ok, but do we want to use it.
9664 case "$val" in
9665 $define)
9666         case "$usesfio" in
9667         true|$define|[yY]*) dflt='y';;
9668         *) dflt='n';;
9669         esac
9670         echo "$package can use the sfio library, but it is experimental."
9671         rp="You seem to have sfio available, do you want to try using it?"
9672         . ./myread
9673         case "$ans" in
9674         y|Y) ;;
9675         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9676                 val="$undef"
9677                 : Remove sfio from list of libraries to use
9678                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9679                 shift
9680                 libs="$*"
9681                 echo "libs = $libs" >&4
9682                 ;;
9683         esac
9684         ;;
9685 *)      case "$usesfio" in
9686         true|$define|[yY]*)
9687                 echo "Sorry, cannot find sfio on this machine" >&4
9688                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9689                 ;;
9690         esac
9691         ;;
9692 esac
9693 set d_sfio
9694 eval $setvar
9695 case "$d_sfio" in
9696 $define) usesfio='true';;
9697 *) usesfio='false';;
9698 esac
9699
9700 : see if shmctl exists
9701 set shmctl d_shmctl
9702 eval $inlibc
9703
9704 : see if shmget exists
9705 set shmget d_shmget
9706 eval $inlibc
9707
9708 : see if shmat exists
9709 set shmat d_shmat
9710 eval $inlibc
9711 : see what shmat returns
9712 case "$d_shmat" in
9713 "$define")
9714         $cat >shmat.c <<'END'
9715 #include <sys/shm.h>
9716 void *shmat();
9717 END
9718         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9719                 shmattype='void *'
9720         else
9721                 shmattype='char *'
9722         fi
9723         echo "and it returns ($shmattype)." >&4
9724         : see if a prototype for shmat is available
9725         xxx=`./findhdr sys/shm.h`
9726         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9727         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9728                 val="$define"
9729         else
9730                 val="$undef"
9731         fi
9732         $rm -f shmat.[co]
9733         ;;
9734 *)
9735         val="$undef"
9736         ;;
9737 esac
9738 set d_shmatprototype
9739 eval $setvar
9740
9741 : see if shmdt exists
9742 set shmdt d_shmdt
9743 eval $inlibc
9744
9745 : see how much of the 'shm*(2)' library is present.
9746 h_shm=true
9747 echo " "
9748 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9749 *"$undef"*) h_shm=false;;
9750 esac
9751 case "$osname" in
9752 freebsd)
9753     case "`ipcs 2>&1`" in
9754     "SVID shared memory"*"not configured"*)
9755         echo "Your $osname does not have the shm*(2) configured." >&4
9756         h_shm=false
9757         val="$undef"
9758         set shmctl d_shmctl
9759         evat $setvar
9760         set shmget d_shmget
9761         evat $setvar
9762         set shmat d_shmat
9763         evat $setvar
9764         set shmdt d_shmdt
9765         evat $setvar
9766         ;;
9767     esac
9768     ;;
9769 esac
9770 : we could also check for sys/ipc.h ...
9771 if $h_shm && $test `./findhdr sys/shm.h`; then
9772         echo "You have the full shm*(2) library." >&4
9773         val="$define"
9774 else
9775         echo "You don't have the full shm*(2) library." >&4
9776         val="$undef"
9777 fi
9778 set d_shm
9779 eval $setvar
9780
9781 echo " "
9782 : see if we have sigaction
9783 if set sigaction val -f d_sigaction; eval $csym; $val; then
9784         echo 'sigaction() found.' >&4
9785         $cat > try.c <<'EOP'
9786 #include <stdio.h>
9787 #include <sys/types.h>
9788 #include <signal.h>
9789 int main()
9790 {
9791     struct sigaction act, oact;
9792 }
9793 EOP
9794         set try
9795         if eval $compile_ok; then
9796                 val="$define"
9797         else
9798                 echo "But you don't seem to have a useable struct sigaction." >&4
9799                 val="$undef"
9800         fi
9801 else
9802         echo 'sigaction NOT found.' >&4
9803         val="$undef"
9804 fi
9805 set d_sigaction; eval $setvar
9806 $rm -f try try$_o try.c
9807
9808 : see if sigsetjmp exists
9809 echo " "
9810 case "$d_sigsetjmp" in
9811 '')
9812         $cat >try.c <<'EOP'
9813 #include <setjmp.h>
9814 sigjmp_buf env;
9815 int set = 1;
9816 int main()
9817 {
9818         if (sigsetjmp(env,1))
9819                 exit(set);
9820         set = 0;
9821         siglongjmp(env, 1);
9822         exit(1);
9823 }
9824 EOP
9825         set try
9826         if eval $compile; then
9827                 if ./try >/dev/null 2>&1; then
9828                         echo "POSIX sigsetjmp found." >&4
9829                         val="$define"
9830                 else
9831                         $cat >&4 <<EOM
9832 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9833 I'll ignore them.
9834 EOM
9835                         val="$undef"
9836                 fi
9837         else
9838                 echo "sigsetjmp not found." >&4
9839                 val="$undef"
9840         fi
9841         ;;
9842 *) val="$d_sigsetjmp"
9843         case "$d_sigsetjmp" in
9844         $define) echo "POSIX sigsetjmp found." >&4;;
9845         $undef) echo "sigsetjmp not found." >&4;;
9846         esac
9847         ;;
9848 esac
9849 set d_sigsetjmp
9850 eval $setvar
9851 $rm -f try.c try
9852
9853 : see if stat knows about block sizes
9854 echo " "
9855 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9856 eval $hasfield
9857
9858 : see if _ptr and _cnt from stdio act std
9859 echo " "
9860 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9861         echo "(Looks like you have stdio.h from Linux.)"
9862         case "$stdio_ptr" in
9863         '') stdio_ptr='((fp)->_IO_read_ptr)'
9864                 ptr_lval=$define
9865                 ;;
9866         *)      ptr_lval=$d_stdio_ptr_lval;;
9867         esac
9868         case "$stdio_cnt" in
9869         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9870                 cnt_lval=$undef
9871                 ;;
9872         *)      cnt_lval=$d_stdio_cnt_lval;;
9873         esac
9874         case "$stdio_base" in
9875         '') stdio_base='((fp)->_IO_read_base)';;
9876         esac
9877         case "$stdio_bufsiz" in
9878         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9879         esac
9880 else
9881         case "$stdio_ptr" in
9882         '') stdio_ptr='((fp)->_ptr)'
9883                 ptr_lval=$define
9884                 ;;
9885         *)      ptr_lval=$d_stdio_ptr_lval;;
9886         esac
9887         case "$stdio_cnt" in
9888         '') stdio_cnt='((fp)->_cnt)'
9889                 cnt_lval=$define
9890                 ;;
9891         *)      cnt_lval=$d_stdio_cnt_lval;;
9892         esac
9893         case "$stdio_base" in
9894         '') stdio_base='((fp)->_base)';;
9895         esac
9896         case "$stdio_bufsiz" in
9897         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9898         esac
9899 fi
9900 : test whether _ptr and _cnt really work
9901 echo "Checking how std your stdio is..." >&4
9902 $cat >try.c <<EOP
9903 #include <stdio.h>
9904 #define FILE_ptr(fp)    $stdio_ptr
9905 #define FILE_cnt(fp)    $stdio_cnt
9906 int main() {
9907         FILE *fp = fopen("try.c", "r");
9908         char c = getc(fp);
9909         if (
9910                 18 <= FILE_cnt(fp) &&
9911                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9912         )
9913                 exit(0);
9914         exit(1);
9915 }
9916 EOP
9917 val="$undef"
9918 set try
9919 if eval $compile; then
9920         if ./try; then
9921                 echo "Your stdio acts pretty std."
9922                 val="$define"
9923         else
9924                 echo "Your stdio isn't very std."
9925         fi
9926 else
9927         echo "Your stdio doesn't appear very std."
9928 fi
9929 $rm -f try.c try
9930 set d_stdstdio
9931 eval $setvar
9932
9933 : Can _ptr be used as an lvalue?
9934 case "$d_stdstdio$ptr_lval" in
9935 $define$define) val=$define ;;
9936 *) val=$undef ;;
9937 esac
9938 set d_stdio_ptr_lval
9939 eval $setvar
9940
9941 : Can _cnt be used as an lvalue?
9942 case "$d_stdstdio$cnt_lval" in
9943 $define$define) val=$define ;;
9944 *) val=$undef ;;
9945 esac
9946 set d_stdio_cnt_lval
9947 eval $setvar
9948
9949 : see if _base is also standard
9950 val="$undef"
9951 case "$d_stdstdio" in
9952 $define)
9953         $cat >try.c <<EOP
9954 #include <stdio.h>
9955 #define FILE_base(fp)   $stdio_base
9956 #define FILE_bufsiz(fp) $stdio_bufsiz
9957 int main() {
9958         FILE *fp = fopen("try.c", "r");
9959         char c = getc(fp);
9960         if (
9961                 19 <= FILE_bufsiz(fp) &&
9962                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9963         )
9964                 exit(0);
9965         exit(1);
9966 }
9967 EOP
9968         set try
9969         if eval $compile; then
9970                 if ./try; then
9971                         echo "And its _base field acts std."
9972                         val="$define"
9973                 else
9974                         echo "But its _base field isn't std."
9975                 fi
9976         else
9977                 echo "However, it seems to be lacking the _base field."
9978         fi
9979         $rm -f try.c try
9980         ;;
9981 esac
9982 set d_stdiobase
9983 eval $setvar
9984
9985 $cat >&4 <<EOM
9986 Checking how to access stdio streams by file descriptor number...
9987 EOM
9988 case "$stdio_stream_array" in
9989 '')     $cat >try.c <<EOCP
9990 #include <stdio.h>
9991 int main() {
9992   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
9993     printf("yes\n");
9994 }
9995 EOCP
9996         for s in _iob __iob __sF
9997         do
9998                 set try -DSTDIO_STREAM_ARRAY=$s
9999                 if eval $compile; then
10000                         case "`./try$exe_ext`" in
10001                         yes)    stdio_stream_array=$s; break ;;
10002                         esac
10003                 fi
10004         done
10005         $rm -f try.* try$exe_ext
10006 esac
10007 case "$stdio_stream_array" in
10008 '')     $cat >&4 <<EOM
10009 I can't figure out how to access stdio streams by file descriptor number.
10010 EOM
10011         d_stdio_stream_array="$undef"
10012         ;;
10013 *)      $cat >&4 <<EOM
10014 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10015 EOM
10016         d_stdio_stream_array="$define"
10017         ;;
10018 esac
10019
10020 : see if strcoll exists
10021 set strcoll d_strcoll
10022 eval $inlibc
10023
10024 : check for structure copying
10025 echo " "
10026 echo "Checking to see if your C compiler can copy structs..." >&4
10027 $cat >try.c <<'EOCP'
10028 int main()
10029 {
10030         struct blurfl {
10031                 int dyick;
10032         } foo, bar;
10033
10034         foo = bar;
10035 }
10036 EOCP
10037 if $cc -c try.c >/dev/null 2>&1 ; then
10038         val="$define"
10039         echo "Yup, it can."
10040 else
10041         val="$undef"
10042         echo "Nope, it can't."
10043 fi
10044 set d_strctcpy
10045 eval $setvar
10046 $rm -f try.*
10047
10048 : see if strerror and/or sys_errlist[] exist
10049 echo " "
10050 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10051     if set strerror val -f d_strerror; eval $csym; $val; then
10052                 echo 'strerror() found.' >&4
10053                 d_strerror="$define"
10054                 d_strerrm='strerror(e)'
10055                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10056                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10057                         d_syserrlst="$define"
10058                 else
10059                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10060                         d_syserrlst="$undef"
10061                 fi
10062     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10063                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10064                 echo 'strerror() found in string header.' >&4
10065                 d_strerror="$define"
10066                 d_strerrm='strerror(e)'
10067                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10068                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10069                                 d_syserrlst="$define"
10070                 else
10071                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10072                         d_syserrlst="$undef"
10073                 fi
10074     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10075                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10076                 d_strerror="$undef"
10077                 d_syserrlst="$define"
10078                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10079     else
10080                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10081                 d_strerror="$undef"
10082                 d_syserrlst="$undef"
10083                 d_strerrm='"unknown"'
10084     fi
10085 fi
10086
10087 : see if strtod exists
10088 set strtod d_strtod
10089 eval $inlibc
10090
10091 : see if strtol exists
10092 set strtol d_strtol
10093 eval $inlibc
10094
10095 : see if strtoul exists
10096 set strtoul d_strtoul
10097 eval $inlibc
10098
10099 : see if strxfrm exists
10100 set strxfrm d_strxfrm
10101 eval $inlibc
10102
10103 : see if symlink exists
10104 set symlink d_symlink
10105 eval $inlibc
10106
10107 : see if syscall exists
10108 set syscall d_syscall
10109 eval $inlibc
10110
10111 : see if sysconf exists
10112 set sysconf d_sysconf
10113 eval $inlibc
10114
10115 : see if system exists
10116 set system d_system
10117 eval $inlibc
10118
10119 : see if tcgetpgrp exists
10120 set tcgetpgrp d_tcgetpgrp
10121 eval $inlibc
10122
10123 : see if tcsetpgrp exists
10124 set tcsetpgrp d_tcsetpgrp
10125 eval $inlibc
10126
10127 : see if sys/types.h has to be included
10128 set sys/types.h i_systypes
10129 eval $inhdr
10130
10131 : see if prototype for telldir is available
10132 echo " "
10133 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10134 eval $hasproto
10135
10136 : define an is-a-typedef? function
10137 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10138 case "$inclist" in
10139 "") inclist="sys/types.h";;
10140 esac;
10141 eval "varval=\$$var";
10142 case "$varval" in
10143 "")
10144         $rm -f temp.c;
10145         for inc in $inclist; do
10146                 echo "#include <$inc>" >>temp.c;
10147         done;
10148         echo "#ifdef $type" >> temp.c;
10149         echo "printf(\"We have $type\");" >> temp.c;
10150         echo "#endif" >> temp.c;
10151         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10152         if $contains $type temp.E >/dev/null 2>&1; then
10153                 eval "$var=\$type";
10154         else
10155                 eval "$var=\$def";
10156         fi;
10157         $rm -f temp.?;;
10158 *) eval "$var=\$varval";;
10159 esac'
10160
10161 : define an is-a-typedef? function that prompts if the type is not available.
10162 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10163 case "$inclist" in
10164 "") inclist="sys/types.h";;
10165 esac;
10166 eval "varval=\$$var";
10167 case "$varval" in
10168 "")
10169         $rm -f temp.c;
10170         for inc in $inclist; do
10171                 echo "#include <$inc>" >>temp.c;
10172         done;
10173         echo "#ifdef $type" >> temp.c;
10174         echo "printf(\"We have $type\");" >> temp.c;
10175         echo "#endif" >> temp.c;
10176         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10177         echo " " ;
10178         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10179         if $contains $type temp.E >/dev/null 2>&1; then
10180                 echo "$type found." >&4;
10181                 eval "$var=\$type";
10182         else
10183                 echo "$type NOT found." >&4;
10184                 dflt="$def";
10185                 . ./myread ;
10186                 eval "$var=\$ans";
10187         fi;
10188         $rm -f temp.?;;
10189 *) eval "$var=\$varval";;
10190 esac'
10191
10192 : see if this is a sys/times.h system
10193 set sys/times.h i_systimes
10194 eval $inhdr
10195
10196 : see if times exists
10197 echo " "
10198 if set times val -f d_times; eval $csym; $val; then
10199         echo 'times() found.' >&4
10200         d_times="$define"
10201         inc=''
10202         case "$i_systimes" in
10203         "$define") inc='sys/times.h';;
10204         esac
10205         rp="What is the type returned by times() on this system?"
10206         set clock_t clocktype long stdio.h sys/types.h $inc
10207         eval $typedef_ask
10208 else
10209         echo 'times() NOT found, hope that will do.' >&4
10210         d_times="$undef"
10211         clocktype='int'
10212 fi
10213
10214 : see if truncate exists
10215 set truncate d_truncate
10216 eval $inlibc
10217
10218 : see if tzname[] exists
10219 echo " "
10220 if set tzname val -a d_tzname; eval $csym; $val; then
10221         val="$define"
10222         echo 'tzname[] found.' >&4
10223 else
10224         val="$undef"
10225         echo 'tzname[] NOT found.' >&4
10226 fi
10227 set d_tzname
10228 eval $setvar
10229
10230 : see if umask exists
10231 set umask d_umask
10232 eval $inlibc
10233
10234 : backward compatibility for d_hvfork
10235 if test X$d_hvfork != X; then
10236         d_vfork="$d_hvfork"
10237         d_hvfork=''
10238 fi
10239 : see if there is a vfork
10240 val=''
10241 set vfork val
10242 eval $inlibc
10243
10244 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10245 : perl on Solaris 2.x, and probably elsewhere.
10246 case "$val" in
10247 $define)
10248         echo " "
10249         case "$usevfork" in
10250         false) dflt='n';;
10251         *) dflt='y';;
10252         esac
10253         cat <<'EOM'
10254  
10255 Perl can only use a vfork() that doesn't suffer from strict
10256 restrictions on calling functions or modifying global data in
10257 the child.  For example, glibc-2.1 contains such a vfork()
10258 that is unsuitable.  If your system provides a proper fork()
10259 call, chances are that you do NOT want perl to use vfork().
10260
10261 EOM
10262         rp="Do you still want to use vfork()?"
10263         . ./myread
10264         case "$ans" in
10265         y|Y) ;;
10266         *)
10267                 echo "Ok, we won't use vfork()."
10268                 val="$undef"
10269                 ;;
10270         esac
10271         ;;
10272 esac
10273 set d_vfork
10274 eval $setvar
10275 case "$d_vfork" in
10276 $define) usevfork='true';;
10277 *) usevfork='false';;
10278 esac
10279
10280 : see if this is an sysdir system
10281 set sys/dir.h i_sysdir
10282 eval $inhdr
10283
10284 : see if this is an sysndir system
10285 set sys/ndir.h i_sysndir
10286 eval $inhdr
10287
10288 : see if closedir exists
10289 set closedir d_closedir
10290 eval $inlibc
10291
10292 case "$d_closedir" in
10293 "$define")
10294         echo " "
10295         echo "Checking whether closedir() returns a status..." >&4
10296         cat > closedir.c <<EOM
10297 #$i_dirent I_DIRENT             /**/
10298 #$i_sysdir I_SYS_DIR            /**/
10299 #$i_sysndir I_SYS_NDIR          /**/
10300 #$i_systypes I_SYS_TYPES        /**/
10301
10302 #if defined(I_SYS_TYPES)
10303 #include <sys/types.h>
10304 #endif
10305 #if defined(I_DIRENT)
10306 #include <dirent.h>
10307 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10308 #include <sys/dir.h>
10309 #endif
10310 #else
10311 #ifdef I_SYS_NDIR
10312 #include <sys/ndir.h>
10313 #else
10314 #ifdef I_SYS_DIR
10315 #ifdef hp9000s500
10316 #include <ndir.h>       /* may be wrong in the future */
10317 #else
10318 #include <sys/dir.h>
10319 #endif
10320 #endif
10321 #endif
10322 #endif 
10323 int main() { return closedir(opendir(".")); }
10324 EOM
10325         set closedir
10326         if eval $compile_ok; then
10327                 if ./closedir > /dev/null 2>&1 ; then
10328                         echo "Yes, it does."
10329                         val="$undef"
10330                 else
10331                         echo "No, it doesn't."
10332                         val="$define"
10333                 fi
10334         else
10335                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10336                 val="$define"
10337         fi
10338         ;;
10339 *)
10340         val="$undef";
10341         ;;
10342 esac
10343 set d_void_closedir
10344 eval $setvar
10345 $rm -f closedir*
10346 : check for volatile keyword
10347 echo " "
10348 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10349 $cat >try.c <<'EOCP'
10350 int main()
10351 {
10352         typedef struct _goo_struct goo_struct;
10353         goo_struct * volatile goo = ((goo_struct *)0);
10354         struct _goo_struct {
10355                 long long_int;
10356                 int reg_int;
10357                 char char_var;
10358         };
10359         typedef unsigned short foo_t;
10360         char *volatile foo;
10361         volatile int bar;
10362         volatile foo_t blech;
10363         foo = foo;
10364 }
10365 EOCP
10366 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10367         val="$define"
10368         echo "Yup, it does."
10369 else
10370         val="$undef"
10371         echo "Nope, it doesn't."
10372 fi
10373 set d_volatile
10374 eval $setvar
10375 $rm -f try.*
10376
10377 : see if there is a wait4
10378 set wait4 d_wait4
10379 eval $inlibc
10380
10381 : see if waitpid exists
10382 set waitpid d_waitpid
10383 eval $inlibc
10384
10385 : see if wcstombs exists
10386 set wcstombs d_wcstombs
10387 eval $inlibc
10388
10389 : see if wctomb exists
10390 set wctomb d_wctomb
10391 eval $inlibc
10392
10393 : see if writev exists
10394 set writev d_writev
10395 eval $inlibc
10396
10397 : preserve RCS keywords in files with variable substitution, grrr
10398 Date='$Date'
10399 Id='$Id'
10400 Log='$Log'
10401 RCSfile='$RCSfile'
10402 Revision='$Revision'
10403
10404 case "$crosscompile" in
10405 ''|[nN]*) crosscompile="$undef" ;;
10406 esac
10407
10408 case "$osname" in
10409 next|rhapsody) multiarch="$define" ;;
10410 esac
10411 case "$multiarch" in
10412 ''|[nN]*) multiarch="$undef" ;;
10413 esac
10414
10415 : check for alignment requirements
10416 echo " "
10417 case "$crosscompile$multiarch" in
10418 *$define*)
10419         $cat <<EOM
10420 You seem to be either cross-compiling or doing a multiarchitecture build,
10421 skipping the memory alignment check.
10422
10423 EOM
10424         case "$alignbytes" in
10425         '') alignbytes=8 ;;
10426         esac
10427         ;;
10428 *)
10429         case "$alignbytes" in
10430         '') echo "Checking alignment constraints..." >&4
10431                 $cat >try.c <<'EOCP'
10432 struct foobar {
10433         char foo;
10434         double bar;
10435 } try_algn;
10436 int main()
10437 {
10438         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10439 }
10440 EOCP
10441                 set try
10442                 if eval $compile_ok; then
10443                         dflt=`./try`
10444                 else
10445                         dflt='8'
10446                         echo "(I can't seem to compile the test program...)"
10447                 fi
10448                 ;;
10449         *) dflt="$alignbytes"
10450                 ;;
10451         esac
10452         rp="Doubles must be aligned on a how-many-byte boundary?"
10453         . ./myread
10454         alignbytes="$ans"
10455         $rm -f try.c try
10456         ;;
10457 esac
10458
10459
10460 : check for ordering of bytes in a long
10461 echo " "
10462 case "$crosscompile$multiarch" in
10463 *$define*)
10464         $cat <<EOM
10465 You seem to be either cross-compiling or doing a multiarchitecture build,
10466 skipping the byteorder check.
10467
10468 EOM
10469         byteorder=''
10470         ;;
10471 *)
10472         case "$byteorder" in
10473         '')
10474                 $cat <<'EOM'
10475 In the following, larger digits indicate more significance.  A big-endian
10476 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10477 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10478 machines may have weird orders like 3412.  A Cray will report 87654321. If
10479 the test program works the default is probably right.
10480 I'm now running the test program...
10481 EOM
10482                 $cat >try.c <<'EOCP'
10483 #include <stdio.h>
10484 int main()
10485 {
10486         int i;
10487         union {
10488                 unsigned long l;
10489                 char c[sizeof(long)];
10490         } u;
10491
10492         if (sizeof(long) > 4)
10493                 u.l = (0x08070605L << 32) | 0x04030201L;
10494         else
10495                 u.l = 0x04030201L;
10496         for (i = 0; i < sizeof(long); i++)
10497                 printf("%c", u.c[i]+'0');
10498         printf("\n");
10499         exit(0);
10500 }
10501 EOCP
10502                 xxx_prompt=y
10503                 set try
10504                 if eval $compile && ./try > /dev/null; then
10505                         dflt=`./try`
10506                         case "$dflt" in
10507                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10508                                 echo "(The test program ran ok.)"
10509                                 echo "byteorder=$dflt"
10510                                 xxx_prompt=n
10511                         ;;
10512                         ????|????????) echo "(The test program ran ok.)" ;;
10513                         *) echo "(The test program didn't run right for some reason.)" ;;
10514                         esac
10515                 else
10516                         dflt='4321'
10517                         cat <<'EOM'
10518 (I can't seem to compile the test program.  Guessing big-endian...)
10519 EOM
10520                 fi
10521                 case "$xxx_prompt" in
10522                 y)
10523                         rp="What is the order of bytes in a long?"
10524                         . ./myread
10525                         byteorder="$ans"
10526                         ;;
10527                 *)      byteorder=$dflt
10528                         ;;
10529                 esac
10530                 ;;
10531         esac
10532         $rm -f try.c try
10533         ;;
10534 esac
10535
10536
10537 : how do we catenate cpp tokens here?
10538 echo " "
10539 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10540 $cat >cpp_stuff.c <<'EOCP'
10541 #define RCAT(a,b)a/**/b
10542 #define ACAT(a,b)a ## b
10543 RCAT(Rei,ser)
10544 ACAT(Cir,cus)
10545 EOCP
10546 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10547 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10548         echo "Oh!  Smells like ANSI's been here." >&4
10549         echo "We can catify or stringify, separately or together!"
10550         cpp_stuff=42
10551 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10552         echo "Ah, yes!  The good old days!" >&4
10553         echo "However, in the good old days we don't know how to stringify and"
10554         echo "catify at the same time."
10555         cpp_stuff=1
10556 else
10557         $cat >&4 <<EOM
10558 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10559 to have to edit the values of CAT[2-5] in config.h...
10560 EOM
10561         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10562 fi
10563 $rm -f cpp_stuff.*
10564
10565 : see if this is a db.h system
10566 set db.h i_db
10567 eval $inhdr
10568
10569 case "$i_db" in
10570 $define)
10571         : Check db version.
10572         echo " "
10573         echo "Checking Berkeley DB version ..." >&4
10574         $cat >try.c <<EOCP
10575 #$d_const HASCONST
10576 #ifndef HASCONST
10577 #define const
10578 #endif
10579 #include <sys/types.h>
10580 #include <stdio.h>
10581 #include <db.h>
10582 int main()
10583 {
10584 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10585     int Major, Minor, Patch ;
10586     unsigned long Version ;
10587     (void)db_version(&Major, &Minor, &Patch) ;
10588     printf("You have Berkeley DB Version 2 or greater\n");
10589
10590     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10591                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10592     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10593                 Major, Minor, Patch) ;
10594
10595     /* check that db.h & libdb are compatible */
10596     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10597         printf("db.h and libdb are incompatible\n") ;
10598         exit(3);        
10599     }
10600
10601     printf("db.h and libdb are compatible\n") ;
10602
10603     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10604                 + DB_VERSION_PATCH ;
10605
10606     /* needs to be >= 2.3.4 */
10607     if (Version < 2003004) {
10608     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10609         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10610         exit(2);        
10611     }
10612
10613     exit(0);
10614 #else
10615 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10616     printf("You have Berkeley DB Version 1\n");
10617     exit(0);    /* DB version < 2: the coast is clear. */
10618 #else
10619     exit(1);    /* <db.h> not Berkeley DB? */
10620 #endif
10621 #endif
10622 }
10623 EOCP
10624         set try
10625         if eval $compile && ./try; then
10626                 echo 'Looks OK.' >&4
10627         else
10628                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10629                 i_db=$undef
10630                 case " $libs " in
10631                 *"-ldb "*)
10632                         : Remove db from list of libraries to use
10633                         echo "Removing unusable -ldb from library list" >&4
10634                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10635                         shift
10636                         libs="$*"
10637                         echo "libs = $libs" >&4
10638                         ;;
10639                 esac
10640         fi
10641         $rm -f try.*
10642         ;;
10643 esac
10644
10645 case "$i_db" in
10646 define)
10647         : Check the return type needed for hash 
10648         echo " "
10649         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10650         $cat >try.c <<EOCP
10651 #$d_const HASCONST
10652 #ifndef HASCONST
10653 #define const
10654 #endif
10655 #include <sys/types.h>
10656 #include <db.h>
10657
10658 #ifndef DB_VERSION_MAJOR
10659 u_int32_t hash_cb (ptr, size)
10660 const void *ptr;
10661 size_t size;
10662 {
10663 }
10664 HASHINFO info;
10665 int main()
10666 {
10667         info.hash = hash_cb;
10668 }
10669 #endif
10670 EOCP
10671         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10672                 if $contains warning try.out >>/dev/null 2>&1 ; then
10673                         db_hashtype='int'
10674                 else
10675                         db_hashtype='u_int32_t'
10676                 fi
10677         else
10678                 : XXX Maybe we should just give up here.
10679                 db_hashtype=u_int32_t
10680                 $cat try.out >&4
10681                 echo "Help:  I can't seem to compile the db test program." >&4
10682                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10683         fi
10684         $rm -f try.*
10685         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10686         ;;
10687 *)      db_hashtype=u_int32_t
10688         ;;
10689 esac
10690 case "$i_db" in
10691 define)
10692         : Check the return type needed for prefix 
10693         echo " "
10694         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10695         cat >try.c <<EOCP
10696 #$d_const HASCONST
10697 #ifndef HASCONST
10698 #define const
10699 #endif
10700 #include <sys/types.h>
10701 #include <db.h>
10702
10703 #ifndef DB_VERSION_MAJOR
10704 size_t prefix_cb (key1, key2)
10705 const DBT *key1;
10706 const DBT *key2;
10707 {
10708 }
10709 BTREEINFO info;
10710 int main()
10711 {
10712         info.prefix = prefix_cb;
10713 }
10714 #endif
10715 EOCP
10716         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10717                 if $contains warning try.out >>/dev/null 2>&1 ; then
10718                         db_prefixtype='int'
10719                 else
10720                         db_prefixtype='size_t'
10721                 fi
10722         else
10723                 db_prefixtype='size_t'
10724                 : XXX Maybe we should just give up here.
10725                 $cat try.out >&4
10726                 echo "Help:  I can't seem to compile the db test program." >&4
10727                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10728         fi
10729         $rm -f try.*
10730         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10731         ;;
10732 *)      db_prefixtype='size_t'
10733         ;;
10734 esac
10735
10736 : check for void type
10737 echo " "
10738 echo "Checking to see how well your C compiler groks the void type..." >&4
10739 case "$voidflags" in
10740 '')
10741         $cat >try.c <<'EOCP'
10742 #if TRY & 1
10743 void sub() {
10744 #else
10745 sub() {
10746 #endif
10747         extern void moo();      /* function returning void */
10748         void (*goo)();          /* ptr to func returning void */
10749 #if TRY & 8
10750         void *hue;              /* generic ptr */
10751 #endif
10752 #if TRY & 2
10753         void (*foo[10])();
10754 #endif
10755
10756 #if TRY & 4
10757         if(goo == moo) {
10758                 exit(0);
10759         }
10760 #endif
10761         exit(0);
10762 }
10763 int main() { sub(); }
10764 EOCP
10765         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10766                 voidflags=$defvoidused
10767         echo "Good.  It appears to support void to the level $package wants.">&4
10768                 if $contains warning .out >/dev/null 2>&1; then
10769                         echo "However, you might get some warnings that look like this:"
10770                         $cat .out
10771                 fi
10772         else
10773 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10774                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10775                         echo "It supports 1..."
10776                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10777                                 echo "It also supports 2..."
10778                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10779                                         voidflags=7
10780                                         echo "And it supports 4 but not 8 definitely."
10781                                 else
10782                                         echo "It doesn't support 4..."
10783                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10784                                                 voidflags=11
10785                                                 echo "But it supports 8."
10786                                         else
10787                                                 voidflags=3
10788                                                 echo "Neither does it support 8."
10789                                         fi
10790                                 fi
10791                         else
10792                                 echo "It does not support 2..."
10793                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10794                                         voidflags=13
10795                                         echo "But it supports 4 and 8."
10796                                 else
10797                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10798                                                 voidflags=5
10799                                                 echo "And it supports 4 but has not heard about 8."
10800                                         else
10801                                                 echo "However it supports 8 but not 4."
10802                                         fi
10803                                 fi
10804                         fi
10805                 else
10806                         echo "There is no support at all for void."
10807                         voidflags=0
10808                 fi
10809         fi
10810 esac
10811 case "$voidflags" in
10812 "$defvoidused") ;;
10813 *)      $cat >&4 <<'EOM'
10814   Support flag bits are:
10815     1: basic void declarations.
10816     2: arrays of pointers to functions returning void.
10817     4: operations between pointers to and addresses of void functions.
10818     8: generic void pointers.
10819 EOM
10820         dflt="$voidflags";
10821         rp="Your void support flags add up to what?"
10822         . ./myread
10823         voidflags="$ans"
10824         ;;
10825 esac
10826 $rm -f try.* .out
10827
10828
10829 : How can we generate normalized random numbers ?
10830 echo " "
10831 echo "Looking for a random number function..." >&4
10832 case "$randfunc" in
10833 '')
10834         if set drand48 val -f; eval $csym; $val; then
10835                 dflt="drand48"
10836                 echo "Good, found drand48()." >&4
10837         elif set random val -f; eval $csym; $val; then
10838                 dflt="random"
10839                 echo "OK, found random()." >&4
10840         else
10841                 dflt="rand"
10842                 echo "Yick, looks like I have to use rand()." >&4
10843         fi
10844         echo " "
10845         ;;
10846 *)
10847         dflt="$randfunc"
10848         ;;
10849 esac
10850 cont=true
10851
10852 case "$ccflags" in
10853 *-Dmy_rand=*|*-Dmy_srand=*)
10854         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10855         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10856         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10857         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10858         ;;
10859 esac
10860
10861 while $test "$cont"; do
10862         rp="Use which function to generate random numbers?"
10863         . ./myread
10864         if $test "$ans" = "$dflt"; then
10865                 : null
10866         else
10867                 randbits=''
10868         fi
10869         randfunc="$ans"
10870         if set $ans val -f; eval $csym; $val; then
10871                 cont=''
10872         else
10873                 dflt=y
10874                 rp="I cannot find function $ans. Use that name anyway?"
10875                 . ./myread
10876                 dflt=rand
10877                 case "$ans" in
10878                         [yY]*) cont='';;
10879                 esac
10880         fi
10881         case "$cont" in
10882         '')
10883                 case "$randfunc" in
10884                 drand48)
10885                         drand01="drand48()"
10886                         seedfunc="srand48"
10887                         randbits=48
10888                         randseedtype=long
10889                         ;;
10890                 rand|random)
10891                         case "$randbits" in
10892                         '')
10893 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10894                                 $cat >try.c <<EOCP
10895 #$i_unistd I_UNISTD
10896 #$i_stdlib I_STDLIB
10897 #include <stdio.h>
10898 #ifdef I_UNISTD
10899 #  include <unistd.h>
10900 #endif
10901 #ifdef I_STDLIB
10902 #  include <stdlib.h>
10903 #endif
10904 int main()
10905 {
10906         register int i;
10907         register unsigned long tmp;
10908         register unsigned long max = 0L;
10909
10910         for (i = 1000; i; i--) {
10911                 tmp = (unsigned long) $randfunc();
10912                 if (tmp > max) max = tmp;
10913         }
10914         for (i = 0; max; i++)
10915                 max /= 2;
10916         printf("%d\n",i);
10917 }
10918 EOCP
10919                                 set try
10920                                 if eval $compile_ok; then
10921                                         dflt=`try`
10922                                 else
10923                                         dflt='?'
10924                                         echo "(I can't seem to compile the test program...)"
10925                                 fi
10926                                 ;;
10927                         *)
10928                                 dflt="$randbits"
10929                                 ;;
10930                         esac
10931                         rp="How many bits does your $randfunc() function produce?"
10932                         . ./myread
10933                         randbits="$ans"
10934                         $rm -f try.c try
10935                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10936                         seedfunc="s$randfunc"
10937                         randseedtype=unsigned
10938                         ;;
10939                 *)
10940                         dflt="31"
10941                         rp="How many bits does your $randfunc() function produce?"
10942                         . ./myread
10943                         randbits="$ans"
10944                         seedfunc="s$randfunc"
10945                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10946                         if set $seedfunc val -f; eval $csym; $val; then
10947                                 echo "(Using $seedfunc() to seed random generator)"
10948                         else
10949                                 echo "(Warning: no $seedfunc() to seed random generator)"
10950                                 seedfunc=rand
10951                         fi
10952                         randseedtype=unsigned
10953                         ;;
10954                 esac
10955                 ;;
10956         esac
10957 done
10958
10959 echo " "
10960 echo "Determining whether or not we are on an EBCDIC system..." >&4
10961 $cat >tebcdic.c <<'EOM'
10962 int main()
10963 {
10964   if ('M'==0xd4) return 0;
10965   return 1;
10966 }
10967 EOM
10968
10969 val=$undef
10970 set tebcdic
10971 if eval $compile_ok; then
10972         if ./tebcdic; then
10973                 echo "You have EBCDIC." >&4
10974                 val="$define"
10975         else
10976                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10977         fi
10978 else
10979         echo "I'm unable to compile the test program." >&4
10980         echo "I'll assume ASCII or some ISO Latin." >&4
10981 fi
10982 $rm -f tebcdic.c tebcdic
10983 set ebcdic
10984 eval $setvar
10985
10986 $cat >&4 <<EOM
10987 Checking how to flush all pending stdio output...
10988 EOM
10989 # I only know how to find the first 32 possibly open files on SunOS.
10990 # See also hints/sunos_4_1.sh and util.c  --AD
10991 case "$osname" in
10992 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
10993 esac
10994 $cat >>try.c <<EOCP
10995 #include <stdio.h>
10996 #$i_unistd I_UNISTD
10997 #ifdef I_UNISTD
10998 # include <unistd.h>
10999 #endif
11000 #$d_sysconf HAS_SYSCONF
11001 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11002 #ifdef HAS_STDIO_STREAM_ARRAY
11003 # define STDIO_STREAM_ARRAY $stdio_stream_array
11004 #endif
11005 int main() {
11006   FILE* p = fopen("try.out", "w");
11007 #ifdef TRY_FPUTC
11008   fputc('x', p);
11009 #else
11010 # ifdef TRY_FPRINTF
11011   fprintf(p, "x");
11012 # endif
11013 #endif
11014 #ifdef TRY_FFLUSH_NULL
11015   fflush(NULL);
11016 #endif
11017 #ifdef TRY_FFLUSH_ALL
11018   {
11019     long open_max = -1;
11020 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11021     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11022 # else
11023 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11024     open_max = sysconf(_SC_OPEN_MAX);
11025 #  else
11026 #   ifdef FOPEN_MAX
11027     open_max = FOPEN_MAX;
11028 #   else
11029 #    ifdef OPEN_MAX
11030     open_max = OPEN_MAX;
11031 #    else
11032 #     ifdef _NFILE
11033     open_max = _NFILE;
11034 #     endif
11035 #    endif
11036 #   endif
11037 #  endif
11038 # endif 
11039 # ifdef HAS_STDIO_STREAM_ARRAY
11040     if (open_max > 0) {
11041       long i;
11042       for (i = 0; i < open_max; i++)
11043             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11044                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11045                 STDIO_STREAM_ARRAY[i]._flag)
11046                 fflush(&STDIO_STREAM_ARRAY[i]);
11047     }   
11048   }
11049 # endif
11050 #endif
11051   _exit(42);
11052 }
11053 EOCP
11054 : first we have to find out how _not_ to flush
11055 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11056     output=''
11057     set try -DTRY_FPUTC
11058     if eval $compile; then
11059             $rm -f try.out
11060             ./try$exe_ext 2>/dev/null
11061             if $test ! -s try.out -a "X$?" = X42; then
11062                 output=-DTRY_FPUTC
11063             fi
11064     fi
11065     case "$output" in
11066     '')
11067             set try -DTRY_FPRINTF
11068             $rm -f try.out
11069             if eval $compile; then
11070                     $rm -f try.out
11071                     ./try$exe_ext 2>/dev/null
11072                     if $test ! -s try.out -a "X$?" = X42; then
11073                         output=-DTRY_FPRINTF
11074                     fi
11075             fi
11076         ;;
11077     esac
11078 fi
11079 : check for fflush NULL behaviour
11080 case "$fflushNULL" in
11081 '')     set try -DTRY_FFLUSH_NULL $output
11082         if eval $compile; then
11083                 $rm -f try.out
11084                 ./try$exe_ext 2>/dev/null
11085                 code="$?"
11086                 if $test -s try.out -a "X$code" = X42; then
11087                         fflushNULL="`$cat try.out`"
11088                 else
11089                         if $test "X$code" != X42; then
11090                                 $cat >&4 <<EOM
11091 (If this test failed, don't worry, we'll try another method shortly.)
11092 EOM
11093                         fi
11094                 fi
11095         fi
11096         $rm -f core try.core core.try.*
11097         case "$fflushNULL" in
11098         x)      $cat >&4 <<EOM
11099 Your fflush(NULL) works okay.
11100 EOM
11101                 fflushNULL="$define"
11102                 ;;
11103         '')     $cat >&4 <<EOM
11104 Your fflush(NULL) isn't working (contrary to ANSI C).
11105 EOM
11106                 fflushNULL="$undef"
11107                 ;;
11108         *)      $cat >&4 <<EOM
11109 Cannot figure out whether your fflush(NULL) works or not.
11110 I'm assuming it doesn't (contrary to ANSI C).
11111 EOM
11112                 fflushNULL="$undef"
11113                 ;;
11114         esac
11115         ;;
11116 $define|true|[yY]*)
11117         fflushNULL="$define"
11118         ;;
11119 *)
11120         fflushNULL="$undef"
11121         ;;
11122 esac
11123 : check explicit looping only if NULL did not work
11124 case "$fflushNULL" in
11125 "$undef")
11126         : check for fflush all behaviour
11127         case "$fflushall" in
11128         '')     set try -DTRY_FFLUSH_ALL $output
11129                 if eval $compile; then
11130                         $cat >&4 <<EOM
11131 (Now testing the other method--but note that also this may fail.)
11132 EOM
11133                         $rm -f try.out
11134                         ./try$exe_ext 2>/dev/null
11135                         if $test -s try.out -a "X$?" = X42; then
11136                                 fflushall="`$cat try.out`"
11137                         fi
11138                 fi
11139                 $rm -f core try.core core.try.*
11140                 case "$fflushall" in
11141                 x)      $cat >&4 <<EOM
11142 Whew. Flushing explicitly all the stdio streams works.
11143 EOM
11144                         fflushall="$define"
11145                         ;;
11146                 '')     $cat >&4 <<EOM
11147 Sigh. Flushing explicitly all the stdio streams doesn't work.
11148 EOM
11149                         fflushall="$undef"
11150                         ;;
11151                 *)      $cat >&4 <<EOM
11152 Cannot figure out whether flushing stdio streams explicitly works or not.
11153 I'm assuming it doesn't.
11154 EOM
11155                         fflushall="$undef"
11156                         ;;
11157                 esac
11158                 ;;
11159         "$define"|true|[yY]*)
11160                 fflushall="$define"
11161                 ;;
11162         *)
11163                 fflushall="$undef"
11164                 ;;
11165         esac
11166         ;;
11167 *)      fflushall="$undef"      
11168         ;;
11169 esac
11170 case "$fflushNULL$fflushall" in
11171 undefundef)
11172         $cat <<EOM
11173 I cannot figure out how to flush pending stdio output.
11174 EOM
11175         ;;
11176 esac
11177 $rm -f try.* try$exe_ext
11178
11179 : see what type file positions are declared as in the library
11180 rp="What is the type for file position used by fsetpos()?"
11181 set fpos_t fpostype long stdio.h sys/types.h
11182 eval $typedef_ask
11183
11184 : Store the full pathname to the ar program for use in the C program
11185 : Respect a hint or command line value for full_ar.
11186 case "$full_ar" in
11187 '') full_ar=$ar ;;
11188 esac
11189
11190 : Store the full pathname to the sed program for use in the C program
11191 full_sed=$sed
11192
11193 : see what type gids are declared as in the kernel
11194 echo " "
11195 echo "Looking for the type for group ids returned by getgid()."
11196 set gid_t gidtype xxx stdio.h sys/types.h
11197 eval $typedef
11198 case "$gidtype" in
11199 xxx)
11200         xxx=`./findhdr sys/user.h`
11201         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11202         case $1 in
11203         unsigned) dflt="$1 $2" ;;
11204         *) dflt="$1" ;;
11205         esac
11206         ;;
11207 *) dflt="$gidtype";;
11208 esac
11209 case "$gidtype" in
11210 gid_t) echo "gid_t found." ;;
11211 *)      rp="What is the type for group ids returned by getgid()?"
11212         . ./myread
11213         gidtype="$ans"
11214         ;;
11215 esac
11216
11217 : see if getgroups exists
11218 set getgroups d_getgrps
11219 eval $inlibc
11220
11221 : see if setgroups exists
11222 set setgroups d_setgrps
11223 eval $inlibc
11224
11225
11226 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11227 echo " "
11228 case "$d_getgrps$d_setgrps" in
11229 *define*)
11230         case "$groupstype" in
11231         '') dflt="$gidtype" ;;
11232         *)  dflt="$groupstype" ;;
11233         esac
11234         $cat <<EOM
11235 What type of pointer is the second argument to getgroups() and setgroups()?
11236 Usually this is the same as group ids, $gidtype, but not always.
11237
11238 EOM
11239         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11240         . ./myread
11241         groupstype="$ans"
11242         ;;
11243 *)  groupstype="$gidtype";;
11244 esac
11245
11246 : see what type lseek is declared as in the kernel
11247 rp="What is the type used for lseek's offset on this system?"
11248 set off_t lseektype long stdio.h sys/types.h
11249 eval $typedef_ask
11250
11251 echo " "
11252 $echo $n "Checking to see how big your file offsets are...$c" >&4
11253 $cat >try.c <<EOCP
11254 #include <sys/types.h>
11255 #include <stdio.h>
11256 int main()
11257 {
11258         printf("%d\n", sizeof($lseektype));
11259 }
11260 EOCP
11261 set try
11262 if eval $compile_ok; then
11263         lseeksize=`./try`
11264         $echo " $lseeksize bytes." >&4
11265 else
11266         dflt='4'
11267         echo " "
11268         echo "(I can't seem to compile the test program.  Guessing...)"
11269         rp="What is the size of your file offsets (in bytes)?"
11270         . ./myread
11271         lseeksize="$ans"
11272 fi
11273 $rm -f try.c try
11274
11275 echo " "
11276 echo "Checking if your $make program sets \$(MAKE)..." >&4
11277 case "$make_set_make" in
11278 '')
11279         $sed 's/^X //' > testmake.mak << 'EOF'
11280 Xall:
11281 X       @echo 'maketemp="$(MAKE)"'
11282 EOF
11283         case "`$make -f testmake.mak 2>/dev/null`" in
11284         *maketemp=*) make_set_make='#' ;;
11285         *)      make_set_make="MAKE=$make" ;;
11286         esac
11287         $rm -f testmake.mak
11288         ;;
11289 esac
11290 case "$make_set_make" in
11291 '#') echo "Yup, it does.";;
11292 *) echo "Nope, it doesn't.";;
11293 esac
11294
11295 : see what type is used for mode_t
11296 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11297 set mode_t modetype int stdio.h sys/types.h
11298 eval $typedef_ask
11299
11300 : define a fucntion to check prototypes
11301 $cat > protochk <<EOSH
11302 $startsh
11303 cc="$cc"
11304 optimize="$optimize"
11305 ccflags="$ccflags"
11306 prototype="$prototype"
11307 define="$define"
11308 rm=$rm
11309 EOSH
11310
11311 $cat >> protochk <<'EOSH'
11312
11313 $rm -f try.c
11314 foo="$1"
11315 shift
11316 while test $# -ge 2; do
11317         case "$1" in
11318                 $define) echo "#include <$2>" >> try.c ;;
11319                 literal) echo "$2" >> try.c ;;
11320         esac
11321     shift 2
11322 done
11323 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11324 cat >> try.c <<'EOCP'
11325 #ifdef CAN_PROTOTYPE
11326 #define _(args) args
11327 #else
11328 #define _(args) ()
11329 #endif
11330 EOCP
11331 echo "$foo" >> try.c
11332 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11333 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11334 status=$?
11335 $rm -f try.[co]
11336 exit $status
11337 EOSH
11338 chmod +x protochk
11339 $eunicefix protochk
11340
11341 : see what type is used for size_t
11342 rp="What is the type used for the length parameter for string functions?"
11343 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11344 eval $typedef_ask
11345
11346 : check for type of arguments to gethostbyaddr. 
11347 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11348         case "$d_gethbyaddr" in
11349         $define)
11350                 $cat <<EOM
11351
11352 Checking to see what type of arguments are accepted by gethostbyaddr().
11353 EOM
11354                 hdrs="$define sys/types.h
11355                         $d_socket sys/socket.h 
11356                         $i_niin netinet/in.h 
11357                         $i_netdb netdb.h
11358                         $i_unistd unistd.h"
11359                 : The first arg can 'char *' or 'void *'
11360                 : The second arg is some of integral type
11361                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11362                         for yyy in size_t long int; do
11363                                 case "$netdb_host_type" in
11364                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11365                                         if ./protochk "$try" $hdrs; then
11366                                                 echo "Your system accepts $xxx for the first arg."
11367                                                 echo "...and $yyy for the second arg."
11368                                                 netdb_host_type="$xxx"
11369                                                 netdb_hlen_type="$yyy"
11370                                         fi
11371                                         ;;
11372                                 esac
11373                         done
11374                 done
11375                 : In case none of those worked, prompt the user.
11376                 case "$netdb_host_type" in
11377                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11378                         dflt='char *'
11379                         . ./myread
11380                         netdb_host_type=$ans
11381                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11382                         dflt="$sizetype"
11383                         . ./myread
11384                         netdb_hlen_type=$ans
11385                         ;;
11386                 esac
11387                 ;;
11388         *)      : no gethostbyaddr, so pick harmless defaults
11389                 netdb_host_type='char *'
11390                 netdb_hlen_type="$sizetype"
11391                 ;;
11392         esac
11393         # Remove the "const" if needed. -- but then we'll have a 
11394         # prototype clash!
11395         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11396 fi
11397
11398 : check for type of argument to gethostbyname. 
11399 if test "X$netdb_name_type" = X ; then
11400         case "$d_gethbyname" in
11401         $define)
11402                 $cat <<EOM
11403
11404 Checking to see what type of argument is accepted by gethostbyname().
11405 EOM
11406                 hdrs="$define sys/types.h
11407                         $d_socket sys/socket.h 
11408                         $i_niin netinet/in.h 
11409                         $i_netdb netdb.h
11410                         $i_unistd unistd.h"
11411                 for xxx in "const char *" "char *"; do
11412                         case "$netdb_name_type" in
11413                         '')     try="extern struct hostent *gethostbyname($xxx);"
11414                                 if ./protochk "$try" $hdrs; then
11415                                         echo "Your system accepts $xxx."
11416                                         netdb_name_type="$xxx"
11417                                 fi
11418                                 ;;
11419                         esac
11420                 done
11421                 : In case none of those worked, prompt the user.
11422                 case "$netdb_name_type" in
11423                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11424                         dflt='char *'
11425                         . ./myread
11426                         netdb_name_type=$ans
11427                         ;;
11428                 esac
11429                 ;;
11430         *)      : no gethostbyname, so pick harmless default
11431                 netdb_name_type='char *'
11432                 ;;
11433         esac
11434 fi
11435
11436 : check for type of 1st argument to getnetbyaddr. 
11437 if test "X$netdb_net_type" = X ; then
11438         case "$d_getnbyaddr" in
11439         $define)
11440                 $cat <<EOM
11441
11442 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11443 EOM
11444                 hdrs="$define sys/types.h
11445                         $d_socket sys/socket.h 
11446                         $i_niin netinet/in.h 
11447                         $i_netdb netdb.h
11448                         $i_unistd unistd.h"
11449                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11450                         case "$netdb_net_type" in
11451                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11452                                 if ./protochk "$try" $hdrs; then
11453                                         echo "Your system accepts $xxx."
11454                                         netdb_net_type="$xxx"
11455                                 fi
11456                                 ;;
11457                         esac
11458                 done
11459                 : In case none of those worked, prompt the user.
11460                 case "$netdb_net_type" in
11461                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11462                         dflt='long'
11463                         . ./myread
11464                         netdb_net_type=$ans
11465                         ;;
11466                 esac
11467                 ;;
11468         *)      : no getnetbyaddr, so pick harmless default
11469                 netdb_net_type='long'
11470                 ;;
11471         esac
11472 fi
11473 : locate the preferred pager for this system
11474 case "$pager" in
11475 '')
11476         dflt=''
11477         case "$pg" in
11478         /*) dflt=$pg;;
11479         esac
11480         case "$more" in
11481         /*) dflt=$more;;
11482         esac
11483         case "$less" in
11484         /*) dflt=$less;;
11485         esac
11486         case "$dflt" in
11487         '') dflt=/usr/ucb/more;;
11488         esac
11489         ;;
11490 *) dflt="$pager";;
11491 esac
11492 echo " "
11493 fn=f/
11494 rp='What pager is used on your system?'
11495 . ./getfile
11496 pager="$ans"
11497
11498 : see what type pids are declared as in the kernel
11499 rp="What is the type of process ids on this system?"
11500 set pid_t pidtype int stdio.h sys/types.h
11501 eval $typedef_ask
11502
11503 : check for length of pointer
11504 echo " "
11505 case "$ptrsize" in
11506 '')
11507         $echo $n "Checking to see how big your pointers are...$c" >&4
11508         if test "$voidflags" -gt 7; then
11509                 echo '#define VOID_PTR char *' > try.c
11510         else
11511                 echo '#define VOID_PTR void *' > try.c
11512         fi
11513         $cat >>try.c <<'EOCP'
11514 #include <stdio.h>
11515 int main()
11516 {
11517         printf("%d\n", sizeof(VOID_PTR));
11518         exit(0);
11519 }
11520 EOCP
11521         set try
11522         if eval $compile_ok; then
11523                 ptrsize=`./try`
11524                 $echo " $ptrsize bytes." >&4
11525         else
11526                 dflt='4'
11527                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11528                 rp="What is the size of a pointer (in bytes)?"
11529                 . ./myread
11530                 ptrsize="$ans"
11531         fi
11532         ;;
11533 esac
11534 $rm -f try.c try
11535
11536 : see if ar generates random libraries by itself
11537 echo " "
11538 echo "Checking how to generate random libraries on your machine..." >&4
11539 echo 'int bar1() { return bar2(); }' > bar1.c
11540 echo 'int bar2() { return 2; }' > bar2.c
11541 $cat > foo.c <<'EOP'
11542 int main() { printf("%d\n", bar1()); exit(0); }
11543 EOP
11544 $cc $ccflags -c bar1.c >/dev/null 2>&1
11545 $cc $ccflags -c bar2.c >/dev/null 2>&1
11546 $cc $ccflags -c foo.c >/dev/null 2>&1
11547 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11548 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11549         ./foobar >/dev/null 2>&1; then
11550         echo "$ar appears to generate random libraries itself."
11551         orderlib=false
11552         ranlib=":"
11553 elif $ar ts bar$_a >/dev/null 2>&1 &&
11554         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11555         ./foobar >/dev/null 2>&1; then
11556                 echo "a table of contents needs to be added with '$ar ts'."
11557                 orderlib=false
11558                 ranlib="$ar ts"
11559 else
11560         case "$ranlib" in
11561         :) ranlib='';;
11562         '')
11563                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11564                 $test -f $ranlib || ranlib=''
11565                 ;;
11566         esac
11567         if $test -n "$ranlib"; then
11568                 echo "your system has '$ranlib'; we'll use that."
11569                 orderlib=false
11570         else
11571                 echo "your system doesn't seem to support random libraries"
11572                 echo "so we'll use lorder and tsort to order the libraries."
11573                 orderlib=true
11574                 ranlib=":"
11575         fi
11576 fi
11577 $rm -f foo* bar* 
11578
11579 : check for type of arguments to select. 
11580 case "$selecttype" in
11581 '') case "$d_select" in
11582         $define)
11583                 $cat <<EOM
11584 Checking to see what type of arguments are accepted by select().
11585 EOM
11586                 hdrs="$define sys/types.h
11587                         $i_systime sys/time.h 
11588                         $i_sysselct sys/select.h
11589                         $d_socket sys/socket.h"
11590                 : The first arg can be int, unsigned, or size_t
11591                 : The last arg may or may not be 'const'
11592                 val=''
11593                 : void pointer has been seen but using that
11594                 : breaks the selectminbits test
11595                 for xxx in 'fd_set *' 'int *'; do
11596                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11597                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11598                                         case "$val" in
11599                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11600                                                 if ./protochk "$try" $hdrs; then
11601                                                         echo "Your system accepts $xxx."
11602                                                         val="$xxx"
11603                                                 fi
11604                                                 ;;
11605                                         esac
11606                                 done
11607                         done
11608                 done
11609                 case "$val" in
11610                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11611                         case "$d_fd_set" in
11612                                 $define) dflt="fd_set *" ;;
11613                                 *)              dflt="int *" ;;
11614                         esac
11615                         . ./myread
11616                         val=$ans
11617                         ;;
11618                 esac
11619                 selecttype="$val"
11620                 ;;
11621         *)      : no select, so pick a harmless default
11622                 selecttype='int *'
11623                 ;;
11624         esac
11625         ;;
11626 esac
11627
11628 : check for the select 'width'
11629 case "$selectminbits" in
11630 '') case "$d_select" in
11631         $define)
11632                 $cat <<EOM
11633
11634 Checking to see on how many bits at a time your select() operates...
11635 EOM
11636                 $cat >try.c <<EOCP
11637 #include <sys/types.h>
11638 #$i_time I_TIME
11639 #$i_systime I_SYS_TIME
11640 #$i_systimek I_SYS_TIME_KERNEL
11641 #ifdef I_TIME
11642 #   include <time.h>
11643 #endif
11644 #ifdef I_SYS_TIME
11645 #   ifdef I_SYS_TIME_KERNEL
11646 #       define KERNEL
11647 #   endif
11648 #   include <sys/time.h>
11649 #   ifdef I_SYS_TIME_KERNEL
11650 #       undef KERNEL
11651 #   endif
11652 #endif
11653 #$i_sysselct I_SYS_SELECT
11654 #ifdef I_SYS_SELECT
11655 #include <sys/select.h>
11656 #endif
11657 #$d_socket HAS_SOCKET
11658 #ifdef HAS_SOCKET
11659 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11660 #endif
11661 #include <stdio.h>
11662 $selecttype b;
11663 #define S sizeof(*(b))
11664 #define MINBITS 64
11665 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11666 #define NBITS  (NBYTES * 8)
11667 int main() {
11668     char s[NBYTES];
11669     struct timeval t;
11670     int i;
11671     FILE* fp;
11672     int fd;
11673
11674     fclose(stdin);
11675     fp = fopen("try.c", "r");
11676     if (fp == 0)
11677       exit(1);
11678     fd = fileno(fp);
11679     if (fd < 0)
11680       exit(2);
11681     b = ($selecttype)s;
11682     for (i = 0; i < NBITS; i++)
11683         FD_SET(i, b);
11684     t.tv_sec  = 0;
11685     t.tv_usec = 0;
11686     select(fd + 1, b, 0, 0, &t);
11687     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11688     printf("%d\n", i + 1);
11689     return 0;
11690 }
11691 EOCP
11692                 set try
11693                 if eval $compile_ok; then
11694                         selectminbits=`./try`
11695                         case "$selectminbits" in
11696                         '')     cat >&4 <<EOM
11697 Cannot figure out on how many bits at a time your select() operates.
11698 I'll play safe and guess it is 32 bits.
11699 EOM
11700                                 selectminbits=32
11701                                 bits="32 bits"
11702                                 ;;
11703                         1)      bits="1 bit" ;;
11704                         *)      bits="$selectminbits bits" ;;
11705                         esac
11706                         echo "Your select() operates on $bits at a time." >&4
11707                 else
11708                         rp='What is the minimum number of bits your select() operates on?'
11709                         case "$byteorder" in
11710                         1234|12345678)  dflt=32 ;;
11711                         *)              dflt=1  ;;
11712                         esac
11713                         . ./myread
11714                         val=$ans
11715                         selectminbits="$val"
11716                 fi
11717                 $rm -f try.* try
11718                 ;;
11719         *)      : no select, so pick a harmless default
11720                 selectminbits='32'
11721                 ;;
11722         esac
11723         ;;
11724 esac
11725
11726 : Trace out the files included by signal.h, then look for SIGxxx names.
11727 : Remove SIGARRAYSIZE used by HPUX.
11728 : Remove SIGSTKSIZE used by Linux.
11729 : Remove SIGSTKSZ used by Posix.
11730 : Remove SIGTYP void lines used by OS2.
11731 xxx=`echo '#include <signal.h>' |
11732         $cppstdin $cppminus $cppflags 2>/dev/null |
11733         $grep '^[       ]*#.*include' | 
11734         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11735 : Check this list of files to be sure we have parsed the cpp output ok.
11736 : This will also avoid potentially non-existent files, such 
11737 : as ../foo/bar.h
11738 xxxfiles=''
11739 for xx in $xxx /dev/null ; do
11740         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11741 done
11742 : If we have found no files, at least try signal.h
11743 case "$xxxfiles" in
11744 '')     xxxfiles=`./findhdr signal.h` ;;
11745 esac
11746 xxx=`awk '
11747 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11748         print substr($2, 4, 20)
11749 }
11750 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11751         print substr($3, 4, 20)
11752 }' $xxxfiles`
11753 : Append some common names just in case the awk scan failed.
11754 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11755 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11756 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11757 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11758 : generate a few handy files for later
11759 $cat > signal.c <<'EOCP'
11760 #include <sys/types.h>
11761 #include <signal.h>
11762 #include <stdio.h>
11763 int main() {
11764
11765 /* Strange style to avoid deeply-nested #if/#else/#endif */
11766 #ifndef NSIG
11767 #  ifdef _NSIG
11768 #    define NSIG (_NSIG)
11769 #  endif
11770 #endif
11771
11772 #ifndef NSIG
11773 #  ifdef SIGMAX
11774 #    define NSIG (SIGMAX+1)
11775 #  endif
11776 #endif
11777
11778 #ifndef NSIG
11779 #  ifdef SIG_MAX
11780 #    define NSIG (SIG_MAX+1)
11781 #  endif
11782 #endif
11783
11784 #ifndef NSIG
11785 #  ifdef MAXSIG
11786 #    define NSIG (MAXSIG+1)
11787 #  endif
11788 #endif
11789
11790 #ifndef NSIG
11791 #  ifdef MAX_SIG
11792 #    define NSIG (MAX_SIG+1)
11793 #  endif
11794 #endif
11795
11796 #ifndef NSIG
11797 #  ifdef SIGARRAYSIZE
11798 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11799 #  endif
11800 #endif
11801
11802 #ifndef NSIG
11803 #  ifdef _sys_nsig
11804 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11805 #  endif
11806 #endif
11807
11808 /* Default to some arbitrary number that's big enough to get most
11809    of the common signals.
11810 */
11811 #ifndef NSIG
11812 #    define NSIG 50
11813 #endif
11814
11815 printf("NSIG %d\n", NSIG);
11816
11817 #ifndef JUST_NSIG
11818
11819 EOCP
11820
11821 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11822 {
11823         printf "#ifdef SIG"; printf $1; printf "\n"
11824         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11825         printf $1; printf ");\n"
11826         printf "#endif\n"
11827 }
11828 END {
11829         printf "#endif /* JUST_NSIG */\n";
11830         printf "}\n";
11831 }
11832 ' >>signal.c
11833 $cat >signal.awk <<'EOP'
11834 BEGIN { ndups = 0 }
11835 $1 ~ /^NSIG$/ { nsig = $2 }
11836 ($1 !~ /^NSIG$/) && (NF == 2) {
11837     if ($2 > maxsig) { maxsig = $2 }
11838     if (sig_name[$2]) {
11839         dup_name[ndups] = $1
11840         dup_num[ndups] = $2
11841         ndups++ 
11842     }
11843     else {
11844         sig_name[$2] = $1
11845         sig_num[$2] = $2
11846     }
11847 }
11848 END { 
11849     if (nsig == 0) {
11850         nsig = maxsig + 1
11851     }
11852     printf("NSIG %d\n", nsig);
11853     for (n = 1; n < nsig; n++) {
11854         if (sig_name[n]) {
11855             printf("%s %d\n", sig_name[n], sig_num[n])
11856         }
11857         else {
11858             printf("NUM%d %d\n", n, n) 
11859         }
11860     }
11861     for (n = 0; n < ndups; n++) {
11862         printf("%s %d\n", dup_name[n], dup_num[n])
11863     }
11864 }
11865 EOP
11866 $cat >signal_cmd <<EOS
11867 $startsh
11868 if $test -s signal.lst; then
11869     echo "Using your existing signal.lst file"
11870         exit 0
11871 fi
11872 xxx="$xxx"
11873 EOS
11874 $cat >>signal_cmd <<'EOS'
11875
11876 set signal
11877 if eval $compile_ok; then
11878         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11879 else
11880         echo "(I can't seem be able to compile the whole test program)" >&4
11881         echo "(I'll try it in little pieces.)" >&4
11882         set signal -DJUST_NSIG
11883         if eval $compile_ok; then
11884                 ./signal$_exe > signal.nsg
11885                 $cat signal.nsg
11886         else
11887                 echo "I can't seem to figure out how many signals you have." >&4
11888                 echo "Guessing 50." >&4
11889                 echo 'NSIG 50' > signal.nsg
11890         fi
11891         : Now look at all the signal names, one at a time.
11892         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11893                 $cat > signal.c <<EOCP
11894 #include <sys/types.h>
11895 #include <signal.h>
11896 #include <stdio.h>
11897 int main() {
11898 printf("$xx %d\n", SIG${xx});
11899 return 0;
11900 }
11901 EOCP
11902                 set signal
11903                 if eval $compile; then
11904                         echo "SIG${xx} found."
11905                         ./signal$_exe  >> signal.ls1
11906                 else
11907                         echo "SIG${xx} NOT found."
11908                 fi
11909         done
11910         if $test -s signal.ls1; then
11911                 $cat signal.nsg signal.ls1 |
11912                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11913         fi
11914
11915 fi
11916 if $test -s signal.lst; then
11917         :
11918 else
11919         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11920         echo 'kill -l' >signal
11921         set X `csh -f <signal`
11922         $rm -f signal
11923         shift
11924         case $# in
11925         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11926         esac
11927         echo $@ | $tr ' ' $trnl | \
11928             $awk '{ printf "%s %d\n", $1, ++s; }
11929                   END { printf "NSIG %d\n", ++s }' >signal.lst
11930 fi
11931 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11932 EOS
11933 chmod a+x signal_cmd
11934 $eunicefix signal_cmd
11935
11936 : generate list of signal names
11937 echo " "
11938 case "$sig_name_init" in
11939 '') doinit=yes ;;
11940 *)  case "$sig_num_init" in
11941     ''|*,*) doinit=yes ;;
11942     esac ;;
11943 esac
11944 case "$doinit" in
11945 yes)
11946         echo "Generating a list of signal names and numbers..." >&4
11947         . ./signal_cmd
11948         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11949         sig_name=`$awk 'BEGIN { printf "ZERO " }
11950                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11951         sig_num=`$awk  'BEGIN { printf "0 " }
11952                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11953         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11954                              !/^NSIG/   { printf "\"%s\", ", $1 }
11955                              END        { printf "0\n" }' signal.lst`
11956         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11957                              !/^NSIG/   { printf "%d, ", $2}
11958                              END        { printf "0\n"}' signal.lst`
11959         ;;
11960 esac
11961 echo "The following $sig_count signals are available:"
11962 echo " "
11963 echo $sig_name | $awk \
11964 'BEGIN { linelen = 0 }
11965 {
11966         for (i = 1; i <= NF; i++) {
11967                 name = "SIG" $i " "
11968                 linelen = linelen + length(name)
11969                 if (linelen > 70) {
11970                         printf "\n"
11971                         linelen = length(name)
11972                 }
11973                 printf "%s", name
11974         }
11975         printf "\n"
11976 }'
11977 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11978
11979 : see what type is used for signed size_t
11980 set ssize_t ssizetype int stdio.h sys/types.h
11981 eval $typedef
11982 dflt="$ssizetype"
11983 $cat > ssize.c <<EOM
11984 #include <stdio.h>
11985 #include <sys/types.h>
11986 #define Size_t $sizetype
11987 #define SSize_t $dflt
11988 int main()
11989 {
11990         if (sizeof(Size_t) == sizeof(SSize_t))
11991                 printf("$dflt\n");
11992         else if (sizeof(Size_t) == sizeof(int))
11993                 printf("int\n");
11994         else 
11995                 printf("long\n");
11996         exit(0);
11997 }
11998 EOM
11999 echo " "
12000 set ssize
12001 if eval $compile_ok && ./ssize > /dev/null; then
12002         ssizetype=`./ssize`
12003         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12004 else
12005         $cat >&4 <<EOM
12006 Help! I can't compile and run the ssize_t test program: please enlighten me!
12007 (This is probably a misconfiguration in your system or libraries, and
12008 you really ought to fix it.  Still, I'll try anyway.)
12009
12010 I need a type that is the same size as $sizetype, but is guaranteed to
12011 be signed.  Common values are ssize_t, int and long.
12012
12013 EOM
12014         rp="What signed type is the same size as $sizetype?"
12015         . ./myread
12016         ssizetype="$ans"
12017 fi
12018 $rm -f ssize ssize.*
12019
12020 : see what type of char stdio uses.
12021 echo " "
12022 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12023         echo "Your stdio uses unsigned chars." >&4
12024         stdchar="unsigned char"
12025 else
12026         echo "Your stdio uses signed chars." >&4
12027         stdchar="char"
12028 fi
12029
12030 : see if time exists
12031 echo " "
12032 if test "X$d_time" = X -o X"$timetype" = X; then
12033     if set time val -f d_time; eval $csym; $val; then
12034                 echo 'time() found.' >&4
12035                 val="$define"
12036                 rp="What is the type returned by time() on this system?"
12037                 set time_t timetype long stdio.h sys/types.h
12038                 eval $typedef_ask
12039     else
12040                 echo 'time() not found, hope that will do.' >&4
12041                 val="$undef"
12042                 timetype='int';
12043     fi
12044     set d_time
12045     eval $setvar
12046 fi
12047
12048 : see what type uids are declared as in the kernel
12049 echo " "
12050 echo "Looking for the type for user ids returned by getuid()."
12051 set uid_t uidtype xxx stdio.h sys/types.h
12052 eval $typedef
12053 case "$uidtype" in
12054 xxx)
12055         xxx=`./findhdr sys/user.h`
12056         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12057         case $1 in
12058         unsigned) dflt="$1 $2" ;;
12059         *) dflt="$1" ;;
12060         esac
12061         ;;
12062 *) dflt="$uidtype";;
12063 esac
12064 case "$uidtype" in
12065 uid_t)  echo "uid_t found." ;;
12066 *)      rp="What is the type for user ids returned by getuid()?"
12067         . ./myread
12068         uidtype="$ans"
12069         ;;
12070 esac
12071
12072 : see if dbm.h is available
12073 : see if dbmclose exists
12074 set dbmclose d_dbmclose
12075 eval $inlibc
12076
12077 case "$d_dbmclose" in
12078 $define)
12079         set dbm.h i_dbm
12080         eval $inhdr
12081         case "$i_dbm" in
12082         $define)
12083                 val="$undef"
12084                 set i_rpcsvcdbm
12085                 eval $setvar
12086                 ;;
12087         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12088                 eval $inhdr
12089                 ;;
12090         esac
12091         ;;
12092 *)      echo "We won't be including <dbm.h>"
12093         val="$undef"
12094         set i_dbm
12095         eval $setvar
12096         val="$undef"
12097         set i_rpcsvcdbm
12098         eval $setvar
12099         ;;
12100 esac
12101
12102 : see if this is a sys/file.h system
12103 val=''
12104 set sys/file.h val
12105 eval $inhdr
12106
12107 : do we need to include sys/file.h ?
12108 case "$val" in
12109 "$define")
12110         echo " "
12111         if $h_sysfile; then
12112                 val="$define"
12113                 echo "We'll be including <sys/file.h>." >&4
12114         else
12115                 val="$undef"
12116                 echo "We won't be including <sys/file.h>." >&4
12117         fi
12118         ;;
12119 *)
12120         h_sysfile=false
12121         ;;
12122 esac
12123 set i_sysfile
12124 eval $setvar
12125
12126 : see if fcntl.h is there
12127 val=''
12128 set fcntl.h val
12129 eval $inhdr
12130
12131 : see if we can include fcntl.h
12132 case "$val" in
12133 "$define")
12134         echo " "
12135         if $h_fcntl; then
12136                 val="$define"
12137                 echo "We'll be including <fcntl.h>." >&4
12138         else
12139                 val="$undef"
12140                 if $h_sysfile; then
12141         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12142                 else
12143                         echo "We won't be including <fcntl.h>." >&4
12144                 fi
12145         fi
12146         ;;
12147 *)
12148         h_fcntl=false
12149         val="$undef"
12150         ;;
12151 esac
12152 set i_fcntl
12153 eval $setvar
12154
12155 : see if locale.h is available
12156 set locale.h i_locale
12157 eval $inhdr
12158
12159 : see if mach cthreads are available
12160 if test "X$usethreads" = "X$define"; then
12161         set mach/cthreads.h i_machcthr
12162         eval $inhdr
12163 else
12164         i_machcthr="$undef"
12165 fi
12166
12167
12168
12169 : see if this is a math.h system
12170 set math.h i_math
12171 eval $inhdr
12172
12173 : see if this is a mntent.h system
12174 set mntent.h i_mntent
12175 eval $inhdr
12176
12177 : see if ndbm.h is available
12178 set ndbm.h t_ndbm
12179 eval $inhdr
12180 case "$t_ndbm" in
12181 $define)
12182         : see if dbm_open exists
12183         set dbm_open d_dbm_open
12184         eval $inlibc
12185         case "$d_dbm_open" in
12186         $undef)
12187                 t_ndbm="$undef"
12188                 echo "We won't be including <ndbm.h>"
12189                 ;;
12190         esac
12191         ;;
12192 esac
12193 val="$t_ndbm"
12194 set i_ndbm
12195 eval $setvar
12196
12197 : see if net/errno.h is available
12198 val=''
12199 set net/errno.h val
12200 eval $inhdr
12201
12202 : Unfortunately, it causes problems on some systems.  Arrgh.
12203 case "$val" in
12204 $define)
12205         cat > try.c <<'EOM'
12206 #include <stdio.h>
12207 #include <errno.h>
12208 #include <net/errno.h>
12209 int func()
12210 {
12211         return ENOTSOCK;
12212 }
12213 EOM
12214         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12215                 echo "We'll be including <net/errno.h>." >&4
12216         else
12217                 echo "We won't be including <net/errno.h>." >&4
12218                 val="$undef"
12219         fi
12220         $rm -f try.* try
12221         ;;
12222 esac
12223 set i_neterrno
12224 eval $setvar
12225
12226 : see if netinet/tcp.h is available
12227 set netinet/tcp.h i_netinettcp
12228 eval $inhdr
12229
12230 : see if this is a poll.h system
12231 set poll.h i_poll
12232 eval $inhdr
12233
12234 : get C preprocessor symbols handy
12235 echo " "
12236 $echo $n "Hmm... $c"
12237 echo $al | $tr ' ' $trnl >Cppsym.know
12238 $cat <<EOSS >Cppsym
12239 $startsh
12240 case "\$1" in
12241 -l) list=true
12242         shift
12243         ;;
12244 esac
12245 unknown=''
12246 case "\$list\$#" in
12247 1|2)
12248         for sym do
12249                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12250                         exit 0
12251                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12252                         :
12253                 else
12254                         unknown="\$unknown \$sym"
12255                 fi
12256         done
12257         set X \$unknown
12258         shift
12259         ;;
12260 esac
12261 case \$# in
12262 0) exit 1;;
12263 esac
12264 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12265 #ifdef \1\\
12266 exit 0; _ _ _ _\1\\      \1\\
12267 #endif\\
12268 /' >Cppsym\$\$
12269 echo "exit 1; _ _ _" >>Cppsym\$\$
12270 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12271 case "\$list" in
12272 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12273 *)
12274         sh Cppsym2\$\$
12275         status=\$?
12276         ;;
12277 esac
12278 $rm -f Cppsym\$\$ Cppsym2\$\$
12279 exit \$status
12280 EOSS
12281 chmod +x Cppsym
12282 $eunicefix Cppsym
12283 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12284
12285 : now check the C compiler for additional symbols
12286 postprocess_cc_v=''
12287 case "$osname" in
12288 aix) postprocess_cc_v="|$tr , ' '" ;;
12289 esac
12290 $cat >ccsym <<EOS
12291 $startsh
12292 $cat >tmp.c <<EOF
12293 extern int foo;
12294 EOF
12295 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12296 do
12297         case "\$i" in
12298         -D*) echo "\$i" | $sed 's/^-D//';;
12299         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12300         esac
12301 done
12302 $rm -f try.c
12303 EOS
12304 postprocess_cc_v=''
12305 chmod +x ccsym
12306 $eunicefix ccsym
12307 ./ccsym > ccsym1.raw
12308 if $test -s ccsym1.raw; then
12309        $sort ccsym1.raw | $uniq >ccsym.raw
12310 else
12311        mv ccsym1.raw ccsym.raw
12312 fi
12313
12314 $awk '/\=/ { print $0; next }
12315         { print $0"=1" }' ccsym.raw >ccsym.list
12316 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12317 $comm -13 ccsym.true ccsym.list >ccsym.own
12318 $comm -12 ccsym.true ccsym.list >ccsym.com
12319 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12320 also=''
12321 if $test -z ccsym.raw; then
12322         echo "Your C compiler doesn't seem to define any symbols!" >&4
12323         echo " "
12324         echo "However, your C preprocessor defines the following symbols:"
12325         $cat Cppsym.true
12326         ccsymbols=''
12327         cppsymbols=`$cat Cppsym.true`
12328         cppsymbols=`echo $cppsymbols`
12329         cppccsymbols="$cppsymbols"
12330 else
12331         if $test -s ccsym.com; then
12332                 echo "Your C compiler and pre-processor define these symbols:"
12333                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12334                 also='also '
12335                 symbols='ones'
12336                 cppccsymbols=`$cat ccsym.com`
12337                 cppccsymbols=`echo $cppccsymbols`
12338                 $test "$silent" || sleep 1
12339         fi
12340         if $test -s ccsym.cpp; then
12341                 $test "$also" && echo " "
12342                 echo "Your C pre-processor ${also}defines the following symbols:"
12343                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12344                 also='further '
12345                 cppsymbols=`$cat ccsym.cpp`
12346                 cppsymbols=`echo $cppsymbols`
12347                 $test "$silent" || sleep 1
12348         fi
12349         if $test -s ccsym.own; then
12350                 $test "$also" && echo " "
12351                 echo "Your C compiler ${also}defines the following cpp symbols:"
12352                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12353                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12354                 ccsymbols=`$cat ccsym.own`
12355                 ccsymbols=`echo $ccsymbols`
12356                 $test "$silent" || sleep 1
12357         fi
12358 fi
12359 $rm -f ccsym*
12360
12361 : see if this is a termio system
12362 val="$undef"
12363 val2="$undef"
12364 val3="$undef"
12365 if $test `./findhdr termios.h`; then
12366         set tcsetattr i_termios
12367         eval $inlibc
12368         val3="$i_termios"
12369 fi
12370 echo " "
12371 case "$val3" in
12372 "$define") echo "You have POSIX termios.h... good!" >&4;;
12373 *) if ./Cppsym pyr; then
12374                 case "`/bin/universe`" in
12375                 ucb) if $test `./findhdr sgtty.h`; then
12376                                 val2="$define"
12377                                 echo "<sgtty.h> found." >&4
12378                         else
12379                                 echo "System is pyramid with BSD universe."
12380                                 echo "<sgtty.h> not found--you could have problems." >&4
12381                         fi;;
12382                 *) if $test `./findhdr termio.h`; then
12383                                 val="$define"
12384                                 echo "<termio.h> found." >&4
12385                         else
12386                                 echo "System is pyramid with USG universe."
12387                                 echo "<termio.h> not found--you could have problems." >&4
12388                         fi;;
12389                 esac
12390         elif ./usg; then
12391                 if $test `./findhdr termio.h`; then
12392                         echo "<termio.h> found." >&4
12393                         val="$define"
12394                 elif $test `./findhdr sgtty.h`; then
12395                         echo "<sgtty.h> found." >&4
12396                         val2="$define"
12397                 else
12398 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12399                 fi
12400         else
12401                 if $test `./findhdr sgtty.h`; then
12402                         echo "<sgtty.h> found." >&4
12403                         val2="$define"
12404                 elif $test `./findhdr termio.h`; then
12405                         echo "<termio.h> found." >&4
12406                         val="$define"
12407                 else
12408 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12409                 fi
12410         fi;;
12411 esac
12412 set i_termio; eval $setvar
12413 val=$val2; set i_sgtty; eval $setvar
12414 val=$val3; set i_termios; eval $setvar
12415
12416 : see if this is a shadow.h system
12417 set shadow.h i_shadow
12418 eval $inhdr
12419
12420 : see if stdarg is available
12421 echo " "
12422 if $test `./findhdr stdarg.h`; then
12423         echo "<stdarg.h> found." >&4
12424         valstd="$define"
12425 else
12426         echo "<stdarg.h> NOT found." >&4
12427         valstd="$undef"
12428 fi
12429
12430 : see if varags is available
12431 echo " "
12432 if $test `./findhdr varargs.h`; then
12433         echo "<varargs.h> found." >&4
12434 else
12435         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12436 fi
12437
12438 : set up the varargs testing programs
12439 $cat > varargs.c <<EOP
12440 #ifdef I_STDARG
12441 #include <stdarg.h>
12442 #endif
12443 #ifdef I_VARARGS
12444 #include <varargs.h>
12445 #endif
12446
12447 #ifdef I_STDARG
12448 int f(char *p, ...)
12449 #else
12450 int f(va_alist)
12451 va_dcl
12452 #endif
12453 {
12454         va_list ap;
12455 #ifndef I_STDARG
12456         char *p;
12457 #endif
12458 #ifdef I_STDARG
12459         va_start(ap,p);
12460 #else
12461         va_start(ap);
12462         p = va_arg(ap, char *);
12463 #endif
12464         va_end(ap);
12465 }
12466 EOP
12467 $cat > varargs <<EOP
12468 $startsh
12469 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12470         echo "true"
12471 else
12472         echo "false"
12473 fi
12474 $rm -f varargs$_o
12475 EOP
12476 chmod +x varargs
12477
12478 : now check which varargs header should be included
12479 echo " "
12480 i_varhdr=''
12481 case "$valstd" in
12482 "$define")
12483         if `./varargs I_STDARG`; then
12484                 val='stdarg.h'
12485         elif `./varargs I_VARARGS`; then
12486                 val='varargs.h'
12487         fi
12488         ;;
12489 *)
12490         if `./varargs I_VARARGS`; then
12491                 val='varargs.h'
12492         fi
12493         ;;
12494 esac
12495 case "$val" in
12496 '')
12497 echo "I could not find the definition for va_dcl... You have problems..." >&4
12498         val="$undef"; set i_stdarg; eval $setvar
12499         val="$undef"; set i_varargs; eval $setvar
12500         ;;
12501 *) 
12502         set i_varhdr
12503         eval $setvar
12504         case "$i_varhdr" in
12505         stdarg.h)
12506                 val="$define"; set i_stdarg; eval $setvar
12507                 val="$undef"; set i_varargs; eval $setvar
12508                 ;;
12509         varargs.h)
12510                 val="$undef"; set i_stdarg; eval $setvar
12511                 val="$define"; set i_varargs; eval $setvar
12512                 ;;
12513         esac
12514         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12515 esac
12516 $rm -f varargs*
12517
12518 : see if stddef is available
12519 set stddef.h i_stddef
12520 eval $inhdr
12521
12522 : see if sys/access.h is available
12523 set sys/access.h i_sysaccess
12524 eval $inhdr
12525
12526 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12527 set sys/filio.h i_sysfilio
12528 eval $inhdr
12529 echo " "
12530 if $test `./findhdr sys/ioctl.h`; then
12531         val="$define"
12532         echo '<sys/ioctl.h> found.' >&4
12533 else
12534         val="$undef"
12535         if $test $i_sysfilio = "$define"; then
12536             echo '<sys/ioctl.h> NOT found.' >&4
12537         else
12538                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12539                 $test $i_termio = "$define" && xxx="termio.h"
12540                 $test $i_termios = "$define" && xxx="termios.h"
12541 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12542         fi
12543 fi
12544 set i_sysioctl
12545 eval $setvar
12546
12547 : see if sys/resource.h has to be included
12548 set sys/resource.h i_sysresrc
12549 eval $inhdr
12550
12551 : see if sys/security.h is available
12552 set sys/security.h i_syssecrt
12553 eval $inhdr
12554
12555 : see if this is a sys/statvfs.h system
12556 set sys/statvfs.h i_sysstatvfs
12557 eval $inhdr
12558
12559 : see if this is a sys/un.h system
12560 set sys/un.h i_sysun
12561 eval $inhdr
12562
12563 : see if this is a syswait system
12564 set sys/wait.h i_syswait
12565 eval $inhdr
12566
12567 : see if this is an utime system
12568 set utime.h i_utime
12569 eval $inhdr
12570
12571 : see if this is a values.h system
12572 set values.h i_values
12573 eval $inhdr
12574
12575 : see if this is a vfork system
12576 case "$d_vfork" in
12577 "$define")
12578         set vfork.h i_vfork
12579         eval $inhdr
12580         ;;
12581 *)
12582         i_vfork="$undef"
12583         ;;
12584 esac
12585
12586 : see if gdbm.h is available
12587 set gdbm.h t_gdbm
12588 eval $inhdr
12589 case "$t_gdbm" in
12590 $define)
12591         : see if gdbm_open exists
12592         set gdbm_open d_gdbm_open
12593         eval $inlibc
12594         case "$d_gdbm_open" in
12595         $undef)
12596                 t_gdbm="$undef"
12597                 echo "We won't be including <gdbm.h>"
12598                 ;;
12599         esac
12600         ;;
12601 esac
12602 val="$t_gdbm"
12603 set i_gdbm
12604 eval $setvar
12605
12606 echo " "
12607 echo "Looking for extensions..." >&4
12608 tdir=`pwd`
12609 cd $rsrc/ext
12610 : If we are using the old config.sh, known_extensions may contain
12611 : old or inaccurate or duplicate values.
12612 known_extensions=''
12613 nonxs_extensions=''
12614 : We do not use find because it might not be available.
12615 : We do not just use MANIFEST because the user may have dropped
12616 : some additional extensions into the source tree and expect them
12617 : to be built.
12618 for xxx in * ; do
12619         case "$xxx" in
12620         DynaLoader|dynaload) ;;
12621         *)      if $test -f $xxx/$xxx.xs; then
12622                         known_extensions="$known_extensions $xxx"
12623                 elif $test -f $xxx/Makefile.PL; then
12624                         nonxs_extensions="$nonxs_extensions $xxx"
12625                 else
12626                         if $test -d $xxx; then
12627                                 # Look for nested extensions, eg. Devel/Dprof.
12628                                 cd $xxx
12629                                 for yyy in * ; do
12630                                 if $test -f $yyy/$yyy.xs; then
12631                                         known_extensions="$known_extensions $xxx/$yyy"
12632                                 elif $test -f $yyy/Makefile.PL; then
12633                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12634                                 fi
12635                                 done
12636                                 cd ..
12637                         fi
12638                 fi 
12639                 ;;
12640         esac
12641 done
12642 set X $nonxs_extensions
12643 shift
12644 nonxs_extensions="$*"
12645 set X $known_extensions
12646 shift
12647 known_extensions="$*"
12648 cd $tdir
12649
12650 : Now see which are supported on this system.
12651 avail_ext=''
12652 for xxx in $known_extensions ; do
12653         case "$xxx" in
12654         DB_File|db_file)
12655                 case "$i_db" in
12656                 $define) avail_ext="$avail_ext $xxx" ;;
12657                 esac
12658                 ;;
12659         GDBM_File|gdbm_fil)
12660                 case "$i_gdbm" in 
12661                 $define) avail_ext="$avail_ext $xxx" ;;
12662                 esac
12663                 ;;
12664         NDBM_File|ndbm_fil)
12665                 case "$i_ndbm" in
12666                 $define) avail_ext="$avail_ext $xxx" ;;
12667                 esac
12668                 ;;
12669         ODBM_File|odbm_fil) 
12670                 case "${i_dbm}${i_rpcsvcdbm}" in
12671                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12672                 esac
12673                 ;;
12674         POSIX|posix)
12675                 case "$useposix" in
12676                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12677                 esac
12678                 ;;
12679         Opcode|opcode)
12680                 case "$useopcode" in
12681                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12682                 esac
12683                 ;;
12684         Socket|socket)
12685                 case "$d_socket" in 
12686                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12687                 esac
12688                 ;;
12689         Thread|thread)
12690                 case "$usethreads" in 
12691                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12692                 esac
12693                 ;;
12694         IPC/SysV|ipc/sysv)
12695                 : XXX Do we need a useipcsysv variable here
12696                 case "${d_msg}${d_sem}${d_shm}" in 
12697                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12698                 esac
12699                 ;;
12700         *)      avail_ext="$avail_ext $xxx"
12701                 ;;
12702         esac
12703 done
12704
12705 set X $avail_ext
12706 shift
12707 avail_ext="$*"
12708
12709 : Now see which nonxs extensions are supported on this system.
12710 : For now assume all are.
12711 nonxs_ext=''
12712 for xxx in $nonxs_extensions ; do
12713         case "$xxx" in
12714         *)      nonxs_ext="$nonxs_ext $xxx"
12715                 ;;
12716         esac
12717 done
12718
12719 set X $nonxs_ext
12720 shift
12721 nonxs_ext="$*"
12722
12723 case $usedl in
12724 $define)
12725         $cat <<EOM
12726 A number of extensions are supplied with $package.  You may choose to
12727 compile these extensions for dynamic loading (the default), compile
12728 them into the $package executable (static loading), or not include
12729 them at all.  Answer "none" to include no extensions.
12730 Note that DynaLoader is always built and need not be mentioned here.
12731
12732 EOM
12733         case "$dynamic_ext" in
12734         '') dflt="$avail_ext" ;;
12735         *)      dflt="$dynamic_ext"
12736                 # Perhaps we are reusing an old out-of-date config.sh.
12737                 case "$hint" in
12738                 previous)
12739                         if test X"$dynamic_ext" != X"$avail_ext"; then
12740                                 $cat <<EOM
12741 NOTICE:  Your previous config.sh list may be incorrect. 
12742 The extensions now available to you are 
12743         ${avail_ext}
12744 but the default list from your previous config.sh is
12745         ${dynamic_ext} 
12746
12747 EOM
12748                         fi
12749                         ;;
12750                 esac
12751                 ;;
12752         esac
12753         case "$dflt" in
12754         '')     dflt=none;;
12755         esac
12756         rp="What extensions do you wish to load dynamically?"
12757         . ./myread
12758         case "$ans" in
12759         none) dynamic_ext=' ' ;;
12760         *) dynamic_ext="$ans" ;;
12761         esac
12762
12763         case "$static_ext" in
12764         '')
12765                 : Exclude those already listed in dynamic linking
12766                 dflt=''
12767                 for xxx in $avail_ext; do
12768                         case " $dynamic_ext " in
12769                         *" $xxx "*) ;;
12770                         *) dflt="$dflt $xxx" ;;
12771                         esac
12772                 done
12773                 set X $dflt
12774                 shift
12775                 dflt="$*"
12776                 ;;
12777         *)  dflt="$static_ext" 
12778                 ;;
12779         esac
12780
12781         case "$dflt" in
12782         '')     dflt=none;;
12783         esac
12784         rp="What extensions do you wish to load statically?"
12785         . ./myread
12786         case "$ans" in
12787         none) static_ext=' ' ;;
12788         *) static_ext="$ans" ;;
12789         esac
12790         ;;
12791 *)
12792         $cat <<EOM
12793 A number of extensions are supplied with $package.  Answer "none" 
12794 to include no extensions. 
12795 Note that DynaLoader is always built and need not be mentioned here.
12796
12797 EOM
12798         case "$static_ext" in
12799         '') dflt="$avail_ext" ;;
12800         *)      dflt="$static_ext"
12801                 # Perhaps we are reusing an old out-of-date config.sh.
12802                 case "$hint" in
12803                 previous)
12804                         if test X"$static_ext" != X"$avail_ext"; then
12805                                 $cat <<EOM
12806 NOTICE:  Your previous config.sh list may be incorrect. 
12807 The extensions now available to you are 
12808         ${avail_ext}
12809 but the default list from your previous config.sh is
12810         ${static_ext} 
12811
12812 EOM
12813                         fi
12814                         ;;
12815                 esac
12816                 ;;
12817         esac
12818         : Exclude those that are not xs extensions
12819         case "$dflt" in
12820         '')     dflt=none;;
12821         esac
12822         rp="What extensions do you wish to include?"
12823         . ./myread
12824         case "$ans" in
12825         none) static_ext=' ' ;;
12826         *) static_ext="$ans" ;;
12827         esac
12828         ;;
12829 esac
12830
12831 set X $dynamic_ext $static_ext $nonxs_ext
12832 shift
12833 extensions="$*"
12834
12835 : Remove build directory name from cppstdin so it can be used from
12836 : either the present location or the final installed location.
12837 echo " "
12838 : Get out of the UU directory to get correct path name.
12839 cd ..
12840 case "$cppstdin" in
12841 `pwd`/cppstdin)
12842         echo "Stripping down cppstdin path name"
12843         cppstdin=cppstdin
12844         ;;
12845 esac
12846 cd UU
12847
12848 : end of configuration questions
12849 echo " "
12850 echo "End of configuration questions."
12851 echo " "
12852
12853 : back to where it started
12854 if test -d ../UU; then
12855         cd ..
12856 fi
12857
12858 : configuration may be patched via a 'config.over' file
12859 if $test -f config.over; then
12860         echo " "
12861         dflt=y
12862         rp='I see a config.over file.  Do you wish to load it?'
12863         . UU/myread
12864         case "$ans" in
12865         n*) echo "OK, I'll ignore it.";;
12866         *)      . ./config.over
12867                 echo "Configuration override changes have been loaded."
12868                 ;;
12869         esac
12870 fi
12871
12872 : in case they want portability, strip down executable paths
12873 case "$d_portable" in
12874 "$define")
12875         echo " "
12876         echo "Stripping down executable paths..." >&4
12877         for file in $loclist $trylist; do
12878                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12879                         eval $file="\$file"
12880                 fi
12881         done
12882         ;;
12883 esac
12884
12885 : create config.sh file
12886 echo " "
12887 echo "Creating config.sh..." >&4
12888 $spitshell <<EOT >config.sh
12889 $startsh
12890 #
12891 # This file was produced by running the Configure script. It holds all the
12892 # definitions figured out by Configure. Should you modify one of these values,
12893 # do not forget to propagate your changes by running "Configure -der". You may
12894 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12895 #
12896
12897 # Package name      : $package
12898 # Source directory  : $src
12899 # Configuration time: $cf_time
12900 # Configured by     : $cf_by
12901 # Target system     : $myuname
12902
12903 Author='$Author'
12904 Date='$Date'
12905 Header='$Header'
12906 Id='$Id'
12907 Locker='$Locker'
12908 Log='$Log'
12909 Mcc='$Mcc'
12910 RCSfile='$RCSfile'
12911 Revision='$Revision'
12912 Source='$Source'
12913 State='$State'
12914 _a='$_a'
12915 _exe='$_exe'
12916 _o='$_o'
12917 afs='$afs'
12918 alignbytes='$alignbytes'
12919 ansi2knr='$ansi2knr'
12920 aphostname='$aphostname'
12921 apiversion='$apiversion'
12922 ar='$ar'
12923 archlib='$archlib'
12924 archlibexp='$archlibexp'
12925 archname64='$archname64'
12926 archname='$archname'
12927 archobjs='$archobjs'
12928 awk='$awk'
12929 baserev='$baserev'
12930 bash='$bash'
12931 bin='$bin'
12932 binexp='$binexp'
12933 bison='$bison'
12934 byacc='$byacc'
12935 byteorder='$byteorder'
12936 c='$c'
12937 castflags='$castflags'
12938 cat='$cat'
12939 cc='$cc'
12940 cccdlflags='$cccdlflags'
12941 ccdlflags='$ccdlflags'
12942 ccflags='$ccflags'
12943 ccsymbols='$ccsymbols'
12944 cf_by='$cf_by'
12945 cf_email='$cf_email'
12946 cf_time='$cf_time'
12947 chgrp='$chgrp'
12948 chmod='$chmod'
12949 chown='$chown'
12950 clocktype='$clocktype'
12951 comm='$comm'
12952 compress='$compress'
12953 contains='$contains'
12954 cp='$cp'
12955 cpio='$cpio'
12956 cpp='$cpp'
12957 cpp_stuff='$cpp_stuff'
12958 cppccsymbols='$cppccsymbols'
12959 cppflags='$cppflags'
12960 cpplast='$cpplast'
12961 cppminus='$cppminus'
12962 cpprun='$cpprun'
12963 cppstdin='$cppstdin'
12964 cppsymbols='$cppsymbols'
12965 crosscompile='$crosscompile'
12966 cryptlib='$cryptlib'
12967 csh='$csh'
12968 d_Gconvert='$d_Gconvert'
12969 d_access='$d_access'
12970 d_accessx='$d_accessx'
12971 d_alarm='$d_alarm'
12972 d_archlib='$d_archlib'
12973 d_attribut='$d_attribut'
12974 d_bcmp='$d_bcmp'
12975 d_bcopy='$d_bcopy'
12976 d_bsd='$d_bsd'
12977 d_bsdgetpgrp='$d_bsdgetpgrp'
12978 d_bsdsetpgrp='$d_bsdsetpgrp'
12979 d_bzero='$d_bzero'
12980 d_casti32='$d_casti32'
12981 d_castneg='$d_castneg'
12982 d_charvspr='$d_charvspr'
12983 d_chown='$d_chown'
12984 d_chroot='$d_chroot'
12985 d_chsize='$d_chsize'
12986 d_closedir='$d_closedir'
12987 d_cmsghdr_s='$d_cmsghdr_s'
12988 d_const='$d_const'
12989 d_crypt='$d_crypt'
12990 d_csh='$d_csh'
12991 d_cuserid='$d_cuserid'
12992 d_dbl_dig='$d_dbl_dig'
12993 d_dbmclose64='$d_dbmclose64'
12994 d_dbminit64='$d_dbminit64'
12995 d_delete64='$d_delete64'
12996 d_difftime='$d_difftime'
12997 d_dirent64_s='$d_dirent64_s'
12998 d_dirnamlen='$d_dirnamlen'
12999 d_dlerror='$d_dlerror'
13000 d_dlopen='$d_dlopen'
13001 d_dlsymun='$d_dlsymun'
13002 d_dosuid='$d_dosuid'
13003 d_drand48proto='$d_drand48proto'
13004 d_dup2='$d_dup2'
13005 d_eaccess='$d_eaccess'
13006 d_endgrent='$d_endgrent'
13007 d_endhent='$d_endhent'
13008 d_endnent='$d_endnent'
13009 d_endpent='$d_endpent'
13010 d_endpwent='$d_endpwent'
13011 d_endsent='$d_endsent'
13012 d_endspent='$d_endspent'
13013 d_eofnblk='$d_eofnblk'
13014 d_eunice='$d_eunice'
13015 d_fchmod='$d_fchmod'
13016 d_fchown='$d_fchown'
13017 d_fcntl='$d_fcntl'
13018 d_fd_macros='$d_fd_macros'
13019 d_fd_set='$d_fd_set'
13020 d_fds_bits='$d_fds_bits'
13021 d_fetch64='$d_fetch64'
13022 d_fgetpos64='$d_fgetpos64'
13023 d_fgetpos='$d_fgetpos'
13024 d_firstkey64='$d_firstkey64'
13025 d_flexfnam='$d_flexfnam'
13026 d_flock64_s='$d_flock64_s'
13027 d_flock='$d_flock'
13028 d_fopen64='$d_fopen64'
13029 d_fork='$d_fork'
13030 d_fpathconf='$d_fpathconf'
13031 d_freopen64='$d_freopen64'
13032 d_fseek64='$d_fseek64'
13033 d_fseeko64='$d_fseeko64'
13034 d_fseeko='$d_fseeko'
13035 d_fsetpos64='$d_fsetpos64'
13036 d_fsetpos='$d_fsetpos'
13037 d_fstat64='$d_fstat64'
13038 d_fstatfs='$d_fstatfs'
13039 d_fstatvfs='$d_fstatvfs'
13040 d_ftell64='$d_ftell64'
13041 d_ftello64='$d_ftello64'
13042 d_ftello='$d_ftello'
13043 d_ftime='$d_ftime'
13044 d_ftruncate64='$d_ftruncate64'
13045 d_getgrent='$d_getgrent'
13046 d_getgrps='$d_getgrps'
13047 d_gethbyaddr='$d_gethbyaddr'
13048 d_gethbyname='$d_gethbyname'
13049 d_gethent='$d_gethent'
13050 d_gethname='$d_gethname'
13051 d_gethostprotos='$d_gethostprotos'
13052 d_getlogin='$d_getlogin'
13053 d_getmntent='$d_getmntent'
13054 d_getnbyaddr='$d_getnbyaddr'
13055 d_getnbyname='$d_getnbyname'
13056 d_getnent='$d_getnent'
13057 d_getnetprotos='$d_getnetprotos'
13058 d_getpbyname='$d_getpbyname'
13059 d_getpbynumber='$d_getpbynumber'
13060 d_getpent='$d_getpent'
13061 d_getpgid='$d_getpgid'
13062 d_getpgrp2='$d_getpgrp2'
13063 d_getpgrp='$d_getpgrp'
13064 d_getppid='$d_getppid'
13065 d_getprior='$d_getprior'
13066 d_getprotoprotos='$d_getprotoprotos'
13067 d_getpwent='$d_getpwent'
13068 d_getsbyname='$d_getsbyname'
13069 d_getsbyport='$d_getsbyport'
13070 d_getsent='$d_getsent'
13071 d_getservprotos='$d_getservprotos'
13072 d_getspent='$d_getspent'
13073 d_getspnam='$d_getspnam'
13074 d_gettimeod='$d_gettimeod'
13075 d_gnulibc='$d_gnulibc'
13076 d_grpasswd='$d_grpasswd'
13077 d_hasmntopt='$d_hasmntopt'
13078 d_htonl='$d_htonl'
13079 d_index='$d_index'
13080 d_inetaton='$d_inetaton'
13081 d_ino64_t='$d_ino64_t'
13082 d_int64t='$d_int64t'
13083 d_iovec_s='$d_iovec_s'
13084 d_isascii='$d_isascii'
13085 d_killpg='$d_killpg'
13086 d_lchown='$d_lchown'
13087 d_link='$d_link'
13088 d_llseek='$d_llseek'
13089 d_locconv='$d_locconv'
13090 d_lockf64='$d_lockf64'
13091 d_lockf='$d_lockf'
13092 d_longdbl='$d_longdbl'
13093 d_longlong='$d_longlong'
13094 d_lseek64='$d_lseek64'
13095 d_lstat64='$d_lstat64'
13096 d_lstat='$d_lstat'
13097 d_madvise='$d_madvise'
13098 d_mblen='$d_mblen'
13099 d_mbstowcs='$d_mbstowcs'
13100 d_mbtowc='$d_mbtowc'
13101 d_memchr='$d_memchr'
13102 d_memcmp='$d_memcmp'
13103 d_memcpy='$d_memcpy'
13104 d_memmove='$d_memmove'
13105 d_memset='$d_memset'
13106 d_mkdir='$d_mkdir'
13107 d_mkfifo='$d_mkfifo'
13108 d_mktime='$d_mktime'
13109 d_mmap='$d_mmap'
13110 d_mprotect='$d_mprotect'
13111 d_msg='$d_msg'
13112 d_msg_ctrunc='$d_msg_ctrunc'
13113 d_msg_dontroute='$d_msg_dontroute'
13114 d_msg_oob='$d_msg_oob'
13115 d_msg_peek='$d_msg_peek'
13116 d_msg_proxy='$d_msg_proxy'
13117 d_msgctl='$d_msgctl'
13118 d_msgget='$d_msgget'
13119 d_msghdr_s='$d_msghdr_s'
13120 d_msgrcv='$d_msgrcv'
13121 d_msgsnd='$d_msgsnd'
13122 d_msync='$d_msync'
13123 d_munmap='$d_munmap'
13124 d_mymalloc='$d_mymalloc'
13125 d_nextkey64='$d_nextkey64'
13126 d_nice='$d_nice'
13127 d_off64_t='$d_off64_t'
13128 d_offset_t='$d_offset_t'
13129 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13130 d_oldpthreads='$d_oldpthreads'
13131 d_oldsock='$d_oldsock'
13132 d_open3='$d_open3'
13133 d_open64='$d_open64'
13134 d_opendir64='$d_opendir64'
13135 d_pathconf='$d_pathconf'
13136 d_pause='$d_pause'
13137 d_phostname='$d_phostname'
13138 d_pipe='$d_pipe'
13139 d_poll='$d_poll'
13140 d_portable='$d_portable'
13141 d_pthread_yield='$d_pthread_yield'
13142 d_pwage='$d_pwage'
13143 d_pwchange='$d_pwchange'
13144 d_pwclass='$d_pwclass'
13145 d_pwcomment='$d_pwcomment'
13146 d_pwexpire='$d_pwexpire'
13147 d_pwgecos='$d_pwgecos'
13148 d_pwpasswd='$d_pwpasswd'
13149 d_pwquota='$d_pwquota'
13150 d_readdir64='$d_readdir64'
13151 d_readdir='$d_readdir'
13152 d_readlink='$d_readlink'
13153 d_readv='$d_readv'
13154 d_recvmsg='$d_recvmsg'
13155 d_rename='$d_rename'
13156 d_rewinddir='$d_rewinddir'
13157 d_rmdir='$d_rmdir'
13158 d_safebcpy='$d_safebcpy'
13159 d_safemcpy='$d_safemcpy'
13160 d_sanemcmp='$d_sanemcmp'
13161 d_sched_yield='$d_sched_yield'
13162 d_scm_rights='$d_scm_rights'
13163 d_seekdir64='$d_seekdir64'
13164 d_seekdir='$d_seekdir'
13165 d_select='$d_select'
13166 d_sem='$d_sem'
13167 d_semctl='$d_semctl'
13168 d_semctl_semid_ds='$d_semctl_semid_ds'
13169 d_semctl_semun='$d_semctl_semun'
13170 d_semget='$d_semget'
13171 d_semop='$d_semop'
13172 d_sendmsg='$d_sendmsg'
13173 d_setegid='$d_setegid'
13174 d_seteuid='$d_seteuid'
13175 d_setgrent='$d_setgrent'
13176 d_setgrps='$d_setgrps'
13177 d_sethent='$d_sethent'
13178 d_setlinebuf='$d_setlinebuf'
13179 d_setlocale='$d_setlocale'
13180 d_setnent='$d_setnent'
13181 d_setpent='$d_setpent'
13182 d_setpgid='$d_setpgid'
13183 d_setpgrp2='$d_setpgrp2'
13184 d_setpgrp='$d_setpgrp'
13185 d_setprior='$d_setprior'
13186 d_setpwent='$d_setpwent'
13187 d_setregid='$d_setregid'
13188 d_setresgid='$d_setresgid'
13189 d_setresuid='$d_setresuid'
13190 d_setreuid='$d_setreuid'
13191 d_setrgid='$d_setrgid'
13192 d_setruid='$d_setruid'
13193 d_setsent='$d_setsent'
13194 d_setsid='$d_setsid'
13195 d_setspent='$d_setspent'
13196 d_setvbuf='$d_setvbuf'
13197 d_sfio='$d_sfio'
13198 d_shm='$d_shm'
13199 d_shmat='$d_shmat'
13200 d_shmatprototype='$d_shmatprototype'
13201 d_shmctl='$d_shmctl'
13202 d_shmdt='$d_shmdt'
13203 d_shmget='$d_shmget'
13204 d_sigaction='$d_sigaction'
13205 d_sigsetjmp='$d_sigsetjmp'
13206 d_socket='$d_socket'
13207 d_sockpair='$d_sockpair'
13208 d_stat64='$d_stat64'
13209 d_statblks='$d_statblks'
13210 d_statfs='$d_statfs'
13211 d_statfsflags='$d_statfsflags'
13212 d_statvfs='$d_statvfs'
13213 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13214 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13215 d_stdio_stream_array='$d_stdio_stream_array'
13216 d_stdiobase='$d_stdiobase'
13217 d_stdstdio='$d_stdstdio'
13218 d_store64='$d_store64'
13219 d_strchr='$d_strchr'
13220 d_strcoll='$d_strcoll'
13221 d_strctcpy='$d_strctcpy'
13222 d_strerrm='$d_strerrm'
13223 d_strerror='$d_strerror'
13224 d_strtod='$d_strtod'
13225 d_strtol='$d_strtol'
13226 d_strtoul='$d_strtoul'
13227 d_strxfrm='$d_strxfrm'
13228 d_suidsafe='$d_suidsafe'
13229 d_symlink='$d_symlink'
13230 d_syscall='$d_syscall'
13231 d_sysconf='$d_sysconf'
13232 d_sysernlst='$d_sysernlst'
13233 d_syserrlst='$d_syserrlst'
13234 d_system='$d_system'
13235 d_tcgetpgrp='$d_tcgetpgrp'
13236 d_tcsetpgrp='$d_tcsetpgrp'
13237 d_telldir64='$d_telldir64'
13238 d_telldir='$d_telldir'
13239 d_telldirproto='$d_telldirproto'
13240 d_time='$d_time'
13241 d_times='$d_times'
13242 d_tmpfile64='$d_tmpfile64'
13243 d_truncate64='$d_truncate64'
13244 d_truncate='$d_truncate'
13245 d_tzname='$d_tzname'
13246 d_umask='$d_umask'
13247 d_uname='$d_uname'
13248 d_union_semun='$d_union_semun'
13249 d_vfork='$d_vfork'
13250 d_void_closedir='$d_void_closedir'
13251 d_voidsig='$d_voidsig'
13252 d_voidtty='$d_voidtty'
13253 d_volatile='$d_volatile'
13254 d_vprintf='$d_vprintf'
13255 d_wait4='$d_wait4'
13256 d_waitpid='$d_waitpid'
13257 d_wcstombs='$d_wcstombs'
13258 d_wctomb='$d_wctomb'
13259 d_writev='$d_writev'
13260 d_xenix='$d_xenix'
13261 date='$date'
13262 db_hashtype='$db_hashtype'
13263 db_prefixtype='$db_prefixtype'
13264 defvoidused='$defvoidused'
13265 direntrytype='$direntrytype'
13266 dlext='$dlext'
13267 dlsrc='$dlsrc'
13268 doublesize='$doublesize'
13269 drand01='$drand01'
13270 dynamic_ext='$dynamic_ext'
13271 eagain='$eagain'
13272 ebcdic='$ebcdic'
13273 echo='$echo'
13274 egrep='$egrep'
13275 emacs='$emacs'
13276 eunicefix='$eunicefix'
13277 exe_ext='$exe_ext'
13278 expr='$expr'
13279 extensions='$extensions'
13280 fflushNULL='$fflushNULL'
13281 fflushall='$fflushall'
13282 find='$find'
13283 firstmakefile='$firstmakefile'
13284 flex='$flex'
13285 fpostype='$fpostype'
13286 freetype='$freetype'
13287 full_ar='$full_ar'
13288 full_csh='$full_csh'
13289 full_sed='$full_sed'
13290 gccversion='$gccversion'
13291 gidtype='$gidtype'
13292 glibpth='$glibpth'
13293 grep='$grep'
13294 groupcat='$groupcat'
13295 groupstype='$groupstype'
13296 gzip='$gzip'
13297 h_fcntl='$h_fcntl'
13298 h_sysfile='$h_sysfile'
13299 hint='$hint'
13300 hostcat='$hostcat'
13301 huge='$huge'
13302 i_arpainet='$i_arpainet'
13303 i_bsdioctl='$i_bsdioctl'
13304 i_db='$i_db'
13305 i_dbm='$i_dbm'
13306 i_dirent='$i_dirent'
13307 i_dld='$i_dld'
13308 i_dlfcn='$i_dlfcn'
13309 i_fcntl='$i_fcntl'
13310 i_float='$i_float'
13311 i_gdbm='$i_gdbm'
13312 i_grp='$i_grp'
13313 i_inttypes='$i_inttypes'
13314 i_limits='$i_limits'
13315 i_locale='$i_locale'
13316 i_machcthr='$i_machcthr'
13317 i_malloc='$i_malloc'
13318 i_math='$i_math'
13319 i_memory='$i_memory'
13320 i_mntent='$i_mntent'
13321 i_ndbm='$i_ndbm'
13322 i_netdb='$i_netdb'
13323 i_neterrno='$i_neterrno'
13324 i_netinettcp='$i_netinettcp'
13325 i_niin='$i_niin'
13326 i_poll='$i_poll'
13327 i_pthread='$i_pthread'
13328 i_pwd='$i_pwd'
13329 i_rpcsvcdbm='$i_rpcsvcdbm'
13330 i_sfio='$i_sfio'
13331 i_sgtty='$i_sgtty'
13332 i_shadow='$i_shadow'
13333 i_stdarg='$i_stdarg'
13334 i_stddef='$i_stddef'
13335 i_stdlib='$i_stdlib'
13336 i_string='$i_string'
13337 i_sysaccess='$i_sysaccess'
13338 i_sysdir='$i_sysdir'
13339 i_sysfile='$i_sysfile'
13340 i_sysfilio='$i_sysfilio'
13341 i_sysin='$i_sysin'
13342 i_sysioctl='$i_sysioctl'
13343 i_sysmman='$i_sysmman'
13344 i_sysmount='$i_sysmount'
13345 i_sysndir='$i_sysndir'
13346 i_sysparam='$i_sysparam'
13347 i_sysresrc='$i_sysresrc'
13348 i_syssecrt='$i_syssecrt'
13349 i_sysselct='$i_sysselct'
13350 i_syssockio='$i_syssockio'
13351 i_sysstat='$i_sysstat'
13352 i_sysstatvfs='$i_sysstatvfs'
13353 i_systime='$i_systime'
13354 i_systimek='$i_systimek'
13355 i_systimes='$i_systimes'
13356 i_systypes='$i_systypes'
13357 i_sysuio='$i_sysuio'
13358 i_sysun='$i_sysun'
13359 i_syswait='$i_syswait'
13360 i_termio='$i_termio'
13361 i_termios='$i_termios'
13362 i_time='$i_time'
13363 i_unistd='$i_unistd'
13364 i_utime='$i_utime'
13365 i_values='$i_values'
13366 i_varargs='$i_varargs'
13367 i_varhdr='$i_varhdr'
13368 i_vfork='$i_vfork'
13369 ignore_versioned_solibs='$ignore_versioned_solibs'
13370 incpath='$incpath'
13371 inews='$inews'
13372 installarchlib='$installarchlib'
13373 installbin='$installbin'
13374 installman1dir='$installman1dir'
13375 installman3dir='$installman3dir'
13376 installprivlib='$installprivlib'
13377 installscript='$installscript'
13378 installsitearch='$installsitearch'
13379 installsitelib='$installsitelib'
13380 installusrbinperl='$installusrbinperl'
13381 intsize='$intsize'
13382 known_extensions='$known_extensions'
13383 ksh='$ksh'
13384 large='$large'
13385 ld='$ld'
13386 lddlflags='$lddlflags'
13387 ldflags='$ldflags'
13388 less='$less'
13389 lib_ext='$lib_ext'
13390 libc='$libc'
13391 libperl='$libperl'
13392 libpth='$libpth'
13393 libs='$libs'
13394 libswanted='$libswanted'
13395 line='$line'
13396 lint='$lint'
13397 lkflags='$lkflags'
13398 ln='$ln'
13399 lns='$lns'
13400 locincpth='$locincpth'
13401 loclibpth='$loclibpth'
13402 longdblsize='$longdblsize'
13403 longlongsize='$longlongsize'
13404 longsize='$longsize'
13405 lp='$lp'
13406 lpr='$lpr'
13407 ls='$ls'
13408 lseeksize='$lseeksize'
13409 lseektype='$lseektype'
13410 mail='$mail'
13411 mailx='$mailx'
13412 make='$make'
13413 make_set_make='$make_set_make'
13414 mallocobj='$mallocobj'
13415 mallocsrc='$mallocsrc'
13416 malloctype='$malloctype'
13417 man1dir='$man1dir'
13418 man1direxp='$man1direxp'
13419 man1ext='$man1ext'
13420 man3dir='$man3dir'
13421 man3direxp='$man3direxp'
13422 man3ext='$man3ext'
13423 medium='$medium'
13424 mips='$mips'
13425 mips_type='$mips_type'
13426 mkdir='$mkdir'
13427 mmaptype='$mmaptype'
13428 models='$models'
13429 modetype='$modetype'
13430 more='$more'
13431 multiarch='$multiarch'
13432 mv='$mv'
13433 myarchname='$myarchname'
13434 mydomain='$mydomain'
13435 myhostname='$myhostname'
13436 myuname='$myuname'
13437 n='$n'
13438 netdb_hlen_type='$netdb_hlen_type'
13439 netdb_host_type='$netdb_host_type'
13440 netdb_name_type='$netdb_name_type'
13441 netdb_net_type='$netdb_net_type'
13442 nm='$nm'
13443 nm_opt='$nm_opt'
13444 nm_so_opt='$nm_so_opt'
13445 nonxs_ext='$nonxs_ext'
13446 nroff='$nroff'
13447 o_nonblock='$o_nonblock'
13448 obj_ext='$obj_ext'
13449 old_pthread_create_joinable='$old_pthread_create_joinable'
13450 optimize='$optimize'
13451 orderlib='$orderlib'
13452 osname='$osname'
13453 osvers='$osvers'
13454 package='$package'
13455 pager='$pager'
13456 passcat='$passcat'
13457 patchlevel='$patchlevel'
13458 path_sep='$path_sep'
13459 perl='$perl'
13460 perladmin='$perladmin'
13461 perlpath='$perlpath'
13462 pg='$pg'
13463 phostname='$phostname'
13464 pidtype='$pidtype'
13465 plibpth='$plibpth'
13466 pmake='$pmake'
13467 pr='$pr'
13468 prefix='$prefix'
13469 prefixexp='$prefixexp'
13470 privlib='$privlib'
13471 privlibexp='$privlibexp'
13472 prototype='$prototype'
13473 ptrsize='$ptrsize'
13474 randbits='$randbits'
13475 randfunc='$randfunc'
13476 randseedtype='$randseedtype'
13477 ranlib='$ranlib'
13478 rd_nodata='$rd_nodata'
13479 rm='$rm'
13480 rmail='$rmail'
13481 runnm='$runnm'
13482 sched_yield='$sched_yield'
13483 scriptdir='$scriptdir'
13484 scriptdirexp='$scriptdirexp'
13485 sed='$sed'
13486 seedfunc='$seedfunc'
13487 selectminbits='$selectminbits'
13488 selecttype='$selecttype'
13489 sendmail='$sendmail'
13490 sh='$sh'
13491 shar='$shar'
13492 sharpbang='$sharpbang'
13493 shmattype='$shmattype'
13494 shortsize='$shortsize'
13495 shrpenv='$shrpenv'
13496 shsharp='$shsharp'
13497 sig_count='$sig_count'
13498 sig_name='$sig_name'
13499 sig_name_init='$sig_name_init'
13500 sig_num='$sig_num'
13501 sig_num_init='$sig_num_init'
13502 signal_t='$signal_t'
13503 sitearch='$sitearch'
13504 sitearchexp='$sitearchexp'
13505 sitelib='$sitelib'
13506 sitelibexp='$sitelibexp'
13507 sizetype='$sizetype'
13508 sleep='$sleep'
13509 smail='$smail'
13510 small='$small'
13511 so='$so'
13512 sockethdr='$sockethdr'
13513 socketlib='$socketlib'
13514 sort='$sort'
13515 spackage='$spackage'
13516 spitshell='$spitshell'
13517 split='$split'
13518 src='$src'
13519 ssizetype='$ssizetype'
13520 startperl='$startperl'
13521 startsh='$startsh'
13522 static_ext='$static_ext'
13523 stdchar='$stdchar'
13524 stdio_base='$stdio_base'
13525 stdio_bufsiz='$stdio_bufsiz'
13526 stdio_cnt='$stdio_cnt'
13527 stdio_filbuf='$stdio_filbuf'
13528 stdio_ptr='$stdio_ptr'
13529 stdio_stream_array='$stdio_stream_array'
13530 strings='$strings'
13531 submit='$submit'
13532 subversion='$subversion'
13533 sysman='$sysman'
13534 tail='$tail'
13535 tar='$tar'
13536 tbl='$tbl'
13537 tee='$tee'
13538 test='$test'
13539 timeincl='$timeincl'
13540 timetype='$timetype'
13541 touch='$touch'
13542 tr='$tr'
13543 trnl='$trnl'
13544 troff='$troff'
13545 uidtype='$uidtype'
13546 uname='$uname'
13547 uniq='$uniq'
13548 use64bits='$use64bits'
13549 usedl='$usedl'
13550 usemultiplicity='$usemultiplicity'
13551 usemymalloc='$usemymalloc'
13552 usenm='$usenm'
13553 useopcode='$useopcode'
13554 useperlio='$useperlio'
13555 useposix='$useposix'
13556 usesfio='$usesfio'
13557 useshrplib='$useshrplib'
13558 usethreads='$usethreads'
13559 usevfork='$usevfork'
13560 usrinc='$usrinc'
13561 uuname='$uuname'
13562 version='$version'
13563 vi='$vi'
13564 voidflags='$voidflags'
13565 xlibpth='$xlibpth'
13566 zcat='$zcat'
13567 zip='$zip'
13568 EOT
13569
13570 : Add in command line options if available
13571 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13572
13573 : add special variables
13574 $test -f $src/patchlevel.h && \
13575 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13576 echo "CONFIGDOTSH=true" >>config.sh
13577
13578 : propagate old symbols
13579 if $test -f UU/config.sh; then
13580         <UU/config.sh sort | uniq >UU/oldconfig.sh
13581         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13582         sort | uniq -u >UU/oldsyms
13583         set X `cat UU/oldsyms`
13584         shift
13585         case $# in
13586         0) ;;
13587         *)
13588                 cat <<EOM
13589 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13590 EOM
13591                 echo "# Variables propagated from previous config.sh file." >>config.sh
13592                 for sym in `cat UU/oldsyms`; do
13593                         echo "    Propagating $hint variable "'$'"$sym..."
13594                         eval 'tmp="$'"${sym}"'"'
13595                         echo "$tmp" | \
13596                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13597                 done
13598                 ;;
13599         esac
13600 fi
13601
13602 : Finish up by extracting the .SH files
13603 case "$alldone" in
13604 exit)
13605         $rm -rf UU
13606         echo "Done."
13607         exit 0
13608         ;;
13609 cont)
13610         ;;
13611 '')
13612         dflt=''
13613         nostick=true
13614         $cat <<EOM
13615
13616 If you'd like to make any changes to the config.sh file before I begin
13617 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13618
13619 EOM
13620         rp="Press return or use a shell escape to edit config.sh:"
13621         . UU/myread
13622         nostick=''
13623         case "$ans" in
13624         '') ;;
13625         *) : in case they cannot read
13626                 sh 1>&4 -c "$ans";;
13627         esac
13628         ;;
13629 esac
13630
13631 : if this fails, just run all the .SH files by hand
13632 . ./config.sh
13633
13634 echo " "
13635 exec 1>&4
13636 . ./UU/extract
13637
13638 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13639         dflt=y
13640         case "$silent" in
13641         true) ;;
13642         *)
13643                 $cat <<EOM
13644
13645 Now you need to generate make dependencies by running "$make depend".
13646 You might prefer to run it in background: "$make depend > makedepend.out &"
13647 It can take a while, so you might not want to run it right now.
13648
13649 EOM
13650                 ;;
13651         esac
13652         rp="Run $make depend now?"
13653         . UU/myread
13654         case "$ans" in
13655         y*)
13656                 $make depend && echo "Now you must run a $make."
13657                 ;;
13658         *)
13659                 echo "You must run '$make depend' then '$make'."
13660                 ;;
13661         esac
13662 elif test -f [Mm]akefile; then
13663         echo " "
13664         echo "Now you must run a $make."
13665 else
13666         echo "Done."
13667 fi
13668
13669 if $test -f Policy.sh; then
13670     $cat <<EOM
13671
13672 If you compile $package on a different machine or from a different object
13673 directory, copy the Policy.sh file from this object directory to the
13674 new one before you run Configure -- this will help you with most of
13675 the policy defaults.
13676
13677 EOM
13678 fi
13679 if $test -f config.msg; then
13680     echo "Hmm.  I also noted the following information while running:"
13681     echo " "
13682     $cat config.msg >&4
13683     $rm -f config.msg
13684 fi
13685 $rm -f kit*isdone ark*isdone
13686 $rm -rf UU
13687
13688 : End of Configure
13689